0

新しいデータ構造を EJB に渡さなければならない新機能があります。

これは、現在のユーザーに関する情報を含むユーザー セッション コンテキストです。

メソッドのシグネチャと呼び出しをリファクタリングせずに、このデータを EJB に渡すにはどうすればよいですか?

ThreadLocal を使用しますか? しかし、それが同じ JVM 上にない場合は?

以下にいくつかのコードがあります。ヒントを教えてください。

/** created at login time, when user put it's credential */
public class UserSessionContext {
    private User current;
    private Company company;
    // getters e setters
}

/** web page controller */
@ManagedBean // at web tier
public class ListCustomersController {

    @EJB
    CustomersRepository customers; // some remote interface

    // getters / setters
    private List<Filters> filters; // from the UI

    /** used in a datatable component */
    public List<Customer> getAll(){
        return customers.getAllWith(filters); // I have no UserSessionContext parameter
    }

}

/** used by web controller */
@Stateless
public CustomersEJB implements CustomersRepository {

    @Inject 
    UserSessionContext currentContext; // injected before call this object

    public List<Customer> getAllWith(List<Filter> filters){

        TypeQuery<Customer> customersQuery = ... //
        customersQuery.setParameter("company",currentContext.getCompany());

        return customersQuery.getResultList();

    }

}
4

1 に答える 1

0

これを行うための標準メカニズムはありません ( JSR-149 )。WebSphere Application Server には、この方法でコンテキストを伝搬するために使用できるWork Area Serviceプログラミング モデル拡張があります。

于 2013-04-26T16:52:57.520 に答える