问题标签 [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.
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:这是解决我的问题的代码片段:
java - 如何从 EJB 计时器更改 callerPrincipal?
我的 EJB 计时器始终与UNAUTHENTICATED
用户一起运行。我试图把@RunAs
,但没有工作。我试图用反射改变这个值但没有用,我需要从这里调用一个远程 EJB,我需要一个有权限的用户。
wildfly - WildFly 8.2 中的计时器恢复错误
从 JBoss 5.1 升级到 WildFly 8.2 后,我得到了下一个错误日志。同时 - 一切正常。
Pair - 包含两个值(可序列化)
StorageData - 一些数据(Serializable),包括 Long trId 字段
在豆中:
如何消除此错误?
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
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/deployments
并standalone/tmp
在必要时清除。计时器的症状不再standalone/data
像以前那样可用,当时计时器最初被持久化到文件系统中。
有解决办法吗?
有一个问题,但我对给出的答案不满意(对不起)。此外,这个问题使用 JBoss EAP 6.4 以及为什么在应用程序服务器中使用 EJB 时出现标签spring对我来说是个谜。
更新 :
该问题在 WildFly 10.0.0 最终版中仍然存在。
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 次并行执行。
java - 如何保证EJB Timer Service只有一个线程执行
我正在尝试将我的简单石英作业转换为 JBOSS EAP 6.4 中的 EJB 计时器服务作业。
我遇到了一个我无法找到好的答案的问题。我想每天凌晨 1 点运行一次此方法。
这是我的课。
我在控制台中收到这些错误:
防止这些线程尝试启动的最简单方法是什么?
websphere - 为什么非持久 ejb 计时器没有触发?
由于我们最近遇到的一个问题,我正在尝试替换我们的应用程序中的现有逻辑,该逻辑使用持久性程序计时器到非持久性计时器。WAS 用于写入计时器持久信息的文件系统已满,并且 Derby 数据库以只读模式重新启动,导致我们的应用程序无法触发计时器,因此我们不得不重新启动服务器以修复该问题。
这是用于触发编程计时器的当前代码
根据http://docs.oracle.com/javaee/6/tutorial/doc/bnboy.html中引用的示例,将我们的代码更改为
但我们面临以下例外
第 62 行是调用 createSingleActionTimer 的地方。
做了一些分析,无法修复。任何线索都会有所帮助..
ejb - 在 EJB 计时器中使用 @schedule,无法从数据库传递计划详细信息
在 EJB 计时器中使用 @schedule,我想从数据库中传递计划详细信息。但它不允许传递值。我应该怎么办。在@timeout 中,我也无法在服务器启动时自动启动线程。@Postconstruct 不工作。
database - 多服务器应用程序从同一个表中读取数据
我有一个应用程序在两个不同的服务器实例上运行。应用程序有一个单例 EJB,它的定时器设置为每隔一分钟运行一次。EJB 中的方法从表中读取记录并将其删除并将其发布到队列中(一个事务的所有部分)。两台服务器启动后,它会尝试同时从表中读取记录。
我的问题是如何只允许一个应用程序读取记录,直到事务结束。