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

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

6.4.3 STATEFUL SessionBeanと連携するRPC方式のクライアントアプリケーション

 EJBアプリケーションは、EJB objectの生成を行うHomeインタフェーとユーザのビジネスメソッドを呼び出すRemoteインタフェーの2種類のインタフェースを持ちます。

 STATEFUL SessionBeanと連携するRPC方式のクライアントアプリケーションを作成する場合、以下の順序でSTATEFUL SessionBeanのEJBサーバアプリケーションのメソッドを呼び出す必要があります。

 

 以降の説明は、次のHome/Remoteインタフェース定義から作成されたEJBアプリケーションと連携するRPC方式のクライアントアプリケーションを例にとり、説明いたします。

 

 [HOMEインタフェース]
 package pack1;

 import java.rmi.*;
 import javax.ejb.*;

 public interface calcBeanHome extends javax.ejb.EJBHome {
  public calcBeanRemote create() throws java.rmi.RemoteException,
      javax.ejb.CreateException;
 }

 [Remoteインタフェース]
 package pack1;

 import java.rmi.*;
 import javax.ejb.*;

 public interface calcBeanRemote extends javax.ejb.EJBObject {
  public int addIntergers(int val1, int val2) throws java.rmi.RemoteException;
 }

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

 Homeインタフェースに定義したRemoteインタフェース生成用のオペレーションを呼び出し、RemoteインタフェースのURIを取得します。この処理は省略することができます。

 
 calcBeanHomeインタフェースのcreate オペレーションを呼び出し、calcBeanRemoteインタフェースの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(" calcBean", "create" ));
 call.setReturnType(XMLType.XSD_STRING);
 Object[] param = new Object[0];
 String tmp1 = (String)call.invoke( param );
 // calcBeanRemoteインタフェースの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 ) {
    :
 }
    :

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

 HomeインタフェースのRemoteインタフェース生成用のオペレーションを呼び出して得られたRemoteインタフェースのURIを使用して、Remoteインタフェースのリモートメソッドを呼び出します。Remoteインタフェースを解放するまで、何度でも呼び出しができます。
 RemoteインタフェースのURI取得処理を省略する場合は、リモートメソッド呼び出し後のオペレーションネーム情報から次の呼び出しで使用するURIを取得します。

 
 [RemoteインタフェースのURIが既に取得されている場合]
 内部変数:nskeyに設定したcalcBeanRemoteインタフェースのURIを使用して、calcBeanRemoteインタフェースのaddIntergersメソッドを呼び出します
 // import宣言
 import javax.xml.rpc.Call;
 import javax.xml.rpc.ParameterMode;
 import javax.xml.rpc.Service;
 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, "addIntergers" ));
 // パラメタ情報の登録
  call.addParameter( "arg1", XMLType.XSD_INT, ParameterMode.IN );
  call.addParameter( "arg2", XMLType.XSD_INT, ParameterMode.IN );
  call.setReturnType(XMLType.XSD_INT);
 // パラメタの作成
  Object[] param = new Object[] { new java.lang.Integer(1), new java.lang.Integer(2) };
 // webサービスの呼び出し
  Integer result_tmp = (Integer)call.invoke( param );
  int result = result_tmp.intValue();
 } 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 ) {
     :
 }
     :
 
[RemoteインタフェースのURIが未取得の場合]
 URI:calcBeanを使用して、calcBeanRemoteインタフェースのaddIntergersメソッドを呼び出し、次の呼び出しで使用するURIを取得します
 // import宣言
 import javax.xml.rpc.Call;
 import javax.xml.rpc.ParameterMode;
 import javax.xml.rpc.Service;
 import javax.xml.namespace.QName;
 import javax.xml.rpc.encoding.XMLType;
      :
 String nskey = "calcBean"; // URIの作成
 try {
 // Callオブジェクトの作成
  Call call = service.createCall();
  call.setTargetEndpointAddress("http://interstage/soap/servlet/WSContainer");
  call.setOperationName( new QName(nskey, "addIntergers" ));
 // パラメタ情報の登録
  call.addParameter( "arg1", XMLType.XSD_INT, ParameterMode.IN );
  call.addParameter( "arg2", XMLType.XSD_INT, ParameterMode.IN );
  call.setReturnType(XMLType.XSD_INT);
 // パラメタの作成
  Object[] param = new Object[] { new java.lang.Integer(1), new java.lang.Integer(2) };
 // webサービスの呼び出し
  Integer result_tmp = (Integer)call.invoke( param );  nskey = call.getOperationName().getNamespaceURI(); // 次の呼び出しで使用するのURI取得
  int result = result_tmp.intValue();
 } 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 ) {
      :
 }
      :

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

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

 
 内部変数:nskeyに設定したcalcBeanRemoteインタフェースのURIを使用して、calcBeanRemoteインタフェースの解放メソッドであるremoveメソッドを呼び出します
 // import宣言
 import javax.xml.rpc.Call;
 import javax.xml.rpc.Service;
 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 ) {
     :
 }
     :

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

Copyright 2003 FUJITSU LIMITED