第3章 Registry 設定例

jUDDI Registry の様々な設定について、本章を参照してください。

注記

JBoss Enterprise SOA Platform には、jUDDI Registry を自動設定するツールが含まれています。このツールは、${SOA_ROOT}/tools/schema/ サブディレクトリに入っています。使用方法については、管理ガイドの「データベースの切り替え」の章にあります。

3.1. jUDDI Registry の埋め込み

サーバーコンポーネントが 1 つの jUDDI Registry を共有するようにしたい場合は、jUDDI Registry を埋め込んでください。この手法は、JBoss Enterprise SOA Platform 自体の複数のインスタンスが同じレジストリを共有できるようになります。このコンセプトについて例示しています。
埋め込み jUDDI

図3.1 埋め込み jUDDI

手順3.1 jUDDI Registry の埋め込み

  • jUDDI Registry を埋め込むには、以下のプロパティを設定します。
    <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.registry.local.InquiryService#inquire"/>
    
        	<property name="org.jboss.soa.esb.registry.lifeCycleManagerURI" 
        	value="org.apache.juddi.registry.local.PublishService#publish"/>
    
        	<property name="org.jboss.soa.esb.registry.securityManagerURI" 
        	value="org.apache.juddi.registry.local.SecurityService#secure"/>
    
        	<property name="org.jboss.soa.esb.registry.user" value="jbossesb"/>
        	<property name="org.jboss.soa.esb.registry.password" value="password"/>
        	
        	<property name="org.jboss.soa.esb.scout.proxy.transportClass" 				                                    
        	value="org.apache.ws.scout.transport.LocalTransport"/>
    
    </properties>
    

3.2. Remote Method Invocation を使用するための jUDDI Registry の設定

2 つ目の設定方法では、Remote Method Invocation を使います。以下でこのコンセプトについて説明します。
Remote Method Invocation

図3.2 Remote Method Invocation

手順3.2 jbossesb.sar ファイル経由で Remote Method Invocation を使用するための jUDDI Registry の設定

  1. Remote Method Invocatoin サービスを呼び出す jUDDI Registry のバージョン 1 つをデプロイするだけです (JBoss Enterprise Service Bus は、デフォルトで Remote Invocation Service をデプロイします。ESB は jbossesb.sar アーカイブ内で Registry を起動して、Remote Method Invocation サービスを自動登録するアーカイブと同じです)。
    設定プロパティを以下に示しています。
    <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="jnp://localhost:1099/InquiryService?org.apache.juddi.registry.rmi.Inquiry#inquire"/>
    
      <property name="org.jboss.soa.esb.registry.lifeCycleManagerURI"
        value="jnp://localhost:1099/PublishService?org.apache.juddi.registry.rmi.Publish#publish"/>      
      <property name="org.jboss.soa.esb.registry.securityManagerURI"
        value="jnp://localhost:1099/PublishService?org.apache.juddi.registry.rmi.Publish#publish"/>
      
      <property name="org.jboss.soa.esb.registry.user" value="jbossesb"/>
      <property name="org.jboss.soa.esb.registry.password" value="password"/>
          
      <property name="org.jboss.soa.esb.scout.proxy.transportClass"
        value="org.apache.ws.scout.transport.RMITransport"/>
    </properties>
    
    juddi.war アーカイブは、Remote Method Invocation サービスを呼び出すために設定されます。 web.xml ファイルに以下のような設定をします。
    <!--  uncomment if you want to enable making calls in juddi with rmi  -->
      <servlet>
      	<servlet-name>RegisterServicesWithJNDI</servlet-name>
      	<servlet-class>org.apache.juddi.registry.rmi.RegistrationService</servlet-class>
      	<load-on-startup>1</load-on-startup>
      </servlet>
    
  2. juddi.properties ファイルを編集して、以下の JNDI 設定を含めます。
    # JNDI settings (used by RMITransport)
    java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
    java.naming.provider.url=jnp://localhost:1099
    java.naming.factory.url.pkgs=org.jboss.naming
    

    重要

    RMI クライアントのクラスパスに scout-client.jar を含めるのを忘れないでください。

3.3. RMI サービスの独自の JNDI 登録を使用した Remote Method Invocation

なんらかの理由で、juddi.war アーカイブをデプロイしたくない場合、jUDDI Registry と実行しているのと同じ Java 仮想マシンで、Enterprise Service Bus コンポーネントの 1 つを設定します。このコンセプトについて以下に例示しています。
独自の JNDI 登録を用いた RMI

