12.3. マルチホーム化されたサーバー

Remoting は複数のインターフェースにバインドされるサーバーを作成することができます。 このファシリティの適応例として、 1 つのサーバーをインターネットに面するインターフェースと LAN に面する別のインターフェースにバインドすることができます。 例えば、 前述の POJO 例に POJO を追加して (1) 変更することができます。
   
   <bean name="homes1" class="java.lang.StringBuffer">
      <constructor>
         <parameter class="java.lang.String">
            <value-factory bean="ServiceBindingManager" method="getStringBinding">
               <parameter>JBMConnector:bindingHome1</parameter>
               <parameter>${host}:${port}</parameter>
            </value-factory>
         </parameter>
      </constructor>
   </bean>
   
   <bean name="homes2" class="java.lang.StringBuffer">
      <constructor factoryMethod="append">
         <factory bean="homes1"/>
         <parameter>
            <value-factory bean="ServiceBindingManager" method="getStringBinding">
               <parameter>JBMConnector:bindingHome2</parameter>
               <parameter>!${host}:${port}</parameter>
            </value-factory>
         </parameter>
      </constructor>
   </bean>
これにより、StringBuffer の値が 「external.acme.com:5555!internal.acme.com:4444」のようになります (JBMConnector:bindingHome1 and JBMConnector:bindingHome2 のServiceBindingManager 設定値による)。また、 「serverBindAddress」 パラメーターと 「serverBindPort」 パラメーターが次に置き換えられます (2)。
    <entry>
      <key>homes</key>
      <value><value-factory bean="homes2" method="toString"/></value>
    </entry>
これにより、StringBuffer が文字列「external.acme.com:5555!internal.acme.com:4444」 に変換され、 JBMConnector に挿入されます。結果、 InvokerLocator は次のようになります。
    bisocket://multihome/?homes=external.acme.com:5555!internal.acme.com:
    4444&marshaller=org.jboss.jms.wireformat.JMSWireFormat&
    unmarshaller=org.jboss.jms.wireformat.JMSWireFormat