EJB 3.0计时器在weblogic集群中不起作用

时间:2015-01-13 23:15:26

标签: oracle java-ee timer ejb-3.0 weblogic-10.x

在weblogic(10.x)2节点群集环境中遇到EJB 3.0 Timer问题。 时间应该每隔1分钟(预配置)触发或超时,仅来自群集的一个节点。

但是当计时器部署在2节点集群中时,它不会从任何节点触发。

遵循的步骤:

1)使用配置了计时器的无状态会话bean创建了一个EJB 3.0项目。 创建一个loadonstartup设置为1的servlet,它触发EJB createTimer方法。 启用集群EJB计时器服务,将weblogic-ejb-jar.xml中的timer-implementation元素设置为clustered

   <timer-implementation>Clustered</timer-implementation>   

2)HA数据库指向Oracle Db,其中创建了WEBLOGIC_TIMERS和ACTIVE表。

3)使用config.xml文件中的元素映射到HA数据库的JDBC数据源。

4)使用config.xml中的元素租用JDBC数据源定义的服务。

weblogic-ejb-jar.xml描述符文件:

<weblogic-ejb-jar>
<weblogic-enterprise-bean>
<ejb-name>ClusteredSessionEJB</ejb-name>
<stateless-session-descriptor>
  <pool>
    <max-beans-in-free-pool>1</max-beans-in-free-pool>
    <initial-beans-in-free-pool>1</initial-beans-in-free-pool>
  </pool>
  <stateless-clustering>
    <home-is-clusterable>true</home-is-clusterable>
    <home-load-algorithm>round-robin</home-load-algorithm>
    <stateless-bean-is-clusterable>true</stateless-bean-is-clusterable>
    <stateless-bean-load-algorithm>round-robin</stateless-bean-load-algorithm>
  </stateless-clustering>

</stateless-session-descriptor>
</weblogic-enterprise-bean>
<timer-implementation>Clustered</timer-implementation>
</weblogic-ejb-jar>

EJB代码:

@Stateless(name = "ClusteredSessionEJB", mappedName = "TimerClusterApp-Model-   ClusteredSessionEJB")
public class ClusteredSessionEJBBean implements ClusteredSessionEJB {

@Resource
   TimerService mdsCacheUpdateTimer;

@Timeout
public void scheduleJob(final Timer timerObj) {
   LOGGER.info("scheduleJob fired in ClusteredSessionEJBBean"); 
 }

 public void createTimer() {

     LOGGER.setLevel(Level.INFO);
     LOGGER.info("creating timer in ClusteredSessionEJBBean"); 
     mdsCacheUpdateTimer.createTimer(60000, 60000, "ClusteredSessionEJBBean-Timer");

 }
}

0 个答案:

没有答案