Interstage Application Server SOAPサービス ユーザーズガイド
目次 索引 前ページ次ページ

第6章 CORBA/SOAPゲートウェイの実装> 6.3 CORBAアプリケーションと連携する場合の留意事項

6.3.3 Factoryインタフェースと連携するRPCクライアントアプリケーション

 Factoryインタフェーを使用したCORBAサーバアプリケーションは、サーバオブジェクト(Servantインタフェース)を作成するFactoryインタフェースと、Factoryインタフェースから生成されるServantインタフェースの2種類のインタフェースを持ちます。
 Factoryインタフェースと連携するRPCクライアントアプリケーションを作成する場合、以下の順序でCORBAサーバアプリケーションのオペレーションを呼び出す必要があります。

 

 以降の説明は、次のIDL定義から作成されたCORBAサーバアプリケーションと連携するRPC方式のクライアントアプリケーションを例にとり、説明します。

 module sample{
  interface demoservant {
   struct result {
    long add_result;
    long subtract_result;
   };
   result calculate( in long a, in long b );
   void remove();
  };
  interface demofactory {
   demoservant create ();
  };
 };

■ServantインタフェースのURI取得

 Factoryインタフェースに定義したServantインタフェース生成用のオペレーションを呼び出し、ServantインタフェースのURIを取得します。

 
 demofactoryインタフェースのcreate オペレーションを呼び出し、demoservantインタフェースのURIを取得します。取得したURIは、内部変数:nskeyに格納します。
 // import宣言
 import javax.xml.rpc.Call;
 import javax.xml.rpc.ParameterMode;
 import javax.xml.rpc.Service;
 import javax.xml.rpc.ServiceFactory;
 import javax.xml.namespace.QName;
 import javax.xml.rpc.encoding.XMLType;
      :
 String nskey = null;
 try {
      :
  // Serviceオブジェクトの作成
  Service service = ServiceFactory.newInstance().createService(new QName("",""));
  // Callオブジェクトの作成
  Call call = service.createCall();
  call.setTargetEndpointAddress("http://interstage/soap/servlet/WSContainer");
  call.setOperationName( new QName("sample-countRequest", "create" ));
  call.setReturnType(XMLType.XSD_STRING);
  Object[] param = new Object[0];
  String tmp1 = (String)call.invoke( param );
  // demoservantインタフェースのURI取得
  nskey = call.getOperationName().getNamespaceURI();
    :
 } catch( javax.xml.rpc.ServiceException e ) {
    :
 } catch( javax.xml.rpc.soap.SOAPFaultException e ) {
    :
 } catch( javax.xml.rpc.JAXRPCException e ) {
    :
 } catch( java.rmi.RemoteException e ) {
    :
 } catch( java.lang.Exception e ) {
    :
 }
    :

■Servantインタフェースのリモートメソッド呼び出し

 FactoryインタフェースのServantインタフェース生成用のオペレーションを呼び出して得られたServantインタフェースのURIを使用して、Servantインタフェースのリモートメソッドを呼び出します。Servantインタフェースを解放するまで、何度でも呼び出しができます。

 
 内部変数:nskeyに設定したdemoservantインタフェースのURIを使用して、demoservantインタフェースのcalculateメソッドを呼び出します。
 // import宣言
 import javax.xml.rpc.Call;
 import javax.xml.rpc.ParameterMode;
 import javax.xml.rpc.Service;
 import javax.xml.rpc.ServiceFactory;
 import javax.xml.namespace.QName;
 import javax.xml.rpc.encoding.XMLType;
    :
 try {
    :
 // Callオブジェクトの作成
  Call call = service.createCall();
  call.setTargetEndpointAddress("http://interstage/soap/servlet/WSContainer");
  call.setOperationName( new QName(nskey, "calculate" ));
 // パラメタ情報の登録
  call.addParameter( "a", XMLType.XSD_INT, ParameterMode.IN );
  call.addParameter( "b", XMLType.XSD_INT, ParameterMode.IN );
  call.setReturnType(
     new QName("urn:Fujitsu-Soap-Service-Data", "sample-demoservant-result") );
 // パラメタの作成
  Object[] param = new Object[]{new java.lang.Integer(1), new java.lang.Integer(2)};
 // webサービスの呼び出し
  sample.demoservantPackage.resultSOAPGWType result
      = (sample.demoservantPackage.resultSOAPGWType)call.invoke( param );
 } catch( javax.xml.rpc.ServiceException e ) {
    :
 } catch( javax.xml.rpc.soap.SOAPFaultException e ) {
    :
 } catch( javax.xml.rpc.JAXRPCException e ) {
    :
 } catch( java.rmi.RemoteException e ) {
    :
 } catch( java.lang.Exception e ) {
    :
 }
    :

■Servantインタフェースの解放

 Servantインタフェースに対するすべてのリモートメソッド呼び出しが終了したら、生成したServantインタフェースを解放します。Servantインタフェースの解放は、Servantインタフェースに定義してある解放用のメソッドを呼び出します。

 
 内部変数:nskeyに設定したdemoservantインタフェースのURIを使用して、demoservantインタフェースの解放メソッドであるremoveメソッドを呼び出します。
 // import宣言
 import javax.xml.rpc.Call;
 import javax.xml.rpc.Service;
 import javax.xml.rpc.ServiceFactory;
 import javax.xml.namespace.QName;
    :
 try {
    :
 // Callオブジェクトの作成
  Call call = service.createCall();
  call.setTargetEndpointAddress("http://interstage/soap/servlet/WSContainer");
  call.setOperationName( new QName(nskey, "remove"));
 // パラメタの作成
  Object[] param = new Object[0];
 // webサービスの呼び出し
  call.invoke( param );
 } catch( javax.xml.rpc.ServiceException e ) {
    :
 } catch( javax.xml.rpc.soap.SOAPFaultException e ) {
    :
 } catch( javax.xml.rpc.JAXRPCException e ) {
    :
 } catch( java.rmi.RemoteException e ) {
    :
 } catch( java.lang.Exception e ) {
    :
 }
    :

■Factoryインタフェース連携で使用可能なIDL定義

 RPC方式のクライアントアプリケーションと連携するFactoryインタフェースを使用したCORBAアプリケーションは、必ず以下のIDL定義の注意事項を遵守してください。


目次 索引 前ページ次ページ

Copyright 2003 FUJITSU LIMITED