2013-04-22 2 views
0

У меня есть новая функция, которая заставляет меня передавать некоторую новую структуру данных в мои EJB.EJB - Передача контекстных данных от JSF к 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(); 

    } 

} 

ответ

0

Там нет стандартного механизма для выполнения этого (JSR-149). WebSphere Application Server имеет расширение модели программирования Work Area Service, которое может использоваться для распространения контекстов таким образом.