问题标签 [ejb-timer]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
6692 浏览

java - 定时器正在创建多个定时器实例

我猜这是一个非常简单的问题,但我无法弄清楚为什么会这样。我有一个 EJB 计时器的实现,它使用 @Singleton 注释,即单例计时器。

我已将其设置为每 5 分钟运行一次。代码看起来像这样:

当进程运行时,它在 1 秒的间隔内同时执行 10 个调度程序实例,即

等等。当我在代码中放置一个冗长的操作时,(EJB default - 1)它并不完整,当(EJB default - 2)尝试执行它时给我一个错误提示:

JBAS014373:org.jboss.invocation.InterceptorContext$Invocation@1b83ad52 上的 EJB 3.1 PFD2 4.8.5.5.1 并发访问超时 - 无法在 5000 毫秒内获得锁定

首先,如何避免一次执行多个 EJB 调度程序实例?第二,“无法在 5000MILLISECONDS 内获得锁”是怎么回事,如何避免?

对于我得到的超时错误,我发现 JBOSS 队列中有很多票,如此处所述


编辑

在最新评论中添加了代码,以便阅读:

@Tushar-46835,您能否详细说明您的解决方案,或者向我们展示您所做的事情的片段?– rtcarlson 2014 年 10 月 2 日 20:12

@rtcarlson:这是解决我的问题的代码片段:

0 投票
0 回答
395 浏览

java - 如何从 EJB 计时器更改 callerPrincipal?

我的 EJB 计时器始终与UNAUTHENTICATED用户一起运行。我试图把@RunAs,但没有工作。我试图用反射改变这个值但没有用,我需要从这里调用一个远程 EJB,我需要一个有权限的用户。

0 投票
2 回答
3668 浏览

wildfly - WildFly 8.2 中的计时器恢复错误

从 JBoss 5.1 升级到 WildFly 8.2 后,我得到了下一个错误日志。同时 - 一切正常。

Pair - 包含两个值(可序列化)

StorageData - 一些数据(Serializable),包括 Long trId 字段

在豆中:

如何消除此错误?

0 投票
0 回答
201 浏览

java - MQ 队列事务未在 2 阶段事务中回滚

我有一个 EJB 计时器 (EJB 2.1),它具有 bean 托管事务。

计时器代码调用一个业务方法,该方法在单个事务中处理 2 个资源。一种是数据库,另一种是 MQ 队列服务器。

使用的应用服务器是 Websphere Application Server 7 (WAS)。为了确保跨 2 个资源(数据库和队列管理器)的一致性,我们在 WAS 中启用了支持 2 阶段提交的选项。这是为了确保在数据库操作过程中发生任何异常时,发布在队列中的消息会随着数据库回滚而回滚,反之亦然。

以下是解释的流程:

当 Timer 代码发生超时时,调用 DirectProcessor 中的 startProcess(),这是我们的业务方法。此方法有一个 try 块,其中有一个对同一类中的 createPostXMLMessage() 的方法调用。这又调用了 PostMsg 类中的另一个方法 postMessage()。

问题是当我们在 createPostXMLMessage() 方法中遇到任何数据库异常时,虽然数据库部分成功回滚,但之前发布的消息不会回滚。请帮忙。

在 ejb-jar.xml

0 投票
2 回答
12137 浏览

jakarta-ee - WFLYEJB0043:计时器 [timer] 的先前执行仍在进行中,跳过此在 [time] 的重叠计划执行

我在单例 EJB 中定义了一些持久性计时器,如下所示(使用 WildFly 9.0.2 final)。

在服务器启动和重新部署应用程序时会发出几个警告,如下所示(这些只是其中的几个)。

定时器服务定义standalone-full-ha.xml如下。

当这些计时器被持久化到文件系统而不是数据库时,这些警告也会出现,无论应用程序是部署在集群 ( standalone-full-ha.xml) 还是非集群 ( standalone-full.xml) 环境中。

