gpt4 book ai didi

java - Jax-ws @PreDestroy 什么时候被准确调用?

转载 作者:行者123 更新时间:2023-12-04 21:29:07 31 4
gpt4 key购买 nike

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

@PostConstruct
private void init() {...} //initialize some database connection

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

然后客户端会调用一些网络方法来做一些数据库操作。我通过在代码中设置断点来进行简单的测试。 @PostConstruct 工作正常。但是 @PreDestroy 方法永远不会被调用。

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

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

最佳答案

@PreDestroy 仅在应用程序服务器决定减小方法就绪池的大小时调用 - 即它确定不需要保留尽可能多的 @ 实例WebService @Stateless 周围的 session bean。它不会在每次调用 @WebMethod 后被调用(并且 @PostConstruct 仅在将新实例添加到方法就绪池时调用,不一定之前每个网络方法调用)。

如果您需要在每次方法调用之前和之后调用逻辑,您可以按如下方式进行:

@AroundInvoke
public Object intercept( InvocationContext ctx )
{
try
{
init();
return ctx.proceed();
}
finally
{
release();
}
}

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

关于java - Jax-ws @PreDestroy 什么时候被准确调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5732801/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com