Если у нас есть фасонный элемент, то он может быть введен в сервлет с помощью аннотации @EJB. Например:EJB-инъекция против поиска из контекста в сервлете
@Stateless
public class LongTimeService {
public void do() {
//logic
}
}
public class ServletWithBean extends HttpServlet {
@EJB
private LongTimeService bean;
@Override
public void service(ServletRequest arg0, ServletResponse arg1)
throws ServletException, IOException {
bean.do;
...
}
}
В этом случае мы будем иметь только один экземпляр LongTimeService боб на протяжении всего жизненного цикла сервлета. С точки зрения контейнера ejb, когда веб-контейнер будет строить Servlet с bean-компонентом, он запрашивает экземпляр из контейнера ejb и будет хранить этот экземпляр до тех пор, пока сервлет не будет уничтожен, и каждый запрос сервлета будет работать только с одним экземпляром. Я думаю, что это плохой способ использования Statless EJB, потому что он не создается для такого использования. Для этого perpes, например, полезный факсимильный компонент @Singleton. Но если мы хотим использовать фасовую фагу, то мы можем искать экземпляр этого компонента из контекста каждый раз внутри метода.
public class ServletWithBean extends HttpServlet {
@Override
public void service(ServletRequest arg0, ServletResponse arg1)
throws ServletException, IOException {
Context ctx = new InitialContext();
LongTimeService bean = context.lookup("LongTimeService");
bean.do;
...
}
}
Правильно ли и можно использовать этот подход?
Хороший ответ, очень ясно. –