计时器目前只在一台服务器上触发,这是我想要的,但是当我关闭该服务器时,它不会在另一台服务器上开始触发。
- 我有 2 台 liberty 16.x 服务器,它们都使用相同的数据源,它们连接到 derby 数据库的相同网络版本。
服务器.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>
- 每个服务器都部署了相同的 EAR,并带有一个 EJB 计时器
EJB:
@Schedule(hour="*", minute="*", second="*", persistent=true)
public void timerExpired()
{
log.debug("%s collecting status...", System.getProperties().get("wlp.server.name"));
}
当他们每个人都使用自己的嵌入式德比版本时,计时器每秒都会在每台服务器上触发。然后我将其切换到 derby 的网络版本,其中两台服务器使用相同的数据源,现在只有一个触发,这是我想要的,但我预计当第一台服务器关闭时它会继续触发。
WebSphere Application Server Liberty 目前缺少 EJB 计时器的集群/故障转移功能,这些功能允许计时器在不同的服务器上运行,您在这里寻找这些功能。 WebSphere Application Server 傳統版具有此功能,但 Liberty 不具有此功能。
您应该在此处向 IBM 提交增强请求,以表示将其添加到 Liberty 的要求,然后在此处链接到 RFE,以便阅读本文的其他任何人都可以决定是否要投票支持它,以帮助证明对此功能的需求。