EJB3.0: Использование внедрения зависимостей в отличие от объекта сеанса - PullRequest
1 голос
/ 23 августа 2010

Мы изучаем EJB 3.0 в школе и пытаемся определить наилучшую практику для задачи, поставленной нашим учителем.Мы еще не используем Spring.

Проблема заключается в следующем: создайте EJB-компонент, который отслеживает время последнего вызова компонента одним и тем же пользователем (вызов первого пользователя Джон) и отображает его в видевеб (сервлет) контекст.Если другой пользователь (назовите его Биллом) вызывает бин, он показывает, когда Билл в последний раз вызывал бин, что отличается от времени, когда Джон последний раз это делал.

Теперь мы можем сделать это, используя объект сеанса изЗапрос сервлета.Это будет назначать каждому сеансу экземпляр EJB и не использовать преимущества внедрения зависимости.Например, (псевдокод):

doGet{

   timeManagerEJB = session.getattribute("localTimeEJB");

   if(timeManagerEJB == null) { 

timeManagerEJB = InitialContext.lookup("path...");

session.setAttribute("localTimeEJB", timeManagerEJB);

}

}

Это лучший способ сделать это или есть функция, встроенная в EJB-инфраструктуру для обработки нескольких экземпляров EJB с состоянием, возможно, с использованием внедрения зависимостей?

1 Ответ

1 голос
/ 23 августа 2010

Это лучший способ сделать это, или в EJB-инфраструктуру встроена функция для обработки нескольких экземпляров EJB с состоянием, возможно, с использованием внедрения зависимостей?

Вы не должны внедрять компонент с сохранением состояния в объект без состояния, такой как компонент без состояния или сервлет, который может совместно использоваться несколькими одновременными клиентами, в таких случаях вам нужно использовать JNDI (и поместить ссылку в сеанс http).

...