Как использовать @WebServlet и @Component в pax-web
У меня есть установка, в которой я использую WAR-Extender Pax-Web, чтобы я мог регистрировать сервлеты стандартным способом.
До использования WAR-Extender сервлет был единственным, где я мог вставлять другие osgi-ссылки. С помощью расширителя сервисы внедряются из-за декларативного 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. Есть ли какая-либо конфигурация, чтобы мой Servlet обрабатывался как Singleton или что OSGi-Service повторно вводится?
1 ответ
Проблема в том, что вы смешиваете две технологии здесь. Pax Web гарантирует, что Аннотированные Сервлеты зарегистрированы соответственно, но ничего не знают о DS. Вот почему это не работает вообще. Но если вы используете его в сочетании с Pax-CDI, вы можете внедрить любой сервис в свой сервлет с помощью CDI.
Взгляните на образец здесь
Вот выдержка из этого:
@Inject
@OsgiService
private CookBookService cookBookService;
Кстати, вы также можете настроить его как динамический, это означает, что Pax-CDI отключит ваш сервлет в случае, если соответствующий сервлет пропал. Для получения более подробной информации о Pax Web и Pax CDI ознакомьтесь с соответствующей документацией / проектами.
Pax Web Documentation
Pax Web Project
Pax CDI Project