ヘッダーをスキップ
Oracle® Fusion Middleware Oracle Business Process Managementモデリングおよび実装ガイド
11g リリース1(11.1.1)
B61409-01
  目次へ移動
目次

前
 
次
 

24 ガイド付きビジネス・プロセスのクライアント・アプリケーションの構築

この章では、ガイド付きビジネス・プロセスの作成時に定義したマイルストンを使用して、プロセス・インスタンスを表示するクライアント・アプリケーションの構築方法について説明します。

この章の内容は次のとおりです。

24.1 ガイド付きビジネス・プロセスのクライアント・アプリケーションの構築の概要

ガイド付きビジネス・プロセスは、ガイド付きビジネス・プロセスを表示および実行するADFアプリケーションを構築するのに使用できる事前定義済ADFタスクフローを提供します。

提供されたADFタスクフローが要件を満たさない場合、UIクライアント・アプリケーションが表示する情報を取得するために、ガイド付きビジネス・プロセスが提供する一連のAPIを使用できます。これらのAPIを使用すると、WebサービスおよびEnterprise Java Beansを使用して、マイルストンおよびタスクに関するデータを取得できます。

24.2 Oracle ADFを使用したガイド付きビジネス・プロセスのクライアント・アプリケーションの開発

ガイド付きビジネス・プロセスのクライアント・アプリケーションは、ガイド付きビジネス・プロセスのタスク・フローのユーザー・インタフェースを提供します。任意の構成で、シンプルなADF JSPXページに、クライアント・アプリケーションを開発できます。通常、クライアント・アプリケーションには、アクティビティ・ガイド・ツリーを表示するリージョンと、ツリーから選択された特定のノードの詳細を表示する別のリージョンが含まれます。

これらの2つのリージョンを表示する方法として、JSPXページの左側に動的なリージョン、右側にヒューマン・タスク・フローを配置します。ただし、構成することはできます。

24.2.1 ガイド付きビジネス・プロセスのクライアント・アプリケーションを開発する方法

