0

我正在尝试在泽西岛的 servlet / tomcat 上下文中实现我的 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 为空。所以我想是@PersistenceContext 不起作用?

如果我使用解决方案Tutorial: Put JPA in your Web App (tomcat, EclipseLink) 并提供 Rest JSON 输出,所有工作都像魅力一样,但我不喜欢使用静态变量private static EntityManagerFactory emf; 对于实体经理。

谢谢。

4

1 回答 1

0

下面是我将 Spring 注入的球衣资源绑定到 Jetty Webserver 的示例。ResourceConfig 实用程序由 Jersey 提供。希望这个例子有所帮助。ps -- 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*//*");
于 2017-07-12T12:04:48.547 回答