当第一台服务器关闭时,EJB 持久性计时器不会在第二台服务器上触发
EJB Persistent Timer not firing on 2nd server when the 1st server shutsdown
计时器目前只在我想要的一台服务器上触发,但是当我关闭该服务器时它不会在另一台服务器上触发。
- 我有 2 个 liberty 16.x 服务器都使用相同的数据源,它们连接到相同网络版本的 derby 数据库。
server.xml:
<dataSource id="DefaultDataSource" jndiName="jdbc/DefaultDataSource" connectionSharing="MatchOriginalRequest" commitOrRollbackOnCleanup="rollback">
<jdbcDriver libraryRef="DerbyLib"/>
<properties.derby.client databaseName="/opt/db-derby-10.13.1.1-bin/databases/TEST_DB" createDatabase="false" serverName="localhost" portNumber="1088"/>
<containerAuthData user="user1" password="{xor}XXXX" />
</dataSource>
<library id="DerbyLib">
<fileset dir="/opt/db-derby-10.13.1.1-bin/lib"/>
</library>
- 每个服务器都使用 EJB 计时器部署了相同的 EAR
EJB:
@Schedule(hour="*", minute="*", second="*", persistent=true)
public void timerExpired()
{
log.debug("%s collecting status...", System.getProperties().get("wlp.server.name"));
}
当他们每个人都使用自己的嵌入式 derby 版本时,计时器每秒都会在每个服务器上触发。然后我将它切换到 derby 的网络版本,其中两个服务器使用相同的数据源,现在只有一个触发,这正是我想要的,但我希望它在第一台服务器关闭时继续触发。
WebSphere Application Server Liberty 目前缺少 EJB 计时器的 clustering/failover 功能,该功能允许计时器在不同的服务器上 运行,您正在此处查找。传统的 WebSphere Application Server 具有此功能,但 Liberty 没有。
您应该向 IBM here 提出增强请求以表示将其添加到 Liberty 的要求,然后 link 到此处的 RFE,以便阅读此内容的任何其他人可以决定是否他们想投票给它以帮助证明对这种能力的需求。
计时器目前只在我想要的一台服务器上触发,但是当我关闭该服务器时它不会在另一台服务器上触发。
- 我有 2 个 liberty 16.x 服务器都使用相同的数据源,它们连接到相同网络版本的 derby 数据库。
server.xml:
<dataSource id="DefaultDataSource" jndiName="jdbc/DefaultDataSource" connectionSharing="MatchOriginalRequest" commitOrRollbackOnCleanup="rollback">
<jdbcDriver libraryRef="DerbyLib"/>
<properties.derby.client databaseName="/opt/db-derby-10.13.1.1-bin/databases/TEST_DB" createDatabase="false" serverName="localhost" portNumber="1088"/>
<containerAuthData user="user1" password="{xor}XXXX" />
</dataSource>
<library id="DerbyLib">
<fileset dir="/opt/db-derby-10.13.1.1-bin/lib"/>
</library>
- 每个服务器都使用 EJB 计时器部署了相同的 EAR
EJB:
@Schedule(hour="*", minute="*", second="*", persistent=true)
public void timerExpired()
{
log.debug("%s collecting status...", System.getProperties().get("wlp.server.name"));
}
当他们每个人都使用自己的嵌入式 derby 版本时,计时器每秒都会在每个服务器上触发。然后我将它切换到 derby 的网络版本,其中两个服务器使用相同的数据源,现在只有一个触发,这正是我想要的,但我希望它在第一台服务器关闭时继续触发。
WebSphere Application Server Liberty 目前缺少 EJB 计时器的 clustering/failover 功能,该功能允许计时器在不同的服务器上 运行,您正在此处查找。传统的 WebSphere Application Server 具有此功能,但 Liberty 没有。
您应该向 IBM here 提出增强请求以表示将其添加到 Liberty 的要求,然后 link 到此处的 RFE,以便阅读此内容的任何其他人可以决定是否他们想投票给它以帮助证明对这种能力的需求。