ガイド付きビジネス・プロセスのクライアント・アプリケーションを開発するには:

  1. JDeveloperで、ADF Webプロジェクトを使用して、新規アプリケーションを作成します。

  2. アプリケーションViewControllerを選択し、アクティビティ・ガイド・ライブラリactivityguide-ui.jarをアプリケーション・クラスパスに追加します。

    次の.jarファイルを追加します。

    • <FMW_home>/AS11gR1SOA/soa/modules/activityguide-ui_11.1.1.jar/activityguide-ui.jar

    • <FMW_home>/AS11gR1SOA/soa/modules/oracle.soa.workflow_11.1.1/bpm-services.jar

    • <FMW_home>/AS11gR1SOA/soa/modules/oracle.soa.bpel_11.1.1/orabpel-common.jar

    • <FMW_home>/AS11gR1SOA/soa/modules/oracle.soa.bpel_11.1.1/orabpel.jar

    • <FMW_home>/oracle_common/modules/oracle.xdk_11.1.0/xml.jar

    • <FMW_home>/AS11gR1SOA/soa/modules/oracle.soa.fabric_11.1.1/bpm-infra.jar

    • <FMW_home>/AS11gR1SOA/soa/modules/oracle.soa.fabric_11.1.1/fabric-runtime.jar

    • <FMW_home>/oracle_common/modules/oracle.webservices_11.1.1/wsclient.jar

    • wf_client_config.xmlファイルを使用して、Config.jarと呼ばれるファイルを作成し、アプリケーション・クラスパスに追加します。wf_client_config.xmlファイルには、ガイド付きビジネス・プロセス・インスタンスを実行するWLSインスタンスのホスト名およびポートが含まれる必要があります。


    注意:

    スタンドアロンOracle WebLogic Serverの最新バージョンからのみ、これらのJARファイルを追加します。

  3. アクティビティ・ガイドを表示する新規JSPXページを作成します。

  4. タスク・フローをJSPXページにドラッグ・アンド・ドロップし、1つをアクティビティ・ガイド・ツリーの表示に使用し、1つを個別のアクティビティ・ガイド・ノードの表示に使用します。

    タスク・フローをドラッグ・アンド・ドロップすると、そのタスク・フローのリージョンが自動的に作成されます。

  5. activityguide.propertiesと呼ばれるファイルを作成します。

    このファイルで指定できるプロパティを示します。

    例24-1は、一般的なactivityguide.propertiesファイルを示しています。

    表24-1 アクティビティ・ガイド・プロパティ

    プロパティ 説明 設定可能な値

    ServerAuthenticationMethod

    SOAエンジンにデプロイされたサービスへの接続に使用する認証モードを指定します。

    IDENTITY_PROPAGATION

    ServerConnectionMode

    データの伝送のモードを指定します。

    • SOAP

    • REMOTE

    WorklistHttpURL

    ワークリスト・アプリケーションにアクセスするためのURLを指定します。

    http://host:port/integration/worklisapp

    SelectionFilter

    アクティビティ・ガイドのプロセスをフィルタ処理するのに使用するフィルタを指定します。

    • MY

    • PREVIOUS

    • REPORTEES

    • CREATOR

    • ADMIN

    AGDefinitionFilter

    アクティビティ・ガイドのプロセスをフィルタ処理するのに使用する定義IDを指定します。アクティビティ・ガイドは、このIDに一致するプロセスの表示のみを行います。

    アクティビティ・ガイドの定義ID

    AGInstanceOrdering

    アクティビティ・ガイドのプロセスの表示に使用する順序を指定します。

    例: CREATION_DATE:ASC

    • 列名:ASC

    • 列名:DESC

    AGInstanceID

    アクティビティ・ガイド・ツリーの表示に使用するインスタンスIDを指定します。

    例: 10001

    アクティビティ・ガイドのインスタンスID

    CustomPredicate1

    アクティビティ・ガイドのプロセスのリストをフィルタ処理するための、追加の述語を指定します。

    例: CREATOR、EQ、jstein

    列名, 演算子,

    CustomPredicate2

    アクティビティ・ガイドのプロセスのリストをフィルタ処理するための、別の追加の述語を指定します。この述語はCustomPredicate1で使用されます。

    列名, 演算子,

    ShowAllAGTreeNodesProperties

    アクティビティ・ガイドで、アクティビティ・ガイド、マイルストンおよびタスクのプロパティを説明するセクションを、上部に表示するかどうかを指定します。

    • true

    • false

    ShowRefreshButton

    リージョン領域でリフレッシュ・ボタンを表示するかどうかを指定します。デフォルト値はtrueです。

    • true

    • false

    ShowGaugeTickMarks

    ゲージ・インジケータでティック・マーカーおよびラベルを表示するかどうかを指定します。デフォルト値はfalseです。

    • true

    • false

    ShowGaugePercentLabel

    ゲージ・インジケータで完了率の数値のラベルを表示するかどうかを指定します。デフォルト値はfalseです。

    • true

    • false

    AGTasksPopupTaskFlowID

    タスクのポップアップに表示する内容を指定します。

    完全修飾されたタスクフローID

    AGDoneButtonLabel

    「終了」ボタンのラベルを、終了、次のアクティビティまたは次のタスクの値で構成するのに使用します。値を構成しない場合、プロパティはデフォルト値である次のアクティビティを使用します。設定可能な値のリストに含まれない値を割り当てると、エラーが発生します。

    • AG_DONE

    • AG_NEXT_ACTIVITY

    • AG_NEXT_TASK


    例24-1 activityguide.propertiesファイル

    ServerAuthenticationMethod=IDENTITY_PROPAGATION
    ServerConnectionMode=SOAP
    SelectionFilter=MY
    #AGInstanceOrdering=CREATION_DATE:ASC
    #ShowAllAGTreeNodesProperties=false
    #CustomPredicate1=abcd,EQ,abcd
    #AGInstanceID=#34
    #CustomPredicate2=CREATOR,EQ,jcooper
    

    アイデンティティ伝播を使用してアクティビティ・ガイドを保護する場合、WorkflowAdminUserプロパティおよびWorkflowAdminPasswordプロパティは必要ありません。

  6. サマリー情報を持つタスク・フローのポップアップを有効にするには、activityguide.propertiesファイルに次のプロパティを指定します。

    AGTasksPopupTaskFlowID: このパラメータを使用して、ADF動的リージョンにタスク・フロー・サマリーを表示します。関連するタスク・フローIDを入力します。

    このパラメータを設定しない場合、OutputTextの値が、デフォルトのタスク・サマリーとして、ポップアップに表示されます。

    無効なタスク・フローのリージョンIDを指定した場合、ガイド付きビジネス・プロセスでは、リージョンがレンダリングされず、サーバー・ログにメッセージが記録されます。

  7. アクティビティ・ガイドUIの進捗状況インジケータを有効にするには:

    1. デフォルトでは、ゲージはシンプルなバーです。ただし、バー上のティック、完了率または両方で表示するように、進捗状況インジケータを構成できます。

      ティック・マークを有効にするには、タスク・フロー・パラメータShowGaugeTickMarksをtrueに設定します。

      完了率のラベルを有効にするには、タスク・フロー・パラメータShowGaugePercentLabelをtrueに設定します。

      両方の機能を有効にするには、両方のタスク・フロー・パラメータをtrueに設定します。

    2. 進捗状況インジケータは、ガイド付きビジネス・プロセスの完了率を示します。この値は、SOAコンポジットの設計時に各マイルストンに割り当てられた割合の重みに基づいて計算されます。

  8. 次のいずれかの方法を使用して、アクティビティ・ガイド・ツリーにリフレッシュ・ボタンを表示するように、アクティビティ・ガイドを構成します。

    • ファイルactivityguide.propertiesで、パラメータShowRefreshButtonを追加します。この値をtrueに設定すると、リフレッシュ・ボタンの表示が有効になり、falseまたはその他の値にすると、リフレッシュ・ボタンが無効になります。

    • アクティビティ・ガイド・ツリーのタスク・フローで、パラメータShowRefreshButtonを追加し、その値をtrueに設定します。このタスク・フロー・パラメータは、activityguide.propertiesファイルに設定されたパラメータの値をオーバーライドします。

      ShowRefreshButtonパラメータの値がemptyまたはnullの場合、ファイルactivityguide.propertiesのプロパティShowRefreshButtonでは、リフレッシュ・ボタンを表示するかどうかを定義します。activityguide.propertiesファイルにこのプロパティの値を指定しない場合、リフレッシュ・ボタンはクライアントに表示されません。

      例24-2は、ツリー・タスク・フローへのShowRefreshButtonパラメータの追加を示しています。

      例24-2 ツリー・タスク・フローへのShowRefreshButtonパラメータの追加

      <taskFlow id="dynamicRegion1"
                    taskFlowId="${backingBeanScope.dynamicLeft.dynamicTaskFlowId}"
                    xmlns="http://xmlns.oracle.com/adf/controller/binding" >            
         <parameters>
            <parameter id="ShowRefreshButton" value="true”
                         xmlns="http://xmlns.oracle.com/adfm/uimodel"/>
         </parameters>
      </taskFlow> 
      
  9. activity.propertiesファイルの場所を含めるように、ファイルadfc-config.xmlを編集します。これは、activityguide.propertiesファイルへの絶対パスである必要があります。

    adfc-config.xmlの例を例24-3に示します。

    例24-3 activityguide.propertiesファイルへの参照を使用したadfc-config.xmlファイル

    <managed-bean>
    <managed-bean-name>agProps</managed-bean-name>
    <managed-bean-class>oracle.bpel.activityguide.ui.beans.model.AGProperties</managed-bean-class>
    <managed-bean-scope>request</managed-bean-scope>
    <managed-property>
    <property-name>absAgPropsFileName</property-name>
    <property-class>java.lang.String</property-class>
    <value> C:\Projects\AG\activityguide.properties</value>
    </managed-property>
    </managed-bean>
    
  10. ワークフロー・サービス・クライアント構成ファイルを作成します。例を例24-4に示します。

    例24-4 ワークフロー・サービス・クライアント構成ファイル

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <workflowServicesClientConfiguration xmlns="http://xmlns.oracle.com/bpel/services/client">
       <server default="true" name="default">
          <localClient>
             <participateInClientTransaction>false</participateInClientTransaction>
          </localClient>
          <remoteClient>
             <serverURL>t3://host:7001</serverURL>
             <initialContextFactory>weblogic.jndi.WLInitialContextFactory</initialContextFactory>
             <participateInClientTransaction>false</participateInClientTransaction>
          </remoteClient>
          <soapClient>
             <rootEndPointURL>http://host:7001</rootEndPointURL>
             <identityPropagation mode="dynamic" type="saml">
                <policy-references>
                   <policy-reference enabled="true" category="security" 
                    uri="oracle/wss10_saml_token_client_policy"/>
                </policy-references>
             </identityPropagation>
          </soapClient>
       </server>
    

