Hitachi

Cosminexus V11 BPM/ESB基盤 サービスプラットフォーム 開発ガイド 基本開発編


5.6.5 Java呼出アクティビティ

専用インターフェース(jp.co.Hitachi.soft.csc.bp.receiver.ejb.CustomClassInterfaceM,またはjp.co.Hitachi.soft.csc.bp.receiver.ejb.CustomClassInterface)を実装したJavaクラスの呼び出しを定義するアクティビティです。

Java呼出アクティビティは,[Java呼出アクティビティ]ダイアログで詳細を定義します。

〈この項の構成〉

(1) Java呼出アクティビティの定義前の準備

Java呼出アクティビティを定義する前には,次の準備をする必要があります。

HCSCTEプロジェクトの作成

[Java呼出アクティビティ]ダイアログで指定するJavaクラスは,HCSCTEプロジェクトのsrcディレクトリに格納されます。そのため,必ずHCSCTEプロジェクトを作成しておく必要があります。

HCSCTEプロジェクトの作成方法については,「3.1 プロジェクトの管理」を参照してください。

ユーザ定義Javaクラスの作成

Java呼出アクティビティで利用するJavaクラスを作成します。利用するJavaクラスのインターフェースについては「5.6.5(2) 利用するJavaクラスのインターフェース」を参照してください。

注意事項
  • Javaクラスは,リポジトリ内のすべてのHCSCコンポーネントで共有されます。そのため,既存のJavaクラスを変更した場合,変更前の内容のクラスと変更後の内容のクラスのHCSCコンポーネントが混在してしまうおそれがあります。Javaクラスを変更した場合,変更したJavaクラスを呼び出すJava呼出アクティビティが定義されているビジネスプロセスを,再度パッケージングしてください。

    また,Java呼出アクティビティを削除しても,利用しているJavaクラスは削除されません。使用していない不要なJavaクラスは,別途削除してください。

  • Javaクラスの呼び出し時に確保したリソースは,処理が終了しても保持し続けるため,システム全体に高い負荷がかかった場合に,Javaヒープ不足やMetaspace領域不足などが原因でOutOfMemoryErrorが発生することがあります。そのため,OutOfMemoryErrorが発生したときに適切にリソースを解放する処理や,エラー処理(ロールバックなど)を実装しておく必要があります。

  • 専用インターフェース(jp.co.Hitachi.soft.csc.bp.receiver.ejb.CustomClassInterfaceM,またはjp.co.Hitachi.soft.csc.bp.receiver.ejb.CustomClassInterface)を実装したJavaクラスをコンテナ拡張ライブラリに含めないでください。Javaクラスはビジネスプロセスをパッケージングすると,自動的にEARファイルに追加されます。

ライブラリの追加

ビジネスプロセスをパッケージングして作成されるEARファイルにライブラリを追加したい場合,HCSCTEプロジェクトのlibディレクトリにライブラリをコピーしておいてください。

libディレクトリにコピーしたライブラリは,ビジネスプロセスをパッケージングすると,自動的にEARファイルに追加されます。

なお,libディレクトリには,ディレクトリや次の名前のライブラリを登録しないでください。

  • csbdef.jar

  • cscbp_ejb.jar

  • csbjava.jar

注意事項
  • HCSCTEプロジェクト内のsrcディレクトリおよびlibディレクトリへのリンクは削除しないでください。

  • ビジネスプロセスをパッケージングする前に,Eclipse上でJavaクラスをビルドしてください。ビルドされていないJavaクラスは,パッケージング時にビジネスプロセスに取り込まれません。

(2) 利用するJavaクラスのインターフェース

Java呼出アクティビティで呼び出すJavaクラスは,CustomClassInterfaceMインターフェース,またはCustomClassInterfaceインターフェース(CustomClassInterfaceMの互換用インターフェース)を実装している必要があります。

(a) CustomClassInterfaceMインターフェース

package jp.co.Hitachi.soft.csc.bp.receiver.ejb;
 
