Pax-Web WAR-Extender を使用するセットアップがあるので、標準的な方法でサーブレットを登録できます。
WAR-Extender を使用する前は、サーブレットは、他の osgi 参照を挿入できるシングルトンでした。エクステンダーを使用すると、Declarative-Service XML によりサービスが注入されますが、ブラウザーでサーブレットにアクセスすると、他のサービスを注入せずに新しいインスタンスが作成されます。
@Component
@SuppressWarnings("serial")
@WebServlet(name="TestServlet", urlPatterns={"/Test"})
public class TestServlet extends HttpServlet{
private UserDataManager userDataManager;
public TestServlet(){
System.out.println("------------------- New Servlet");
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
HttpSession session = req.getSession();
MbsSessionId mbsId = (MbsSessionId)session.getAttribute("MbsSessionId");
UserData userData = userDataManager.getUserData(mbsId);
resp.getOutputStream().println(userData.toString());
}
@Reference
void bindUserDataManager(UserDataManager userDataManager){
this.userDataManager = userDataManager;
}
}
私の目標は、OSGi-Service-Registry をプログラムで呼び出さないようにすることです。サーブレットがシングルトンとして扱われるように、または OSGi サービスが再注入されるように、構成はありますか?