使用@Schedule注释的方法不能使用依赖项jboss.ha:service = HASingletonDeployer,type = Barrier

时间:2012-08-31 15:45:40

标签: java cluster-computing scheduler ejb-3.1 stateless

我有一个集群应用程序,其中有2个节点在jboss 6.1.0.Final中运行。

我有一些无状态bean需要在预定时间执行某些任务。它使用EJB 3.1计时器服务。这是其中之一:

@Stateless 
public class MyBean implements MyBeanLocal,
    MyBeanRemote {


@Schedule(hour = "1", persistent = false)
public void doStuff() { //my code }
}

直到这里,这完美无缺。

但是因为我有2个节点,所以我只需要在其中一个节点中执行doStuff方法,所以这里是我的META-INF / jboss.xml

<?xml version="1.0" encoding="UTF-8"?>
<jboss>
<enterprise-beans>
<session>
<ejb-name>MyBean</ejb-name>
<depends>jboss.ha:service=HASingletonDeployer,type=Barrier</depends>
</session>
</enterprise-beans>
</jboss>

当服务器启动时,我看到MyBean只在其中一个节点中创建。

installing bean: jboss.j2ee:ear=my-ear.ear,jar=my-jar-0.0.1-SNAPSHOT.jar,name=MyBean,service=EJB3
with dependencies:
and demands:
jboss-switchboard:appName=my-ear,module=my-module-0.0.1-SNAPSHOT,name=MyBean; Required: Create
jboss.ejb:service=EJBTimerService; Required: Described
jboss-injector:topLevelUnit=my-ear.ear,unit=my-jar-0.0.1-SNAPSHOT.jar,bean=MyBean; Required: Described
jboss.ha:service=HASingletonDeployer,type=Barrier; Required: Described
persistence.unit:unitName=my-ear.ear/another-jar-dao-0.0.1-SNAPSHOT.jar#my-entitymanager; Required: Described
and supplies:
...
Added bean(jboss.j2ee:ear=my-ear.ear,jar=my-jar-0.0.1-SNAPSHOT.jar,name=MyBean,service=EJB3) to KernelDeployment of: my-jar-0.0.1-SNAPSHOT.jar

但是,由于在META-INF / jboss.xml上声明了依赖项,因此永远不会执行doStuff方法。我测试了从META-INF / jboss.xml中删除依赖项,该方法在计划的时间执行,但它在两个节点中运行。我需要创建一个只在集群的一个节点中运行的调度方法。

更新:如果我在META-INF / jboss.xml上执行此操作:

<session>
 <ejb-name>MyBean</ejb-name>
 <!-- <depends>jboss.ha:service=HASingletonDeployer,type=Barrier</depends>  -->
</session>

预定的方法仍然无法在任何节点中运行。

但如果我这样做:

<!-- <session>
 <ejb-name>MyBean</ejb-name>
 <depends>jboss.ha:service=HASingletonDeployer,type=Barrier</depends>  
</session> -->

该方法在两个节点中运行。

任何人都可以帮助我吗?感谢。

0 个答案:

没有答案