JMS リスナーの定義¶
Virtual DataPort は、JMS サーバーにサブスクライブして、リクエストを待機できます。そのため、クライアントは、JDBC、ODBC、または Web サービスを介して Virtual DataPort に接続する代わりに、JMS サーバーにリクエストを送信できます。JMS サーバーは、受け取ったリクエストを Virtual DataPort に転送します。その後、Virtual DataPort からの応答が JMS サーバーのキューまたはトピックに返され、クライアントに転送されます。
JMS リスナーを作成するときは、次の処理を実行できるよう設定できます。
JMS サーバーから受信した VQL ステートメントを実行する
あるいは、JMS リスナーで補間変数 (
@JMSEXPRESSION
) を使用してクエリを定義し、実行時にこの変数を JMS サーバーから受信した値で置き換える
JMS リスナーの出力は、XML ドキュメントと JSON ドキュメントのいずれかを選択できます。
オプション (a) の動作例: クライアントは、 SELECT * FROM internet_inc WHERE iinc_id = 1
などのメッセージを JMS サーバーに送信します。JMS サーバーはこのメッセージを Virtual DataPort に転送します。Virtual DataPort は JMS サーバーに応答を返送しますが、選択した出力が XML の場合は、「 XML response message sent by a JMS listener 」のようになり、JSON の場合は、「 JSON response message sent by a JMS listener 」のようになります。
<?xml version="1.0" encoding="UTF-8"?>
<response>
<item>
<iinc_id>1.00</iinc_id>
<summary>Error in ADSL router</summary>
<ttime>29-jun-2005 19h 19m 41s</ttime>
<taxid>B78596011</taxid>
<specific_field1>1</specific_field1>
<specific_field2>1</specific_field2>
</item>
</response>
[
{
"IINC_ID": 1,
"SUMMARY": "Error in ADSL router",
"TTIME": "2005-06-29",
"TAXID": "B78596011",
"SPECIFIC_FIELD1": "1",
"SPECIFIC_FIELD2": "1"
}
]
リクエストが ALTER VIEW incidents CACHE INVALIDATE
などの DML センテンスの場合、応答は空になります (「 XML response message to a DML query 」および「 JSON response message to a DML query 」を参照)。
<?xml version="1.0" encoding="UTF-8"?>
<response />
[]
オプション (b) の動作例: 次のクエリを使用していて JMS リスナーを作成したとします。
SELECT * FROM incidents
WHERE taxid = '@JMSEXPRESSION'
リスナーが値 B78596014
を受信すると、サーバーは次のクエリを実行します。
SELECT * FROM incidents
WHERE taxid = 'B78596014'
JMS リスナーで定義したクエリに @JMSEXPRESSION
変数が含まれていない場合、リスナーから受信した値は無視され、クエリは「そのまま」実行されます。
次の図には、JMS リスナーを扱うさまざまなコマンドの構文が含まれています。
CREATE [ OR REPLACE ] LISTENER JMS <name:identifier>
VENDOR { ACTIVEMQ | WEBSPHEREMQ | JNDI }
DESTINATION = <name:literal>
[ IGNOREREPLYTO ]
[ REPLYTO = <name:literal> ]
{ QUEUE | TOPIC }
OUTPUT = { XML | JSON }
[ USER = <name:literal> PASSWORD = <name:literal> ]
VDPUSER = <name:literal>
[
MESSAGESCONTAINVARIABLE = { TRUE | FALSE }
QUERY = <query:literal>
]
ENABLED = { TRUE | FALSE }
PROPERTIES ( <property> [, <property> ]* )
[ FOLDER = <folder:literal> ]
[ DESCRIPTION = <description:literal> ]
<property> ::=
<key:literal> = <value:literal>
VENDOR
。このリスナーが接続する JMS サーバーが Apache Active MQ と IBM WebSphere MQ のどちらでもない場合は、値JNDI
を使用します。DESTINATION
は、Virtual DataPort がサブスクライブして、リクエストを待機する、キューまたはトピックの名前です。JMS サーバーのベンダーによっては、サブスクライブ先を作成しなければならない場合があります。そうでない場合は、リスナーがサブスクライブしようとしたときに、サブスクライブ先が自動的に作成されます。
REPLYTO
は、応答が返される JMS キューまたはトピックの名前です。JMS メッセージに [Reply to] フィールドが含まれていても、応答は常にこの宛先に送信されます。
REPLYTO
句が指定されていない場合は、JMS リクエストの [Reply to] フィールドで指定されている宛先に応答が送信されます。JMS リクエストにもこのフィールドがない場合、サーバーは応答を返しません。
IGNOREREPLYTO
句が指定されている場合、リスナーは応答を決して返しません。QUEUE
またはTOPIC
。このリスナーのコネクション先の種類に応じて、いずれかのパラメータを指定します。OUTPUT
。このパラメータがXML
の場合、リスナーの出力は XML ドキュメントになります。JSON
の場合は、JSON ドキュメントになります。USER
およびPASSWORD
。JMS サーバーにアクセスするための資格情報。VDPUSER
は、リスナーがクエリを実行するための十分な権限を持っているかどうかを確認するために、Virtual DataPort が使用するユーザー名です。Virtual DataPort サーバーにユーザーが 2 名登録されている例を以下に示します。admin
: 「管理者」、またはデータベースの任意のビューにアクセスすることのできる、データベースの「ローカル管理者」に昇格したユーザー。user1
: このデータベースに対するEXECUTE
権限だけを持つ「標準ユーザー」。
VDPUSER
パラメータが「admin」の場合、リスナーは任意のクエリを実行できます。しかし、VDPUSER
がuser1
の場合は、CREATE
、DROP
、INSERT
、UPDATE
、およびDELETE
クエリは失敗します。なぜなら、user1
はEXECUTE
権限だけを持つからです。MESSAGESCONTAINVARIABLE
およびQUERY
: これらが指定され、MESSAGESCONTAINVARIABLE
がtrue
の場合、リスナーが JMS メッセージを受信すると、サーバーはQUERY
の変数@JMSEXPRESSION
を JMS メッセージの内容に置き換えます。その後、サーバーは、置換後のクエリを実行します。ENABLED
。TRUE
の場合、リスナーが有効になります。つまり、リスナーの作成後、そのリスナーはリクエストを待機するために JMS サーバーへのコネクションを試みます。FALSE
の場合、リスナーは無効になります。PROPERTIES
。JMS サーバーへのコネクションを取得するために使用されるプロパティのリスト。最も普及しているベンダー製品へのコネクションに必要なプロパティのリストについては、管理ガイドの付録「 JMS コネクションの詳細: JNDI プロパティ 」で説明しています。通常、JMS リスナーには、少なくとも以下のプロパティが必要になります。java.naming.factory.initial
(javax.naming.Context.INITIAL_CONTEXT_FACTORY
)java.naming.provider.url
(javax.naming.Context.PROVIDER_URL
)transport.jms.ConnectionFactoryJNDIName
。JMS サーバーの JNDI コンテキストでのコネクションファクトリーの名前。
FOLDER
。リスナーが格納されるフォルダのパス。例:FOLDER = '/jms listeners'
。DESCRIPTION
。リスナーの説明。
ALTER LISTENER JMS <name:identifier>
ENABLED EQ { true \| false }
ENABLED = TRUE
で、以前は FALSE
だった場合は、リクエストを待機するために JMS サーバーへのコネクションを試みます。
ENABLED = FALSE
で、以前は TRUE
だった場合は、JMS サーバーとのコネクションを閉じます。
JMS リスナーの名前を変更するには、次のような RENAME
ステートメントを使用します。
RENAME LISTENER JMS <name:identifier> TO <new name:identifier>
RENAME LISTENER JMS jms_listener_order TO jms_order_full;