Java CAPS ビジネスプロセスの構成

OCI ドライバ用の BPM の設定

監視および復旧データベースとして Oracle を使用している場合は、Oracle の Type 2 ドライバである OCI (Oracle Call Interface) ドライバを使用できます。これには、追加の手順がいくつか必要になります。BPM は通常、DataDirect® ドライバを使用して、データベース接続を確立したり、データベースサーバーと通信したりします。ここでは、OCI ドライバ用に BPM を有効にして設定するための要件および手順について説明します。

OCI ドライバは、監視および復旧データベースとの組み合わせでのみ機能します。ワークリストマネージャーは、DataDirect ドライバのみを使用します。

Oracle OCI ドライバのシステム要件

Oracle OCI ドライバは、データベースとの通信のために使用されている広範囲のネイティブコードのために、シックドライバとも呼ばれます。OCI は C で記述されており、その Java 呼び出しはすべて、JNI を使用して呼び出しを C レイヤーに転送します。この C レイヤーがデータベースと通信して、結果を Java レイヤーに返します。

Java 呼び出しを C 呼び出しにマップするためのライブラリは、Oracle クライアントのインストールとともにインストールされます。OCI を使用して監視および復旧の持続性を有効にするには、Oracle クライアントソフトウェアをインストールする必要があります。

開始する前に

OCI ドライバを設定する前に、次の確認を行う必要があります。

OCI ドライバの実装

OCI ドライバを実装するには、次のタスクを実行する必要があります。

OCI ドライバライブラリファイルのコピー

BPM で OCI ドライバを使用するには、ライブラリファイルが論理ホストのライブラリディレクトリに存在する必要があります。

ProcedureOCI ドライバライブラリファイルをコピーするには

  1. 論理ホストが存在するシステムに Oracle クライアントをインストールします。

  2. tnsnames.ora で監視および復旧データベースを定義します。

  3. ojdbc14.jar (JDK 1.4 以降の場合) または classes12.jar (JDK 1.2 および 1.3 の場合) を、Oracle クライアントインストール内の /jdbc/lib サブディレクトリから、論理ホストのドメイン固有のディレクトリ内の /lib サブディレクトリにコピーします。次に例を示します。

    oracle_home\jdbc\lib から

    logical_host\is\domains\domain1\lib にコピー


    
    

    注 –

    Oracle インストールのファイルの場所は、使用する Oracle のバージョンにもよりますし、クライアントまたはサーバーのいずれでインストールされているかによっても異なります。


  4. ドライバクラスをロードするために、論理ホストのインスタンスを再起動します。

環境の設定

BPM エンジンで OCI ドライバを有効にするには、次の環境変数を設定します。


注 –

oracle_home は、Oracle クライアントまたはデータベースがインストールされているディレクトリを指します。例:C:\oracle\ora92、または /home/oracle/orahome 。このフォルダには、bin、network、jdbc、jlib、lib などのサブフォルダが含まれています。


Windows オペレーティングシステムの場合:

Linux および Unix オペレーティングシステムの場合 (HPUX と AIX を除く):

HP-UX の場合:

AIX の場合:

Oracle OCI ドライバを使用するための BPM エンジンの設定

デフォルトのシンドライバの代わりに OCI ドライバを使用するように BPM エンジンを設定する必要があります。これは、環境エクスプローラにあるインテグレーションサーバーのプロパティーシートで設定されます。

ProcedureOracle OCI ドライバを使用するようにエンジンを設定するには

  1. 環境エクスプローラで、インテグレーションサーバーまたはアプリケーションサーバーを右クリックし、「プロパティー」をクリックします。

  2. 「BPM エンジンの設定」をクリックします。

  3. 「プロパティー」ダイアログボックスで、「Oracle Net Service 名」フィールドにサービス名を入力します。

    入力する値は、tnsnames.ora ファイル (<oracle_home>/network/admin にある) で設定されている TNS 名です。次の例は、Oracle Net Service 名が ORCL.STC.COM である、標準的な TNS 名の設定を示しています。


    ORCL.STC.COM =
      (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = MyHost)(PORT = 1521))
        )
        (CONNECT_DATA =
          (SERVICE_NAME = orcl)
        )
  4. プロパティーを入力します。

  5. 「了解」をクリックします。

    次の表は、「BPM エンジンの設定」プロパティーで設定する必要のあるフィールドを示しています。

    フィールド

    説明 

    持続モード

    持続性が有効になっているかどうかのインジケータ。BPM で持続性を有効にするには、いずれかの「データベースの持続性」オプションを選択します。

    データベース

    使用されているデータベースプラットフォーム。OCI 機能を有効にするには、Oracle の正しいバージョンを選択します。 

    データベースホスト

    Oracle データベースが存在するコンピューターの名前。 

    データベースポート

    Oracle データベースが待機するポート。デフォルトは 1521 です。 

    Oracle Net Service 名

    データベースの TNS 名 (tnsnames.ora より)。このプロパティーが設定されている場合、BPM エンジンは OCI ドライバを使用します。それ以外の場合、BPM エンジンはデフォルトの DataDirect ドライバを使用します。

    データベースインスタンス/スキーマ

    データベースの名前。 

    データベースユーザー

    監視および復旧テーブルにアクセスするためのユーザー名。 

    パスワード

    監視および復旧テーブルにアクセスするためのパスワード。 