public interface CustomClassInterfaceM {
    public Object invoke(
        String processName,
        int version,
        String activityName,
        Object... inputData
    ) throws CSBUserException, CSBSystemException;
}

Javaクラスの内容について次に説明します。

引数

仮引数名

説明

processName

ビジネスプロセス名

version

ビジネスプロセスのバージョン

activityName

アクティビティ名

inputData

[Java呼出アクティビティ]ダイアログの[引数用割当変数]で指定した変数

注※

可変長引数のため,複数の値を指定することができます。

戻り値

[Java呼出アクティビティ]ダイアログの[戻り値用割当変数]に指定した変数に代入されます。

例外

throwされる例外がCSBUserExceptionか,CSBSystemExceptionかによって処理が異なります。また,この2つの例外以外の例外が発生した場合,処理が中断されます。この場合,プロセスの実行状態を永続化しているときには,ロールバックが実行されます。

CSBUserExceptionがthrowされた場合

Java呼出アクティビティにフォルト処理が設定されている場合,CSBUserExceptionがthrowされると,フォルトコネクションでフォルト処理として定義されているアクティビティが実行されます。

Java呼出アクティビティにフォルト処理が設定されていない場合,invokeJavaFaultが発生したものとして処理が進められます。

CSBUserExceptionのインターフェースを次に示します。

 package jp.co.Hitachi.soft.csc.bp;
 
 public class CSBUserException extends Exception {
     public CSBUserException() { super(); }
     public CSBUserException(String message) { super(message); }
 }
CSBSystemExceptionがthrowされた場合

CSBSystemExceptionがthrowされると,システム例外が発生したものとして処理が中断されます。このとき,プロセスの実行状態を永続化している場合には,ロールバックが実行されます。

CSBSystemExceptionのインターフェースを次に示します。

package jp.co.Hitachi.soft.csc.bp;
 
 public class CSBSystemException extends Exception {
     public CSBSystemException() { super(); }
     public CSBSystemException(String message) { super(message); }
     public CSBSystemException(String message, Throwable cause) {
         super(message, cause);
     }
     public CSBSystemException(Throwable cause) { super(cause); }
 }

(b) CustomClassInterfaceインターフェース

package jp.co.Hitachi.soft.csc.bp.receiver.ejb;
 
public interface CustomClassInterface {
    public Object invoke(
        String processName,
        int version,
        String activityName,
        Object inputData
    ) throws CSBUserException, CSBSystemException;
}
ポイント

CustomClassInterfaceは,CustomClassInterfaceMの互換用インターフェースです。CustomClassInterfaceMを使用することを推奨します。

Javaクラスの内容について次に説明します。

引数

仮引数名

説明

processName

ビジネスプロセス名

version

ビジネスプロセスのバージョン

activityName

アクティビティ名

inputData

[Java呼出アクティビティ]ダイアログの[引数用割当変数]で指定した変数

注※

変数が複数指定されている場合は,リクエスト処理時にエラーメッセージ(KDEC20093-E)が出力されます。

戻り値

[Java呼出アクティビティ]ダイアログの[戻り値用割当変数]に指定した変数に代入されます。

例外

throwされる例外がCSBUserExceptionか,CSBSystemExceptionかによって処理が異なります。またこの2つの例外以外の例外が発生した場合,処理が中断されます。このとき,プロセスの実行状態を永続化している場合には,ロールバックが実行されます。

CSBUserException,またはCSBSystemExceptionがthrowされた場合の処理については,「(a) CustomClassInterfaceMインターフェース」の戻り値の説明を参照してください。

CSBUserExceptionおよびCSBSystemException以外の例外が発生した場合,処理が中断されます。このとき,プロセスの実行状態を永続化している場合には,ロールバックが実行されます。

