JAVA PRESS Vol.38【特別企画】JBossのクラスタリング の記事を参考に、JBossのクラスタリングを試してみました。
JBossのクラスタリングのポイント・特長は
ですね。
HA JNDIてのは、通常のJNDIではjndi.propertiesなどで接続先を指定してオブジェクトをlookupするところを、ブロードキャストして誰かが答えることによって、接続先を意識しないでオブジェクトをlookupすることができます(負荷分散)。さらに各EJBコンテナはハートビートによる生存確認も行っていて、あるコンテナが死んだときは別のコンテナが処理を続行します(フェールオーバ)。各EJBコンテナは常時メモリのレプリケーションを行って情報を共有し、実行中のコンテナが死んでも他のコンテナが処理を実行できるような仕組みになっています*1。
ファーミングというのは、あるサーバにearをデプロイすると、他のサーバにも勝手にコピーされてデプロイされる、という感動的な機能です。ファーミングをONにするとデフォルトでは、
${install_root}/server/all/farm
に置いたファイルが勝手にコピー&デプロイされます。
準備といってもほとんど設定の必要はなく、起動時に
run.sh -c all
とALLオプションで起動するだけです。これだけで、同じセグメント内のJBossプロセスの自動認識やSessionBean?のレプリケーション、JNDIのレプリケーションなどが自動的に行われるみたいです。あとファーミング機能もONになります。
一連の流れとしては
となります。
さてStateless Session Beanからやってみましょう。といっても拍子抜けするくらい簡単です。SessionBean?のクラスコメントに
* @ejb.bean name="HelloEJB" display-name = "HelloEJB" jndi-name="HelloEJBHoge" * type = "Stateless" view-type = "remote" * @ejb.interface remote-class="hello.ejb.Hello" * @ejb.home remote-class="hello.ejb.HelloHome" * @jboss.clustered <-これを追加
と @jboss.clustered を追加するだけでOKです。これでInitialContext?からのlookup時に、クラスター化されたEJBコンテナどれかが応答して、処理を実行してくれます。
ただ、EJBクライアントがただのクラスの場合はうまくいくんだけど、WEBコンテナにデプロイされたServlet上でlookupした場合は、ローカルのInitialContext?しか参照しないみたいですね。どっかに設定があるはずなんだけど。。。。
この記事は
現在のアクセス:12275