neo*_*neo 2 java annotations jax-ws
我有一个简单的Web服务使用@PostConstruct和@PreDestory注释.
@PostConstruct
private void init() {...} //initialize some database connection
@PreDestroy
private void release() {...} //release data base resources
Run Code Online (Sandbox Code Playgroud)
然后客户端将调用一些Web方法来执行一些数据库操作.我通过在代码中设置断点进行了简单的测试.该@PostConstruct工程的罚款.但@PreDestroy方法永远不会被调用.
我认为@PreDestroy当客户端完成调用Web方法时总会被调用,因为Web服务本质上是无状态的.所以最后,实例总是被销毁,在此之前,应该调用我的发布方法?这是正确的理解吗?
但在阅读了一些在线资源后,我感到困惑.有人说@PreDestroy当它未部署时会被调用吗?
@PreDestroy仅在应用程序服务器决定减小Method-Ready池的大小时调用 - 即它确定它不需要保留@WebService @Stateless会话bean的任意数量的实例.在每次调用之后都不会调用它@WebMethod(@PostConstruct仅在将新实例添加到Method-ready池时调用,而不是在每次Web方法调用之前调用).
如果您需要在每次方法调用之前和之后调用逻辑,则可以按如下方式执行:
@AroundInvoke
public Object intercept( InvocationContext ctx )
{
try
{
init();
return ctx.proceed();
}
finally
{
release();
}
}
Run Code Online (Sandbox Code Playgroud)
此方法可以添加到您的@WebServicebean或作为单独的类使用@Interceptors