統計のない Bean がある場合は、@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 Bean のインスタンスは 1 つだけになります。ejb コンテナーの観点から見ると、Web コンテナーが Bean を使用してサーブレットを構築する場合、ejb コンテナーからインスタンスを要求し、サーブレットが破棄され、すべてのサーブレット要求が 1 つのインスタンスでのみ機能するまで、このインスタンスを保持します。Statless EJB はそのような使用法を作成しないため、これは悪い使用方法だと思います。たとえば、この perpes には、便利な @Singleton statfull Bean があります。しかし、統計のない Bean を使用したい場合は、メソッド内で毎回 Context からこの Bean のインスタンスを検索できます。
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;
...
}
}
このアプローチを使用することは正しく、可能ですか?