【问题标题】:Is it possible to create an EJB dedicated to managing EJB 3.1 timers?是否可以创建一个专门用于管理 EJB 3.1 计时器的 EJB?
【发布时间】:2012-02-04 06:44:03
【问题描述】:

这可能是个愚蠢的问题,但是否有可能专门使用 EJB 来管理整个容器的所有计时器?我不知道这将如何实现,因为我对 Java EE 的经验并不多,但我正在考虑类似于可以访问此计时器 bean 的单个会话 bean,并且会话 bean 传入一个函数指针以及作业本身的元数据?在计时器 bean 之上,可以构建一个 GUI 或管理框架,至少可以查看正在运行的作业及其当前状态?

基本上我需要/想要拥有 Quartz 的一些功能(能够停止、启动、修改作业),同时使用 EJB 3.1 计时器。试图弄清楚这是否是一种遥远的可能性。

编辑:正如一些人所指出的,问题的症结在于计时器服务无法获取整个容器的所有计时器。我的想法是在一个可以管理所有计时器的特殊计时器 bean 中创建所有计时器。问题是我不知道如何做到这一点,或者这是否可能。我玩过将函数指针(无论如何你可以在 java 中尽可能接近它们)与计时参数一起传递给计时器 bean,但这看起来真的很糟糕。

【问题讨论】:

  • 您使用的是 JBoss 还是 Websphere? JavaEE 规范中没有这样的功能。如果可能的话,您必须使用特定于容器的解决方案。
  • WebSphere。标记为 JBoss,因为它不是特定于 AS 的问题。

标签: jakarta-ee jboss ejb websphere ejb-3.1


【解决方案1】:

您可能正在寻找javax.ejb.TimerService。将其注入您的 bean:

@Resource
private SessionContext sessionContext;

然后,例如,您可以遍历所有计时器:

TimerService timerService = sessionContext.getTimerService();
for (Timer timer : timerService.getTimers()) {
    timer.cancel(); //etc.
}

【讨论】:

  • 针对单个应用,不适用于容器中部署的其他应用。
  • 这是特定于单个 EJB bean。您无法在同一应用程序中看到其他 bean 创建的计时器。
  • @AndreRodrigues 是的,单个 bean 可用于管理应用程序中的计时器,但提供的答案对部署在容器中的其他应用程序无济于事,用户提到的问题。跨度>
猜你喜欢
  • 2015-08-18
  • 2021-04-20
  • 2012-02-23
  • 2011-11-02
  • 1970-01-01
  • 1970-01-01
  • 2017-04-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多