EJB 定时器服务线程安全吗?
Posted
技术标签:
【中文标题】EJB 定时器服务线程安全吗?【英文标题】:Is EJB Timer Service Thread safe? 【发布时间】:2012-01-03 22:43:35 【问题描述】:当多线程调用创建timerservice,然后使用自己的timerservice创建 计时器。 jboss 容器如何对这些事件进行排队并启动计时器?谢谢
【问题讨论】:
【参考方案1】:虽然这是一个老问题,但它仍然是当前的问题。 我认为您可能指的是在多服务器环境中运行的计时器服务之间的并发性,因为线程安全通常是指在同一 JVM 上运行的进程,并通过同步方法解决。
在多服务器环境中,如果您不希望在完全相同的预定时间同时触发相同的 EJB 计时器,可以将它们存储在共享资源(例如数据库)中并在某些时间有序地触发它们的服务器,不受其他服务器的干扰。
主要的方法似乎是定义持久的 EJB 计时器和具有可序列化事务隔离的数据源,因此一次只有一个服务器能够更新计时器调度控制表。基于此,我看到了两种可能的方法:
-
启用定时器服务的 JBoss 服务器配置为在集群中运行,因此 EJB 定时器一次只能在一个节点上触发(即定时器的单次执行)。 [1]
在非集群环境中,也许您可以选择一个服务器来启用 EJB 定时器执行,然后在其他服务器上禁用该执行。
这当然不是所有可能性的完整列表,但我认为它可能是在多服务器环境中配置 EJB 计时器的起点。
参考:
[1]:JBoss - 掌握 Boss - 创建集群 EJB 3 计时器 - http://www.mastertheboss.com/jboss-server/wildfly-8/creating-clustered-ejb-3-timers
[2]:JBoss - 掌握 Boss - 配置 WildFly 批处理作业存储库 - http://www.mastertheboss.com/jboss-server/wildfly-8/configuring-wildfly-batch-job-repository
[3]: *** - How to disable Timer service in Wildfly 10?
【讨论】:
以上是关于EJB 定时器服务线程安全吗?的主要内容,如果未能解决你的问题,请参考以下文章
JAVA笔记(20)--- 死锁;如何解决线程安全问题;守护线程;定时器;Callable 实现线程;wait ( ) 和 notify ( ) ;实现生产者和消费者模式;