注意事項
  • [Java呼出アクティビティ]ダイアログの[引数用割当変数]および[戻り値用割当変数]に指定する変数の型と,このインターフェースの引数および戻り値の型の対応を次に示します。

    [引数用割当変数]および[戻り値用割当変数]の変数型

    引数および戻り値の型

    boolean

    java.lang.Boolean

    numeric

    java.lang.Double

    string

    java.lang.String

    XML

    byte[]

    non-XML

    byte[]

    any

    byte[]

    上記の型以外を指定した場合,エラー(KDEC20030-E)になります。

  • 利用するJavaクラスのインターフェースはcscbp_ejb.jarに含まれます。そのため,コンパイルするときには,cscbp_ejb.jarをクラスパスに追加する必要があります。Eclipseのビルドパスにcscbp_ejb.jarが存在しないときは,<インストールディレクトリ>\CSC\lib\cscbp_ejb.jarをビルドパスに追加してください。

  • Javaプログラムでは,呼び出しごとにデフォルトコンストラクタでインスタンスが生成されます。そのため,インスタンスにデータを保持することはできません。

(3) 定義手順

Java呼出アクティビティの定義の手順を次に示します。

  1. Java呼出アクティビティをキャンバスに配置します。

    アクティビティを配置する方法については,「5.4.1 アクティビティを配置する」を参照してください。

  2. 次のどちらかの方法で[Java呼出アクティビティ]ダイアログを表示させます。

    • キャンバスのJava呼出アクティビティをダブルクリックする([Javaエディタ起動]メニューが非活性状態の場合だけ)

    • キャンバスのJava呼出アクティビティを選択して右クリックし,[設定]を選択する

    [Java呼出アクティビティ]ダイアログが表示されます。

  3. [Java呼出アクティビティ]ダイアログに必要な情報を入力します。

    [Java呼出アクティビティ]ダイアログの表示・入力内容の詳細については,マニュアル「サービスプラットフォーム リファレンス」の「1.4.10 Java呼出アクティビティダイアログ」を参照してください。

    [引数用割当変数]および[戻り値用割当変数]に設定する変数の内容を編集する場合,[編集]ボタンをクリックします。表示される[変数・相関セット一覧]ダイアログで,変数の内容を編集できます。[変数・相関セット一覧]ダイアログの詳細については,マニュアル「サービスプラットフォーム リファレンス」の「1.4.1 変数・相関セット一覧ダイアログ」を参照してください。

  4. [Java呼出アクティビティ]ダイアログの[OK]ボタンをクリックします。

    [Java呼出アクティビティ]ダイアログが閉じられます。

  5. キャンバスのJava呼出アクティビティをダブルクリックするか,または右クリックして[Javaエディタ起動]を選択します。

    EclipseのJavaエディタが起動されます。

    Javaエディタには,[Java呼出アクティビティ]ダイアログで指定したクラスのソースコードが表示されます。[Java呼出アクティビティ]ダイアログで指定したクラスが初めて編集するクラスの場合,Javaエディタを起動するとjp.co.Hitachi.soft.csc.bp.receiver.ejb.CustomClassInterfaceMをimplementsしたソースコードのテンプレートが表示されます。

  6. Java呼出アクティビティから呼び出されるJavaクラスのソースコードを,Javaエディタで編集します。

  7. 編集したJavaクラスのソースコードをコンパイルします。

  8. 編集したソースコードおよびコンパイルしたクラスファイルを保存して,Javaエディタを終了します。

(4) 定義時の注意事項

(5) Java呼び出しでエラーが発生した場合の処理

アクティビティでフォルトが発生した場合に何らかの処理を実行するとき,フォルト処理用のアクティビティを配置してフォルト処理を実行します。

フォルト処理は,フォルトが発生するアクティビティと,フォルト処理を実行するアクティビティを連結して定義します。連結にはフォルトコネクションを利用します。

(a) フォルト処理を実行する場合の定義

