Как использовать @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

Другие вопросы по тегам