当第 1 台服务器关闭时,第 2 台服务器上的 EJB 持久计时器不会触发



计时器目前只在一台服务器上触发,这是我想要的,但是当我关闭该服务器时,它不会在另一台服务器上开始触发。

  • 我有 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,以便阅读本文的其他任何人都可以决定是否要投票支持它,以帮助证明对此功能的需求。

最新更新