我正在尝试使用Jersey 2.0创建一个简单的JAX-RS Application
:
@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执行此类清理任务?
使用创建的MyDependency
对象的JAX-RS资源实现如下所示 - 如果它与问题有任何关联:
@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();
}
}
答案 0 :(得分:1)
与Servlet 3.0兼容的容器意味着您无法依赖CDI,因此我们对hk2感到震惊。
在org.glassfish.hk2.api.PreDestroy
上实现MyDependency
应该指示绑定框架进行适当的清理。
在关机时,hk2应该调用接口定义的preDestroy()
方法。