摘要:没有人知道如何获得@PreDestroy以触发回收\应用程序作用域管理bean的超时?Xpages @PreDestroy
我张贴的问题,几个星期前,关于“计划代理”:30 sec periodic task to poll external web service and cache data ......这是我成功实施至今使用线程(目前用这种方法去为所有的逻辑包含的设计中数据库),我可以开始\取消\暂停\成功从我的应用程序范围支持豆重新启动线程。但是副作用是当启动线程的支持bean被回收时,线程继续运行。我有一个方法,在我的应用程序作用域bean中使用@PreDestroy调用我的取消线程方法,但看起来没有被调用。
我确实从IBM找到这个链接: LO67255:管理的豆类注释 - @POSTCONSTRUCT和@PREDESTROY不能按预期工作。 http://www-01.ibm.com/support/docview.wss?crawler=1&uid=swg1LO67255 ...但我无法访问该文章,所以我不确定结果是...它不起作用。
我有一个非常简单的测试类来演示,我在上面导入了一些冗余库,因为在这里找到的最后一个帖子是:https://community.jboss.org/thread/179819,但无法访问XPages中的javax.enterprise。*。
为了测试目的,我将DB XPage属性“Application Timeout”中的“回收”设置为1。通过简单的页面调用(见下文)...如果您等待1分钟,您可以看到构造函数触发,但@PreDestroy和PostConstruct从未被调用。
对于任何意见或建议...提前致谢。
尼克
import javax.annotation.*;
import java.util.Date;
import javax.annotation.PreDestroy;
import javax.faces.context.*;
import javax.faces.lifecycle.*;
public class Junk {
public Junk(){
System.out.println("Junk.constructor()");
}
@PostConstruct
public void afterOpen(){
System.out.println("Junk.afterOpen() Resource after open...");
}
/**
*
* @return
*/
public String getJunkDate(){
String res = "";
Date d = new Date();
try{
System.out.println("Junk.getJunkDate()==e");
res = d.toLocaleString();
}catch(Exception e){
e.printStackTrace();
}
return res;
}
@PreDestroy
public void destroy(){
System.out.println("Junk.destroy()...!");
}
public void finalize(){
System.out.println("Junk.finalize()...!");
}
}
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
<xp:panel id="panel1">
<xp:button value="Label" id="button1">
<xp:eventHandler event="onclick" submit="true"
refreshMode="partial" refreshId="panel1">
</xp:eventHandler>
</xp:button>
<xp:br></xp:br>
<xp:text escape="true" id="computedField1" value="#{javascript:Junk.junkDate}">
</xp:text></xp:panel>
</xp:view>
有点评论,但谢谢蒂姆。 – 2012-04-19 15:38:08