0

A 有一个新特性,它迫使我将一些新的数据结构传递给我的 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 有一个工作区服务编程模型扩展,可用于以这种方式传播上下文。

于 2013-04-26T16:52:57.520 回答