8.5. その他のネーミング MBean

JBoss 内の JBossNS サーバーに組込み設定されているNamingService MBean 以外に、JBoss に同梱されているネーミング関連のMBean サービスがいくつか存在します。JndiBindingServiceMgrNamingAliasExternalContextJNDIViewなどとなっています。

8.5.1. JNDI バインディングマネージャー

JNDI バインディングマネージャーサービスにより、アプリケーションコードで利用できるよう JNDI にオブジェクトを素早くバインドできるようになります。バインディングサービスの MBean クラスはorg.jboss.naming.JNDIBindingServiceMgrとなっており、BindingsConfig属性を1つ含んでいます。この属性は、jndi-binding-service_1_0.xsd スキーマをに基づいた XMLドキュメントを受付けます。BindingsConfig 属性のコンテンツは JbossXB フレームワークを使いアンマーシャルされます。以下は MBean の定義で、JNDI バインディングマネージャーサービスの最も基本的なフォーム利用について示しています。
<mbean code="org.jboss.naming.JNDIBindingServiceMgr" 
       name="jboss.tests:name=example1">
    <attribute name="BindingsConfig" serialDataType="jbxb">
        <jndi:bindings xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" 
                       xmlns:jndi="urn:jboss:jndi-binding-service:1.0"
                       xs:schemaLocation="urn:jboss:jndi-binding-service  \
         resource:jndi-binding-service_1_0.xsd"> 
            <jndi:binding name="bindexample/message">
                <jndi:value trim="true">
                    Hello, JNDI!
                </jndi:value>
            </jndi:binding>
        </jndi:bindings>
    </attribute>
</mbean>
これは、JNDI名 bindexample/message でテキスト文字列 "Hello, JNDI!" をバインドします。アプリケーションは、他のJNDI 値の場合と同様にこの値を検索します。trim 属性は、前後のホワイトスペースを無視するよう指定します。この属性は単に説明のためだけに利用しているため、デフォルト値は True となっています。
InitialContext ctx  = new InitialContext();
String         text = (String) ctx.lookup("bindexample/message");
文字列の値自体はあまり興味深いものではありません。JavaBeans プロパティエディターを利用できる場合、type 属性を使って希望のクラス名を指定することができます。
<jndi:binding name="urls/jboss-home">
    <jndi:value type="java.net.URL">http://www.jboss.org</jndi:value>
</jndi:binding>
editor 属性を使って、使用するプロパティエディターを指定することができます。
<jndi:binding name="hosts/localhost">
    <jndi:value editor="org.jboss.util.propertyeditor.InetAddressEditor"> 
        127.0.0.1 
    </jndi:value>
</jndi:binding>
より複雑な構造については、BossXB対応のスキーマを使う場合もあります。以下の例では、java.util.Properties オブジェクトのマッピング方法を説明しています。
<jndi:binding name="maps/testProps">
    <java:properties xmlns:java="urn:jboss:java-properties" 
                     xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
                     xs:schemaLocation="urn:jboss:java-properties \
       resource:java-properties_1_0.xsd">
        <java:property>
            <java:key>key1</java:key>
            <java:value>value1</java:value>
        </java:property>
        <java:property>
            <java:key>key2</java:key>
            <java:value>value2</java:value>
        </java:property>
    </java:properties>
</jndi:binding>