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

第5章 RPC方式のアプリケーションの実装

5.2 RPCサーバアプリケーション

 ここでは、RPCサーバアプリケーションの作成方法を説明します。

■インタフェースの定義

 まずRPCサーバアプリケーションのインタフェース(メソッド名、パラメタのデータ型など)を定義します。
 インタフェースは、javax.rmi.Remoteインタフェースを継承したインタフェースを作成し、リモート呼び出しを受け付けるメソッドを記述することによって定義します。
 リモート呼び出しを受け付けるメソッドは、RemoteExceptionをthrowsに宣言します。パラメタに使用できるデータ型は、“サポートされるデータ型”を参照してください。

 以下に単純型のint型とUnsignedInt型、添付ファイル型のSource型のパラメタを使用する例を示します。

 
 リモート呼び出しを受け付けるインタフェースの定義例
 ・メソッド名:opInt
 ・パラメタ:int(in), UnsignedInt(in), int(inoutまたはout), javax.xml.transform.Source(inoutまたはout)
 ・返り値:int

 import java.rmi.Remote;
 import java.rmi.RemoteException;
 import javax.xml.rpc.holders.IntHolder;
 import com.fujitsu.interstage.soapx.types.UnsignedInt;
 import com.fujitsu.interstage.soapx.holders.SourceHolder;

 public interface IntSample extends Remote  // java.rmi.Remoteを継承します
 {
  public int opInt( int arg1, UnsignedInt arg2, IntHolder arg3, SourceHolder arg4 )
  throws RemoteException; // java.rmi.RemoteExceptionをthrows宣言します
 }

■RPCサーバアプリケーションの実装

 RPCサーバアプリケーションは、上記で定義したインタフェースを実装した、デフォルトコンストラクタを必ず含むJavaクラスで作成します。

 import java.rmi.RemoteException;
 import javax.xml.rpc.holders.IntHolder;
 import javax.xml.transform.Source;
 import javax.xml.transform.stream.StreamSource;
 import com.fujitsu.interstage.soapx.holders.SourceHolder;
 import com.fujitsu.interstage.soapx.types.UnsignedInt;
 import java.io.FileInputStream;

 public class IntSampleImpl implements IntSample
 {
  public IntSampleImpl(){}
  public int opInt(int arg1, UnsignedInt arg2, IntHolder arg3, SourceHolder arg4 )
                            throws RemoteException
  {
   try {
   System.out.println("opInt");
    System.out.println(" arg1 = "+arg1);
    System.out.println(" arg2 = "+arg2.longValue());
    arg3.value = arg1 + arg2.intValue();
    arg4.value = new StreamSource( new FileInputStream("attach.xml") );
    return arg1 + arg2.intValue();
   } catch( Exception e ) {
    return -1;
   }
  }
 }

 RPCサーバアプリケーションは、Webサービス・コンテナがリモート呼び出しのSOAPメッセージを検出したときに、通常のメソッド呼び出しと同様に呼び出されます。

■インスタンスの初期化と後処理

 RPCサーバアプリケーションは、Webサービス情報に指定された方法にしたがって、インスタンス化されます。インスタンスの初期化と後処理を行う場合は、以下のinterfaceを実装します。

 package javax.xml.rpc.server;
 public interface ServiceLifecycle {
  public void init(Object context) throws javax.xml.rpc.ServiceException;
  public void destroy();
 }

 RPCサーバアプリケーションのインスタンス化のあとinitメソッドが呼び出されます。initメソッドに初期化の処理を記述してください。パラメタには、下記のServletEndPoingContextオブジェクトが渡されます。

 RPCサーバアプリケーションのインスタンスが解放されるときに、destroyメソッドが呼び出されます。destroyメソッドに後処理を記述してください。

 package javax.xml.rpc.server;
 public interface ServletEndpointContext {
  public java.security.Principal getUserPrincipal();
  public javax.xml.rpc.handler.MessageContext getMessageContext();
  public javax.servlet.http.HttpSession getHttpSession();
  public javax.servlet.ServletContext getServletContext();
 }

■セション管理の利用

 セション管理を行うことで、同じRPCクライアントアプリケーションからの複数回のリクエストをRPCサーバアプリケーションの同じインスタンスで処理することができます。このことによって、前回の処理結果を引き継ぐことが可能となり、継続的な処理を行うことができます。

◆Webサービス情報の設定

 Webサービス情報編集ツールのWebサービス情報入力画面で、“Webサービスアプリのライフサイクル”として"session"を選択します。
 詳細については“Webサービス情報の管理”を参照してください。

◆セションタイムアウトの設定

 セション管理のタイムアウト時間(分単位)は、Webアプリケーション環境定義(web.xml)ファイルのsession-configタグで、セションパラメタとしてタイムアウト時間をsession-timeoutタグで指定します。
 詳細については“Webサービス実行環境の環境構築”の“Webアプリケーション”および“J2EE ユーザーズガイド”の“Servlet/JSP編”を参照してください。


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

Copyright 2003 FUJITSU LIMITED