24.2.2 Oracle ADFを使用したガイド付きビジネス・プロセスのアプリケーションの開発時に行われる処理

ADF Webプロジェクトを使用したJDeveloperアプリケーションが作成されます。アプリケーションには次のものが含まれます。

  • 1つがアクティビティ・ガイド・ツリー用、もう1つがアクティビティ・ガイド・ノード詳細用の、2つのリージョンを持つJSFページ。

  • activityguide.propertiesファイル。

24.2.3 ランタイムで行われる処理: Oracle ADFを使用してガイド付きビジネス・プロセスのアプリケーションを開発する方法

ランタイムに、Oracle ADFアプリケーションでは、デザインタイムに開発されたガイド付きビジネス・プロセスが表示されます。共通のADFレイヤーのコンテキスト・イベント・メカニズムによって、対応するアクティビティ・ガイド・ツリーとアクティビティ・ガイド・ノード詳細の間の通信を処理します。

ガイド付きビジネス・プロセス・インスタンスをクリックすると、アクティビティ・ガイド・ツリーには、そのガイド付きビジネス・プロセス・インスタンスのアクティビティ・ガイド、マイルストンおよびタスクの情報が表示されます。または、アプリケーションでは、プログラムによってガイド付きビジネス・プロセス・インスタンスIDを検索および指定し、関連するインスタンスおよびツリーの情報を表示できます。

アクティビティ・ガイド・ツリーのマイルストン・ノードをクリックすると、そのマイルストンの下のサブツリーを取得またはリフレッシュします。

アクティビティ・ガイド・ツリーのタスク・ノードをクリックすると、そのタスクの詳細タスク情報が表示されます。

24.3 ガイド付きビジネス・プロセスのクライアント・アプリケーションの保護

ガイド付きビジネス・プロセスのクライアント・アプリケーションを保護するには、適切な資格証明を持つユーザーのみが、ガイド付きビジネス・プロセスで説明されたタスクを完了できることを確認します。セキュリティ機能には、認証、認可、レルム検証およびポリシー施行があります。

ADFガイド付きビジネス・プロセスのクライアント・アプリケーションを保護するには、『Oracle Fusion Middleware Oracle Application Development Framework Fusion開発者ガイド』の「Fusion WebアプリケーションでのADFセキュリティの有効化」で説明されている、Webアプリケーションを保護する手順に従います。

