Interstage Application Server SOAPサービス ユーザーズガイド |
目次 索引 |
第5章 RPC方式のアプリケーションの実装 |
ここでは、RPCサーバアプリケーションの作成方法を説明します。
まずRPCサーバアプリケーションのインタフェース(メソッド名、パラメタのデータ型など)を定義します。
インタフェースは、javax.rmi.Remoteインタフェースを継承したインタフェースを作成し、リモート呼び出しを受け付けるメソッドを記述することによって定義します。
リモート呼び出しを受け付けるメソッドは、RemoteExceptionをthrowsに宣言します。パラメタに使用できるデータ型は、“サポートされるデータ型”を参照してください。
以下に単純型のint型とUnsignedInt型、添付ファイル型のSource型のパラメタを使用する例を示します。
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サーバアプリケーションは、上記で定義したインタフェースを実装した、デフォルトコンストラクタを必ず含む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サービスアプリのライフサイクル”として"session"を選択します。
詳細については“Webサービス情報の管理”を参照してください。
セション管理のタイムアウト時間は30分(省略値)です。タイムアウト時間を変更する場合は、Webアプリケーション(web.xml)ファイルを編集してください。
詳細については“Webアプリケーション環境定義ファイルの編集”の“セションタイムアウト時間の変更”を参照してください。
目次 索引 |