JDBCプロバイダは、リレーショナルデータベースへ接続する場合に使えます。簡単な構成の表の読書きと、読み込んだ行の確認を行うことができます。
このトランスポート・プロバイダのJavadocはここにあります。
ソースコードはここにあります。
JDBCコネクタのプロパティ
| プロパティ |
説明 |
デフォルト |
必須 |
| jndiContext |
利用するJNDIコンテキスト。コネクタに直接設定するか、jndiInitialFactory, jndiProviderUrlとproviderPropertiesプロパティから作成されます。 |
|
× |
| jndiInitialFactory |
オブジェクトを取得する場合に使う初期コンテキスト・ファクトリ。例えばJNDIコンテキストからのDataSource。 |
|
○ (JNDIを利用する場合) |
| jndiProviderUrl |
JNDIプロバイダのURL。 |
|
○ (JNDIを利用する場合) |
| providerProperties |
初期コンテキストに渡すその他のプロパティ。 java.naming.username や java.naming.password プロパティはここに設定することができます。 |
|
× |
| dataSourceJndiName |
JNDIで設定されている、利用するデータ・ソース。 |
|
○ (JNDIを利用する場合) |
| dataSource |
利用するJDBCデータソース。コネクタに直接設定した場合は、JNDIプロパティは不要です。XAトランザクションを利用した場合は、XADataSourceオブジェクトは必須です。 |
|
× (JNDIを利用する場合) |
| pollingFrequency |
データベースをポーリングのポーリング間隔(ミリ秒) |
|
× |
| queries |
SQL文のMap。SQL文をエンドポイントに設定することもできます。(以下を参照) |
|
× |
| resultSetHandler |
検索結果に返す、ResultSetHandlerの完全修飾クラス名。このオブジェクトに付いての詳細は例題を参照してください。 |
org.apache.commons.dbutils.handlers. MapListHandler |
× |
| queryRunner |
検索を実行する場合のQueryRunnerの完全修飾クラス名。このオブジェクトの詳細に付いては例題を参照してください。 |
org.apache.commons.dbutils.QueryRunner |
× |
JDBCエンドポイント・プロパティ
| プロパティ |
説明 |
デフォルト |
必須 |
| queries |
このエンドポイントが対応するSQL文のMap。コネクタのSQL文を上書きします。 |
|
No |
データ処理用の設定
SQL文はコネクタ又はエンドポイントに指定することができます。
SQL文はMapに記述され、名前をキーとします。
名前はエンドポイントのアドレスから取得されます。
3種類のデータ処理があります:
- read 処理: データを選択する select 処理。
- ack 処理: 読み込んだ行毎に実行する処理。例えば update や delete 処理。この処理はread処理と関連しています。read処理に対応したack処理はread処理に接尾辞として添えられた{{.ack}}で識別されます。
- write 処理: 多くのい場合は、 insert 処理です。出力エンドポイントで使えます。
簡単なパラメータ検索を行うことも可能です。パラメータは{{${...}}}パターンに囲みます。検索が実行された場合は以下のようにパラメータに値が埋め込まれます:
- パラメータがエンドポイントURIで定義されたか
- 入力がある場合(ack及び書き込み検索の場合)、入力のJavaビーンとして式を評価する。
ack検索お場合は、入力はUMOMessageに送られるペイロードと定義されます。取得した特定のれ何時にアクセスする場合は、メッセージで評価される式、${特例の列}を使います。
書き込み検索の場合は、入力はUMOMessageと定義されます。全ペイロードをアクセスする場合は、メッセージを評価する式、${payload}を使います。
特別な式{{${NOW}}}は、現在の日時からtimestampを作成します。
名前なしクエリー
クエリーを設定せずにSQL文を実行することができます。特定したエンドポイント(送信又は受信)で、実行するクエリーをURIのアドレスに記述することができます。
UMOMessage msg = eventContext.receiveEvent("jdbc:, 0);
eventContext.sendEvent(msg, "jdbc:);
JDBCコネクタの使い方
コネクタの生成
JDBCコネクタを利用する前に、ESB MuleのXML設定ファイルにコネクタを設定します。
Springframeworkで設定されたdataSourceを利用する場合は以下のように書きます:
<connector name="jdbcConnector" className="org.mule.providers.jdbc.JdbcConnector">
<properties>
<container-property name="dataSource" reference="myDataSource"/>
</properties>
</connector>
Springframeworkを使えば、簡単にDataSourceを作成することができます:
xapool:
<bean id="myDataSource"
class="org.enhydra.jdbc.standard.StandardDataSource"
destroy-method="shutdown">
<property name="driverName"><value>org.hsqldb.jdbcDriver</value></property>
<property name="url"><value>jdbc:hsqldb:file:db/test</value></property>
</bean>
又は、JNDIリポジトリからdataSourceを取得する場合は、以下のように書きます:
<connector name="jdbcConnector" className="org.mule.providers.jdbc.JdbcConnector">
<properties>
<property name="jndiInitialFactory" value="..."/>
<property name="jndiProviderUrl" value="..."/>
<property name="dataSourceJndiName" value="..."/>
</properties>
</connector>
又は、より簡単に設定をするために、JNDIコンテナを使うこともできます。
クエリの作成
エンドポイントで使うSQL文は、コネクタ又はエンドポイントに設定します。
<map name="queries">
<property name="getTest"
value="SELECT ID, TYPE, DATA, ACK, RESULT FROM TEST WHERE TYPE =
${type} AND ACK IS NULL"/>
<property name="getTest.ack"
value="UPDATE TEST SET ACK = ${NOW} WHERE ID = ${id} AND TYPE =
${type} AND DATA = ${data}" />
<property name="writeTest"
value="INSERT INTO TEST(ID, TYPE, DATA, ACK, RESULT) VALUES(NULL,
${type}, ${payload}, NULL, NULL)" />
</map>
コンポーネントの作成
リシーバー:
<mule-descriptor name="..."
implementation="..."
inboundEndpoint="jdbc://getTest?type=1"
outboundEndpoint="..."/>
ディスパッチャ:
<mule-descriptor name="..."
implementation="..."
inboundEndpoint="..."
outboundEndpoint="jdbc://writeTest?type=1" />