我会定期清除所有内容standalone/data(除了已部署的 JDBC 驱动程序和自定义内容),standalone/deploymentsstandalone/tmp在必要时清除。计时器的症状不再standalone/data像以前那样可用,当时计时器最初被持久化到文件系统中。

有解决办法吗?


有一个问题,但我对给出的答案不满意(对不起)。此外,这个问题使用 JBoss EAP 6.4 以及为什么在应用程序服务器中使用 EJB 时出现标签对我来说是个谜。


更新 :

该问题在 WildFly 10.0.0 最终版中仍然存在。

0 投票
1 回答
495 浏览

java-ee-6 - WebSphere 8 中带有线程睡眠的无限循环与 EJB 3.1 计时器:背压

我有一个要求

  • 读取数据库表
  • 处理数据(dataCleanser)

为了增加吞吐量,我实现了每 5 分钟(其中 10 分钟)唤醒一次的 EJB 计时器(非持久性)并执行上述工作。

问题是“背压”,dataCleanser 有时可能需要 12 分钟(进行外部 API 调用),当这种情况发生时,Websphere 会报告挂起的线程。

在这些情况下,我想以编程方式减少计时器的数量(比如从 10 个减少到 5 个)。只有当计时器返回报告其成功执行或异常或超时的状态时,我才能这样做

这样我就可以控制背压。 is there anyway to do that in Websphere 8?

用另一种方式问问题

- can the EJB timers(with transaction_not_supported) invoke another EJB that have transaction timeouts? - can those timeouts be caught in the calling timer code?

如果这是不可能的,那么使用带有睡眠的普通旧无限循环然后调用和 EJB(依次调用 dataCleanser)和事务超时有什么缺点?

不利的一面是,我知道这变成了单线程,而且我不会像使用计时器那样进行 10 次并行执行。

0 投票
1 回答
1683 浏览

java - 如何保证EJB Timer Service只有一个线程执行

我正在尝试将我的简单石英作业转换为 JBOSS EAP 6.4 中的 EJB 计时器服务作业。

我遇到了一个我无法找到好的答案的问题。我想每天凌晨 1 点运行一次此方法。

这是我的课。

我在控制台中收到这些错误:

防止这些线程尝试启动的最简单方法是什么?

0 投票
1 回答
245 浏览

websphere - 为什么非持久 ejb 计时器没有触发?

由于我们最近遇到的一个问题,我正在尝试替换我们的应用程序中的现有逻辑,该逻辑使用持久性程序计时器到非持久性计时器。WAS 用于写入计时器持久信息的文件系统已满,并且 Derby 数据库以只读模式重新启动,导致我们的应用程序无法触发计时器,因此我们不得不重新启动服务器以修复该问题。

这是用于触发编程计时器的当前代码

根据http://docs.oracle.com/javaee/6/tutorial/doc/bnboy.html中引用的示例,将我们的代码更改为

但我们面临以下例外

第 62 行是调用 createSingleActionTimer 的地方。

做了一些分析,无法修复。任何线索都会有所帮助..

0 投票
1 回答
70 浏览

ejb - 在 EJB 计时器中使用 @schedule,无法从数据库传递计划详细信息

在 EJB 计时器中使用 @schedule,我想从数据库中传递计划详细信息。但它不允许传递值。我应该怎么办。在@timeout 中,我也无法在服务器启动时自动启动线程。@Postconstruct 不工作。

0 投票
2 回答
229 浏览

database - 多服务器应用程序从同一个表中读取数据

我有一个应用程序在两个不同的服务器实例上运行。应用程序有一个单例 EJB,它的定时器设置为每隔一分钟运行一次。EJB 中的方法从表中读取记录并将其删除并将其发布到队列中(一个事务的所有部分)。两台服务器启动后,它会尝试同时从表中读取记录。

我的问题是如何只允许一个应用程序读取记录,直到事务结束。