第一台服务器关闭时,EJB Persistent Timer不会在第二台服务器上触发

时间:2017-01-06 22:00:27

标签: java-ee timer ejb websphere-liberty

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

  • 我有2个自由16.x服务器都使用相同的数据源连接到相同网络版本的derby db。

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"));
}

当他们每个人都使用自己的嵌入式版本的德比时,定时器每秒都会在每个服务器上触发。然后我将它切换到德比的网络版本,其中两个服务器使用相同的数据源,现在只有一个是我想要的,但我希望它在第一个服务器关闭时继续触发。

1 个答案:

答案 0 :(得分:5)

WebSphere Application Server Liberty目前缺少EJB计时器的集群/故障转移功能,允许计时器在不同的服务器上运行,您在此处寻找。 WebSphere Application Server Traditional具有此功能,但不具有Liberty。

您应该使用IBM here打开一个增强请求来表示将其添加到Liberty的要求,然后在此处链接到RFE,以便读取此内容的任何其他人可以决定是否要对其进行投票帮助证明对这种能力的需求。