21.3. JBoss の設定
$JBOSS_HOME/server/all/deploy/cluster ディレクトリの hajndi-jboss-beans.xmlファイルには、HA-JNDI サービスを有効にする次の Bean が含まれています。
<bean name="HAJNDI" class="org.jboss.ha.jndi.HANamingService">
<annotation>@org.jboss.aop.microcontainer.aspects.jmx.JMX
(name="jboss:service=HAJNDI",
exposedInterface=org.jboss.ha.jndi.HANamingServiceMBean.class)</annotation>
<!-- The partition used for group RPCs to find locally bound objects on other nodes -->
<property name="HAPartition"><inject bean="HAPartition"/></property>
<!-- Handler for the replicated tree -->
<property name="distributedTreeManager">
<bean class="org.jboss.ha.jndi.impl.jbc.JBossCacheDistributedTreeManager">
<property name="cacheHandler"><inject bean="HAPartitionCacheHandler"/></property>
</bean>
</property>
<property name="localNamingInstance">
<inject bean="jboss:service=NamingBeanImpl" property="namingInstance"/>
</property>
<!-- The thread pool used to control the bootstrap and auto discovery lookups -->
<property name="lookupPool"><inject bean="jboss.system:service=ThreadPool"/></property>
<!-- Bind address of bootstrap endpoint -->
<property name="bindAddress">${jboss.bind.address}</property>
<!-- Port on which the HA-JNDI stub is made available -->
<property name="port">
<!-- Get the port from the ServiceBindingManager -->
<value-factory bean="ServiceBindingManager" method="getIntBinding">
<parameter>jboss:service=HAJNDI</parameter>
<parameter>Port</parameter>
</value-factory>
</property>
<!-- Bind address of the HA-JNDI RMI endpoint -->
<property name="rmiBindAddress">${jboss.bind.address}</property>
<!-- RmiPort to be used by the HA-JNDI service once bound. 0 = ephemeral. -->
<property name="rmiPort">
<!-- Get the port from the ServiceBindingManager -->
<value-factory bean="ServiceBindingManager" method="getIntBinding">
<parameter>jboss:service=HAJNDI</parameter>
<parameter>RmiPort</parameter>
</value-factory>
</property>
<!-- Accept backlog of the bootstrap socket -->
<property name="backlog">50</property>
<!-- A flag to disable the auto discovery via multicast -->
<property name="discoveryDisabled">false</property>
<!-- Set the auto-discovery bootstrap multicast bind address. If not
specified and a BindAddress is specified, the BindAddress will be used. -->
<property name="autoDiscoveryBindAddress">${jboss.bind.address}</property>
<!-- Multicast Address and group port used for auto-discovery -->
<property name="autoDiscoveryAddress">${jboss.partition.udpGroup:230.0.0.4}</property>
<property name="autoDiscoveryGroup">1102</property>
<!-- The TTL (time-to-live) for autodiscovery IP multicast packets -->
<property name="autoDiscoveryTTL">16</property>
<!-- The load balancing policy for HA-JNDI -->
<property name="loadBalancePolicy">org.jboss.ha.framework.interfaces.RoundRobin</property>
<!-- Client socket factory to be used for client-server
RMI invocations during JNDI queries
<property name="clientSocketFactory">custom</property>
-->
<!-- Server socket factory to be used for client-server
RMI invocations during JNDI queries
<property name="serverSocketFactory">custom</property>
-->
</bean>
この Bean は、異なるプロパティに挿入された複数の他のサービスを持っていることが分かります。
- HAPartition は、 HA-JNDI のクラスター化プロキシの管理や、 別のノードにてローカルでバインドされたオブジェクトを検索するグループ RPC の作成に使用されるコアのクラスタリングサービスを許可します。 詳細は、 「HAPartition サービス」 を参照してください。
- distributedTreeManager は、 レプリケートされたツリーのハンドラーを許可します。 標準的なハンドラは、 JBoss Cache を使用してレプリケートされたツリーを管理します。 挿入された
HAPartitionCacheHandlerBean を使用して JBoss Cache インスタンスが読み出しされます。 詳細は 「HAPartition サービス」 を参照してください。 - localNamingInstance はローカル JNDI サービスへの参照を許可します。
- LookupPool は、 ブートストラップや自動ディスカバリのルックアップを処理するスレッドを提供するために使用するスレッドプールを許可します。
上記の依存関係が注入されたサービスの他に、 HA-JNDI Bean に使用できる設定属性は次の通りです。
- bindAddress は、 JNP クライアントからネーミングプロキシダウンロードリクエストをリッスンするために HA-JNDI サーバーがバインドするアドレスを指定します。 デフォルト値は
jboss.bind.addressシステムプロパティの値になります。jboss.bind.addressシステムプロパティが設定されていない場合は、localhostがデフォルト値になります。 JBoss 起動時に-bコマンドラインスイッチが使用されるとjboss.bind.addressシステムプロパティが設定されます。 - port は、 JNP クライアントからネーミングプロキシダウンロード要求をリッスンするために HA-JNDI サーバーがバインドするポートを指定します。 値は
conf/bootstrap/bindings.xmlに設定されている ServiceBindingManager Bean より取得されます。 デフォルト値は1100です。 - backlog は、 サービスが JNP クライアントからのネーミングプロキシダウンロード要求をリッスンする TCP サーバーソケットに対する受信接続指示の最大キュー長を指定します。 デフォルト値は
50です。 - rmiBindAddress は、 ネーミングプロキシからの RMI 要求 (JNDI ルックアップに対してなど) をリッスンするために HA-JNDI サーバーがバインドするアドレスを指定します。 デフォルト値は
jboss.bind.addressシステムプロパティの値になります。jboss.bind.addressシステムプロパティが設定されていない場合は、localhostがデフォルト値になります。 JBoss 起動時に-bコマンドラインスイッチが使用されるとjboss.bind.addressシステムプロパティが設定されます。 - rmiPort は、 ダウンロードされたスタブと通信するためにサーバーがバインドするポートを指定します。
conf/bootstrap/bindings.xmlに設定された ServiceBindingManager Bean より値が取得されます。 デフォルト値は1101です。 設定された値がない場合、 オペレーティングシステムが自動的にポートを割り当てます。 - discoveryDisabled は、 自動ディスカバリマルチキャストリスナの設定を無効にするブール変数フラグです。 デフォルトは
falseです。 - autoDiscoveryAddress JNDI 自動ディスカバリのためにリッスンするマルチキャストアドレスを指定します。デフォルト値は、
jboss.partition.udpGroupシステムプロパティの値になります。このシステムプロパティが設定されていない場合は、 230.0.0.4 がデフォルト値となります。 JBoss 起動時に-uコマンドラインスイッチが使用されるとjboss.partition.udpGroupシステムプロパティが設定されます。 - autoDiscoveryGroup は、 JNDI 自動ディスカバリパケットのためにリッスンするポートを指定します。 デフォルト値は
1102です。 - AutoDiscoveryBindAddress は HA-JNDI が 自動ディスカバリ要求パケットをリッスンするインターフェースを設定します。 この属性が指定されておらず
bindAddressが指定されている場合、bindAddressが使用されます。 - autoDiscoveryTTL は自動ディスクカバリ IP マルチキャストパケットの TTL (time-to-live) を指定します。 この値は、ネットワーク装置がマルチキャストパケットをドロップする前にマルチキャストパケットが伝搬できるネットワークホップ数を表します。 名前とは異なり、時間の単位を表すものではありません。
- loadBalancePolicy は、 クライアントプロキシに含まれるべきである LoadBalancePolicyimplementation のクラス名を指定します。 詳細は、 紹介とクイックスタート章を参照してください。
- clientSocketFactory は、 クライアントソケットの作成に使用される
java.rmi.server.RMIClientSocketFactoryの完全修飾クラス名を指定する任意の属性です。 デフォルトはnullです。 - serverSocketFactory は、 サーバーソケットの作成に使用される
java.rmi.server.RMIServerSocketFactoryの完全修飾クラス名を指定する任意の属性です。 デフォルトはnullです。
21.3.1. 2 つ目の HA-JNDI サービスの追加
異なる HAPartitions を使用する複数の HA-JNDI サービスを起動することも可能です。 例えば、1 つのノードが多数の論理クラスターの一部である場合などに使用することができます。 この場合、 各サービスにも別々のポートや IP アドレスを設定するようにしてください。 例えば、 設定するサンプルのクラスターに HA-JNDI を接続してバインドするポートを変更したい場合、Bean 記述子は次のようになります (標準的なデプロイメントと変わりないプロパティは省略します)。
<-- Cache Handler for secondary HAPartition -->
<bean name="SecondaryHAPartitionCacheHandler"
class="org.jboss.ha.framework.server.HAPartitionCacheHandlerImpl">
<property name="cacheManager"><inject bean="CacheManager"/></property>
<property name="cacheConfigName">secondary-ha-partition</property>
</bean>
<-- The secondary HAPartition -->
<bean name="SecondaryHAPartition" class="org.jboss.ha.framework.server.ClusterPartition">
<depends>jboss:service=Naming</depends>
<annotation>@org.jboss.aop.microcontainer.aspects.jmx.JMX
(name="jboss:service=HAPartition,partition=SecondaryPartition",
exposedInterface=org.jboss.ha.framework.server.ClusterPartitionMBean.class, registerDirectly=true)</annotation>
<property name="cacheHandler"><inject bean="SecondaryHAPartitionCacheHandler"/></property>
<property name="partitionName">SecondaryPartition</property>
....
</bean>
<bean name="MySpecialPartitionHAJNDI" class="org.jboss.ha.jndi.HANamingService">
<annotation>@org.jboss.aop.microcontainer.aspects.jmx.JMX
(name="jboss:service=HAJNDI,partitionName=SecondaryPartition",
exposedInterface=org.jboss.ha.jndi.HANamingServiceMBean.class)</annotation>
<property name="HAPartition"><inject bean="SecondaryHAPartition"/></property>
<property name="distributedTreeManager">
<bean class="org.jboss.ha.jndi.impl.jbc.JBossCacheDistributedTreeManager">
<property name="cacheHandler"><inject bean="SecondaryHAPartitionPartitionCacheHandler"/></property>
</bean>
</property>
<property name="port">56789</property>
<property name="rmiPort">56790</property>
<property name="autoDiscoveryGroup">56791</property>
.....
</bean>