BEA ホーム | 製品 | デベロッパ・センタ | support | askBEA |
|
e-docs > WebLogic Integration > BPM トピック > BPM クライアント アプリケーション プログラミング > ビジネス オペレーションのコンフィグレーション |
BPM クライアント アプリケーション プログラミング |
ビジネス オペレーションのコンフィグレーション
ビジネス オペレーションは、カスタマイズされたアクションを作成することのできる、EJB または Java クラスのインスタンスで実装された、メソッド呼び出しを表します。詳細については『WebLogic Integration Studio ユーザーズ ガイド』の「ワークフロー リソースのコンフィグレーション」の「ビジネス オペレーションのコンフィグレーション」を参照してください。
この章ではビジネス オペレーションのコンフィグレーションと関連するタスクについて説明します。内容は以下のとおりです。
この章に記載するメソッドの詳細については、Javadoc の com.bea.wlpi.server.admin.Admin および com.bea.wlpi.server.catalog.EJBCatalog を参照してください。
ビジネス オペレーションの追加
ビジネス オペレーションを追加するには、以下のいずれかの com.bea.wlpi.server.admin.Admin メソッドを使用します。
メソッド 1
public java.lang.String addBusinessOperation(
com.bea.wlpi.common.EJBInvocationDescriptor descriptor
) throws java.rmi.RemoteException,
com.bea.wlpi.common.WorkflowException
メソッド 2
public java.lang.String addBusinessOperation(
com.bea.wlpi.common.ClassInvocationDescriptor descriptor
) throws java.rmi.RemoteException,
com.bea.wlpi.common.WorkflowException
各メソッドにより、1 つのビジネス オペレーションが作成されます。1 つ目のメソッドはセッションまたはエンティティ EJB で実装されたビジネス オペレーションを作成し、2 つ目はサーバでアクセス可能な Java クラス インスタンスによって実装されたビジネス オペレーションを作成します。
注意: セッション EJB は、ワークフロー変数内に保管することができますが、ステートフル セッション EJB は、作成されたトランザクションが存在する期間のみ保管され、ワークフロー インスタンスの一部としては永続しません。トランザクション モデルの詳細については、BPM トランザクション モデルの理解を参照してください。一方、エンティティ EJB、ステートレス EJB、および Java クラス インスタンスは、ワークフロー インスタンスの一部として永続します。
addBusinessOperation() メソッドのパラメータを次の表に示します。パラメータには値の指定が必要です。
各メソッドは、新しいビジネス オペレーションの ID を返します。 たとえば、次のコードは指定された呼び出し記述子 descriptor と EJB ビジネス オペレーションを追加します。このコード例では、admin は Admin EJB への EJBObject 参照を表します。 addBusinessOperation() メソッドの詳細については、Javadoc の com.bea.wlpi.server.admin.Admin を参照してください。
String operationId = admin.addBusinessOperation(descriptor);
ビジネス オペレーションの取得
定義されたビジネス オペレーションのリストを取得するには、次の com.bea.wlpi.server.admin.Admin メソッドを使用します。
public java.util.List getBusinessOperations(
) throws java.rmi.RemoteException,
com.bea.wlpi.common.WorkflowException
メソッドは、現在定義されているビジネス オペレーションが識別されている com.bea.wlpi.common.EJBInvocationDescriptor または com.bea.wlpi.common.ClassInvocationDescriptor オブジェクトのリストを返します。各オブジェクトについての情報にアクセスするには、それぞれEJBInvocationDescriptor オブジェクト、またはClassInvocationDescriptor オブジェクトに記載する EJBInvocationDescritor、または ClassInvocationDescriptor オブジェクト メソッドを使用します。
たとえば、次のコードは現在定義されているビジネス オペレーションを取得します。このコード例では、admin は Admin EJB への EJBObject 参照を表します。
String operationsList = admin.getBusinessOperations();
getBusinessOperations() メソッドの詳細については、Javadoc の com.bea.wlpi.server.admin.Admin を参照してください。
ビジネス オペレーションの更新
ビジネス オペレーションを更新するには、以下のいずれかの com.bea.wlpi.server.admin.Admin メソッドを使用します。
メソッド 1
public void updateBusinessOperation(
java.lang.String busOpId,
com.bea.wlpi.common.EJBInvocationDescriptor descriptor
) throws java.rmi.RemoteException,
com.bea.wlpi.common.WorkflowException
メソッド 2
public void updateBusinessOperation(
java.lang.String busOpId,
com.bea.wlpi.common.EJBInvocationDescriptor descriptor
) throws java.rmi.RemoteException,
com.bea.wlpi.common.WorkflowException
各メソッドにより 1 つのビジネス オペレーションが更新されます。1 つ目のメソッドはセッションまたはエンティティ EJB で実装されたビジネス オペレーションを更新し、2 つ目はサーバでアクセス可能な Java クラス インスタンスによって実装されたビジネス オペレーションを更新します。
updateBusinessOperation() メソッドのパラメータを次の表に示します。パラメータには値の指定が必要です。
たとえば、次のコードは指定された ID および呼び出し記述子 descriptor で EJB ビジネス オペレーションを更新します。このコード例では、admin は Admin EJB への EJBObject 参照を表します。 updateBusinessOperation() メソッドの詳細については、Javadoc の com.bea.wlpi.server.admin.Admin を参照してください。
admin.updateBusinessOperation(12345, descriptor);
ビジネス オペレーションの削除
ビジネス オペレーションを削除するには、次の com.bea.wlpi.server.admin.Admin メソッドを使用します。
public void deleteBusinessOperation(
java.lang.String busOpId
) throws java.rmi.RemoteException,
com.bea.wlpi.common.WorkflowException
deleteBusinessOperation() メソッドのパラメータを次の表に示します。パラメータには値の指定が必要です。
たとえば、次のコードでは、指定されたビジネス オペレーションが削除されます。このコード例では、admin は Admin EJB への EJBObject 参照を表します。 deleteBusinessOperation() メソッドの詳細については、Javadoc の com.bea.wlpi.server.admin.Admin を参照してください。
admin.deleteBusinessOperation(124345);
EJB 記述子の取得
EJB によって実装されたビジネス オペレーションを追加、更新、または削除するには、EJB 記述子を取得する必要があります。EJB 記述子を取得するには、com.bea.wlpi.server.catalog.EJBCatalog EJB を通じて選択可能なメソッドを使用します。
注意: また、EJBInvocationDescriptor クラスには EJB 記述子の取得、設定、および呼び出しメソッドも含まれます。詳細については、EJBInvocationDescriptor オブジェクトを参照してください。
次の表に、EJB 記述子のプリファレンスを設定するために使用できる com.bea.wlpi.server.catalog.EJBCatalog メソッドを示します。
次の表に、EJB 記述子を取得するために使用できる com.bea.wlpi.server.catalog.EJBCatalog メソッドを示します。
たとえば、次のコードは EJB のホット デプロイメントを有効化し、すべての EJBHome オブジェクトの JNDI 名を取得します。このコード例では、catalog は、EJBCatalog EJB への EJBObject 参照を表します。 EJBCatalog メソッドの詳細については、Javadoc の com.bea.wlpi.server.catalog.EJBCatalog を参照してください。
catalog.setInspectAlways(true);
List ejbList = catalog.getEJBNames();
Java クラス記述子の取得
Java クラスによって実装されたビジネス オペレーションを追加、更新、または削除するには、クラス記述子を取得する必要があります。クラス記述子を取得するには、com.bea.wlpi.server.admin.Admin EJB を通じて選択可能なメソッドを使用します。
注意: また、ClassInvocationDescriptor クラスには、クラス記述子の取得、設定、および呼び出しメソッドも含まれます。詳細については、ClassInvocationDescriptor オブジェクトを参照してください。
Java クラス記述子を取得するには、次の com.bea.wlpi.server.admin.Admin メソッドを使用します。
public com.bea.wlpi.common.ClassDescriptor getClassDescriptor(
java.lang.String className
) throws java.rmi.RemoteException,
com.bea.wlpi.common.WorkflowException
getClassDescriptor() メソッドのパラメータを次の表に示します。パラメータには値の指定が必要です。
メソッドは、指定された Java クラスのメタデータを含む ClassDescriptor を返します。 たとえば、次のコードは指定された Java クラスのクラス記述子、com.somedomain.someproduct.CreateWidget を取得します。このコード例では、admin は Admin EJB への EJBObject 参照を表します。 getClassDescriptor() メソッドの詳細については、Javadoc の com.bea.wlpi.server.admin.Admin を参照してください。
ClassDescriptor descriptor = admin.getClassDescriptor
(“com.somedomain.someproduct.CreateWidget”);
ビジネス オペレーションのコンフィグレーション例
この節では、コマンドライン管理クライアント例から抜粋して、環境のコンフィグレーションを示します。
EJB 記述子の取得例
この節では、コマンドライン管理例から抜粋して、EJB 記述子およびセットと関連したプリファレンスを示します。
注意: コマンドライン管理サンプルの詳細については、コマンドライン管理サンプルを参照してください。
このサンプルでは、ユーザと通信するための入力ストリームが定義されており、ユーザは以下のアクションのいずれかを指定するよう求められます。
重要なコード行は、太字で強調されています。このコード例では、catalog は、EJBCatalog EJB への EJBObject 参照を表します。
/* ユーザとの通信のための入力ストリームを作成する */
stdIn = new BufferedReader( new InputStreamReader( System.in ) );
/* ツール タイトルを表示する */
System.out.print( "¥n--- Command Line Administration v1.1 ---" );
/* メイン メニューを表示してユーザと交信する */
while( true ) {
/* メニューを表示する */
System.out.println( "¥n--- Main Menu ---" );
System.out.println( "¥nEnter choice:" );
System.out.println( "1) Organizations" );
System.out.println( "2) Roles" );
System.out.println( "3) Users" );
System.out.println( "4) Security Realm" );
System.out.println( "5) Business Operations" );
System.out.println( "6) Event Keys" );
System.out.println( "7) Business Calendars" );
System.out.println( "8) EJB Catalog" );
System.out.println( "9) Server Properties" );
System.out.println( "Q) Quit" );
System.out.print( ">> " );
.
.
.
mngEJBCatalog() メソッドは、EJB カタログの管理方法を表し、必要な情報を検索するためにユーザと交信します。
private static void mngEJBCatalog( ) {
boolean isInspectAlways;
List ejbList;
String answer;
/* ユーザとの通信のための入力ストリームを作成する */
BufferedReader stdIn = new BufferedReader( new InputStreamReader( System.in ) );
try {
/* メニューを表示してユーザと交信する */
while( true ) {
/* メニューを表示する */
System.out.println( "¥n¥n--- EJB Catalog ---" );
System.out.println( "¥nEnter choice:" );
System.out.println( "1) Query Inspect Always Flag" );
System.out.println( "2) Set Inspect Always Flag" );
System.out.println( "3) List names of deployed EJBs" );
System.out.println( "4) List descriptors of deployed EJBs" );
System.out.println( "B) Back to previous menu" );
System.out.println( "Q) Quit" );
System.out.print( ">> " );
/* ユーザの選択を取得する */
String line = stdIn.readLine( );
/* ユーザが選択を行わないで〔Enter〕を押したか ? */
if( line.equals( "" ) )
continue;
/* ユーザが複数の文字を入力したか ? */
else if( line.length( ) > 1 ) {
System.out.println( "*** Invalid selection" );
continue;
}
/* 大文字および文字へのコンバート*/
char choice = line.toUpperCase( ).charAt( 0 );
/* ユーザの選択を処理する */
switch( choice ) {
.
.
.
Inspect Always フラグを問い合わせる
Inspect Always フラグのクエリ方法を示します。
/* Inspect Always フラグを問い合わせる */
case '1' :
/* WLPI 公開 API メソッド */
/* 注意: 発生した例外を取り込むコードを
* 追加するとよい */
isInspectAlways = catalog.inspectAlways( );
if( isInspectAlways )
System.out.println( "¥nInspect Always flag is set " +
"(EJB hot deployment is enabled)" );
else
System.out.println( "¥nInspect Always flag is not set " +
"(EJB hot deployment is disabled)" );
break;
.
.
.
Inspect Always フラグを設定する
Inspect Always フラグの設定方法を示します。
/* Inspect Always フラグを設定する */
case '2' :
/* フラグ設定用の値を取得する */
/* Inspect Always フラグの設定/解除が必要かどうかを
* ユーザに求める */
if( ( answer = askQuestion( "¥nEnable Inspect Always (y/n)?" ) )
== null ) {
/* ユーザによる操作の取り消し */
System.out.println( "*** Cancelled" );
break;
}
/* 応答を解析する */
isInspectAlways = ( answer.equals( "y" ) || answer.equals( "Y" ) );
try {
/* WLPI 公開 API メソッド */
/* Inspect Always フラグを設定する */
catalog.setInspectAlways( isInspectAlways );
/* 正常終了(例外の発生なし) */
System.out.println( "- Success" );
}
catch( Exception e ) {
System.out.println( "*** Failed to set Inspect Always flag" );
System.err.println( e );
}
break;
.
.
.
デプロイ EJB 名を取得する
デプロイ EJB 名の取得方法を示します。
/* デプロイ EJB 名をリストする */
case '3' :
/* WLPI 公開 API メソッド */
/* デプロイ EJB の JNDI 名をリストする */
/* 注意 : 発生した例外を取り込むコードを
* 追加するとよい */
ejbList = catalog.getEJBNames( );
/* デプロイ EJB はあるか ? */
if( ejbList.size( ) == 0 )
System.out.println( "¥nNo EJB deployed" );
else
System.out.println( "¥nCataloged EJBs:" );
/* リストを処理して、名前を表示する */
for( int i = 0; i < ejbList.size( ); i++ )
System.out.println( "- JNDI Name: " + ejbList.get( i ) );
break;
.
.
.
EJB デプロイメント記述子を取得する
EJB デプロイメント記述子の取得方法を示します。
/* デプロイ EJB の記述子をリストする */
case '4' :
/* WLPI 公開 API メソッド */
/* デプロイ EJP をリストする */
/* ejbList は、com.bea.wlpi.common.EJBDescriptor
* オブジェクトのリストである。*/
/* 注意 : 発生した例外を取り込むコードを
* 追加するとよい */
ejbList = catalog.getEJBDescriptors( );
/* デプロイ EJB はあるか ? */
if( ejbList.size( ) == 0 )
System.out.println( "¥nNo EJB deployed" );
else
System.out.println( "¥nCataloged EJBs:" );
/* リストを処理して、その他の属性を表示する */
for( int i = 0; i < ejbList.size( ); i++ ) {
/* リストから要素を取り出す */
EJBDescriptor ejbDescriptor = ( EJBDescriptor )ejbList.get( i );
/* 選択可能な属性のサブセットを表示する */
System.out.println( "¥n- Deployment Name: " +
ejbDescriptor.getEJBDeploymentName( ) );
System.out.println( " Home Interface: " +
ejbDescriptor.getEJBHomeName( ) );
System.out.println( " Remote Interface: " +
ejbDescriptor.getEJBRemoteName( ) );
/* など ...
* 選択可能なすべてのメソッドのリストについては、
* WLPI JavaDocs、Class EJBDescriptor を参照 */
}
break;
.
.
.
ビジネス オペレーションのコンフィグレーション例
この節では、コマンドライン管理例から抜粋して、ビジネス オペレーションのコンフィグレーション方法を示します。
注意: コマンドライン管理サンプルの詳細については、コマンドライン管理サンプルを参照してください。
このサンプルでは、ユーザと通信するための入力ストリームが定義されており、ユーザは以下のアクションのいずれかを指定するよう求められます。
重要なコード行は、太字で強調されています。このコード例では、admin は Admin EJB への EJBObject 参照を表します。
/* ユーザとの通信のための入力ストリームを作成する */
stdIn = new BufferedReader( new InputStreamReader( System.in ) );
/* ツール タイトルを表示する */
System.out.print( "¥n--- Command Line Administration v1.1 ---" );
/* メイン メニューを表示してユーザと交信する */
while( true ) {
/* メニューを表示する */
System.out.println( "¥n--- Main Menu ---" );
System.out.println( "¥nEnter choice:" );
System.out.println( "1) Organizations" );
System.out.println( "2) Roles" );
System.out.println( "3) Users" );
System.out.println( "4) Security Realm" );
System.out.println( "5) Business Operations" );
System.out.println( "6) Event Keys" );
System.out.println( "7) Business Calendars" );
System.out.println( "8) EJB Catalog" );
System.out.println( "9) Server Properties" );
System.out.println( "Q) Quit" );
System.out.print( ">> " );
.
.
.
/**
* WLPI ビジネス オペレーションと関連する、Admin インタフェースで選択可能な公開 API メソッドを示す目的で
* 必要な情報をすべて取得するために
* ユーザと交信するメソッド
*/
public static void mngBusinessOperations() {
ClassInvocationDescriptor operationClassInfo;
EJBInvocationDescriptor operationEjbInfo;
List operationList;
Object o;
String operationId;
/* ユーザとの通信のための入力ストリームを作成する */
BufferedReader stdIn = new BufferedReader(
new InputStreamReader( System.in ) );
try {
/* メニューを表示してユーザと交信する*/
while( true ) {
/* メニューを表示する */
System.out.println( "¥n¥n--- Business Operations ---" );
System.out.println( "¥nEnter choice:" );
System.out.println( "1) Delete a Business Operation" );
System.out.println( "2) List all Business Operations" );
System.out.println( "B) Back to previous menu" );
System.out.println( "Q) Quit" );
System.out.print( ">> " );
/* ユーザの選択を取得する */
String line = stdIn.readLine();
/* ユーザが選択を行わないで〔Enter〕を押したか ? */
if( line.equals( "" ) )
continue;
/* ユーザが複数の文字を入力したか ? */
else if( line.length() > 1 ) {
System.out.println( "*** Invalid selection" );
continue;
}
/* 大文字および文字へのコンバート*/
char choice = line.toUpperCase().charAt( 0 );
/* ユーザの選択を処理する */
switch( choice ) {
.
.
.
ビジネス オペレーションを削除する
ビジネス オペレーションの削除方法を示します。
/* ビジネス オペレーションを削除する */
case '1' :
/* 削除するオペレーションのオペレーション ID を取得する */
if( ( operationId = askQuestion( "¥nEnter Business Operation
ID to delete" ) ) == null ) {
/* ユーザによる操作の取り消し */
System.out.println( "*** Cancelled" );
break;
}
try {
/* WLPI 公開 API メソッド */
/* ビジネス オペレーションを削除する */
admin.deleteBusinessOperation( operationId );
/* 正常終了(例外の発生なし) */
System.out.println( "- Deleted" );
}
catch( Exception e ) {
System.out.println( "*** Unable to delete Business Operation" );
System.err.println( e );
}
break;
.
.
.
すべてのビジネス オペレーションを取得する
すべてのビジネス オペレーションの取得方法を示します。
/* すべてのビジネス オペレーションをリストする */
case '2' :
try {
/* WLPI 公開 API メソッド */
/* すべてのビジネス オペレーションを取り出す */
operationList = admin.getBusinessOperations();
/* 定義されているオペレーションはあるか ? */
if( operationList.size() == 0 )
System.out.println( "¥nNo Business Operation defined" );
else
System.out.println( "¥nDefined Business Operations:" );
/* リストを処理して、オペレーションと属性を表示する */
for( int i = 0; i < operationList.size(); i++ ) {
/* リストから要素を取り出す */
o = operationList.get( i );
/* ビジネス オペレーションは、クラスであるか ? */
if( o instanceof ClassInvocationDescriptor ) {
operationClassInfo = ( ClassInvocationDescriptor ) o;
/* ビジネス オペレーション タイプを表示する */
System.out.println( "- Business Operation Type: Class" );
/* オペレーション ID を取り出して表示する */
/* WLPI 公開 API メソッド */
System.out.println( " ID: " +
operationClassInfo.getId() );
/* クラス名を取り出して表示する */
/* WLPI 公開 API メソッド */
System.out.println( " Class Name: " +
operationClassInfo.getClassName() );
/* クラス記述を取り出して表示する */
/* WLPI 公開 API メソッド */
System.out.println( " Description: " +
operationClassInfo.getDescription() );
/* など ...
* 選択可能なすべてのメソッドのリスト
* については、
* WLPI JavaDocs、ClassInvocationDescriptor を参照 */
}
/* ビジネス オペレーションは、EJB であるか ? */
else if( o instanceof EJBInvocationDescriptor ) {
operationEjbInfo = ( EJBInvocationDescriptor ) o;
/* ビジネス オペレーション タイプを表示する */
System.out.print( "- Business Operation Type: " );
/* セッションあるいは エンティティ EJB であるか */
/* WLPI 公開 API メソッド */
if( operationEjbInfo.isSessionEJB() )
System.out.println( "Session EJB" );
else
System.out.println( "Entity EJB" );
/* オペレーション ID を取り出して表示する */
/* WLPI 公開 API メソッド */
System.out.println( " ID: " +
operationEjbInfo.getId() );
/* EJB デプロイメント名を取り出して表示する */
/* WLPI 公開 API メソッド */
System.out.println( " EJB deployment name: " +
operationEjbInfo.getEJBDeploymentName() );
/* Bean の記述を取り出して表示する */
/* WLPI 公開 API メソッド */
System.out.println( " Description: " +
operationEjbInfo.getDescription() );
/* など ...
* 選択可能なすべてのメソッドのリスト
* Class EJBInvocationDescriptor,
* WLPI JavaDocs、Class EJBInvocationDescriptor を参照 */
}
}
}
catch( Exception e ) {
System.out.println( "*** Unable to list Business Operations" );
System.err.println( e );
}
break;
.
.
.