フォルト処理の定義手順を次に示します。

  1. フォルトが発生するアクティビティとフォルト処理を実行するアクティビティをキャンバスに配置し,詳細を定義します。

    フォルト処理を実行するアクティビティは複数定義できます。

    アクティビティの配置方法については,「5.4.1 アクティビティを配置する」を参照してください。各アクティビティの定義方法の詳細については,「5.6 アクティビティの定義」を参照してください。

  2. フォルトコネクションを利用してフォルトが発生するアクティビティとフォルト処理を実行するアクティビティを連結します。

    アクティビティの連結方法については,「5.4.2(2) 連結の設定方法」を参照してください。また,フォルトコネクションを利用できるアクティビティについては,「5.4.2(5) アクティビティの連結条件」を参照してください。

  3. 連結線をダブルクリックします。

    [フォルト処理の割当]ダイアログが表示されます。

    [フォルト処理の割当]ダイアログの入力・表示内容の詳細については,マニュアル「サービスプラットフォーム リファレンス」の「1.4.6 フォルト処理の割当ダイアログ」を参照してください。なお,フォルト処理に割り当てられる変数はメッセージ型(XML)だけです。メッセージ型(non-XMLおよびany)は割り当てられません。

  4. フォルト処理の条件を定義します。

    フォルトの対象となる変数と,フォルトが発生した場合に処理する連絡先のアクティビティを,それぞれ[割当変数]および[遷移先]ドロップダウンリストで指定します。

    定義していないフォルトが発生した場合のフォルト処理を設定する場合,[割当変数]ドロップダウンリストで「catch-all」を選択します。

  5. [OK]ボタンをクリックします。

(b) フォルト処理の定義で使用するフォルト電文を定義するスキーマファイル

フォルト電文を定義するスキーマファイルの格納先を次に示します。

<サービスプラットフォームのインストールディレクトリ>\CSC\schema\fault\cscinvokejavafault.xsd

フォルト電文を定義するスキーマファイルを次に示します。

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema elementFormDefault="qualified"
            targetNamespace="http://www.msg.csc.soft.Hitachi.co.jp/cscBpJava"
            xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:element name="fault">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="exception-name"       type="xsd:string"/>
        <xsd:element name="exception-message"    type="xsd:string"/>
        <xsd:element name="exception-error-code" type="xsd:string"/>
        <xsd:element name="exception-detail"     type="xsd:string"/>
        <xsd:element name="scope-name"           type="xsd:string"/>
        <xsd:element name="activity-name"        type="xsd:string"/>
        <xsd:element name="activity-type"        type="xsd:string"/>
        <xsd:element name="process-instance-id"  type="xsd:string"/>
        <xsd:element name="root-ap-info"         type="xsd:string"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
</xsd:schema>

設定できる要素を次に示します。

exception-name

例外名(完全修飾クラス名)を設定します。

exception-message

例外情報(CSBUserException.getMessage()で取得した情報)を設定します。

exception-error-code

CSBUserExceptionのerrorCodeに設定した情報(ユーザが任意に設定できる情報)を設定します。

exception-detail

CSBUserExceptionのdetailに設定した情報(ユーザが任意に設定できる情報)を設定します。

scope-name

Java呼出アクティビティが所属するスコープ名を設定します。

activity-name

フォルトが発生したアクティビティ名を設定します。

activity-type

フォルトが発生したアクティビティの型名を設定します。

アクティビティの型名には,javaを設定してください。

process-instance-id

プロセスインスタンス識別子を設定します。

root-ap-info

ルートアプリケーション情報を設定します。

注※

CSBUserExceptionに要素と対応する情報が設定されていない場合,空要素(空タグ)が設定されます。

(6) 処理中に例外が発生した場合の処理

例外が発生した場合の処理は,HCSCサーバランタイム定義ファイルのsyserr-to-fault-convert-all-activityプロパティの設定によって次のように異なります。

syserr-to-fault-convert-all-activityプロパティの指定がONのとき

メッセージを出力したあと,フォルト電文に設定する項目を含むメッセージを出力し,フォルトを送出します。

送出するフォルトについては,マニュアル「サービスプラットフォーム 解説」の「4.7.1 システム例外をフォルトに変換する汎用フォルトの概要」を参照してください。

syserr-to-fault-convert-all-activityプロパティの指定がOFFのとき

システム例外をthrowします。

syserr-to-fault-convert-all-activityプロパティの詳細については,マニュアル「サービスプラットフォーム リファレンス」の「6.5.6 HCSCサーバランタイム定義ファイル」を参照してください。