24.4 ガイド付きビジネス・プロセスのスキーマおよびソフトウェア・コンポーネント

ガイド付きビジネス・プロセスのスキーマおよびソフトウェア・コンポーネントは、次のとおりです。

24.4.1 com.oracle.bpel.activityguideパッケージ

com.oracle.bpel.activityguideサブパッケージは、ガイド付きビジネス・プロセス・インスタンスの管理に使用され、ガイド付きビジネス・プロセス・メタデータ・サービスを有効にします。

このサブパッケージには、次のサブパッケージが含まれます。

  • schema: ガイド付きビジネス・プロセス・インスタンス、ガイド付きビジネス・プロセス定義、およびガイド付きビジネス・プロセス・メタデータ・サービスのXSDおよびWSDLファイル。

  • instance: ガイド付きビジネス・プロセス・インスタンス管理コード。

  • metadata: ガイド付きビジネス・プロセス・メタデータ・サービス。

24.4.2 oracle.bpel.service.workflow.activityguideパッケージ

oracle.bpel.service.workflow.activityguideサブパッケージは、ガイド付きビジネス・プロセスのメタデータ・サービスおよび問合せサービスを有効にします。

ガイド付きビジネス・プロセス・メタデータ・サービス

ガイド付きビジネス・プロセス・メタデータ・サービスの実装は、SOAコンポジット・パッケージcom.oracle.bpel.activityguide.metadataの一部です。SOAコンポジット・パッケージのガイド付きビジネス・プロセス・インスタンス管理コードおよびデプロイメント・マネージャは、ガイド付きビジネス・プロセス・メタデータ・サービス・クラスへのローカルJavaコールを行います。

ガイド付きビジネス・プロセス・メタデータ・サービスは、ガイド付きビジネス・プロセス問合せサービスと同様、いずれの場所からでも起動できるように、EJBおよびWebサービスとしても公開されます。ガイド付きビジネス・プロセス・メタデータ・サービスは、同じsoa-infra-wls.earファイルにパッケージ化されます。

ガイド付きビジネス・プロセス問合せサービス

ガイド付きビジネス・プロセスでは、WorkflowServiceLocatorEjbgeneratorなどのワークフロー・サービス、および、EJBおよびWebサービスの構成ファイルを使用します。

ガイド付きビジネス・プロセス問合せサービスは、ワークフロー・パッケージのサブパッケージに作成され、oracle.bpel.services.workflow.activityguide.queryと呼ばれます。

このサブパッケージには、次のサブパッケージが含まれます。

  • bpelmetadata: プロセス分析スキーマとの相互作用を行うためのユーティリティ・クラスが含まれます。ブランチ化および将来のタスクに使用されます。

  • client: ガイド付きビジネス・プロセス問合せサービスのEJBおよびWebサービス・クライアント。

  • ejb: ガイド付きビジネス・プロセス問合せサービスのEJBインタフェース。

  • impl: ガイド付きビジネス・プロセス問合せサービスの実装。

  • model: XSDファイルに基づいて自動生成されたガイド付きビジネス・プロセス問合せサービス・クラス。

  • soap: ガイド付きビジネス・プロセス問合せサービスのWebサービス・インタフェース。

24.5 ガイド付きビジネス・プロセスのランタイムAPI

ガイド付きビジネス・プロセスでは、使用可能なマイルストンおよびマイルストンを構成するタスクに関する詳細を取得できる一連のAPIが提供されます。事前定義されたアクティビティ・ガイドADFタスクフローが要件を満たさない場合、これらのAPIを使用して、クライアント・アプリケーションに表示する情報を取得できます。

24.5.1 ガイド付きビジネス・プロセス問合せサービスAPI

このAPIは、ガイド付きビジネス・プロセスを表示するアプリケーションの次のユーザー・ナビゲーション・シナリオをサポートするように設計されます。

フィルタを使用して、ガイド付きビジネス・プロセス・インスタンスのリストを表示します。使用可能なフィルタは次のとおりです。

  • MY: ユーザーに割り当てられたアクティブなタスクを含むガイド付きビジネス・プロセス・インスタンス。

  • REPORTEES: 現在のユーザーへの報告先に割り当てられたアクティブなタスクを含むガイド付きビジネス・プロセス・インスタンス。

  • PREVIOUS: ユーザーに割り当てられた完了済タスクを含むガイド付きビジネス・プロセス・インスタンス、および、特定のタスクを別のユーザーに再割当てするインスタンス。

  • CREATOR: ユーザーによって開始されたガイド付きビジネス・プロセス・インスタンス。

  • ADMIN: ガイド付きビジネス・プロセス管理者に表示されるガイド付きビジネス・プロセス・インスタンス。アクティブなインスタンスは、すべてのユーザーに割り当てることができます。


注意:

BPMAGAdminロールは、管理者ロールが割り当てられたユーザーにマップされます。このロールによって、ユーザーは、完了済インスタンス、アクティブなインスタンスおよびエラーのあるインスタンスなど、サーバーで使用可能なすべてのガイド付きビジネス・プロセス・インスタンスを問合せできます。$DOMAIN_HOME/config/fmwconfig/system-jazn-data.xmlにある構成ファイルには、このロールの定義が含まれています。


