3.11.8 DeployScopeを「Session」にしたSOAPアプリケーションに関する注意
DeployScopeを「Session」にしたSOAPアプリケーションを開発する場合,SOAP通信基盤に対してセッション終了を要求するサービスメソッドを用意できます。このサービスメソッド内でSOAP通信基盤が提供する「C4Sessionのinvalidateメソッド」を呼び出すことで,SOAP通信基盤に対してセッション終了を要求できます。クライアント側の処理では,セッション終了を希望するタイミングでこのサービスメソッドを呼び出してください。
SOAPアプリケーションのインタフェースの例を次に示します。
package localhost; public interface UserInfo extends java.rmi.Remote { // サービスメソッド localhost.UserData getUserData(java.lang.String user_no) throws java.rmi.RemoteException; // セッション終了用サービスメソッド public void endSession() throws java.rmi.RemoteException; }
サービス側の処理の実装例を次に示します。
package localhost; public class UserInfoSoapBindingImpl implements localhost.UserInfo { // サービスメソッド public localhost.UserData getUserData(java.lang.String user_No) throws java.rmi.RemoteException { // サービスメソッド実装を記述 } // セッション終了用サービスメソッド public void endSession() throws java.rmi.RemoteException { // セッション終了時の処理を記述 // セッション終了要求を通知するAPIを使用する try { C4Session session = C4Session.getInstance(); if (session != null) { session.invalidate(); } } catch (java.lang.RuntimeException e) { // エラー処理 } } }
クライアント側の処理の実装例を次に示します。
package localhost; import javax.servlet.*; import javax.servlet.http.*; import java.io.*; import java.util.*; import com.cosminexus.cws.management.*; public class RPCSampleClient extends HttpServlet { ... // サービスのインタフェースクラスのオブジェクトを生成 UserInfoServiceLocator uis = new UserInfoServiceLocator(); // スタブのインタフェースクラスのオブジェクトを生成 UserInfo ui = uis.getUserInfo(); // サービスメソッドを呼び出す UserData ud1 = ui.getUserData(strUserNo1); // セッション開始 UserData ud2 = ui.getUserData(strUserNo2); // セッション継続 // セッション終了用サービスメソッドを呼び出す ui.endSession(); // セッション終了要求 ... }