2013-12-06 6 views
0

Я пытаюсь реализовать свою привязку HK2 в Джерси в контексте сервлета/tomcat.Как установить AbstractBinder в Джерси

я, в сервлет, который простирается org.glassfish.jersey.servlet.ServletContainer:

@Override 
    public void init(ServletConfig config) throws ServletException 
    { 
    super.init(config); 
    // BinderInjection extends org.glassfish.hk2.utilities.binding.AbstractBinder 
    getConfiguration().register(new BinderInjection()); 
    } 

... но я получаю:

java.lang.IllegalStateException: The resource configuration is not modifiable in this context. 
    at org.glassfish.jersey.server.ResourceConfig$ImmutableState.register(ResourceConfig.java:270) 
    at org.glassfish.jersey.server.ResourceConfig$ImmutableState.register(ResourceConfig.java:218) 
    at org.glassfish.jersey.server.ResourceConfig.register(ResourceConfig.java:448) 
    at A_Servlet.init(RestServlet.java:45) 
    at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1190) 

Так как я могу сделать мой собственный HK2 связывание?

Почему этот вопрос? (изменить)

Это для EntityManager и JPA в Джерси.

С Netbeans, если я генерировать AbstractFacade подстава

@PersistenceContext(unitName = "myunit") 
    private EntityManager em; 

... и:

@Override 
    protected EntityManager getEntityManager() 
    { 
    return em; 
    } 

Но, когда я называю обслуживание, эм равно нулю. Итак, я полагаю, что это @PersistenceContext, который не работает?

Если я использую решение Tutorial: Put JPA in your Web App (tomcat, EclipseLink) and provide Rest JSON output все работают как шарм, но мне не нравится использовать статическую переменную private static EntityManagerFactory emf; для менеджера объектов.

Спасибо.

+0

Если вы можете использовать Джерси 2.0, инъекция зависимости HK2 интегрирована в структуру. Ознакомьтесь с соответствующим вопросом здесь: http://stackoverflow.com/questions/16216759/dependency-injection-with-jersey-2-0/17133081#17133081. – joscarsson

+0

Что именно вы хотите связать? Не регистрирует ваш 'BinderInjection' в экземпляре' Application' ('ResourceConfig')? Проконсультируйтесь также с [Custom Injection and Lifecycle Management] (https://jersey.java.net/documentation/latest/ioc.html). –

+0

Привет joscarsson и Михал Гайдос. Спасибо за вашу помощь и комментарий. См. Мое редактирование. – Istao

ответ

0

Ниже приведен пример, в котором я привязываю ресурс древовидной инъекции Spring к Jetty Webserver. Утилита ResourceConfig предоставляется Джерси. Надеюсь, этот пример поможет. стр. - restService - зависимость от впрыска пружины

ResourceConfig config = new ResourceConfig(CustomRestService.class); 
       config.register(new AbstractBinder() { 

        @Override 
        protected void configure() { 
         bind(restService).to(CustomRestService.class); 
        } 
       }); 

       restService.start(); 
       ServletHolder apiServlet = new ServletHolder(new ServletContainer(config)); 
       ServletHolder apiServlet = new ServletHolder(new HttpServletDispatcher()); 
       servletContainer.addServlet(apiServlet, "/api/v1*//*"); 
Смежные вопросы