注意:

ガイド付きビジネス・プロセスAPIを使用すると、タスクIDを指定して、詳細タスク情報を取得できますが、タスク情報は取得されません。これを行うには、ワークフロー・サービスAPIなど、別のAPIが必要です。

ワークフロー・サービスの詳細は、『Oracle Fusion Middleware Oracle SOA Suite開発者ガイド』の「ヒューマン・ワークフロー・サービスの概要」を参照してください。


表24-2 ガイド付きビジネス・プロセス問合せサービスAPI

メソッド 説明

List queryAGDisplayInfos(String bpmProcessType,IWorkflowContext ctx,List agDisplayColumns,AGAssignmentFilter agAssignmentFilter,Predicate predicate,Ordering ordering,int startRow,int endRow)

displayColumnsに定義したフィールドで、assignmentFilterおよびpredicateで定義した基準を満たし、orderで指定した順序で、startRowendRowの間の行番号の、AGDisplayInfoオブジェクトのリストを戻します。

AGDisplayInfoオブジェクトには、関与するガイド付きビジネス・プロセス・インスタンスのメタデータおよびランタイム・データの両方が含まれ、Oracle BPEL Worklistまたはカスタム・アプリケーションで、ガイド付きビジネス・プロセス・インスタンス・ビューをレンダリングするのに使用できます。

文字列パラメータbpmProcessTypeには、次の値を割り当てることができます。

  • IAGQueryService.AG_PROCESS_TYPE_BPM

  • IAGQueryService.AG_PROCESS_TYPE_BPEL

  • IAGQueryService.AG_PROCESS_TYPE_ANY

マイルストンおよびタスクはアクティビティ・ガイド・インスタンス・ビューに表示されないので、不要なパフォーマンスのオーバーヘッドを避けるために、MILESTONE_STATE列をdisplayColumnsに含めないことをお薦めします。

AGDisplayInfo getAGDisplayInfoDetailsById(String bpmProcessType,IWorkflowContext ctx,long ciKey,List taskDisplayColumns,String agAssignmentFilter)

アクティビティ・ガイド・インスタンスIDによって指定されたAGDisplayInfoオブジェクトを戻します。

戻されたAGDisplayInfoオブジェクトには、マイルストンおよびタスクの両方の情報が含まれ、カスタム・アプリケーションでアクティビティ・ガイド・ツリー構造をレンダリングするのに使用できます。

文字列パラメータbpmProcessTypeには、次の値を割り当てることができます。

  • IAGQueryService.AG_PROCESS_TYPE_BPM

  • IAGQueryService.AG_PROCESS_TYPE_BPEL

  • IAGQueryService.AG_PROCESS_TYPE_ANY

文字列パラメータagAssignmentFilterを使用すると、このメソッドのフィルタを指定できます。次のIAGQueryServiceパラメータを、このパラメータの値として使用できます。

  • IAGQueryService.AGASSIGNMENT_FILTER_MY

  • IAGQueryService.AGASSIGNMENT_FILTER_REPORTEES

  • IAGQueryService.AGASSIGNMENT_FILTER_CREATOR

  • IAGQueryService.AGASSIGNMENT_FILTER_PREVIOUS

  • IAGQueryService.AGASSIGNMENT_FILTER_ADMIN

MilestoneDisplayInfo getMilestoneDisplayInfo(String bpmProcessType,IWorkflowContext ctx,long cikey,String milestoneName,List taskDisplayColumns,String agAssignmentFilter)

アクティビティ・ガイド・インスタンス内のマイルストンの表示情報を戻します。

戻されたMilestoneDisplayInfoオブジェクトには、指定したマイルストンおよびマイルストン内のタスクのメタデータおよびランタイム・データが含まれます。これらを使用して、エンド・ユーザーがマイルストンをクリックしたときに、カスタム・アプリケーションのマイルストン・サブツリーをリフレッシュできます。

文字列パラメータbpmProcessTypeには、次の値を割り当てることができます。

  • IAGQueryService.AG_PROCESS_TYPE_BPM

  • IAGQueryService.AG_PROCESS_TYPE_BPEL

  • IAGQueryService.AG_PROCESS_TYPE_ANY

文字列パラメータagAssignmentFilterを使用すると、このメソッドのフィルタを指定できます。次のIAGQueryServiceパラメータを、このパラメータの値として使用できます。

  • IAGQueryService.AGASSIGNMENT_FILTER_MY

  • IAGQueryService.AGASSIGNMENT_FILTER_REPORTEES

  • IAGQueryService.AGASSIGNMENT_FILTER_CREATOR

  • IAGQueryService.AGASSIGNMENT_FILTER_PREVIOUS

  • IAGQueryService.AGASSIGNMENT_FILTER_ADMIN


24.5.2 ガイド付きビジネス・プロセスEnterprise Java BeansのJNDI名

次の表は、ガイド付きビジネス・プロセスEnterprise Java BeansのJNDI名を説明しています。