図3.3 独自の JNDI 登録を用いた RMI

手順3.3 独自の JNDI 登録を用いた RMI の設定

  1. 1 つ目のアプリケーションでは、以下のローカルの設定を行います。
    <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.registry.local.InquiryService#inquire"/>
    
        	<property name="org.jboss.soa.esb.registry.lifeCycleManagerURI"
    value="org.apache.juddi.registry.local.PublishService#publish"/>
    
        	<property name="org.jboss.soa.esb.registry.securityManagerURI"
    value="org.apache.juddi.registry.local.SecurityService#secure"/>
    
        	<property name="org.jboss.soa.esb.registry.user" value="jbossesb"/>
        	<property name="org.jboss.soa.esb.registry.password" value="password"/>
        	
        	<property name="org.jboss.soa.esb.scout.proxy.transportClass" 
    value="org.apache.ws.scout.transport.LocalTransport"/>
    </properties>
    
  2. 2 つ目のアプリケーションでは、以下のリモートメソッド呼び出しの設定を行います。
    <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="jnp://localhost:1099/InquiryService?org.apache.juddi.registry.rmi.Inquiry#inquire"/>
    
        	<property name="org.jboss.soa.esb.registry.lifeCycleManagerURI"
    value="jnp://localhost:1099/PublishService?org.apache.juddi.registry.rmi.Publish#publish"/>
    	
        	<property name="org.jboss.soa.esb.registry.user" value="jbossesb"/>
        	<property name="org.jboss.soa.esb.registry.password" value="password"/>
        	
        	<property name="org.jboss.soa.esb.scout.proxy.transportClass"
    value="org.apache.ws.scout.transport.RMITransport"/>
    </properties>
    
  3. queryManagerURIlifeCycleManagerURI クラスのホスト名を jUDDI Registry を実行中のホスト (アプリケーションのレジストリも実行しているホスト) へ参照させます。明らかに、アプリケーションレジストリは、ネーミングサービスへのアクセスが必要です。
  4. 以下の設定を使用してアプリケーションを登録します。
    //Getting the JNDI setting from the config
    Properties env = new Properties();
    env.setProperty(RegistryEngine.PROPNAME_JAVA_NAMING_FACTORY_INITIAL,factoryInitial);
    env.setProperty(RegistryEngine.PROPNAME_JAVA_NAMING_PROVIDER_URL, providerURL);
    env.setProperty(RegistryEngine.PROPNAME_JAVA_NAMING_FACTORY_URL_PKGS,
      factoryURLPkgs); 
    
    InitialContext context = new InitialContext(env);
    Inquiry inquiry = new InquiryService();
    log.info("Setting " + INQUIRY_SERVICE + ", " + inquiry.getClass().getName());
    mInquery = inquiry;
    context.bind(INQUIRY_SERVICE, inquiry);
    Publish publish = new PublishService();
    log.info("Setting " + PUBLISH_SERVICE + ", " + publish.getClass().getName());
    mPublish = publish;
    context.bind(PUBLISH_SERVICE, publish);
    

重要

RMI クライアントのクラスパスに scout-client.jar ファイルを含めるのを忘れないでください。

3.4. SOAP

また、jUDDI Registry とのやり取りに SOAP (Apache Scout 経由) を使うという方法もあります。
SOAP ベースの通信

図3.4 SOAP ベースの通信

手順3.4 SOAP を使用するための Apache Scount 設定

  • juddi.war アーカイブをデプロイして、データソースを設定します。

    重要

    web.xml ファイルの RegisterServicesWithJNDI サーブレットをコメントアウトして、RMI サービスもシャットダウンするとよいでしょう。
    サンプルプロパティを以下に示します。
    <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="http://localhost:8080/juddi/inquiry"/>
    
       	<property name="org.jboss.soa.esb.registry.lifeCycleManagerURI" 				
       	value="http://localhost:8080/juddi/publish"/>	
    
       	<property name="org.jboss.soa.esb.registry.user" value="jbossesb"/>
       	<property name="org.jboss.soa.esb.registry.password" value="password"/>
       	
       	<property name="org.jboss.soa.esb.scout.proxy.transportClass" 				
       	value="org.apache.ws.scout.transport.AxisTransport"/>
    </properties>