Interstage Application Server SOAPサービス ユーザーズガイド |
目次 索引 |
第6章 CORBA/SOAPゲートウェイの実装 | > 6.4 EJBアプリケーションと連携する場合の留意事項 |
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; } |
Homeインタフェースに定義したRemoteインタフェース生成用のオペレーションを呼び出し、RemoteインタフェースのURIを取得します。この処理は省略できます。
// 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 ) { : } : |
HomeインタフェースのRemoteインタフェース生成用のオペレーションを呼び出して得られたRemoteインタフェースのURIを使用して、Remoteインタフェースのリモートメソッドを呼び出します。Remoteインタフェースを解放するまで、何度でも呼び出しができます。
RemoteインタフェースのURI取得処理を省略する場合は、リモートメソッド呼び出し後のオペレーションネーム情報から次の呼び出しで使用する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; : 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 ) { : } : |
// 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インタフェースに定義してある解放用のメソッドを呼び出します。
// 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 ) { : } : |
目次 索引 |