サービス名 Enterprise JavaBeansのJNDI名
アクティビティ・ガイド・メタデータ・ストア ejb/bpel/services/workflow/AGMetadataService
アクティビティ・ガイド問合せサービス ejb/bpel/services/workflow/AGQueryService

24.6 ガイド付きビジネス・プロセスのランタイム・サービスを使用したガイド付きビジネス・プロセスのタスクのユーザー・インタフェースの例の開発

APIによって、カスタム・アプリケーション内からガイド付きビジネス・プロセス問合せおよびメタデータ・サービスにアクセスできます。

次の例は、ガイド付きビジネス・プロセスのランタイム・サービスにアクセスするためのJava APIの使用を示しています。

例24-5 EJBを使用したガイド付きビジネス・プロセスのランタイム・サービスへのアクセス

package client;
import com.oracle.bpel.activityguide.metadata.definition.model.AGDefinition;
import java.util.ArrayList;
import java.util.List;
import oracle.bpel.services.workflow.IWorkflowConstants;
import oracle.bpel.services.workflow.task.model.Task;
import oracle.bpel.services.workflow.verification.IWorkflowContext;
import oracle.bpel.services.workflow.client.IWorkflowServiceClient;
import oracle.bpel.services.workflow.client.IWorkflowServiceClientConstants;
import oracle.bpel.services.workflow.client.WorkflowServiceClientFactory;
import oracle.bpel.services.workflow.query.ITaskQueryService;
import oracle.bpel.services.workflow.query.impl.TaskQueryService;
import oracle.bpel.services.workflow.client.WorkflowServiceClientContext;
import oracle.bpel.services.workflow.metadata.config.ResourceBundleInfo;
import oracle.bpel.services.workflow.activityguide.query.IAGQueryService;
import oracle.bpel.services.workflow.activityguide.query.impl.AGQueryService;
import oracle.bpel.services.workflow.activityguide.query.model.AGDisplayInfo;
import oracle.bpel.services.workflow.activityguide.query.model.MilestoneDisplayInfo;
import oracle.bpel.services.workflow.activityguide.metadata.IAGMetadataService;
import oracle.bpel.services.workflow.activityguide.metadata.impl.AGMetadataService;
import sun.security.util.Password;
public class AGServiceSampleCode {
 
    private static String USERNAME = "jcooper";
    private static String PASSWORD = "welcome1";
    private static String REALM = "jazn.com";
    private static IWorkflowServiceClient wfSvcClient;
    private static IWorkflowContext sJCooperCtx;
 
    public static void main(String[] args) 
    {
        try {
 
            testSetUp();
           
            // GetAGDefinition API requires an AG instance as input, which is not easily accessible in customer's env.
            // As a result, the sample code for invoking this API is not provided.
            //testGetAGDefinition();
 
            testGetAGDefinitionById();
            testGetAGResourceBundleInfo();
 
            testQueryAGDisplayInfos();
            testQueryAGDisplayInfoDetailsById();
            testQueryAGMilestoneDisplayInfo();
                
        } catch (Exception e) {
 
            e.printStackTrace();
        }
    }
 
    private static void testSetUp()
        throws Exception
    {
        wfSvcClient =
                WorkflowServiceClientFactory.getWorkflowServiceClient(WorkflowServiceClientFactory.REMOTE_CLIENT); 
 
        sJCooperCtx =
            wfSvcClient.getTaskQueryService().authenticate(USERNAME, PASSWORD, REALM, null);
    }
 
    private static void testGetAGDefinitionById()
        throws Exception
    {
        String agDefinitionId = "HelpDeskRequestSCAApp/HelpDeskRequestComposite!1.0*2007-10-22_13-32-50_536//HelpDeskRequestProcess//HelpDeskRequestProcess.ag"; // Need to supply a valid AG definition id here
 
        AGDefinition agDefinition = 
            wfSvcClient.getAGMetadataService().getAGDefinitionById (sJCooperCtx, agDefinitionId);
 
        if (agDefinition != null)
        {
            System.out.println("ag def obtained");
            System.out.println("ag def name: " + agDefinition.getName());
            System.out.println("ag def milestone display mode: " + agDefinition.getMilestoneDisplayMode());
        }
    }
 
    private static void testGetAGResourceBundleInfo()
        throws Exception
    {
        String agDefinitionId = "HelpDeskRequestSCAApp/HelpDeskRequestComposite!1.0*2007-10-22_13-32-50_536//HelpDeskRequestProcess//HelpDeskRequestProcess.ag"; // Need to supply a valid AG definition id here
 
        ResourceBundleInfo resourceBundleInfo = wfSvcClient.getAGMetadataService().getResourceBundleInfo(sJCooperCtx, agDefinitionId, sJCooperCtx.getLocale());
 
        System.out.println("bundle name: " + resourceBundleInfo.getName());
    }
 
