3

实际问题

我正在尝试Application使用 Jersey 2.0 创建一个简单的 JAX-RS,如下所示:

@ApplicationPath("")
public class MyService extends ResourceConfig {

  public MyService() {

    packages(MyService.class.getPackage().getName());
    register(new ApplicationBinder());
  }


  private static class ApplicationBinder extends AbstractBinder {

    @Override
    protected void configure() {

      MyDependency dep = new MyDependency();
      bind(dep).to(MyDependency.class);
      // TODO properly shutdown/destroy/dispose "dep" somewhere
    }

  }

}

MyDependency创建对象有点昂贵,并且它们有一个shutdown()需要在销毁之前调用的方法。我应该在哪里以及如何使用 JAX-RS 执行此类清理任务?

更多背景资料(如有必要)

使用创建的对象的 JAX-RS 资源实现MyDependency如下所示——如果这与问题有任何相关性:

@Path("getit")
@Singleton
public class MyResource {

  private final MyDependency dependency;

  @Inject
  public MyResource(MyDependency dependency) {

    this.dependency = dependency;
  }

  @GET
  @Produces(MediaType.TEXT_HTML)
  public String getIt() {

    return this.dependency.getIt();
  }

}
4

1 回答 1

1

Servlet 3.0 兼容容器意味着您不能依赖 CDI 可用,因此我们对 hk2 感到震惊。

实施应该指示绑定框架进行适当的清理org.glassfish.hk2.api.PreDestroyMyDependency

关闭时 hk2 应该调用preDestroy()接口定义的方法。

于 2013-07-18T14:19:56.787 回答