【问题标题】:EJB 3.0 TimerService redeployEJB 3.0 TimerService 重新部署
【发布时间】:2013-02-19 09:09:32
【问题描述】:

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

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

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

【问题讨论】:

    标签: timer weblogic ejb-3.0


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 是的,我读过类似的东西。如果服务器崩溃或重新启动,它们看起来会持续存在,但如果您重新部署应用程序,计时器就会丢失,因此您有责任恢复或重新创建它们。感谢您的回答。
      【解决方案3】:

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

      EE6 教程:Using Timer Service

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

      【讨论】:

        【解决方案4】:

        使用 asadmin redeploy 命令与 --keepstate 标志等于 true。

        完整示例:

        asadmin redeploy --keepstate=true --name=taskee-1.0-SNAPSHOT target/taskee-1.0-SNAPSHOT.war
        

        更多信息在:

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

        【讨论】:

          猜你喜欢
          • 2023-03-12
          • 2011-06-07
          • 2015-06-19
          • 2019-11-25
          • 2013-03-02
          • 1970-01-01
          • 2014-09-07
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多