アダプタの開発
![]() |
![]() |
![]() |
![]() |
DBMS サンプル アダプタは JSP ベースの GUI を含む J2EE 準拠のアダプタです。これらのアダプタは、WebLogic Integration ADK を使ったアダプタの構築方法を示す具体例を提供します。アダプタの EIS としてリレーショナル データベースが使用されているので、アダプタ プロバイダは特別な EIS について学習する必要がなく、アダプタと ADK に専念できます。
次の 2 つの DBMS サンプル アダプタが提供されています。
DBMS サンプル アダプタは、独自のアダプタを設計、開発するために必要なタスクの理解を助けることを目的としています。プロダクション環境で使用するためのアダプタではなく、プロダクション環境での使用はサポートされていません。アダプタはプロダクション用ではなく、サンプルとして用意されたアダプタなので、すべての機能を備えているわけではありません。複雑なクエリやストアド プロシージャは実行できないという制限があります。
開発者やビジネス アナリストは、DBMS サンプル アダプタを使うことで、ADK を使ってアダプタを構築する場合に何が可能かを理解しやすくなります。ビジネス アナリストにとっては、インタフェースを操作することによって「DBMS サンプル アダプタの仕組み」で説明するアプリケーション ビュー、サービス、およびイベントを理解できるので、非常に便利なツールであるといえます。
アダプタ開発者は、ADK クラスを拡張および使用して J2EE 準拠のアダプタを構築する方法の学習から始めることをお勧めします。この手順は、次のとおりです。
これらのアダプタの接続パラメータを設定するときは、JDBC ドライバおよび URL を指定してください。サンプルの DBMS アダプタでは DataSource の指定はサポートされません。DataSource を使用する既存のサービス接続は以前と同様に作動しますが、Application Integration Design Console では新規アダプタに対して DataSource を指定できなくなります。
XA ドライバを使用してドメインをコンフィグレーションする場合は、イベント接続について作成する DataSource に対して接続プールをもう 1 つ作成します。
同じ接続プールを指す 2 つの Tx Data Source を作成しないでください。同じ接続プールを指している 2 つの Tx Data Source が 1 つのトランザクションで使用されると、2 つ目の接続にアクセスしようとしたときに XA_PROTO エラーが発生します。
JDBC データ ソースおよび WebLogic Server の詳細については、次の場所にある『Administration Console オンライン ヘルプ』の「JDBC データ ソース」を参照してください。
http://edocs.beasys.co.jp/e-docs/wls/docs81/ConsoleHelp/jdbc_datasources.html
DBMS サンプル アダプタを Microsoft SQL Server または Sybase データベースで使用するときは、WebLogic Server Administration Console を使用して、アプリケーション統合で使用される接続プールの TestReservedConnection
パラメータを有効にします。このパラメータが有効になっていないと、自動再開または手動再開機能が作動せず、次のような SQLException が送出されます。
java.sql.SQLException: [BEA][SQLServer JDBC Driver]No more data
available to read
この節では、DBMS サンプル アダプタの仕組みについて説明します。ビジネス アナリストの方はインタフェースの操作を通じてアダプタの仕組みを理解できます。この節では、ベースとなるデータベースに顧客を挿入するサービスを作成する方法、およびそのアクションが実行されたことを第三者に通知するためのイベントを生成する方法について説明します。
DBMS サンプル アダプタにアクセスする前に、必ず以下のタスクを完了してください。
http://HOSTNAME:7001/wlai
図 E-1 に示すように、[WebLogic Integration - Application Integration Design Console ログオン] ページが表示されます。
警告 : Application Integration Design Console は、1 台のクライアント マシンにつき 1 つだけ実行するようにしてください。1 台のマシンで複数のコンソールを実行すると、Web ブラウザの画面間の移動が正しく行われない場合があります。
ここでは DBMS サンプル アダプタの操作方法について簡単に説明します。まず、ブラウザで DBMS サンプル アダプタの [WebLogic Integration - Application Integration Design Console ログオン] ページを開きます。手順については、「DBMS サンプル アダプタへのアクセス」を参照してください。
図 E-1 [WebLogic Integration - Application Integration Design Console ログオン]
図 E-2 [Application Integration Design Console]
アプリケーション ビューおよびその定義方法の詳細については、『Application Integration Design Console の使い方』の「アプリケーション ビューの定義」を参照してください。
ここまでの作業でアプリケーション ビューの作成が完了し、サービスをアプリケーション ビューに追加する準備が整いました。
図 E-5 [Application View Administration Page for AppViewTest]
図 E-8 [Browse DBMS Table Types] ページ
図 E-9 [DBMS Browse Tables] ページ
図 E-10 [Browse DBMS for Table] ページ
Insert into WEBLOGIC.CUSTOMER_TABLE (FIRSTNAME, LASTNAME, DOB) VALUES ([FIRSTNAME VARCHAR], [LASTNAME VARCHAR], [DOB DATE])
サービスの追加に関する詳細については、『Application Integration Design Console の使い方』の「アプリケーション ビューの定義」を参照してください。
DBMS 参照リンクを使用すると、DBMS データベース スキーマとテーブルを参照してデータベース テーブルを指定できます。そこで [Fill table name with selected table] ボタンをクリックすると、選択したテーブル名をフィールドに自動的に入力できます。
[Edit Event Connection] ページを使って、イベント パラメータを定義し、接続ファクトリのどの情報をログに記録するかをコンフィグレーションできます。ログの設定を以下の中から 1 つ選択します。
[接続パラメータ] で [定義] をクリックしてイベント配信パラメータを設定します。[Configure Event Delivery Parameters] ページが表示されます。
このページで入力するイベント配信パラメータにより、EIS インスタンスへの接続が有効になります。また、これらのパラメータはイベントの生成時に使用されます。プロパティは関連付けられているアダプタごとに固有であり、基本となるアダプタの wli-ra.xml
ファイルに定義されます。
イベントおよびサービスのテストが正常に終了したら、[概要] ページに戻ってアプリケーション ビューをパブリッシュできます。パブリッシュすると、アプリケーション ディレクトリに EJB が生成され、スキーマ ファイルが XML マッパーで使用できるように WebLogic Workshop アプリケーションにパブリッシュされます。また、アプリケーション ビューも WebLogic Workshop で表示できるようになります。
アプリケーション ビューのパブリッシュに関する詳細については、『Application Integration Design Console の使い方』の「アプリケーション ビューの定義」を参照してください。
この節では DBMS サンプル アダプタを開発する際に使用するインタフェースについて説明します。ADK では Java コネクタ アーキテクチャに準拠したアダプタに必要な実装が豊富に用意されていますが、EIS およびその環境を定義するまでは完全に実装されないインタフェースもあります。このため、ADK で提供される抽象クラスの具象実装として、DBMS サンプル アダプタが作成されました。
ADK で提供される実装が DBMS サンプル アダプタでどのように使用されるかについては、Javadoc およびこの節で定義するメソッドのコードを参照してください。
注意 : WLI_HOME
は、BEA WebLogic Integration がインストールされているドライブまたはディレクトリです。
コーディングを開始する前に、開発中のアダプタに関するクリティカルな情報を識別および収集するには、「アダプタ設定ワークシート」が役立ちます。DBMS サンプル アダプタ BEA_WLS_DBMS_ADK の場合、ワークシートの質問に対する答えは以下のようになります。
注意 : 先頭にアスタリスク (*) が付いた質問は、GenerateAdapterTemplate ユーティリティを使うためには必須です。
DBMS サンプル アダプタのサービス プロバイダ インタフェース (Service Provider Interface : SPI) を実装し、J2EE 準拠の SPI 要件を満たすため、ADK のクラスが拡張され、以下の具象クラスが作成されました。
これらのクラスを使って、EIS への接続の提供、イベントのリスンや要求の送信に使うフレームワークの構築、トランザクション デマーケーションの設定、および該当する EIS の管理を行います。
DBMS サンプル アダプタ用の SPI を実装するためにまず ManagedConnectionFactory
インタフェースを実装しました。ManagedConnectionFactory
は、ManagedConnection
インスタンスのマッチングと作成を行うメソッドを提供して、接続プールをサポートします。
ADK で提供される com.bea.adapter.spi.AbstractManagedConnection Factory
は、Java コネクタ アーキテクチャ インタフェース javax.resource.spi.ManagedConnectionFactory
の実装です。DBMS サンプル アダプタでは com.bea.adapter.dbms.spi.ManagedConnectionFactoryImpl
でこのクラスが拡張されています。コード リスト E-1 は ManagedConnectionFactoryImpl
の派生ツリーを示しています。
コード リスト E-1 com.bea.adapter.dbms.spi.ManagedConnectionFactoryImpl
javax.resource.spi.ManagedConnectionFactory
|
|-->com.bea.adapter.spi.AbstractManagedConnectionFactory
|
|-->com.bea.adapter.dbms.spi.ManagedConnectionFactoryImpl
ManagedConnectionFactory
は Java コネクタ アーキテクチャ SPI パッケージの中心クラスです。AbstractManagedConnectionFactory
では、必要とされる Sun MicroSystems のインタフェースで宣言されているメソッドの実装の多くが提供されています。この ADK の AbstractManagedConnectionFactory
を DBMS サンプル アダプタ向けに拡張するため、キー メソッドである createConnectionFactory()
および createManagedConnection()
が実装されています。また、equals()
、hashcode()
、checkState()
のオーバーライドも記述され、DBMS サンプル アダプタによってサポートされるデータベース固有の動作が提供されています。
スーパークラスが認識できないプライベート属性が存在します。アダプタを作成する際、プライベート属性に対してセッター/ゲッター メソッドを指定する必要があります。抽象メソッドの createConnectionFactory()
は、入力パラメータを使った EIS 固有の ConnectionFactory
を提供するために実装されています。
そのほかに、クラスの主要なファクトリ メソッドとして createManagedConnection()
があります。このメソッドは、アダプタが正しくコンフィグレーションされているかどうかを、使用前にチェックします。次に、接続およびパスワード資格オブジェクトを取得するためのスーパークラスのメソッドを実装します。そして物理データベースへの接続を試み、それに成功すると、物理接続に割り当てられている ManagedConnectionImpl
(ManagedConnection
の DBMS サンプル アダプタ実装) をインスタンス化して返します。
その他のメソッドは、メンバー属性用のゲッター/セッター メソッドです。
ManagedConnection
インスタンスは、管理対象環境のベースになる EIS への物理接続を表します。ManagedConnection
オブジェクトは、アプリケーション サーバによってプールされます。詳細については、「ManagedConnection」の ADK による AbstractManagedConnection
インスタンスの実装方法に関する箇所を参照してください。
ADK で提供される com.bea.adapter.spi.AbstractManagedConnection は、J2EE インタフェース javax.resource.spi.ManagedConnection
を実装したものです。DBMS サンプル アダプタでは com.bea.adapter.dbms.spi.ManagedConnectionImpl でこのクラスが拡張されています。コード リスト E-2 は ManagedConnectionImpl
の派生ツリーを示しています。
コード リスト E-2 com.bea.adapter.dbms.spi.ManagedConnectionImpl
javax.resource.spi.ManagedConnection
|
|-->com.bea.adapter.spi.AbstractManagedConnection
|
|-->com.bea.adapter.dbms.spi.ManagedConnectionImpl
ManagedConnection
は Java コネクタ アーキテクチャ SPI 仕様の重要部分なので、このクラスの詳細が Javadoc コメントに記載されています。以下のメソッドの実装を重点的に参照してください。
java.lang.object.getConnection(javax.security.auth.Subject subject, javax.resource.spi.ConnectionRequestInfo connectionRequestInfo)
protected void destroyPhysicalConnection(java.lang.Object objPhysicalConnection)
protected void destroyConnectionHandle(java.lang.Object objHandle)
boolean compareCredentials(javax.security.auth.Subject subject, javax.resource.spi.ConnectionRequestInfo info)
ping()
メソッドを使うと、物理データベース接続 (cci.Connection
以外) が今でも有効かどうかチェックできます。例外が発生した場合、ping()
は例外のタイプを具体的にチェックし、接続が不必要に切断されないようにします。
その他のメソッドは、EIS 固有のメソッド、または単に必要とされているセッター/ゲッター メソッドです。
ManagedConnectionMetaData
インタフェースは、ManagedConnection
インスタンスに関連付けられた、基本となる EIS インスタンスに関する情報を提供します。アプリケーション サーバは、この情報を使用して、接続した EIS インスタンスに関する実行時情報を取得します。詳細については、「ManagedConnection」の ADK による AbstractConnectionMetaData
インスタンスの実装方法に関する箇所を参照してください。
ADK で提供される com.bea.adapter.spi.AbstractConnectionMetaData
は、J2EE インタフェース javax.resource.spi.ManagedConnection MetaData
を実装したものです。DBMS サンプル アダプタでは com.bea.adapter.dbms.spi.ConnectionMetaDataImpl でこのクラスが拡張されています。コード リスト E-3 は ConnectionMetaDataImpl
の派生ツリーを示しています。
コード リスト E-3 com.bea.adapter.dbms.spi.ConnectionMetaDataImpl
javax.resource.spi.ManagedConnectionMetaData
|
|-->com.bea.adapter.spi.AbstractConnectionMetaData
|
|-->com.bea.adapter.dbms.spi.ConnectionMetaDataImpl
ADK の AbstractConnectionMetaData クラスは以下のクラスを実装しています。
ConnectionMetaData
クラスの実装では、DatabaseMetaData
オブジェクトが使用されます。ADK の抽象実装が使用されているので、このクラスに抽象メソッドを実装する場合は EIS 固有の情報を指定する必要があります。
LocalTransaction
インタフェースは、EIS リソース マネージャ内で管理されているトランザクションをサポートするため、外部トランザクション マネージャは必要ありません。詳細については、「LocalTransaction」の ADK による AbstractLocalTransaction
インスタンスの実装方法に関する箇所を参照してください。
ADK で提供される com.bea.adapter.spi.AbstractLocalTransaction
は、J2EE インタフェース javax.resource.spi.LocalTransaction
を実装したものです。DBMS サンプル アダプタでは com.bea.adapter.dbms.spi.LocalTransactionImpl
でこのクラスが拡張されています。コード リスト E-4 は LocalTransactionImpl の派生ツリーを示しています。
コード リスト E-4 com.bea.adapter.dbms.spi.LocalTransactionImpl
javax.resource.spi.LocalTransaction
|
|-->com.bea.adapter.spi.AbstractLocalTransaction
|
|-->com.bea.adapter.dbms.spi.LocalTransactionImpl
このクラスでは、ロギングおよびイベント通知を提供する ADK の抽象スーパークラスが使用されます。このスーパークラスは、Sun が提供する CCI と SPI の両方の LocalTransaction インタフェースを実装しています。DBMS サンプル アダプタの具象クラスは、以下に示すスーパークラスの 3 つの抽象メソッドを実装しています。
DBMS サンプル アダプタの Common Client Interface (CCI) を実装し、J2EE 準拠の CCI 要件を満たすため、多くの ADK のクラスが拡張され、以下の具象クラスが作成されています。
これらのクラスを使って、バックエンド システムにアクセスできます。クライアント インタフェースは、EIS との対話における要求および応答の両レコードのフォーマットを指定します。
注意 : Java コネクタ アーキテクチャ 1.0 の仕様では CCI の実装は省略可能になっていますが、将来的には必須になる予定です。参考として DBMS サンプル アダプタは詳細な実装例を提供しています。
Connection
は、クライアントが基本となる物理接続にアクセスするときに使用する、アプリケーションレベルのハンドルを表します。Connection インスタンスに関連付けられた実際の物理接続は、ManagedConnection
インスタンスによって表されます。詳細については、「Connection」の ADK による AbstractConnection
インスタンスの実装方法に関する箇所を参照してください。
ADK で提供される com.bea.adapter.cci.AbstractConnection
は、J2EE インタフェース javax.resource.cci.Connection
を実装したものです。DBMS サンプル アダプタでは com.bea.adapter.dbms.cci.ConnectionImpl でこのクラスが拡張されています。コード リスト E-5 は ConnectionImpl の派生ツリーを示しています。
コード リスト E-5 com.bea.adapter.dbms.cci.ConnectionImpl
javax.resource.cci.Connection
|
|-->com.bea.adapter.cci.AbstractConnection
|
|-->com.bea.adapter.dbms.cci.ConnectionImpl
ConnectionImpl
クラスは javax.resource.cci.Connection
インタフェースの DBMS サンプル アダプタの具象実装です。このクラスにより ADK の AbstractConnection クラスが拡張されます。Connection インスタンスに関連付けられた実際の物理接続は、ManagedConnection
インスタンスによって表されます。
クライアントは、ConnectionFactory
インスタンスの getConnection()
メソッドを使用することにより、Connection インスタンスを取得します。Connection は、Interaction インスタンスと関連付けないか、または 1 つ以上の Interaction インスタンスと関連付けることができます。この具象クラスの単純さは、ADK の基本クラスの強力な拡張機能の証拠です。
Interaction
インスタンスは、コンポーネントが EIS の機能を実行できるようにします。対話インスタンスは接続に基づいて作成され、Connection
インスタンスとの関係を維持する必要があります。詳細については、「Interaction」の ADK による AbstractInteraction
インスタンスの実装方法に関する箇所を参照してください。
ADK で提供される com.bea.adapter.cci.AbstractInteraction は、J2EE インタフェース javax.resource.cci.Interaction
を実装したものです。DBMS サンプル アダプタでは com.bea.adapter.dbms.cci.InteractionImpl でこのクラスが拡張されています。コード リスト E-6 は InteractionImpl の派生ツリーを示しています。
コード リスト E-6 com.bea.adapter.dbms.cci.InteractionImpl
javax.resource.cci.Interaction
|
|-->com.bea.adapter.cci.AbstractInteraction
|
|-->com.bea.adapter.dbms.cci.InteractionImpl
InteractionImpl
クラスは、ADK の Interaction オブジェクトの具象実装です。このメソッドは、Java コネクタ アーキテクチャおよび ADK で必要とされるメソッドの EIS 固有の実装です。
Java コネクタ アーキテクチャの javax.resource.cci.InteractionExecute()
メソッド (このクラスの中心メソッド) の 2 つのバージョンが DBMS サンプル アダプタで実装されています。execute()
メソッドのメイン ロジックでは、次のシグネチャが使用されます。
public Record execute(InteractionSpec ispec, Record input)
このメソッドは対話から実際の出力を返すので、他のメソッドよりも頻繁に呼び出されます。
第 2 の実装は、便利なメソッドとして提供されます。この形の execute()
では、次のシグネチャが使用されます。public boolean execute(InteractionSpec ispec, Record input, Record output)
。第 2 の実装のロジックでは、対話の成否のみを示すブール値が返されます。
InteractionSpecImpl
は、EIS インスタンスとの対話を行うためのプロパティを格納しています。InteractionSpec
は対話で基本となる EIS で指定された関数を実行するときに使用されます。
CCI 仕様では InteractionSpec の標準プロパティが定義されていますが、そのプロパティが基本の EIS に適用されない場合は InteractionSpec
の実装で標準プロパティをサポートする必要はありません。
InteractionSpec
実装クラスは、サポートする各プロパティに対してゲッター メソッドとセッター メソッドを提供する必要があります。ゲッター メソッドおよびセッター メソッドは、JavaBean 設計パターンに基づく規約に従って作成する必要があります。詳細については、「InteractionSpec」の ADK による InteractionSpecImpl
インスタンスの実装方法に関する箇所を参照してください。
ADK で提供される com.bea.adapter.cci.InteractionSpecImpl は、J2EE インタフェース javax.resource.cci.InteractionSpec
を実装したものです。DBMS サンプル アダプタでは com.bea.adapter.dbms.cci.InteractionSpecImpl でこのクラスが拡張されています。コード リスト E-7 は InteractionSpecImpl の派生ツリーを示しています。
コード リスト E-7 com.bea.adapter.dbms.cci.InteractionSpecImpl
javax.resource.cci.InteractionSpec
|
|-->com.bea.adapter.cci.InteractionSpecImpl
|
|-->com.bea.adapter.dbms.cci.InteractionSpecImpl
InteractionSpec インタフェースの実装クラスは、java.io.Serializable
インタフェースを実装する必要があります。InteractionSpec
は、String 属性 m_sql
にゲッター メソッドおよびセッター メソッドを追加するために、ADK の InteractionSpec
を拡張しています。ゲッター メソッドおよびセッター メソッドは Java コネクタ アーキテクチャ 1.0 仕様で指定されている JavaBean 設計パターンに従う必要があります。
このパッケージには、DBMS サンプル アダプタ EventGeneratorWorker
という 1 つのクラスのみが含まれます。このクラスは、DBMS サンプル アダプタのイベント ジェネレータに対して機能します。
EventGenerator
クラスには以下のインタフェースが実装されています。
データベースはイベント ジェネレータに対して情報をプッシュできず、通知する変更内容をプルまたはポーリングする必要があるので、DBMS サンプル アダプタのイベント ジェネレータは ADK の AbstractPullEventGenerator
を拡張しています。コード リスト E-8 は EventGenerator の派生ツリーを示しています。
com.bea.adapter.event.AbstractEventGenerator
|
|-->com.bea.adapter.event.AbstractPullEventGenerator
|
|-->com.bea.adapter.dbms.event.DbmsEventGeneratorWorker
ADK の AbstractPullEventGenerator
の具象実装では以下の抽象メソッドが実装されます。
protected abstract void postEvents(IEventRouter router) throws Exception
protected abstract void setupNewTypes(List listOfNewTypes)
protected abstract void removeDeadTypes(List listOfDeadTypes)
.これらのメソッドは EIS 固有であり、EIS のコンテキスト内でイベントを識別するために使われます。また、データベースにアクセスしてイベント定義およびイベントを作成および削除します。また、これらのメソッドを使って、イベント発生時に実行されるデータベースのトリガを作成および削除できます。
このクラスのキー メソッドは postEvents()
です。このメソッドは、データベースの EVENT テーブルの行から読み込んだデータの IEvent
オブジェクトを作成します。引数は IEventRouter
です。postEvents()
は、IEventDefinition
オブジェクトの createDefaultEvent()
メソッドを使って IEvent
を作成し、イベント データを設定してから router.postEvent(event)
を呼び出してイベントをルータに通知します。ルータにイベントを送信したら、データベースからイベント データに関連する行を削除します。
メソッド setupNewTypes()
は新しいイベント定義を作成し、データベースに対して適切なトリガが作成されていることを確認します。このメソッドはイベント定義ごとにトリガ情報オブジェクトを作成します。このオブジェクトにはイベント定義で表現するカタログ、スキーマ、テーブル、トリガ タイプ、およびトリガ キーが記述されます。トリガ キーのマップが保存されるため、トリガが重複してデータベースに追加されることがありません。マップ内に新しいキーが存在しない場合はデータベースに対するトリガ テキストが生成されます。
removeDeadTypes()
メソッドもトリガ情報オブジェクトを作成しますが、このオブジェクトは、1 つまたは複数の一致するイベント タイプの検索も行います。このトリガに一致するすべてのイベント定義がマップから削除され、次にデータベースからトリガ自身が削除されます。
SPI、CCI、およびイベントの各インタフェースを実装した後、以下の手順に従ってアダプタをデプロイします。
アダプタを BEA WebLogic Integration 環境にデプロイする前に、アダプタがコンピュータのどの場所にあるかを確認します。アダプタのある場所は WLI_HOME
/adapters/dbms
です。WLI_HOME
を、BEA WebLogic Integration がインストールされているディレクトリのパス名に置き換えます。以後、この場所を ADAPTER_ROOT
と呼びます。
DBMS サンプル アダプタでは、アダプタの RAR ファイル (META-INF/ra.xml
) の中に、ra.xml
ファイルが組み込まれています。DBMS サンプル アダプタでは AbstactManagedConnectionFactory
クラスが拡張されており、以下のプロパティが ra.xml
ファイルで定義されています。
LogLevel
LanguageCode
CountryCode
MessageBundleBase
LogConfigFile
RootLogContext
AdditionalLogContext
DBMS サンプル アダプタには、以下の表に示す宣言も必要です。
DBMS サンプル アダプタの ra.xml
ファイルは、次に示すディレクトリで参照できます。
WLI_HOME
/adapters/dbms/src/rar/META-INF/
クラス ファイル、ロギング コンフィグレーション情報、メッセージ バンドルは JAR ファイルにまとめて記述する必要があります。このファイルは META-INF/ra.xml
とバンドルして RAR ファイルを作成します。Ant
build.xml
ファイルは、この RAR ファイルの正しい構築方法を示しています。
JAR および EAR ファイルを構築するには、次の手順を実行します。
EAR ファイルを作成してデプロイすると、DBMS サンプル アダプタが表示されます。手順は、次のとおりです。
コード リスト E-9 DBMS サンプル アダプタの EAR ファイルの宣言
<!-- EAR ファイルのデプロイ -->
<Application Deployed="true" Name="BEA_WLS_DBMS_ADK" Path="WLI_HOME
/adapters/dbms/lib/BEA_WLS_DBMS_ADK.ear">
<ConnectorComponent Name="BEA_WLS_DBMS_ADK" Targets="myserver"
URI="BEA_WLS_DBMS_ADK.rar"/>
<WebAppComponent Name="DbmsEventRouter" Targets="myserver"
URI="BEA_WLS_DBMS_ADK_EventRouter.war"/>
<WebAppComponent Name="BEA_WLS_DBMS_ADK_Web" Targets="myserver"
URI="BEA_WLS_DBMS_ADK_Web.war"/>
</Application>
注意 : WLI_HOME
は、使用する環境の BEA WebLogic Integration のインストール ディレクトリのパス名に置き換えます。
この URL で、host
は、サーバの名前であり、port
はサーバがリスンするポートです。例を次に示します。
http://localhost:7001/wlai
[WebLogic Integration - Application Integration Design Console ログオン] ページが表示されます。
DBMS サンプル アダプタを使用するときに、データベース固有のエラー メッセージがログ ファイルに書き込まれる場合があります。ここでは、一般的なデータベース固有エラー メッセージの一部について説明します。
Sybase または MSSQL データベースを使用しているとき、アクティブなデータベースまたは言語 (あるいはその両方) の変更を知らせる警告が発行されることがあります。このような警告は、接続のアクティブなデータベースまたは言語が変更されたときに Sybase や MSSQL データベースによって生成されます。カタログは DBMS サンプル アダプタのさまざまな場所で変更されるため、サンプル アダプタのユーザは必ずこれらのメッセージを目にすることになります。これらの警告には問題がないため無視することができます。
MSSQL XA 環境のアダプタ インスタンスが自動的に一時停止されて再開すると、次のようなエラー メッセージが送出されます。
<Oct 15, 2003 4:40:30 PM PDT> <Error> <JDBC> <BEA-001112>
<Test "SELECT COUNT(*) FROM sysobjects" set up for pool "wlaiPool" failed with
exception: "javax.transaction.xa.XAException: [BEA][SQLServer JDBC Driver]
No more data available to read.".>
これは JDBC レベルのエラーです。再起動された DBMS インスタンスに対する既存の接続または切断された接続を JDBC コンテナがクリーンアップするときに生成されます。このような例外はこの場合には正常です。つまり、EIS は使用可能であり、アダプタ インスタンスは正常に再開しており、JDBC コンテナは回復しています。
DBMS サンプル アダプタを Microsoft SQL Server データベースで使用するときは、WebLogic Server Administration Console を使用して、アプリケーション統合で使用される接続プールの TestReservedConnection
パラメータを有効にします。パラメータが有効になっていないと、自動再開または手動再開の機能は使用できず、次のような SQLException が送出されます。
java.sql.SQLException: [BEA][SQLServer JDBC Driver]No more data
available to read
設計時 GUI は、ユーザがアプリケーション ビューの作成、サービスとイベントの追加、および BEA WebLogic Integration 環境でホストされているアダプタのデプロイを実行できるインタフェースです。この節では、DBMS サンプル アダプタの設計時 GUI の開発工程について説明します。
DBMS の設計時 GUI の開発を始める前に、以下のパラメータの値を決定する必要があります。
DBMS サンプル アダプタは、設計時 GUI に、ADK に付属する JSP (Java Server Page) を使用します。ただし、アダプタ固有の機能を提供するための JSP が追加されています。次の表では、追加されているプロパティについて説明します。
テキスト ラベル、メッセージ、および例外のインターナショナライゼーションをサポートするため、DBMS サンプル アダプタでは、テキスト プロパティ ファイルに基づくメッセージ バンドルが使われます。プロパティ ファイルには、BEA_WLS_SAMPLE_ADK
プロパティ ファイルからコピーされた名前と値の組み合わせおよび DBMS サンプル アダプタ固有のプロパティ用に追加された新しいエントリの両方が記述されています。
DBMS サンプル アダプタのメッセージ バンドルは、WLI_HOME
/adapters/dbms/src
ディレクトリに格納されています。これは ADK と一緒にインストールされたものです。詳細については、同じディレクトリ内の BEA_WLS_DBMS_ADK.properties
ファイルを参照してください。
メッセージ バンドルの作成方法の詳細については、以下のサイトの JavaSoft チュートリアルでインターナショナライゼーションについて参照してください。
http://java.sun.com/docs/books/tutorial/i18n/index.html
設計時 GUI を実装するには DesignTimeRequestHandler
クラスを作成する必要があります。このクラスはフォームからのユーザ入力を受け取り、設計時アクションを実行するためのメソッドを提供します。DesignTimeRequestHandler
の詳細については、「手順 4 : 設計時 GUI の実装」を参照してください。
DBMS サンプル アダプタのパブリック クラス DesignTimeRequestHandler
により AbstractDesignTimeRequestHandler
が拡張され、次の表に示すメソッドが提供されます。
JSP は display.jsp
ページに表示されるので、display.jsp
は最初に記述する必要のある .jsp
ファイルです。ADK はカスタム JSP タグのライブラリを備えており、これらは ADK および DBMS サンプル アダプタの JSP 全体で使用できます。これらのタグは、検証機能を追加したり、ユーザがボタンをクリックしたときにフィールド値を保存するなど、さまざまな機能をサポートしています。
ADK を使ってアダプタ用の JSP を記述する際、オブジェクトの状態の保存が必要な場合があります。これにはいくつかの方法があります。AbstractDesignTimeRequestHandler
には編集対象のアプリケーション ビューの ApplicationViewDescriptor
が保持されます。このファイルから高速かつ効率的にハンドラを呼び出せるので、このファイルに状態を保存するのが一般的です。
別の選択肢として、便利なメソッド (getApplicationViewManager()
、getSchemaManager()
および getNamespaceManager()
) を使って AbstractDesignTimeRequestHandler
から Manager Bean を要求して、アプリケーション ビューに関するリポジトリから情報を検索することもできます。このメソッドには時間がかかりますが、必要になる場合もあります。これは JSP なのでセッション オブジェクトも使用できます。ただし、セッション内のすべてのオブジェクトで明示的に java.io.serializable
インタフェースを実装する必要があります。
WEB-INF/web.xml
のデプロイメント記述子を記述します。通常は、アダプタの web.xml
ファイルを起点として、必要に応じてコンポーネントを変更します。このアダプタの web.xml
ファイルを参照するには、次に示すディレクトリに移動してください。
WLI_HOME
/adapters/dbms/src/war/WEB-INF/web.xml
詳細については、次の URL にある BEA WebLogic Server 製品ドキュメントを参照してください。
http://edocs.beasys.co.jp/e-docs
WebLogic Integration Administration Console を使用してアプリケーション統合の実行時環境を管理することができます。詳細については、次の URL にある『WebLogic Integration ソリューションの管理』の「Application Integration」を参照してください。
http://edocs.beasys.co.jp/e-docs/wli/docs81/manage/ai.html
次の節では、DBMS サンプル アダプタ固有の管理の問題について説明します。
DBMS サンプル アダプタ インスタンスのイベント接続の EventSchema
パラメータを変更するときは、次の点を考慮してください。
evnt.sql
を実行して確認することができます。evnt.sql は次の場所にあります。
WLI_HOME\adapters\dbms\sql\database_type
このとき、WLI_HOME は WebLogic Integration のインストール ディレクトリで、database_type
は使用しているデータベースのディレクトリです。
注意 : WebLogic Integration 8.1 Service Pack 3 以降で、使用するデータベースが Oracle の場合は、evnt.sql
および evnt_trigger.sql
の両方を実行する必要があります。
注意 : アプリケーション統合イベントのための JDBC 接続プールで使用されるデータベース インスタンスに変更がある場合などは、サーバを再デプロイする必要があります。
イベント トリガに関連付けられているスキーマ名/テーブル オーナは、設計時に指定される情報のままです。WebLogic Integration Administration Console でイベント接続を編集するときは、イベント テーブルに対して新しい接続を指定します。すべてのイベント メタデータが新しい接続に関連付けられるのは、アプリケーションが WebLogic Integration Administration Console で再デプロイされた後になります。このときにもイベント トリガは元のスキーマ名を指しています。
新しいデータベースへのイベント接続を変更するときは、新しいデータベースに含まれるスキーマとテーブルを以前の設定と同じ名前にする必要があります。新しいテーブルがイベントのトリガに使用されます。
環境変数を使用すると、イベント トリガが新しいスキーマ/テーブル名を指すようにすることができます。元のトリガが削除されないことと、アダプタ インスタンスを再デプロイする必要があることに注意してください。元のトリガを削除するには、WebLogic Server Administration Console からアプリケーションを再デプロイします。スキーマ名に対する環境変数によって、トリガがポーリングするスキーマ名/テーブル オーナを変更することができます。
データベースのテーブルごとにイベントを 1 つに制限することをお勧めします。こうすると、1 つのテーブルに複数のイベント ポーラーがアクセスしないようになります。
複数のアプリケーション ビューで使用される DBMS サンプル アダプタを設定するときは、次の点を考慮してください。特定のテーブル/トリガ タイプのイベントを必要とするすべてのアプリケーション ビューでは、使用するアダプタ インスタンスを 1 つだけにする必要があります。2 つのアプリケーション ビューがあり、それぞれが CUSTOMER_TABLE
挿入に依存する場合は、2 つのビューが同じアダプタ インスタンスを使用するようにします。アダプタ インスタンスのイベント ジェネレータは、そのすべてのイベント サブスクリプションがアンデプロイされると、CUSTOMER_TABLE
から挿入トリガを削除するためです。AppView1
が adapter_instance_1
を使用してアンデプロイされると、adapter_instance_1
は CUSTOMER_TABLE
の挿入トリガを削除します。同じく CUSTOMER_TABLE
挿入を必要とする AppView2
が adapter_instance_2
を使用しても、adapter_instance_1
によってトリガが削除されているためイベントは発生しません。AppView2
が adapter_instance_1
を使用すると、adapter_instance_1
は AppView2
が CUSTOMER_TABLE
挿入イベントを必要とすることを認識しているため、AppView1
がアンデプロイされた場合でもトリガを削除しません。
WebLogic Integration クラスタのノードにイベント ジェネレータを分散させることができます。これにより、イベント生成のロード バランスとフォールト トレランスが向上します。同一 DBMS インスタンスを使用する複数のイベント ジェネレータの例については、「例 : DBMS サンプル アダプタ」を参照してください。
クラスタ化環境ではイベント ジェネレータ ターゲットを設定する必要があります。空の対象 (""
) では、クラスタ内のどのノードでもイベントが起動されません (単一ノード環境では値を指定する必要はありません。イベント ジェネレータ ターゲット値が空でも 1 つのサーバーでイベントが起動されます)。
![]() |
![]() |
![]() |