業務処理を作成・修正する方法について説明します。
業務処理はInterstage StudioのJavaエディタを利用して編集することができます。以下に手順を示します。
編集する業務処理実行アプリケーションを[パッケージエクスプローラ]ビューから選択し、Javaエディタで開きます。
Javaエディタでソースを編集します。
Javaエディタの詳細については、Interstage Studioのヘルプ一覧から“Java開発ユーザガイド”の“概念”の“Javaエディタ”を参照してください。
業務処理実行アプリケーションに記述する処理を以下に示します。
前処理/後処理/エラー処理の記述
アプリケーション連携実行基盤固有機能の利用
呼出し対象のメソッド処理の記述
前処理、後処理、およびエラー処理を記述する方法について説明します。
前処理、後処理、およびエラー処理を記述するために必要なインタフェースを以下に示します。
前処理インタフェース
後処理インタフェース
エラー処理インタフェース
これらのインタフェースは、[業務処理実行アプリケーション(Java)生成]ウィザードで[インタフェースを実装する]をチェックした場合に、以下のソースを出力します。
import文、およびクラス定義部(implement)にクラス名を出力
インタフェースメソッドを出力
以下に、[業務処理実行アプリケーション(Java)生成]ウィザードでのチェック状態と出力されるソースを示します。
パッケージ名:com.fujitsu.interstage.apfw.application.
| 前処理 | 後処理 | エラー処理 |
---|---|---|---|
[業務処理実行アプリケーション(Java)生成]ウィザード | [アプリケーション前処理インタフェース]をチェック | [アプリケーション後処理インタフェース]をチェック | [アプリケーションエラー処理インタフェース]をチェック |
出力するクラス名 | Preprocessor | Postprocessor | ExceptionHandler |
出力するメソッド | preprocessメソッド | postprocessメソッド | handleExceptionメソッド |
以下のメソッド内に処理を記述します。
/** * @see com.fujitsu.interstage.apfw.application.Preprocessor#preprocess(Map) */ public Map<String, Object> preprocess(Map<String, Object> arg0) throws Throwable { return arg0; } /** * @see com.fujitsu.interstage.apfw.application.Postprocessor#postprocess(Map) */ public Map<String, Object> postprocess(Map<String, Object> arg0) throws Throwable { return arg0; } /** * @see com.fujitsu.interstage.apfw.application.ExceptionHandler#handleException(Map, Throwable) */ public Map<String, Object> handleException(Map<String, Object> arg0, Throwable arg1) throws Throwable { return arg0; } |
注意
アプリケーション前処理、後処理、およびエラー処理の各メソッドには、業務データ全体がjava.util.Map(実体はjava.util.HashMap)オブジェクトとして渡されます。各メソッドの復帰値は、同じく業務データ全体のjava.util.Mapオブジェクトになります。業務データは、各メソッドの復帰値で上書きされるため、各メソッドはパラメタとして受け取ったものと同等の、完全な業務データを復帰値とする必要があります。
java.util.Mapオブジェクトのキー名は業務データ名になります。
前処理、後処理、およびエラー処理メソッドの復帰値のMap内に含まれる業務データの値をnullにした場合は、業務データに以下の値を設定したのと同等の扱いになります。復帰値のMap自体をnullにした場合、すべての業務データに以下の値を設定したのと同等になります。
データ型 | アプリケーションに渡される値 |
---|---|
String | null |
Byte | 0 |
Short | 0 |
Integer | 0 |
Long | 0 |
Float | 0.0 |
Double | 0.0 |
Boolean | false |
配列型 | null |
ユーザ定義型情報 | null |
バイナリ | null |
前処理、後処理、およびエラー処理インタフェースを利用するには、プロジェクトに実行基盤連携用ライブラリのクラスパスエントリを追加する必要があります。
手順については、“15.4.1.1 実行基盤連携用ライブラリ”を参照してください。
通常はアプリケーション連携フロープロジェクトの新規作成時に自動で追加されています。
エラー処理メソッドでの処理を行い、また、異常処理などのフロー制御での異常処理機能を併用したい場合は、エラー処理メソッドでの異常処理終了後、例外をthrowするようにしてください。
アプリケーション連携実行基盤固有機能を利用する方法について説明します。
アプリケーション連携実行基盤固有機能を利用するために必要なクラスを以下に示します。
固有機能利用クラス
このクラスは、[業務処理実行アプリケーション(Java)生成]ウィザードで[固有機能利用クラスを継承する]をチェックした場合に、以下のソースを出力します。
import文、およびクラス定義部(extends)にクラス名を出力
以下に[業務処理実行アプリケーション(Java)生成]ウィザードでのチェック状態と出力されるソースを示します。
| 固有機能利用クラス |
---|---|
[業務処理実行アプリケーション(Java)生成]ウィザード | [固有機能利用クラスを継承する]をチェック |
出力するクラス名 | com.fujitsu.interstage.apfw.application.FrameworkApplication |
固有機能利用クラスでアプリケーション連携実行基盤コンテキストクラスが利用できます。
◆アプリケーション連携実行基盤コンテキストクラスを利用する
固有機能利用クラスで利用できるアプリケーション連携実行基盤コンテキストクラスについて以下に示します。
アプリケーション連携実行基盤コンテキストクラス
com.fujitsu.interstage.apfw.application.ApplicationContext
以下にフィールドおよびメソッドを示します。
フィールドおよびメソッド | 内容 |
---|---|
getApplicationContext() | コンテキスト取得メソッド |
アプリケーション連携実行基盤コンテキストクラスを利用して、以下の機能を実装することができます。
汎用ログ利用機能
業務処理開始アプリケーションで指定されるコンテキストIDが設定されたログ出力クラスによる汎用ログを出力できます。
詳細は“第19章 汎用ログ”の“19.4 汎用ログを利用したアプリケーションの開発”を参照してください。
高信頼性ログ利用機能
業務処理開始アプリケーションで指定されるコンテキストIDが設定されたログ出力クラスによる高信頼性ログを出力できます。
詳細は“第18章 高信頼性ログ”の“18.2 高信頼性ログを利用したアプリケーションの開発”を参照してください。
コリレーションID取得機能
アプリケーションの入力パラメタとしてコリレーションIDを指定しない場合でも、アプリケーション内でコリレーションIDを取得できます。
フロー定義名取得機能
アプリケーションの入力パラメタとしてフロー定義名を指定しない場合でも、アプリケーション内でフロー定義名を取得できます。
コンテキストID取得機能
ログをアプリケーションと対応付けるコンテキストIDを、アプリケーション内で取得できます。オンラインフレームワークとの連携時に、本機能を用いてログとの対応付けを行うことができます。
各機能の詳細は“12.1.4 アプリケーション連携実行基盤固有機能”を参照してください。
以下に利用できるメソッドを示します。
メソッド | 内容 |
---|---|
getLogComposer(java.lang.String logName) | LogComposer取得メソッド |
getULogComposer(java.lang.String logName,java.sql.Connection con) | UlogComposer取得メソッド |
getCorrelationID() | コリレーションID取得メソッド |
getFlowID() | フロー定義名取得メソッド |
getContextID() | コンテキストID取得メソッド |
以上の機能の処理を記述します。
public void someMethod(String arg0) { ApplicationContext context = getApplicationContext(); LogComposer myLogger = context.getLogComposer("userlog"); myLogger.println("someMethod start"); } |
注意
固有機能利用クラスを利用するには、プロジェクトに実行基盤連携用ライブラリのクラスパスエントリを追加する必要があります。また、汎用ログ利用機能、高信頼性ログ利用機能を利用するには、Apcoordinatorライブラリのクラスパスエントリを追加する必要があります。
各クラスパスエントリを追加する手順については、“15.4.1.1 実行基盤連携用ライブラリ”を参照してください。
通常はアプリケーション連携フロープロジェクトの新規作成時に自動で追加されています。
◆ログ機能で使用する初期化パラメタを設定する
ログ機能を使用する場合、デプロイメントディスクリプタの環境プロパティに、ログ機能で使用する初期化パラメタを設定することができます。初期化パラメタの詳細については、“19.5.1.4 初期化パラメタ”を参照してください。
業務処理メソッドを記述する方法について説明します。
フロー定義ファイルの呼出し定義で定義した呼出し対象のメソッドを業務処理実行アプリケーションに追加した後、メソッド内に業務処理を記述します。呼出し定義の詳細については、“5.2.4.3 アクティビティの設定”の“◆呼出し定義”を参照してください。
フロー定義ファイルから呼出し定義を参照して業務処理実行アプリケーションを作成するには、[業務処理実行アプリケーション(Java)生成]ウィザードを使用します。詳細については、“15.4.2 業務処理実行アプリケーションの生成”を参照してください。
| 呼出し定義を参照 |
---|---|
[業務処理実行アプリケーション(Java)生成]ウィザード | [フロー定義ファイルから業務処理実行アプリケーション(Java)の定義を参照する。]をチェック |
出力するメソッド | フロー定義ファイルの呼出し定義で定義したメソッド |
出力したメソッド内に処理を記述します。
/** * Method getChitName. * @return String 伝票名 */ public String getChitName() { // TODO 業務処理を記述してください。 ・・・ return null; } |
メソッドの引数は、呼出し定義で指定した業務データです。引数がjava.util.Mapオブジェクトの場合、すべての業務データをまとめた情報になります。java.util.Mapオブジェクトのキー名は業務データ名になります。
注意
呼出し定義のメソッドが復帰値に業務データを定義していた場合、出力したメソッドのコメントに業務データ名と型が記述されています。メソッド内のreturn文に、コメントに記述されている業務データの値を復帰するような処理を記述する必要があります。
アプリケーション連携実行基盤のメッセージ保証レベルとして「メッセージ保証あり」を選択し、使用するイベントチャネルの種類として「データベース連携」を選択すると、データベース製品のローカルトランザクションを使用したメッセージ保証機能が有効となります。メッセージ保証機能を有効とし、業務処理実行アプリケーションから業務用データベースへアクセスする場合は、以下に示す方法で取得したコネクションを使用してアクセスしてください。
Interstage管理コンソールで定義したデータベースリソース定義を使用してデータベースのコネクションを管理するため、javax.naming.InitialContextのインスタンス生成は、デフォルトコンストラクタを使用して行ってください。
データベースアクセスを行う場合のコネクションは、javax.sql.DataSourceを使用して獲得してください。
以下に業務用データベースのJDBCデータソース名が“BASDataSource”の場合の例を示します。
javax.sql.DataSource dataSource = null; try { javax.naming.Context ctx = new javax.naming.InitialContext(); dataSource = (javax.sql.DataSource)ctx.lookup("BASDataSource"); } catch ( javax.naming.NamingException ex ) { } |
業務処理実行アプリケーションからアプリケーション連携実行基盤へ発行する例外は、java.io.Serializableをインプリメントしてください。また、発行する例外クラスにほかのクラスを含む場合や、継承関係のクラスがある場合も、すべてのクラスにjava.io.Serializableをインプリメントしてください。java.io.Serializableをインプリメントしていない例外が発行された場合は、異常処理定義で指定された異常処理が行われず、メッセージはシリアライズファイルへ退避されます。
異常処理の詳細については、“2.4 異常処理”を参照してください。
ポイント
ユーザ定義型クラス、またはユーザ定義型Exceptionを使用する場合、以下の実装方法があります。
業務処理実行アプリケーションにユーザ定義型クラス、またはユーザ定義型Exceptionを実装する場合
業務処理実行アプリケーションにユーザ定義型クラス、またはユーザ定義型Exceptionを組み込んでください。
運用時に業務処理実行アプリケーションを呼び出す場合、ユーザ定義型クラス、またはユーザ定義型Exceptionの情報は、自動的に読み込まれますので、IJServerのクラスパス設定に、classファイルまたはjarファイルを設定する必要はありません。
本方法が推奨となります。
業務処理実行アプリケーションにユーザ定義型クラス、またはユーザ定義型Exceptionを実装しない場合
運用時に業務処理実行アプリケーションを呼び出し、さらにユーザ定義型クラス、またはユーザ定義型Exceptionを呼び出す必要があるため、IJServerのクラスパス設定に、classファイルまたはjarファイルを設定してください。
また本方法を用いる場合、“アプリケーションサーバオンラインマニュアル”の“Interstage Application Server J2EEユーザーズガイド(旧版互換)”を参照し、アプリケーションのクラス設計を行ってください。