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

Sun*_*nce 2 ejb timer java-ee 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>
Run Code Online (Sandbox Code Playgroud)
  • 每个服务器都使用EJB计时器为其部署了相同的EAR

EJB:

@Schedule(hour="*", minute="*", second="*", persistent=true)  
public void timerExpired()
{
    log.debug("%s collecting status...", System.getProperties().get("wlp.server.name"));
}
Run Code Online (Sandbox Code Playgroud)

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

njr*_*njr 5

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

您应该在此处打开一个IBM增强请求,以表示将其添加到Liberty的要求,然后在此处链接到RFE,以便读取此内容的任何其他人可以决定是否要投票支持它以帮助演示对此功能的需求.