如何在Jersey中设置AbstractBinder

时间:2013-12-06 18:57:27

标签: java tomcat servlets jersey hk2

我正在尝试在servlet / tomcat上下文中在Jersey中实现我的HK2绑定。

我在扩展org.glassfish.jersey.servlet.ServletContainer的servlet中执行:

  @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;
  }

但是,当我调用该服务时,em为null。所以我认为@PersistenceContext不起作用?

如果我使用解决方案Tutorial: Put JPA in your Web App (tomcat, EclipseLink) and provide Rest JSON output,所有工作都像魅力,但我不喜欢使用静态变量私有静态EntityManagerFactory emf; 用于实体管理器。

感谢。

1 个答案:

答案 0 :(得分:0)

下面是我将Spring注入的jersey资源绑定到Jetty Webserver的示例。 ResourceConfig实用程序由Jersey提供。希望这个例子有帮助。 附: - restService是一个Spring注入依赖项

    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*//*");