2015-03-09 2 views
0

У меня есть настройка, где я использую WAR-Extender Pax-Web, чтобы я мог регистрировать сервлеты стандартным образом.Как использовать @WebServlet и @Component в pax-web

Перед использованием WAR-Extender сервлет был синглом, где я смог ввести другие ссылки osgi. С расширителем услуги вводятся из-за XML объявления Declarative-Service, но когда я обращаюсь к Servlet с браузером, новый экземпляр создается без ввода другой службы.

@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. Есть ли какая-либо конфигурация, поэтому мой сервлет обрабатывается как Singleton или что OSGi-Service повторно вводится?

ответ

2

Проблема в том, что вы смешиваете здесь две технологии. Pax Web гарантирует, что аннотированные сервлеты зарегистрированы соответствующим образом, но ничего не знают о DS. Вот почему это не работает вообще. Но если вы используете его в комбинации с Pax-CDI, вы можете вводить любую услугу в свой сервлет с помощью средств CDI.
Посмотрите на образец here

Это отрывок из него:

@Inject 
@OsgiService 
private CookBookService cookBookService; 

Кстати, вы также можете настроить его, чтобы быть динамичным, это означает, что Pax-КДИ примет ваш сервлет вниз если соответствующий сервлет не исчез. Для получения дополнительной информации о Pax Web и Pax CDI см. Соответствующие документы/проекты.
Pax Web Documentation
Pax Web Project
Pax CDI Project