#author("2019-03-15T06:05:13+00:00","","") #author("2019-03-15T06:05:16+00:00","","") // 下階層用テンプレート #topicpath ---- //ここにコンテンツを記述します。 #contents [[JAVA PRESS Vol.38【特別企画】JBossのクラスタリング:http://www.amazon.co.jp/exec/obidos/redirect?tag=kinosite-22&creative=203&camp=23&link_code=st1&path=ASIN/4774121193]] の記事を参考に、JBossのクラスタリングを試してみました。 JBossのクラスタリングのポイント・特長は -HA JNDI機能で、透過的に複数のEJBサーバからオブジェクトを取得できる(負荷分散機能) -ハートビートによるノードのフェールオーバ -ファーミング機能による、分散環境への自動デプロイ ですね。 HA JNDIてのは、通常のJNDIではjndi.propertiesなどで接続先を指定してオブジェクトをlookupするところを、ブロードキャストして誰かが答えることによって、接続先を意識しないでオブジェクトをlookupすることができます(負荷分散)。さらに各EJBコンテナはハートビートによる生存確認も行っていて、あるコンテナが死んだときは別のコンテナが処理を続行します(フェールオーバ)。各EJBコンテナは常時メモリのレプリケーションを行って情報を共有し、実行中のコンテナが死んでも他のコンテナが処理を実行できるような仕組みになっています((当然ラウンドロビンするより同じコンテナが処理した方が速いので、デフォルトでは同じコンテナが処理するようになっている模様。WebSphereではSession Affinityとか言う機能でしたね))。 #ref(EA2.png) ファーミングというのは、あるサーバにearをデプロイすると、他のサーバにも勝手にコピーされてデプロイされる、という感動的な機能です。ファーミングをONにするとデフォルトでは、 ${install_root}/server/all/farm に置いたファイルが勝手にコピー&デプロイされます。 ***準備 [#j9aafa2f] 準備といってもほとんど設定の必要はなく、起動時に run.sh -c all とALLオプションで起動するだけです。これだけで、同じセグメント内のJBossプロセスの自動認識やSessionBeanのレプリケーション、JNDIのレプリケーションなどが自動的に行われるみたいです。あとファーミング機能もONになります。 ***流れ [#kabf834a] 一連の流れとしては -各サーバで run.sh -c all で起動 -Session Beanのクラスコメントで、クラスタ化するというXDocletタグを追加 -ファーミング機能を使ってEarをデプロイ となります。 **WEBコンテナのクラスタリング / セッションレプリケーション [#je7637fb] **EJBコンテナのクラスタリング / レプリケーション [#h98c0d06] ***Stateless Session Beanの場合 [#wd150624] さて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しか参照しないみたいですね。どっかに設定があるはずなんだけど。。。。 ***Stateful Session Beanの場合 [#d300c023] ---- この記事は #vote(おもしろかった[9],そうでもない[1]) #vote(おもしろかった[9],そうでもない[2]) #comment #topicpath SIZE(10){現在のアクセス:&counter;}