第2章 レジストリの設定

レジストリの設定方法については、本章を参照してください。

注記

バージョン 5.1 以降は、 JBoss Enterprise SOA PlatformJBoss Enterprise Data Services (EDS) ソフトウェアが含まれています。EDS は JDBC ドライバーまたは web サービスとして公開されるため、ESB サービスは以下のいずれかの形式で消費することができます。
EDS Virtual Database (VDB) 向けの JDBC 接続の文字列は、標準の JDBC 接続の文字列と少し違います。VDB 向けの JBDC 接続の正しい形式は jdbc:teiid:vdb_name@mm://localhost:31000 です。
詳細は、EDS Developer Guide を参照してください。
SOA Platform に含まれる jUDDI (http://juddi.apache.org) Registry は様々な設定が可能です。JBoss Enterprise Service Bus (ESB) は、Registry とのやり取りをすべてレジストリインターフェースを介して指示を出し、デフォルトバージョンが Apache Scout を使います。
Apache Scout
Apache Scout は JAXR 実装です。
レジストリインターフェース
これは、ESB が jUDDI Registry と通信する手段です。

注記

JBoss Enterprise SOA Platform は、他の UDDI レジストリ (SOA Software SMSHP Systinet) もサポートしています。

手順2.1 レジストリ設定の定義

  • $SOA_ROOT/server/$PROFILE/deployers/esb.deployer/jbossesb-properties.xml ファイルのレジストリのセクションは、以下のプロパティを定義しています。
    <properties name="registry">
      <property name="org.jboss.soa.esb.registry.implementationClass"
        value="org.jboss.internal.soa.esb.services.registry.JAXRRegistryImpl"/>
      
      <property name="org.jboss.soa.esb.registry.factoryClass"
        value="org.apache.ws.scout.registry.ConnectionFactoryImpl"/>
      
      <property name="org.jboss.soa.esb.registry.queryManagerURI"
        value="org.apache.juddi.v3.client.transport.wrapper.UDDIInquiryService#inquire"/>
      
      <property name="org.jboss.soa.esb.registry.lifeCycleManagerURI"
        value="org.apache.juddi.v3.client.transport.wrapper.UDDIPublicationService#publish"/>
      <property name="org.jboss.soa.esb.registry.securityManagerURI"
        value="org.apache.juddi.v3.client.transport.wrapper.UDDISecurityService#secure"/>
      
      <property name="org.jboss.soa.esb.registry.user" value="root"/>
      <property name="org.jboss.soa.esb.registry.password"	value="root"/>
      
      <property name="org.jboss.soa.esb.scout.proxy.uddiVersion" value="3.0"/>
      <property name="org.jboss.soa.esb.scout.proxy.uddiNameSpace" value="urn:uddi-org:api_v3"/>
      
      <property name="org.jboss.soa.esb.scout.proxy.transportClass"
        value="org.apache.ws.scout.transport.LocalTransport"/>
      <!-- specify the interceptors, in order -->
      <property name="org.jboss.soa.esb.registry.interceptors"
      value="org.jboss.internal.soa.esb.services.registry.InVMRegistryInterceptor, org.jboss.internal.soa.esb.services.registry.CachingRegistryInterceptor"/>
      <!-- The following properties modify the cache interceptor behaviour -->
      <property name="org.jboss.soa.esb.registry.cache.maxSize" value="100"/>
      <property name="org.jboss.soa.esb.registry.cache.validityPeriod" value="600000"/>
      
      <!-- Organization Category to be used by this deployment. -->
      <property name="org.jboss.soa.esb.registry.orgCategory"         
      value="org.jboss.soa.esb.:category"/>
    </properties>
    
以下に設定可能なプロパティを挙げています。

表2.1 Registry プロパティ

プロパティ 説明
org.jboss.soa.esb.registry.implementationClass
JBoss ESB Registry インターフェースを実装するクラスです。JAXRRegistryImpl の実装 1 つが含まれています。JAXRRegistry インターフェースを使用します。
org.jboss.soa.esb.registry.factoryClass
JAXR ConnectionFactory 実装のクラス名です。
org.jboss.soa.esb.registry.queryManagerURI
サービスのクエリに JAXR で使用する URI です。
org.jboss.soa.esb.registry.lifeCycleManagerURI
JAXR が編集に使用する URI です。
org.jboss.soa.esb.registry.user
編集に使用するユーザー名です。
org.jboss.soa.esb.registry.password
指定のユーザーのパスワードです。
org.jboss.soa.esb.scout.proxy.uddiVersion
クエリの UDDI バージョンです。
org.jboss.soa.esb.scout.proxy.uddiNameSpace
UDDI 名前空間です。
org.jboss.soa.esb.scout.proxy.transportClass
Apache Scout が UDDI Registry にアイテムを送信する際に利用するクラスです。
org.jboss.soa.esb.registry.interceptors
これは Registry に適用されるインターセプター一覧です。ESB には、インターセプターが 2 つあり、1 つは InVM 登録の処理に、もう 1 つは Registry にキャッシュを提供します。
デフォルトのインターセプターは、InVM インターセプター用にエントリ 1 つのみを含みます。
org.jboss.soa.esb.registry.cache.maxSize
これがキャッシュ内に含むことができる最大サーバーエントリ数です。この値を超えると、エントリが最も古い順番に削除されます。デフォルトは、100 です。
org.jboss.soa.esb.registry.cache.validityPeriod
キャッシュインターセプターに設定された有効期限です。この値はミリ秒で指定し、デフォルトは 600000 (10 分) となっています。キャッシュが失効しないようにするには、この値を 0 に設定してください。
org.jboss.soa.esb.registry.orgCategory
ESB の 組織カテゴリ名です。デフォルトは org.jboss.soa.esb.:category です。

2.1. Registry のコンポーネント

Registry の各部分についての詳細は本章を参照してください。
すべての Registry コンポーネントについての説明を以下に示しています。
Registry コンポーネントのアーキテクチャー

図2.1 Registry コンポーネントのアーキテクチャー

トップダウン図から、以下がわかります。
  1. JBoss Enterprise Service Bus は、registry interface 経由で Registry とのやり取りをすべて送ります。
  2. その後、このインターフェースの JAXR 実装を呼び出します。
  3. JAXR API は JAXR 実装を使用する必要があります (デフォルトは Apache Scout)。
  4. 次に Apache Scout は jUDDI Registry を呼び出します。

注記

ここで挙げたものはデフォルトのみです。別の設定オプションは、多数存在します。

注記

デフォルトでは、このクラスは JAXR アプリケーションプログラミングインターフェースを使用します。org.jboss.soa.esb.registry.implementationClass API は、XML ベースのレジストリやレポジトリであればどれにでも接続できるため、便利です。しかし、別の API を使用することも可能です。

手順2.2 他の API の使用

  • 新しい SystinetRegistryImplemtation クラスを記述して、このプロパティ内から参照します。

2.2. JAXR 実装の設定

手順2.3 JAXR 実装の設定

  1. 特定の JAXR 実装を選択します。
  2. プロパティを設定してクラスを構成します (JBoss Enterprise SOA PlatformApache Scout を使用して、デフォルトでこのプロパティは org.apache.ws.scout.registry.ConnectionFactoryImpl という Scout factory クラスに設定されています)。
  3. Registry の場所を提供することで、JAXR 実装を設定します。 org.jboss.soa.esb.registry.queryManagerURIorg.jboss.soa.esb.registry.lifeCycleManagerURIorg.jboss.soa.esb.registry.securityManagerURI を編集します。

2.3. jUDDI トランスポートの使用

Apache Scout を使用する際は、特別な任意パラメーター (org.jboss.soa.esb.scout.proxy.transportClass) を設定することができます。これは、Scout と jUDDI Registry の間の通信を容易にする transport クラスです。
Scout を使用して jUDDI v. 3 と通信する場合、transport クラスを LocalTransport のままにして、jUDDI registry のトランスポート (InVM、RMI、WS) を使用するように server/config/deploy/jbossesb.sar/META-INF/esb.juddi.client.xml ファイルを設定します。このファイルは、Registry のノードを定義します。
ノード
ノードは、jUDDI Registry の場所です。

手順2.4 トランスポートの選択

  1. ノード設定を使用してどのトランスポートを使用するか選択します。
    <node>
    	    <!-- required 'default' node -->
    	    <name>default</name> 
    	    <description>Main jUDDI node</description>
    	    <properties>
    	<property name="serverName" value="localhost" />
    		<property name="serverPort" value="8880" />
    	    </properties>
    	    <!-- JAX-WS Transport
         <proxyTransport>org.apache.juddi.v3.client.transport.JAXWSTransport</proxyTransport>
    	    <custodyTransferUrl>http://${serverName}:${serverPort}/juddiv3/services/custody-transfer?wsdl</custodyTransferUrl>
        <inquiryUrl>http://${serverName}:${serverPort}/juddiv3/services/inquiry?wsdl</inquiryUrl>
        <publishUrl>http://${serverName}:${serverPort}/juddiv3/services/publish?wsdl</publishUrl>
        <securityUrl>http://${serverName}:${serverPort}/juddiv3/services/security?wsdl</securityUrl>
        <subscriptionUrl>http://${serverName}:${serverPort}/juddiv3/services/subscription?wsdl</subscriptionUrl>
        <subscriptionListenerUrl>http://${serverName}:${serverPort}/juddiv3/services/subscription-listener?wsdl</subscriptionListenerUrl>
    	   <juddiApiUrl>http://${serverName}:${serverPort}/juddiv3/services/juddi-api?wsdl</juddiApiUrl>
    	    -->
    	   <!-- In VM Transport Settings 
        <proxyTransport>org.jboss.internal.soa.esb.registry.client.JuddiInVMTransport</proxyTransport>
        <custodyTransferUrl>org.apache.juddi.api.impl.UDDICustodyTransferImpl</custodyTransferUrl>
    	    <inquiryUrl>org.apache.juddi.api.impl.UDDIInquiryImpl</inquiryUrl>
    	    <publishUrl>org.apache.juddi.api.impl.UDDIPublicationImpl</publishUrl>
        <securityUrl>org.apache.juddi.api.impl.UDDISecurityImpl</securityUrl>
        <subscriptionUrl>org.apache.juddi.api.impl.UDDISubscriptionImpl</subscriptionUrl>
        <subscriptionListenerUrl>org.apache.juddi.api.impl.UDDISubscriptionListenerImpl</subscriptionListenerUrl>
    	   <juddiApiUrl>org.apache.juddi.api.impl.JUDDIApiImpl</juddiApiUrl>
     	-->
    	<!-- RMI Transport Settings -->
    <proxyTransport>org.apache.juddi.v3.client.transport.RMITransport</proxyTransport>
    	<custodyTransferUrl>/juddiv3/UDDICustodyTransferService</custodyTransferUrl>
    	<inquiryUrl>/juddiv3/UDDIInquiryService</inquiryUrl>
    	<publishUrl>/juddiv3/UDDIPublicationService</publishUrl>
    <securityUrl>/juddiv3/UDDISecurityService</securityUrl>
    <subscriptionUrl>/juddiv3/UDDISubscriptionService</subscriptionUrl>
    <subscriptionListenerUrl>/juddiv3/UDDISubscriptionListenerService</subscriptionListenerUrl>
    <juddiApiUrl>/juddiv3/JUDDIApiService</juddiApiUrl>
    <javaNamingFactoryInitial>org.jnp.interfaces.NamingContextFactory</javaNamingFactoryInitial>
    	<javaNamingFactoryUrlPkgs>org.jboss.naming</javaNamingFactoryUrlPkgs>
    	<javaNamingProviderUrl>jnp://localhost:1099</javaNamingProviderUrl>
    	</node>
    
  2. デフォルトでは Remote Method Invocation (RMI) の設定が有効になっています。トランスポートを切り替えるには、RMI の設定をコメントアウトして、使用したいものを有効にします。
transport を設定する場合、以下のアイテムを指定する必要があります。
  • proxyTransport
  • 対応の UDDI アプリケーションプログラミングインターフェースすべてに対する URL (inquirypublishsecuritysubscriptionsubscription-listenercustodytransfer)
  • jUDDI アプリケーションプログラミングインターフェースの URL
  • RMI トランスポート (JNDI 設定を含みます)

2.4. Apache Scout と jUDDI の使用

現在、org.jboss.soa.esb.scout.proxy.transportClass クラス実装が 4 つあり、SOAP、SAAJ、RMI、Embedded Java (Local) それぞれに対して 1 つずつ存在することになります。jUDDI Registry とやり取りを行う場合は、transportClassLocalTransport に設定したままで残して、Registry のトランスポート (それぞれ、InVM、RMI、WS)を使用するように uddi.xml ファイルを設定します
また、以下の 2 つの要件が満たされているか確認してください。
  1. jUDDI データベースにアクセスできなければなりません。アクセスできるかを確認するには、データベースにスキーマを作成して、jbossesb publisher を追加します (product/install/jUDDI-registry ディレクトリには、最も一般的なデータベース向けの database-create スクリプトが含まれています。)

    注記

    ユーザーにテーブル作成の権限が与えられている場合は、システムにより自動でデータベースを生成することができます。
    jUDDI Registry は、関連の Hibernate 方言が存在するデータベースを作成することができます。
  2. esb.juddi.xmlesb.juddi.client.xml は必須ファイルです。これらのファイルには、実際の jUDDI 設定が含まれています。

注記

ソフトウェアと別の UDDI レジストリの間でやり取りをさせたい場合は、Apache Scout の JAXR トランスポートを使用します。このクラスには 4 つの実装があり、それぞれ SOAP、SAAJ、RMI、Embedded Java ベースとなっています。
トランスポートを変更する場合、クエリとライフサイクルの Uniform Resource Indicator も変更するようにしてください。変更する方法を例示したサンプルコードを以下に提示しています。
SOAP
queryManagerURI	http://localhost:8080/juddi/inquiry
lifeCycleManagerURI	http://localhost:8080/juddi/publish
transportClass		org.apache.ws.scout.transport.AxisTransport

RMI
queryManagerURI 	jnp://localhost:1099/InquiryService?org.apache.juddi.registry.rmi.Inquiry#inquire
lifeCycleManagerURI 	jnp://localhost:1099/PublishService?org.apache.juddi.registry.rmi.Publish#publish
transportClass		org.apache.ws.scout.transport.RMITransport

Local
queryManagerURI	org.apache.juddi.registry.local.InquiryService#inquire
lifeCycleManagerURI	org.apache.juddi.registry.local.PublishService#publish
transportClass		org.apache.ws.scout.transport.LocalTransport

2.5. Registry インターセプター

Registry はリクエストをインターセプトできます。インターセプタースタックを使用して行います。このスタック内にある各インターセプターには、以下の機能があります。
  • リクエストにサービスを提供
  • リクエストに直接レスポンス
  • 下層にあるインターセプターまたはレジストリ実装から受け取ったレスポンスを拡大
Registry インターセプター

図2.2 Registry インターセプター

現在の実装では、インターセプターが 2 種、提供されています。

手順2.5 インターセプタースタックの設定

  • jbossesb-properties.xml ファイルを開き org.jboss.soa.esb.registry.interceptors プロパティを変更します。

表2.2 Registry プロパティ

プロパティ 説明
org.jboss.internal.soa.esb.services.registry.InVMRegistryInterceptor
InVM レジストリインターセプターは、InVM エンドポイント参照の処理を担当します。同じサーバーインスタンス内で実行するサービスにより登録されます。InVM EPR や関連サービスの情報は、インターセプター内にキャッシュされ、後続のインターセプターに伝搬されず、後続のインターセプターやレジストリクエリからの決定を最適化して呼び出し元に返されます。
org.jboss.internal.soa.esb.services.registry.CachingRegistryInterceptor
キャッシュレジストリのインターセプターは、エンドポイント参照のキャッシュと関連のサービスを保持して、LRU ベースまたは、情報が失効した後にキャッシュから情報をエビクトします。
インターセプターは、jbossesb-properties.xml 内でorg.jboss.soa.esb.registry.cache.maxSize と org.jboss.soa.esb.registry.cache.validityPeriod プロパティを使用して設定することができます。