首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Jax-ws @PreDestroy到底什么时候被调用?

Jax-ws @PreDestroy到底什么时候被调用?
EN

Stack Overflow用户
提问于 2011-04-20 23:26:28
回答 1查看 3.1K关注 0票数 2

我有一个使用@PostConstruct@PreDestory注释的简单web服务。

代码语言:javascript
复制
@PostConstruct
private void init() {...} //initialize some database connection

@PreDestroy
private void release() {...} //release data base resources

然后,客户端将调用一些web方法来执行一些数据库操作。我通过在代码中设置断点进行了简单的测试。@PostConstruct工作正常。但是@PreDestroy方法从未被调用过。

因为web服务本质上是无状态的,所以我认为当客户端完成对web方法的调用时,总是会调用@PreDestroy。所以最终,实例总是被销毁,在此之前,我的release方法应该被调用?这是一个正确的理解吗?

但在阅读了一些在线资源后,我感到困惑。有人说@PreDestroy会在未部署时被调用?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-04-21 00:32:12

只有当应用服务器决定减小方法就绪池的大小时,@PreDestroy才会被调用--也就是说,它确定不需要保留那么多的@WebService @Stateless会话bean实例。它不会在每次@WebMethod调用之后调用(并且@PostConstruct只在新实例添加到方法就绪池中时调用,而不一定在每次web方法调用之前调用)。

如果您有需要在每次方法调用之前和之后调用的逻辑,您可以这样做:

代码语言:javascript
复制
@AroundInvoke
public Object intercept( InvocationContext ctx )
{
  try
  {
    init();
    return ctx.proceed();
  }
  finally
  {
    release();
  }
}

此方法可以添加到@WebService bean中,也可以使用@Interceptors作为单独的类添加

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5732801

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档