    private static void testQueryAGDisplayInfos()
        throws Exception
    {
        List agQueryColumns = new ArrayList();
        agQueryColumns.add("MILESTONE_STATE");     
        agQueryColumns.add("DEFINITION_ID");
 
        // Query for all AG instances belonging to user jcooper
        List agDisplayInfoList = 
              wfSvcClient.getAGQueryService().queryAGDisplayInfos(sJCooperCtx, 
                                                                  agQueryColumns,
                                                                  IAGQueryService.AGAssignmentFilter.MY,
                                                                  null, //agPredicate,
                                                                  null, //ordering,
                                                                  0,
                                                                  0);
                
        System.out.println("ag display info list size:" +  agDisplayInfoList.size());
        if ( agDisplayInfoList.size() > 0 )
        {
            AGDisplayInfo agDisplayInfo =  (AGDisplayInfo) agDisplayInfoList.get(0);
            System.out.println("AG title:" +  agDisplayInfo.getTitle());
            System.out.println("milestone display info list size:" +  agDisplayInfo.getMilestoneDisplayInfo().size());
            for (int i=0; i< agDisplayInfo.getMilestoneDisplayInfo().size(); i++)
            {
                System.out.println("i = " + i + " milestone display info:" + ((MilestoneDisplayInfo) agDisplayInfo.getMilestoneDisplayInfo().get(i)).getMilestoneInstance().getName());
            }
        }
    }
 
    private static void testQueryAGDisplayInfoDetailsById()
        throws Exception
    {
        long cikey = 1; // Need to supply a valid AG cikey here
 
        List taskQueryColumns = new ArrayList();
        taskQueryColumns.add("TASKID");
        taskQueryColumns.add("TITLE");
        taskQueryColumns.add("OUTCOME");
 
        AGDisplayInfo agDisplayInfo = 
              wfSvcClient.getAGQueryService().getAGDisplayInfoDetailsById (sJCooperCtx, cikey, taskQueryColumns);
        System.out.println("AG display info status:" +  agDisplayInfo.getAGInstanceInfo().getStatus());
        System.out.println("AG display info bpel status:" +  agDisplayInfo.getAGInstanceInfo().getBpelStatus());
    }
 
    private static void testQueryAGMilestoneDisplayInfo()
        throws Exception
    {
        long cikey = 1; // Need to supply a valid AG cikey here
        String milestoneName = "ApprovePricing"; //  Need to supply a valid AG milestone name here
 
        List taskQueryColumns = new ArrayList();
        taskQueryColumns.add("TASKID");
        taskQueryColumns.add("TITLE");
        taskQueryColumns.add("OUTCOME");
 
        MilestoneDisplayInfo milestoneDisplayInfo = null;
 
        milestoneDisplayInfo = 
            wfSvcClient.getAGQueryService().getMilestoneDisplayInfo (sJCooperCtx, cikey, milestoneName, taskQueryColumns);
 
        System.out.println("milestone display info name:" +  milestoneDisplayInfo.getMilestoneInstance().getName());
        System.out.println("milestone display info title:" +  milestoneDisplayInfo.getTitle());
        System.out.println("milestone display info task list size:" +  milestoneDisplayInfo.getTask().size());
    }
 
}

EJBおよびWebサービスAPIの詳細は、Javadocを参照してください。

24.7 ガイド付きビジネス・プロセスのロギングの使用

ガイド付きビジネス・プロセスは、ログ・ファイルを使用して、実行する様々な操作に関する情報を格納します。このファイルには、アプリケーションの動作を追跡するログ・メッセージ、およびアプリケーションの実行中に発生する可能性のあるエラーが含まれます。

このログ・ファイルの情報を使用して、アプリケーションの予期しない動作の原因を見つけることができます。

ログ・メッセージの重要度は、メッセージのレベルに応じて異なります。デバッグ目的で使用されるメッセージのレベルは、警告またはエラーを含むメッセージのレベルと異なります。

ガイド付きビジネス・プロセスのロギングを構成して、必要に応じて、あるレベルのメッセージののみを記録できます。

24.7.1 クライアント側でロギングを行う方法

ガイド付きビジネス・プロセスを構成して、クライアント側にログ・ファイルを生成できます。

クライアント側でロギングを有効化するには:

  1. ディレクトリ<DOMAIN_HOME>/config/fmwconfig/servers/AdminServerで、logging.xmlファイルを検索します。

  2. logging.xmlファイルを編集のために開きます。

  3. <loggers>要素に次のエントリを追加します。

    <logger name="oracle.bpel.activityguide.ui" level="NOTIFICATION:1" useParentHandlers='false'>

    <handler name="old-handler"/>

    </logger>

  4. 変更内容を保存します。

  5. WebLogic Serverを再起動します。

24.7.2 サーバー側でロギングを行う方法

ガイド付きビジネス・プロセスを構成して、サーバー側にログを生成できます。

サーバー側でロギングを有効化するには:

  1. ディレクトリ<DOMAIN_HOME>/config/fmwconfig/servers/AdminServerで、logging.xmlファイルを検索します。

  2. logging.xmlファイルを編集のために開きます。

  3. <loggers>要素に次のエントリを追加します。

    <logger name="oracle.soa.services.workflow.ag" level="NOTIFICATION:1" useParentHandlers='false'>

    <handler name="oracle-soa-handler"/>

    </logger>

  4. 変更内容を保存します。

  5. WebLogic Serverを再起動します。

24.7.3 ログ・レベルの構成

