同期アプリケーション連携実行基盤に配備された業務アプリケーションを呼び出すためのクライアントアプリケーションを作成します。
クライアントアプリケーションは、同期アプリケーション連携実行基盤のクライアントAPIを利用して作成します。
クライアントAPIを利用して業務アプリケーションを呼び出すには、以下の種類の方法があります。
■J2EE Connector ArchitectureのCommon Client Interface(CCI)による呼出し(Managed Environment)
J2EE Connector ArchitectureのManaged EnvironmentではConnectionFactoryをJNDI経由で取得します。
◆処理手順
ConnectionFactoryの取得
Connectionの取得
Interaction(同期アプリケーション連携実行基盤の呼び出しが実装されたクラス)の作成
MsyncInteractionSpecオブジェクトの作成
MsyncInteractionSpecオブジェクトに対しサーバアプリケーションの各種情報設定
RecordFactoryの取得
Record(処理対象データを格納するクラス)の作成
Recordに処理対象データを格納
サーバアプリケーションの呼び出し(Interactionの実行)
Interactionのクローズ
Connectionのクローズ
処理手順の詳細については、J2EE Connector ArchitectureのCommon Client Interface(CCI)による呼出し(Managed Environment)の記述例(参考)を参考にしてください。
以下のAPIを利用します。
javax.naming.InitialContext
ネーミング操作を実行するための開始コンテキストです
javax.naming.NamingException
ネーミングサービスのアクセスで発生した例外をラップするクラスです。
javax.resource.cci.Connection
同期アプリケーション連携実行基盤への接続を表すインタフェースです。
javax.resource.cci.ConnectionFactory
Connectionを生成するインタフェースです。
javax.resource.cci.IndexedRecord
同期アプリケーション連携実行基盤の送受信データ格納用のインタフェースです。
javax.resource.cci.Interaction
同期アプリケーション連携実行基盤を呼び出すインタフェースです。
javax.resource.cci.MappedRecord
同期アプリケーション連携実行基盤の送受信データ格納用のインタフェースです。
javax.resource.cci.RecordFactory
MappedRecord(IndexedRecord)を生成するインタフェースです。
javax.resource.ResourceException
サーバアプリケーションおよびクライアントAPIで発生した例外をラップするクラスです。J2EE Connector Architecture対応クライアントAPIを使用して例外が発生した場合、本例外にラップしてthrowします。getLinkedException()メソッドにより発生した例外を取得できます。
com.fujitsu.interstage.apfw.msync.ra.MsyncConnectionSpec
アプリケーションコンポーネントが接続要求別のプロパティをMsyncConnectionFactory.getConnectionメソッドに渡すためのクラスです。
com.fujitsu.interstage.apfw.msync.ra.MsyncInteractionSpec
Interactionインタフェースを実装したMsyncInteractionへ情報を設定するクラスです。エラー処理は、以下のAPIを利用します。エラー処理のハンドリングについては、J2EE Connector ArchitectureのCommonClientInterface(CCI)による呼出し(Managed Environment)の記述例(参考)を参考にしてください。
javax.naming.NamingException
ネーミングサービスのアクセスで発生した例外をラップするクラスです。
javax.resource.ResourceException
サーバアプリケーションおよびクライアントAPIで発生した例外をラップするクラスです。J2EE Connector Architecture対応クライアントAPIを使用して例外が発生した場合、本例外にラップしてthrowします。getLinkedException()メソッドにより発生した例外を取得できます。
注意
J2EE Connector ArchitectureのManaged Environmentで同期実行基盤アプリケーションを呼び出す場合、Resource Adapter Archive(RAR)ファイルの配備が必要です。配備手順については、”セットアップガイド”の” クライアントアプリケーション(J2EE Connector Architecture Managed Environment)の環境作成”の”rarファイルの配備”を参照してください。
◆記述例
クライアントアプリケーション、エラー処理のハンドリング
import javax.naming.InitialContext; import javax.naming.NamingException; import javax.resource.ResourceException; import javax.resource.cci.Connection; import javax.resource.cci.ConnectionFactory; import javax.resource.cci.IndexedRecord; import javax.resource.cci.Interaction; import javax.resource.cci.MappedRecord; import javax.resource.cci.RecordFactory; import com.fujitsu.interstage.apfw.msync.ra.MsyncConnectionSpec; import com.fujitsu.interstage.apfw.msync.ra.MsyncInteractionSpec; ... public void doSomething(DataBean dataBean){ ... try{ // (1-1)InitialContextの作成 InitialContext ic = new InitialContext(); // (1-2)ConnectionFactoryの取得 // 引数には、"java:comp/env/eis/***"という文字列を渡してください // ***は、配備時に指定したリソース名です。 ConnectionFactory cf = (ConnectionFactory)ic.lookup("java:comp/env/eis/apfwibssc"); // (1-3)ConnectionSpecの作成 MsyncConnectionSpec cs = new MsyncConnectionSpec(); cs.setBusinessName("wu001"); // (2)Connectionの取得。 Connection con = cf.getConnection(cs); // (3)Interactionの作成 Interaction inter = con.createInteraction(); // (4)InteractionSpecの作成 MsyncInteractionSpec interSpec = new MsyncInteractionSpec(); // (5-1)サーバアプリケーション名の設定 interSpec.setTarget("apl"); // (5-2)コンテキストIDの設定 interSpec.setContextId("abcdef"); // 入力データの作成 // (6)RecordFactoryの取得 RecordFactory rf = cf.getRecordFactory(); // (7) Record(処理対象データを格納するクラス)の作成 MappedRecord input = rf.createMappedRecord(null); MappedRecord output = rf.createMappedRecord(null); // (8) 処理対象データをMappedRecordに格納 input.put("from_data", "abc"); // (9)サーバアプリケーションの呼出し(Interactionの実行) // 第一引数には(4)で作成したMsyncInteractionSpecを渡してください // 第二引数には(8)で処理対象データを格納したMappedRecordを渡してください // 第三引数には(7)で作成した処理結果格納用のMappedRecordを渡してください inter.execute(interSpec, input, output); // 終了処理。 // (10)Interactionのクローズ inter.close(); // (11)Connectionのクローズ con.close(); ... } catch(NamingException e){ // ネーミングサービスのアクセスで発生した例外 ... } catch(ResourceException e){ // JCAインタフェースの実行で発生した例外 ... } } ... |
処理の手順を以下に示します。
ConnectionFactoryの取得
InitialContext のlookup("java:comp/env/eis/apfwibssc")メソッドにより、ConnectionFactoryを生成します。
MsyncConnectionSpecを作成して、業務名を指定します。
Connectionの取得
ConnectionFactoryのgetConnectionメソッドにより、業務名として指定したFactoryオブジェクトの所在をネーミングサービスに問い合わせます。さらにFactoryオブジェクトに定義したcreateメソッドを使用してサーバアプリケーションを呼び出すオブジェクトのインスタンスを生成します。
Interaction(同期アプリケーション連携実行基盤の呼び出しが実装されたクラス)の作成
ConnectionのcreateInteractionメソッドにより、Interactionを生成します。
MsyncInteractionSpecオブジェクトの作成
MsyncInteractionSpecを生成します。
MsyncInteractionSpecオブジェクトに対しサーバアプリケーションの各種情報設定
MsyncInteractionSpecのメソッドを使用して、サーバアプリケーション名やコンテキストIDなどを設定します。
RecordFactoryの取得
ConnectionFactoryのgetRecordFactoryメソッドにより、RecordFactoryを取得します。
Record(処理対象データを格納するクラス)の作成
RecordFactoryのcreateMappedRecordメソッドにより、MappedRecordを生成します。
IndexedRecordを利用する場合、RecordFactoryのcreate IndexedRecordメソッドにより、IndexedRecordを生成します。
Recordに処理対象データを格納
MappedRecordに、サーバアプリケーションへ送信するデータを設定します。
IndexedRecordを利用する場合、IndexedRecordに、サーバアプリケーションへ送信するデータを設定します。
サーバアプリケーションの呼び出し(Interactionの実行)
Interactionのexecuteメソッドにより、サーバアプリケーションを呼び出します。
Interactionのクローズ
Interactionをクローズします。
Connectionのクローズ
サーバアプリケーションを呼び出すオブジェクトのインスタンスを消去して、Connectionをクローズします。
■一般的なJavaアプリケーションからの呼出し
一般的なJavaアプリケーションからサーバアプリケーションを呼び出します。Servlet、JSP、およびEJBなどの一般アプリケーションからの呼出しが可能です。
◆処理手順
一般的なJavaアプリケーションから同期実行基盤アプリケーションを呼び出すプログラムの処理手順を示します。
MsyncCallの作成
コンテキストIDの設定
サーバアプリケーションの呼出し
removeメソッドの呼出し
これら手順の詳細については、記述例を参考にしてください。
以下のAPIを利用します。
com.fujitsu.interstage.apfw.msync.MsyncCall
同期アプリケーション連携実行基盤を呼び出します。このオブジェクトは1個の同期アプリケーション連携実行基盤を管理し、サーバアプリケーションを呼び出します。
エラー処理は、以下のAPIを利用します。
クライアントアプリケーションで利用する同期アプリケーション連携実行基盤のAPIを実行したときの、メソッドの動作に従ってエラー処理を記述します。同期アプリケーション連携実行基盤では、呼び出す方法によって、通知される例外が異なります。なお、Java標準の例外、および標準のエラーが発生する可能性がある場合は、別途catchする必要があります。
エラー処理のハンドリングについては、一般的なJavaアプリケーションからの呼出し、エラーのハンドリングの記述例(参考)を参考にしてください。
com.fujitsu.interstage.apfw.scnt.ApfwSystemException
同期アプリケーション連携実行基盤で発生した例外です。
com.fujitsu.interstage.apfw.scnt.ApfwUserException
サーバアプリケーションで発生した例外です。
サーバアプリケーションで設定された例外情報を受け取ります。サーバアプリケーションが処理結果情報に[2:異常終了]を設定した場合、クライアントAPIへは、本クラスが通知されます。本クラスのメソッドにより、サーバアプリケーションで設定された情報を参照することが可能です。
メソッド名 | 意味 |
---|---|
getErrorCode | エラーコードを参照します。 |
getMessage | エラーメッセージ文字列を参照します。 |
getBinaryData | エラー情報詳細を参照します。 |
com.fujitsu.interstage.apfw.msync.ApfwInvokeException
クライアントAPI内部で発生した例外です。
com.fujitsu.interstage.apfw.conv.ApfwDataConversionException
同期アプリケーション連携実行基盤で扱うデータへの変換中、またはJavaで扱うデータへの変換中に発生した例外です。
java.rmi.RemoteException
リモートとの通信中に発生した例外です。
同期アプリケーション連携実行基盤のJava APIの詳細は、“ Interstage Business Application Server リファレンス”の“アプリケーションインタフェース(Java)”を参照してください。
◆記述例
import java.rmi.RemoteException; import com.fujitsu.interstage.apfw.msync.MsyncCall; import com.fujitsu.interstage.apfw.scnt.ApfwSystemException; import com.fujitsu.interstage.apfw.scnt.ApfwUserException; import com.fujitsu.interstage.apfw.conv.ApfwDataConversionException; import com.fujitsu.interstage.apfw.msync.ApfwInvokeException; ... public void doSomething(DataBean dataBean){ // パラメタ設定用のUserBeanを生成 UserBean bean = new UserBean(); bean.setID(dataBean.getID()); // プロパティを設定 ... try{ // (1)MsyncCallの作成 MsyncCall call = new MsyncCall("MyApp"); // 呼び出す業務名を指定 // (2)コンテキストIDの設定 call.setContextId("abcdef"); // (3)サーバアプリケーションの呼出し UserBean response = (UserBean)call.invokeMsync(bean,"apl"); // 送信するデータとサーバアプリケーション名を指定して呼出し ... // (4) removeメソッドの呼出し call.remove(); } catch (ApfwDataConversionException e) { // 変換中の例外など // invokeMsyncメソッドで発生する。 ... } catch (ApfwInvokeException e) { // API内部の例外 // invokeMsyncメソッドで発生する。 ... } catch (RemoteException e) { // 通信中の例外 // invokeMsyncメソッドで発生する。 ... } catch (ApfwSystemException e) { // 同期アプリケーション連携実行基盤で発生した例外 // invokeMsyncメソッドで発生する。 ... } catch (ApfwUserException e) { // サーバアプリケーションで発生した例外 // invokeMsyncメソッドで発生する。 ... } } ... |
処理の手順を以下に示します。
MsyncCallの作成
業務名を指定してMsyncCallを作成します。MsyncCallクラスのコンストラクタが呼び出されるとクライアントAPIは指定したFactoryオブジェクトの所在をネーミングサービスに問い合わせます。さらにFactoryオブジェクトに定義したcreateメソッドを使用してサーバアプリケーションを呼び出すオブジェクトのインスタンスを生成します。
コンテキストIDの設定
setContextIdメソッドを呼び出し、コンテキストIDを設定します。コンテキストIDとして、文字列またはcom.fujitsu.uji.DispatchContextオブジェクトを指定します。com.fujitsu.uji.DispatchContextオブジェクトを指定した場合は、オンラインフレームワークから同期アプリケーション連携実行基盤へコンテキストIDを引き継ぎます。指定された文字列はinvokeMsyncメソッドでサーバアプリケーションを呼び出したときにサーバに渡されます。
サーバアプリケーションの呼出し
invokeMsyncメソッドで、サーバアプリケーションを呼び出します。invokeMsyncメソッドの引数に与えたデータとサーバアプリケーション名が、サーバに送信されます。第一引数と同じクラスのオブジェクトを生成し、サーバアプリケーションが返した結果とOUT値、INOUT値を格納して返します。データは、以下のどちらかを指定します。データを送信せずサーバアプリケーション名のみを指定したい場合は、プロパティを持たないbeanオブジェクトか空のMapオブジェクトを指定してください。
bean生成ツールまたはCOBOL開発支援ツールから生成したbean
java.util.Mapインタフェース実装クラス
removeメソッドの呼出し
removeメソッドが呼び出されると、サーバアプリケーションを呼び出すオブジェクトのインスタンスを消去します。
注意
サーバアプリケーションまたはサーバアプリケーションが動作するCORBAサービスを再起動した場合は、MsyncCallオブジェクトを再作成してください。
例外の詳細情報にCORBAサービスの例外情報とマイナーコードが出力された場合は、“Interstage Application Server メッセージ集”の“CORBAサービスの例外情報”および“CORBAサービスのマイナーコード”を参照してください。
上記手順2で設定するコンテキストIDによって、クライアントAPI呼出し側とサーバとを対応付けることができます。呼出しごとに識別できる任意の文字列を指定してください。以下にサーブレットでのコンテキストの設定例を示します。
// コンテキストID開始 static final String BEGIN_CONTEXTID = "["; // コンテキストID終了 public static final String END_CONTEXTID = "]"; // 桁数合わせ用 static final String[] ZEROS = {"", "0", "00", "000", "0000"}; // セションIDの最大文字数 static final int SESSIONID_MAX_LENGTH = 54; // 連番の最大文字数 static final int REQUESTID_MAX_LENGTH = 3; // IPアドレスの最大文字数 static final int REQUESTID_ADDRESS_LENGTH = 4; // コンテキストIDを生成 String createContextId(HttpSession session){ StringBuffer contextId = new StringBuffer(64); // WebサーバのIP下4桁 String address = ""; try{ // 自ホストのアドレスを取得 InetAddress localHost = InetAddress.getLocalHost(); // IPアドレス文字列"%d.%d.%d.%d"を取得 String hostAddress = localHost.getHostAddress(); // 最後のピリオド以降の文字列を取得 int lastIndexOf = hostAddress.lastIndexOf('.'); address = hostAddress.substring(lastIndexOf + 1); contextId.append(ZEROS[REQUESTID_ADDRESS_LENGTH - address.length()]).append(address); } catch(Exception e){ contextId.append("non"); } // ServletセションIDを取得 String sessionId = session.getId(); int idLength = sessionId.length(); if(idLength > SESSIONID_MAX_LENGTH){ sessionId = sessionId.substring(idLength - SESSIONID_MAX_LENGTH); } contextId.append('-').append(sessionId); // 通番を取得 int requestId = createRequestId(); String requestIdString = Integer.toString(requestId); contextId.append('-').append(ZEROS[REQUESTID_MAX_LENGTH - requestIdString.length()]).append(requestIdString); return contextId.toString(); } // 連番の最大値 static final int MAX_REQUEST_COUNT = 999; // 通番を生成 synchronized int createRequestId() { // 最大値まで達したらリセット if(requestCount == MAX_REQUEST_COUNT){ requestCount = 0; return MAX_REQUEST_COUNT; } return requestCount++; } |
ApcoordinatorアプリケーションからMsyncCallクラスを使用する場合、上記手順2でDispatchContextオブジェクトを指定してsetContextIdメソッドを呼び出すことで、ApcoordinatorアプリケーションのコンテキストIDを引き継ぐことができます。
public void doSomething(DispatchContext context, DataBean dataBean){ ... // MsyncCallにコンテキストIDを設定する call.setContextId(context); ... } |
■Apcoordinatorのリモート共通インタフェースによる呼出し
クライアントアプリケーションがApcoordinatorアプリケーションとして作成されている場合には、Apcoordinatorのリモート共通インタフェースを使用して、サーバアプリケーションを呼び出すことができます。これにより、EJBと共通のインタフェースによる呼出しが可能となります。
Apcoordinatorアプリケーションから同期実行基盤アプリケーションを呼び出すプログラムの処理手順を示します。
◆処理手順
CallFactoryの取得
Callの取得
サーバアプリケーションの呼出し
これら手順の詳細については、Apcoordinatorのリモート共通インタフェースによる呼出しの記述例(参考)を参考にしてください。
以下のApcoordinatorのリモート共通インタフェースを利用します。
com.fujitsu.uji.ext.Call
同期アプリケーション連携実行基盤を呼び出すインタフェースです。Apcoordinatorで作成したEJBセションBeanを呼び出すこともできます。
com.fujitsu.uji.ext.CallFactory
Callオブジェクトを生成するクラスが実装するインタフェースです。
com.fujitsu.uji.msync.UjiMsyncCall
com.fujitsu.uji.ext.Call実装クラスです。同期アプリケーション連携実行基盤を呼び出します。このオブジェクトは1個の同期アプリケーション連携実行基盤を管理し、サーバアプリケーションを呼び出します。
com.fujitsu.uji.msync.MsyncCallFactory
com.fujitsu.uji.ext.CallFactory実装クラスです。同期アプリケーション連携実行基盤を呼び出すためのCallオブジェクトを生成するクラスです。指定された同期アプリケーション連携実行基盤について、オブジェクトリファレンスの取得、UjiMsyncCallの作成を行います。
エラー処理は、以下のAPIを利用します。
クライアントアプリケーションで利用する同期アプリケーション連携実行基盤のAPIを実行したときの、メソッドの動作に従ってエラー処理を記述します。同期アプリケーション連携実行基盤では、呼び出す方法によって、通知される例外が異なります。なお、Java標準の例外、および標準のエラーが発生する可能性がある場合は、別途catchする必要があります。
エラー処理のハンドリングについては、Apcoordinatorのリモート共通インタフェースによる呼出しの記述例(参考)を参考にしてください。
com.fujitsu.uji.ext.UjiCreateException
同期アプリケーション連携実行基盤を呼び出すCallオブジェクトの生成時に発生する例外です。createCallメソッド呼出し時に例外が発生した場合、本例外にラップしてthrowします。
com.fujitsu.uji.ext.UjiRemoteException
サーバアプリケーションの呼出し時に発生する例外です。呼出しの前処理やリモートとの通信中に発生した例外をラップします。invokeメソッド呼出し時にRemoteException、ApfwSystemException、ApfwDataConversionException、またはApfwInvokeExceptionが発生した場合、本例外にラップしてthrowします。
com.fujitsu.uji.ext.UjiTargetException
サーバアプリケーションで例外が発生したことを表す例外です。
com.fujitsu.uji.msync.MsyncApplicationException
com.fujitsu.uji.ext.UjiTargetException継承クラスです。サーバアプリケーションで発生した例外をラップするクラスです。invokeメソッド呼出し時にApfwUserExceptionが発生した場合、本例外にラップしてthrowします。
以下のメソッドを実行したときには、同期アプリケーション連携実行基盤上にオブジェクトが作成されます。
CallFactoryインタフェースのcreateCallメソッド
MsyncCallFactoryクラスのcreateUjiMsyncCallメソッド
これらのメソッドによって作成されたオブジェクトについては、以下の図に示すタイミングで同期アプリケーション連携実行基盤のdestroy()メソッドが呼び出され、オブジェクトが削除されます。
◆記述例
リモートマップに、呼び出す同期アプリケーション連携実行基盤の定義を行います。リモートマップで定義された論理名をプログラムで指定し、同期アプリケーション連携実行基盤の接続を行います。
<?xml version="1.0" encoding="iso-2022-jp"?> <remoteMap xmlns="http://interstage.fujitsu.com/schemas/uji/remoteMap" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://interstage.fujitsu.com/schemas/uji/remoteMap http://interstage.fujitsu.com/schemas/uji/remotemap.xsd"> <config> <version>5.0</version> </config> <!-- 同期アプリケーション連携実行基盤の呼出しを定義します。--> <msync name="MyCobolApl" application="MyApp"/> </remoteMap> |
同期アプリケーション連携実行基盤をmsyncタグで記述し、applicationアトリビュートに業務名を指定します。その他のタグについてはApcoordinatorのマニュアルを参照してください。
リモートマップに、呼出す同期アプリケーション連携実行基盤の定義を行います。リモートマップで定義された論理名をプログラムで指定し、同期アプリケーション連携実行基盤の接続を行います。
import com.fujitsu.uji.ext.Call; import com.fujitsu.uji.ext.CallFactory; import com.fujitsu.uji.ext.UjiRemoteException; import com.fujitsu.uji.ext.UjiTargetException; import com.fujitsu.uji.ext.UjiCreateException; public void doSomething(DispatchContext context, DataBean dataBean){ // パラメタ設定用のUserBeanを生成 UserBean bean = new UserBean(); bean.setID(dataBean.getID()); // プロパティを設定 ... try{ // (1) CallFactoryの取得 CallFactory factory = context.getCallFactory(); // (2) Callの取得 Call call = factory.createCall("MyCobolApl"); // 呼び出すアプリケーションを指定 // (3) サーバアプリケーションの呼出し UserBean response = (UserBean)call.invoke(bean,"apl"); // 送信するデータとサーバアプリケーション名を指定して呼出し ... } catch (UjiCreateException e) { // createCallメソッドで発生した例外 ... } catch (UjiRemoteException e) { // 通信中の例外 // invokeメソッドで発生する。 ... } catch (UjiTargetException e) { // サーバアプリケーションで発生した例外 // invokeメソッドで発生する。 ... } } |
処理の手順は以下のようになります。本方法を使用した場合、コンテキストIDはApcoordinatorにより自動的に設定されます。
CallFactoryの取得
DispatchContextクラスのgetCallFactoryメソッドで、CallFactoryインタフェースを取得します。
Callの取得
リモートマップに定義した名前を指定してCallFactoryのcreateCallメソッドを呼び出し、Callインタフェースを取得します。
サーバアプリケーションの呼出し
Callインタフェースのinvokeメソッドで、サーバアプリケーションを呼び出します。invokeメソッドの引数に与えたデータとサーバアプリケーション名が、サーバに送信されます。第一引数と同じクラスのオブジェクトを生成し、サーバアプリケーションが返した結果とOUT値、INOUT値を格納して返します。データは、以下のどちらかを指定します。データを送信せずサーバアプリケーション名のみを指定したい場合は、プロパティをもたないbeanオブジェクトか空のMapオブジェクトを指定してください。
bean生成ツールまたはCOBOL開発支援ツールから生成したbean
java.util.Mapインタフェース実装クラス
注意
サーバアプリケーションまたはサーバアプリケーションが動作するCORBAサービスを再起動した場合は、Callオブジェクトを再取得してください。
例外の詳細情報にCORBAサービスの例外情報とマイナーコードが出力された場合は、“Interstage Application Server メッセージ集”の“CORBAサービスの例外情報”および“CORBAサービスのマイナーコード”を参照してください。
MsyncCallFactoryクラスを使用して以下のように呼び出すと、リモートマップを使用しないでサーバアプリケーションを呼び出すことができます。
import com.fujitsu.uji.msync.MsyncCallFactory; import com.fujitsu.uji.msync.UjiMsyncCall; public void doSomething(DispatchContext context, DataBean dataBean){ ... // (1) CallFactoryの取得 MsyncCallFactory factory = (MsyncCallFactory)context.getCallFactory(MsyncCallFactory.MSYNC); // (2) Callの取得 Call call = factory.createUjiMsyncCall("MyApp"); // 呼び出す業務名を指定 // (3) サーバアプリケーションの呼出し UserBean response = (UserBean)call.invoke(bean,"apl"); // 送信するデータとサーバアプリケーション名を指定して呼出し ... |
処理の手順は以下のようになります。本方法を使用した場合、コンテキストIDはApcoordinatorにより自動的に設定されます。
CallFactoryの取得
DispatchContextクラスのgetCallFactoryメソッドで、MsyncCallFactoryインタフェースを取得します。
Callの取得
業務名を指定してMsyncCallFactoryのcreateUjiMsyncCallメソッドを呼び出し、UjiMsyncCallクラスを取得します。
サーバアプリケーションの呼出し
UjiMsyncCallクラスのinvokeメソッドで、サーバアプリケーションを呼び出します。invokeメソッドの動作は引数に与えたデータとサーバアプリケーション名が、サーバに送信されます。第一引数と同じクラスのオブジェクトを生成し、サーバアプリケーションが返した結果とOUT値、INOUT値を格納して返します。データは、以下のどちらかを指定します。データを送信せずサーバアプリケーション名のみを指定したい場合は、プロパティを持たないbeanオブジェクトか空のMapオブジェクトを指定してください。
bean生成ツールまたはCOBOL開発支援ツールから生成したbean
java.util.Mapインタフェース実装クラス
注意
サーバアプリケーションまたはサーバアプリケーションが動作するCORBAサービスを再起動した場合は、Callオブジェクトを再取得してください。
例外の詳細情報にCORBAサービスの例外情報とマイナーコードが出力された場合は、“Interstage Application Server メッセージ集”の“CORBAサービスの例外情報”および“CORBAサービスのマイナーコード”を参照してください。
■J2EE Connector ArchitectureのCommon Client Interface(CCI)による呼出し(Non Managed Environment)
J2EE Connector Architecture対応クライアントAPIを利用して、サーバアプリケーションを呼び出します。Servlet、JSP、およびEJBなどの一般アプリケーションからの呼出しが可能です。
J2EE Connector Architecture対応クライアントAPIを利用して同期実行基盤アプリケーションを呼び出すプログラムの処理手順を示します。
◆処理手順
ConnectionFactoryの取得
ConectionSpecの取得
Connectionの取得
Interaction(同期アプリケーション連携実行基盤の呼び出しが実装されたクラス)の作成
MsyncInteractionSpecオブジェクトの作成
MsyncInteractionSpecオブジェクトに対しサーバアプリケーションの各種情報設定
RecordFactoryの取得
Record(処理対象データを格納するクラス)の作成
Recordに処理対象データを格納
サーバアプリケーションの呼び出し(Interactionの実行)
Interactionのクローズ
Connectionのクローズ
これら手順の詳細については、J2EE Connector ArchitectureのCommon Client Interface(CCI)による呼出しの記述例(参考)を参考にしてください。
以下のAPIを利用します。
javax.resource.cci.Interaction
同期アプリケーション連携実行基盤を呼び出すインタフェースです。
com.fujitsu.interstage.apfw.msync.ra.MsyncInteractionSpec
Interactionインタフェースを実装したMsyncInteractionへ情報を設定するクラスです。
javax.resource.cci.Connection
同期アプリケーション連携実行基盤への接続を表すインタフェースです。
javax.resource.cci.ConnectionFactory
Connectionを生成するインタフェースです。
com.fujitsu.interstage.apfw.msync.ra.MsyncConnectionSpec
アプリケーションコンポーネントが接続要求別のプロパティをMsyncConnectionFactory.getConnection メソッドに渡すためのクラスです。
com.fujitsu.interstage.apfw.msync.raspi.MsyncManagedConnectionFactory
Connectionインタフェースを実装したMsyncConnectionFactoryを取得するクラスです。
javax.resource.cci.MappedRecord
同期アプリケーション連携実行基盤の送受信データ格納用のインタフェースです。
javax.resource.cci.RecordFactory
MappedRecordを生成するインタフェースです。
javax.resource.ResourceException
サーバアプリケーションおよびクライアントAPIで発生した例外をラップするクラスです。J2EE Connector Architecture対応クライアントAPIを使用して例外が発生した場合、本例外にラップしてthrowします。getLinkedException()メソッドにより発生した例外を取得できます。
エラー処理は、以下のAPIを利用します。
エラー処理のハンドリングについては、J2EE Connector ArchitectureのCommon Client Interface(CCI)による呼出しの記述例(参考)を参考にしてください。
javax.resource.ResourceException
サーバアプリケーションおよびクライアントAPIで発生した例外をラップするクラスです。J2EE Connector Architecture対応クライアントAPIを使用して例外が発生した場合、本例外にラップしてthrowします。getLinkedException()メソッドにより発生した例外を取得できます。
注意
マルチスレッドを利用する場合は、スレッド単位にManagedConnectionFactoryクラスのオブジェクトを生成してください。
サーバアプリケーションまたはサーバアプリケーションが動作するCORBAサービスを再起動した場合は、Connectionオブジェクトを再作成してください。
例外の詳細情報にCORBAサービスの例外情報とマイナーコードが出力された場合は、“Interstage Application Server メッセージ集”の“CORBAサービスの例外情報”および“CORBAサービスのマイナーコード”を参照してください。
◆記述例
クライアントアプリケーション、エラー処理のハンドリング
import javax.resource.ResourceException; import javax.resource.cci.Connection; import javax.resource.cci.ConnectionFactory; import javax.resource.cci.Interaction; import javax.resource.cci.MappedRecord; import javax.resource.cci.RecordFactory; import com.fujitsu.interstage.apfw.msync.ra.MsyncConnection; import com.fujitsu.interstage.apfw.msync.ra.MsyncConnectionSpec; import com.fujitsu.interstage.apfw.msync.ra.MsyncInteractionSpec; import com.fujitsu.interstage.apfw.msync.raspi.MsyncManagedConnectionFactory; import com.fujitsu.interstage.apfw.msync.ra.MsyncResourceException; ... public void doSomething(DataBean dataBean){ ... try{ // (1-1)ManagedConnectionFactoryの作成 MsyncManagedConnectionFactory mcxf = new MsyncManagedConnectionFactory(); // (1-2)ConnectionFactoryの作成 ConnectionFactory cxf = (ConnectionFactory)mcxf.createConnectionFactory(); // (2) ConectionSpecの取得 MsyncConnectionSpec cs = new MsyncConnectionSpec(); cs.setBusinessName(implID); // (3)Connectionの取得 Connection con = cxf.getConnection(cs); // (4)Interactionの作成 Interaction inter = con.createInteraction(); // (5)InteractionSpecの作成 MsyncInteractionSpec interSpec = new MsyncInteractionSpec(); // (6-1)サーバアプリケーション名の設定 interSpec.setTarget("apl"); // (6-2)コンテキストIDの設定 interSpec.setContextId("abcdef"); // 入力データの作成 // (7)RecordFactoryの取得 RecordFactory rf = cxf.getRecordFactory(); // (8)Record(処理対象データを格納するクラス)の作成 MappedRecord input = rf.createMappedRecord(null); MappedRecord output = rf.createMappedRecord(null); // (9)処理対象データをMappedRecordに格納 input.put("from_data", "abc"); // (10)サーバアプリケーションの呼び出し(Interactionの実行) // 第一引数には(5)で作成したMsyncInteractionSpecを渡してください // 第二引数には(9)で処理対象データを格納したMappedRecordを渡してください // 第三引数には(8)で作成した処理結果格納用のMappedRecordを渡してください inter.execute(interSpec, input, output); // 終了処理 // (11)Interactionのクローズ inter.close(); // (12)Connectionのクローズ con.close(); ... } catch (ResourceException e) { //J2EE Connector Architecture対応クライアントAPIを用いた呼び出しで発生した例外 ... } ... } |
処理の手順を以下に示します。
ConnectionFactoryの取得
MsyncManagedConnectionFactoryを作成して、業務名を指定します。MsyncManagedConnectionFactoryのcreateConnectionFactoryメソッドにより、ConnectionFactoryを生成します。
MsyncConnectionSpecの取得
MsyncConnectionSpecを作成して、業務名を指定します。
Connectionの取得
ConnectionFactoryのgetConnectionメソッドにより、業務名として指定したFactoryオブジェクトの所在をネーミングサービスに問い合わせます。さらにFactoryオブジェクトに定義したcreateメソッドを使用してサーバアプリケーションを呼び出すオブジェクトのインスタンスを生成します。
Interaction(同期アプリケーション連携実行基盤の呼び出しが実装されたクラス)の作成
ConnectionのcreateInteractionメソッドにより、Interactionを生成します。
MsyncInteractionSpecオブジェクトの作成
MsyncInteractionSpecを生成します。
MsyncInteractionSpecオブジェクトに対しサーバアプリケーションの各種情報設定
MsyncInteractionSpecのメソッドを使用して、サーバアプリケーション名やコンテキストIDなどを設定します。
RecordFactoryの取得
ConnectionFactoryのgetRecordFactoryメソッドにより、RecordFactoryを取得します。
Record(処理対象データを格納するクラス)の作成
RecordFactoryのcreateMappedRecordメソッドにより、MappedRecordを生成します。
Recordに処理対象データを格納
MappedRecordに、サーバアプリケーションへ送信するデータを設定します。
サーバアプリケーションの呼び出し(Interactionの実行)
Interactionのexecuteメソッドにより、サーバアプリケーションを呼び出します。
Interactionのクローズ
Interactionをクローズします。
Connectionのクローズ
サーバアプリケーションを呼び出すオブジェクトのインスタンスを消去して、Connectionをクローズします。
■Spring Frameworkからの呼び出し
Spring Frameworkから呼び出す場合には、MsyncJCACallクラスを使用します。
◆bean定義
bean定義ファイルに次のように設定します。
<jee:jndi-lookup id="targetConnectionFactory" jndi-name="eis/apfwibssc"/> <bean id="connectionFactory" class="org.springframework.jca.cci.connection.ConnectionSpecConnectionFactoryAdapter"> <property name="targetConnectionFactory" ref="targetConnectionFactory"/> <property name="connectionSpec"> <bean class="com.fujitsu.interstage.apfw.msync.ra.MsyncConnectionSpec"> <property name="businessName" value="wu001"/> </bean> </property> </bean> <bean id="jcacaller" class="com.fujitsu.interstage.apfw.springframework.jca.MsyncJCACall"> <property name="connectionFactory" ref="connectionFactory"/> </bean> |
businessNameには呼び出し先の業務名(APFW_BUSINESS_NAME)を指定します。
◆処理手順
Record(処理対象データを格納するクラス)の作成
Recordに処理対象データを格納
サーバアプリケーションの呼び出し(MsyncJCACallの実行)
処理手順の詳細については、Spring Frameworkからの呼出しの記述例(参考)を参考にしてください。
以下のAPIを利用します。
javax.resource.cci.MappedRecord
処理対象データを格納します。
com.fujitsu.interstage.apfw.springframework.jca.MsyncJCACall
サーバアプリケーションの呼び出しを行うクラスです。
org.springframework.dao.DataAccessException
MsyncJCACallの実行で発生した例外をラップするクラスです。サーバアプリケーションおよびクライアントAPIで例外が発生した場合はgetRootCause()メソッドによりResourceExceptionを取得できます。
エラー処理は、以下のAPIを利用します。
エラー処理のハンドリングについては、Spring Frameworkからの呼出しの記述例(参考)を参考にしてください。
javax.resource.ResourceException
サーバアプリケーションおよびクライアントAPIで発生した例外をラップするクラスです。J2EE Connector Architecture対応クライアントAPIを使用して例外が発生した場合、本例外にラップしてthrowします。getCause()メソッドにより発生した例外を取得できます。
注意
J2EE Connector ArchitectureのManaged Environmentで同期実行基盤アプリケーションを呼び出すため、Resource Adapter Archive(RAR)ファイルの配備が必要です。配備手順については、”セットアップガイド”の” クライアントアプリケーション(J2EE Connector Architecture Managed Environment)の環境作成”の”rarファイルの配備”を参照してください。
◆記述例
クライアントアプリケーション、エラー処理のハンドリング
import javax.resource.cci.MappedRecord; import com.fujitsu.interstage.apfw.springframework.MsyncJCACall; import javax.resource.ResourceException; import org.springframework.dao.DataAccessException;... ... MsyncJCACall jcacaller; ... public void doSomething(DataBean dataBean){ try{ // (1) Record(処理対象データを格納するクラス)の作成 MappedRecord input = jcacaller.createMappedRecord("input"); MappedRecord output = jcacaller.createMappedRecord("output"); // (2) 処理対象データをMappedRecordに格納 input.put("from_data", "abc"); // (3)サーバアプリケーションの呼出し(Interactionの実行) // 第一引数にはサーバアプリケーション名を渡してください // 第二引数には(2)で処理対象データを格納したRecordを渡してください // 第三引数には(1)で作成した処理結果格納用のRecordを渡してください jcacaller.execute("apl", input, output); ... } catch(DataAccessException e){ // JCAインタフェースの実行で発生した例外 ... } } ... |
処理の手順を以下に示します。
Record(処理対象データを格納するクラス)の作成
MappedRecordを生成します。
MappedRecordに処理対象データを格納
MappedRecordに、サーバアプリケーションへ送信するデータを設定します。
サーバアプリケーションの呼び出し(MsyncJCACallの実行)
MsyncJCACallのexecuteメソッドにより、サーバアプリケーションを呼び出します。