透過的アプリケーションフェイルオーバーの実装

Oracle RAC は、クラスタテクノロジを使用して共有データベースにアクセスする 2 つ以上のインスタンスを持つ Oracle データベースです。クラスタとは、同じタスクを実行するために連携して動作するマシン (またはノード) のグループのことです。このアーキテクチャーをサポートするために、データベースインスタンスをホストする 2 台以上のマシンが高速インターコネクトでリンクされて、クラスタが形成されます。インターコネクトは、クラスタの各ノード間の通信手段として使用される物理ネットワークです。

Oracle RAC をインストールしたあと、もっとも高いレベルの可用性を保証するために、透過的アプリケーションフェイルオーバー (TAF) 機能を設定することができます。TAF によって、すべてのレベルの可用性階層が補完されます。アプリケーションとユーザーは自動的かつ透過的に別のシステムに再接続され、アプリケーションとクエリーは中断なく続行され、さらにログインコンテキストは保持されます。Oracle Net Service を設定して、障害が発生した場合に RAC の各データベースインスタンス上のリスナーをフェイルオーバーできます。


注 –

TAF 機能をテストするための Oracle RAC/OPS システムの設定は、このマニュアルの範囲を超えています。tnsnames.ora および listener.ora ファイル内の設定を使用して Oracle RAC/OPS サーバーを設定する方法については、DBA に問い合わせてください。


OCI ドライバは、BPM エンジンとの組み合わせでのみ機能します。ワークリストマネージャーは、DataDirect ドライバのみを使用します。