ログ・メッセージには、問題の重大度を識別するレベルが含まれています。

表28-3は、使用可能なログ・レベルを示しています。重大度の列では、ある重大度を識別するのに使用される共通の用語を説明しています。ログ・レベル値の列では、logging.xmlファイルで使用する必要がある値を指定しています。

表24-3 ログ・レベル値

重大度 ログ・レベル値 説明

致命的

INCIDENT_ERROR:1

原因が不明の重大な問題を示しています。ユーザーは自分で問題を解決できないため、Oracleサポートに連絡する必要があります。

重大

ERROR:1

システム管理者がすぐに対処する必要がある重大な問題を示しています。

警告

WARNING:1

潜在的な問題を示しています。システム管理者は、これらのログ・メッセージを確認する必要があります。

情報

NOTIFICATION:1

主要サブコンポーネントや機能のアクティブ化または非アクティブ化などの、主要なライフサイクル・イベントを示しています。

構成

NOTIFICATION:16

下位レベルで発生した標準イベントを指定します。

普通

TRACE:1

パブリックAPIのエントリ・ポイント/終了ポイントなどの、製品のエンド・ユーザーにとって意味のあるイベントのトレースまたはデバッグ情報を示しています。

詳細

TRACE:16

Oracleサポートが特定のサブシステムでの問題を診断するのに役立つ可能性のある、詳細なトレースまたはデバッグ情報を指定します。


ガイド付きビジネス・プロセスのロギングを構成して、ガイド付きビジネス・プロセスのログに格納された情報の詳細のレベルを指定できます。

ログ・レベルを設定するには、logging.xmlファイルのログ出力要素で、属性レベルの値を変更する必要があります。

ログ・レベルをある重大度に設定すると、それより高い重大度に対応するすべてのメッセージも格納されます。たとえば、ログ・レベルを「重大」に設定した場合、重大度が「致命的」のログ・メッセージも記録されます。

24.7.4 ガイド付きビジネス・プロセスのログ・メッセージを表示する方法

ログ・メッセージは、ファイル<DOMAIN HOME>/servers/<Server Name>/logs/DefaultServer-diagnostic.logに格納されています。

テキスト・エディタを使用して、ログ・メッセージを含むファイルを表示できます。

24.7.5 ガイド付きビジネス・プロセスのログ・メッセージについて

ログ・メッセージには、ガイド付きビジネス・プロセス・アプリケーションの問題を識別するのに役立つ情報が含まれています。

表28-3は、ログ・メッセージを構成する項目を説明しています。

表24-4 ログ・メッセージ項目

ログ・メッセージ項目 説明

日付と時間

このログ・メッセージが生成された日付および時間を指定します。

メッセージ・タイプ

メッセージの重大度を指定します。

実行コンテキストID (ECID)

元のコンポーネントが実行中のスレッドに対応するグローバル一意識別子および順序番号。これを使用して、同一のスレッドに含まれる可能性がある複数のコンポーネントからのメッセージを関連付けることができます。

アプリケーション名

ログ・メッセージを生成したアプリケーションの名前を指定します。

クラス・パッケージ名

ログ・メッセージを生成したクラスのパッケージを指定します。

メッセージID

メッセージを一意に識別する短い識別子を指定します。

メッセージ・テキスト

イベントを説明します。このメッセージはローカライズされているため、システムのロケールに対応した言語で表示されます。


ログ・ファイルを読む際には、メッセージ・テキストを見つける必要があります。このテキストは、何が発生したかを説明しています。メッセージ・タイプは、問題がどの程度重大かを識別するのに役立ちます。様々なメッセージ・タイプの詳細は、表24-3を参照してください。

ログ・メッセージの日付と時間を使用して、問題の原因となるアクションを特定できます。


注意:

Oracleサポートに連絡する前に、メッセージIDおよび実行コンテキストIDをOracleサポートに提供できることを確認してください。

例24-6 ログ・メッセージの例

DefaultServer-diagnostic.log:[2009-07-10T17:39:35.220-07:00] [DefaultServer] [NOTIFICATION] [AGU-12605] [oracle.bpel.activityguide.ui.beans] [tid: [ACTIVE].ExecuteThread: '1' for queue: 'weblogic.kernel.Default (self-tuning)'] [userId: jstein] [ecid: 0000I9bG2R3DScQ6ube9UH1ALxd1000007,0] [APP: AGNonUIshellApp#V2.0] [arg: jstein] Setting user, jstein as the loginUserId in server interfacing bean.[[

例28-12は、loginUserIdの変更に関する情報を含む通知ログ・メッセージを示しています。この例での各ログ・メッセージ項目は、次のとおりです。

  • 日付と時間: 2009-07-10T17:39:35.220-07:00

  • メッセージ・タイプ: NOTIFICATION

  • 実行コンテキストID: ecid: 0000I9bG2R3DScQ6ube9UH1ALxd1000007,0

  • アプリケーション名: APP: AGNonUIshellApp#V2.0

  • クラス・パッケージ名: oracle.bpel.activityguide.ui.beans

  • メッセージID: AGU-12605

  • メッセージ・テキスト: Setting user, jstein as the loginUserId in server interfacing bean.