EJB 3.0 TimerService重新部署

时间:2013-02-19 09:09:32

标签: timer weblogic ejb-3.0

几周前,我们开发了一个EJB 3.0 TimerService来根据需要安排一些任务(当用户点击按钮时,我们会创建计时器来执行某些任务)。到目前为止,它一直运作良好,直到今天。

昨天我们重新部署了包含de TimerService的EJB来更新一些属性,今天没有触发计时器,即使有一些已经创建。

¿这是正常的吗?我的意思是,如果你不改变ejbTimeOut的签名,重新部署后不应该像往常一样启动吗?

4 个答案:

答案 0 :(得分:2)

要使计时器持久化,请使用TimerHandle,如下所述:

要保存Timer对象以供将来参考,请调用其getHandle方法并将TimerHandle对象存储在数据库中。 (TimerHandle对象是可序列化的。)要重新实例化Timer对象,请从数据库中检索句柄并在句柄上调用getTimer。 TimerHandle对象不能作为远程或Web服务接口中定义的方法的参数传递。换句话说,远程客户端和Web服务客户端无法访问bean的TimerHandle对象。但是,本地客户没有此限制。

取自http://docs.oracle.com/javaee/5/tutorial/doc/bnboy.html

答案 1 :(得分:1)

默认情况下,计时器是持久的。当您重新启动服务器时,可能会重新部署应用程序等,如果它们被错过,将会超时。

我过去遇到过类似的问题。因此,建议取消之前现有的所有计时器&然后再创建新的。

答案 2 :(得分:0)

这就是EJB 3.0中的行为。在EJB 3.1中,计时器服务变得更好。它支持自动计时器,该计时器是在成功部署后创建的。您可能希望了解升级到EJB 3.1是否适合您。

EE6教程:Using Timer Service

  

企业bean计时器可以是程序化计时器,也可以是自动计时器   计时器。程序化计时器通过显式调用其中一个来设置   TimerService接口的定时器创建方法。自动计时器   是在成功部署企业bean时创建的   包含用java.ejb.Schedule或注释的方法   java.ejb.Schedules annotations。

答案 3 :(得分:0)

使用asadmin redeploy命令,其中--keepstate标志等于true。

完整示例:

if($("#keywords").val().length < 3){
    $("#keywords").autocomplete("off"):
    }

更多信息:

http://www.oracle.com/technetwork/articles/java/pongegf-1517943.html