Procedure透過的アプリケーションフェイルオーバーを実装するには

  1. 同じデータストレージを共有する複数のホストまたはインスタンスを使用して Oracle RAC サーバーを設定します。

    OCI ドライバを使用している場合に、TAF 機能を有効にするように tnsnames.ora を設定する方法については、「開始する前に」を参照してください。

  2. 論理ホストを実行しているマシン上に Oracle クライアントがインストールされていない場合は、インストールします。

    OCI が機能するためには、Oracle クライアントをインストールする必要があります。OCI ドライバはネイティブな C 呼び出しに基づいてデータベースへの接続を確立するため、BPM にパッケージされているものと同じバージョンの Oracle クライアントをインストールする必要があります。OCI のバージョンが競合すると、BPM での OCI ドライバの設定で問題が発生することがあります。

  3. TAF 用に tnsnames.ora ファイルを設定します。

    透過的アプリケーションフェイルオーバー (TAF) 用に設定された tnsnames.ora ファイルの例を次に示します。

    オプション 1: 接続時間フェイルオーバーおよび TAF


    MY_CLUSTER =
      (DESCRIPTION =
        (FAILOVER = ON)
        (LOAD_BALANCE = OFF)
        (ADDRESS_LIST =    
          (ADDRESS = (PROTOCOL = TCP)(HOST = Node1)(PORT = 1521))
          (ADDRESS = (PROTOCOL = TCP)(HOST = Node2)(PORT = 1521))
        )
        (CONNECT_DATA =
          (SERVICE_NAME = my_cluster.my_company.com)
          (FAILOVER_MODE =
            (TYPE = SELECT)
            (METHOD = PRECONNECT)
            (BACKUP=Node2)
          )
        )
      )

    オプション 2: TAF 設定


    MY_CLUSTER =
      (DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP)(HOST = Node1)(PORT = 1521))
        (CONNECT_DATA =
          (SERVICE_NAME = my_cluster.my_company.com)
          (FAILOVER_MODE =
            (TYPE = SELECT)
            (METHOD = PRECONNECT)
             (BACKUP = Node2)
           )
        )
      )

    この設定では、MY_CLUSTER が、クラスタとして機能するように設定された 2 つのノードを認識しています。このクラスタを、RAC/OPS で同じディスクを共有するように設定してください。

    オプション 1 では、FAILOVER が ON に、LOADBALANCE が OFF に設定されています。これは、接続時間フェイルオーバー用の設定です。接続時間フェイルオーバーでは、OCI ドライバが Node1 に接続を試みてそのノードがダウンしていると判断すると、アドレスリスト内のほかのホスト (Node2) に接続します。オプション 2 は、単に、OCI クライアントでの TAF 機能のみの設定を示すために掲載されています。BPM では、接続時間フェイルオーバーと TAF 設定の両方が必要です。

    TAF オプションを設定するには、tnsnames.ora ファイルに Oracle Net パラメータを追加するとともに、参加しているいずれかのノードに障害が発生した場合のフェイルオーバープロセス内の次のステップを確認するためにパラメータ値を使用する必要があります。TAF オプションを起動するパラメータは、接続記述子の CONNECT_DATA セクションの下にある FAILOVER_MODE です。次のパラメータを 1 つ以上使用することによって、TAF のフル機能を実現できます。

    パラメータ

    説明 

    BACKUP 

    バックアップ接続を確立するために使用される別の Net Service 名を指定します。PRECONNECT を使用して事前に接続を確立する場合は、バックアップを指定するようにしてください。BASIC の方法には、BACKUP を指定することを強くお勧めします。そうしないと、失敗したばかりのインスタンスが再接続で最初に試みられ、クライアントが再接続するまで追加遅延が発生する可能性があります。 

    TYPE 

    フェイルオーバーのタイプを指定します。Oracle Call Interface では、デフォルトで 3 つのタイプの Oracle Net フェイルオーバー機能が使用できます。 

    • SESSION - セッションをフェイルオーバーします。このオプションでは、接続が確立されるのみで、進行中の作業は失敗したインスタンスから使用可能なインスタンスに転送されません。

    • SELECT - オープンカーソルを持つユーザーが、障害が発生したあともそれらのカーソルで引き続きフェッチできるようにします。Oracle Net は、現在のトランザクションで発行されたすべての SELECT 文、および SELECT 文に関連付けられた各カーソルごとにクライアントにフェッチされた行数を追跡します。インスタンスへの接続が失われた場合、Oracle Net はバックアップインスタンスへの接続を確立し、SELECT 文を再実行して、何事もなかったかのようにクライアントが行の取得を続行できるようにカーソルを配置します。ただし、DML 操作は転送されません。

    • NONE - フェイルオーバー機能は実装されません (これがデフォルト)。

    METHOD 

    一次ノードから二次ノードまたはバックアップノードへのフェイルオーバーの速度を決定します。 

    • BASIC - フェイルオーバー時に接続を確立します。

    • PRECONNECT - 事前に接続を確立します。このパラメータが使用されている場合、バックアップインスタンスへの接続は、一次インスタンスへの接続と同時に作成されます。

    RETRIES 

    障害が発生したあと、終了する前に BACKUP ノードへの接続を試行する回数を指定します。 

    DELAY 

    障害が発生したあと、終了する前に BACKUP ノードへの接続を待機する試行間隔時間 (秒単位) を指定します。 

トラブルシューティング

トラブルシューティングに役立つ一般的なエラーメッセージと解決方法を次に示します。

表 3 Windows システムのトラブルシューティング

エラーメッセージ 

チェックリスト 

Exception in thread "main" java.lang.UnsatisfiedLinkError: no ocijdbc9.dll in java.library.path 

  • oracle_home 環境変数が設定されていますか。

  • システムパスに oracle_home\bin が追加されていますか。

  • システムパスに oracle_home\lib が追加されていますか。

Exception No Such Method : make_c_state error 

  • システムパスに oracle_home\lib が追加されていますか。

  • データベースへの接続に使用されている JDBC Oracle クライアントドライバのバージョンが、アプリケーションサーバーのバージョンと異なっていませんか。

Exception in thread "main" java.lang.NoSuchFieldError: envCharSetId 

  • システムパスに oracle_home\lib が追加されていますか。

  • データベースへの接続に使用されている JDBC Oracle クライアントドライバのバージョンが、アプリケーションサーバーのバージョンと異なっていませんか。

表 4 Linux/Unix システムのトラブルシューティング

エラーメッセージ 

チェックリスト 

Exception in thread "main" java.lang.UnsatisfiedLinkError: no ocijdbc9 in java.library.path 

  • oracle_home 環境変数が設定されていますか。

  • LD_LIBRARY_PATH に oracle_home/lib が追加されていますか。

Exception in thread "main" java.lang.NoSuchFieldError: envCharSetId 

  • oracle_home 環境変数が設定されていますか。

  • データベースへの接続に使用されている JDBC Oracle クライアントドライバのバージョンが、アプリケーションサーバーのバージョンと異なっていませんか。

make_c_state error 

  • システムパスに oracle_home/bin が追加されていますか。

  • データベースへの接続に使用されている JDBC Oracle クライアントドライバのバージョンが、アプリケーションサーバーのバージョンと異なっていませんか。