1

jboss 6.1.0.Final で実行されている 2 つのノードを持つ 1 つのクラスター化されたアプリケーションがあります。

スケジュールされた時間にいくつかのタスクを実行する必要があるステートレス Bean がいくつかあります。EJB 3.1 タイマー サービスを使用しています。ここにそれらの1つがあります:

@Stateless 
public class MyBean implements MyBeanLocal,
    MyBeanRemote {


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

ここまで、これは完全に機能します。

しかし、私は2つのノードを持っているので、そのうちの1つでのみ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 がノードの 1 つだけに作成されていることがわかります。

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 から依存関係を削除してテストしたところ、メソッドはスケジュールされた時間に実行されましたが、2 つのノードで実行されました。クラスターの 1 つのノードのみで実行されるスケジュールされたメソッドを作成する必要があります。

更新: 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> -->

メソッドは 2 つのノードで実行されます。

誰でも私を助けることができますか?ありがとう。

4

0 に答える 0