27.6.2.2.3. マルチキャストポートの変更

オペレーティングシステムによっては (Mac OS X など) 異なる -g-u の値を使うだけではクラスターを分離できないことがあります。 この場合、 異なるクラスターで実行しているチャネルも異なるマルチキャストポートを使用する必要があります。 マルチキャストポートの設定は -g-u ほど簡単ではありません。 デフォルトでは、production 設定で実行されている JBoss AS インスタンスは、JGroups UDP トランスポートプロトコルの異なるインスタンスを最大で 2 つ使用します。 そのため、 2 つのマルチキャストソケットを開きます。 コマンドラインでシステムプロパティを使用するとソケットが使用するポートを制御できます。例は次の通りです。
/run.sh -u 230.1.2.3 -g QAPartition -b 192.168.1.100 -c production \\
        -Djboss.jgroups.udp.mcast_port=12345 -Djboss.messaging.datachanneludpport=23456
jboss.messaging.datachanneludpport プロパティは、 JBoss Messaging のDATA チャネルにある MPING プロトコルによって使用されるマルチキャストポートを制御します。 jboss.jgroups.udp.mcast_port プロパティは、 他すべてのクラスター化サービスが共有する UDP トランスポートプロトコルによって使用されるマルチキャストポートを制御します。
$JBOSS_HOME/server/production/deploy/cluster/jgroups-channelfactory.sar/META-INF/jgroups-channelfactory-stacks.xml に含まれる JGroups プロトコルスタック設定には、標準的な JBoss AS ディストリビューションが実際に使用しない他のサンプルプロトコルスタック設定がいくつか含まれています。このような設定もシステムプロパティを使用してマルチキャストポートを設定します。そのため、このようなプロトコルスタック設定の 1 つを使用するよう AS サービスを設定した場合、適切なシステムプロパティを使用してコマンドラインからポートを制御するようにしてください。

注記

アドレスを変更するだけで十分なはずですが、 マルチキャストソケットの処理は、 JVM がオペレーティングシステムの動作の違いをアプリケーションに隠すことのできない場合の 1 つとなります。 java.net.MulticastSocket クラスは異なるオーバーロードしたコンストラクタを提供します。 オペレーティングシステムによっては、 1 つのコンストラクタバリアントを使用すると特定のマルチキャストポートへ提供されたパケットは、 リッスンしているマルチキャストアドレスに関係なくポート上のすべてのリスナに配信されます。 これを、「プロミスキャストラフィック」問題と呼びます 。プロミスキャストラフィック問題が発生するオペレーティングシステムの多くでは (Linux、 Solaris、 HP-UX)、 この問題を回避できる異なるコンストラクタバリアントを JGroups が使用することができます。 しかし、 一部のオペレーティングシステム (Mac OS X) では、 別のコンストラクターバリアントを使用するとマルチキャストが正しく動作しません。 そのため、 このようなオペレーティングシステムでは、 異なるマルチキャストポートを異なるクラスターに設定することが推奨されます。