2.9.7. JDBCバインディング

JDBC BC は、  WebOTX ESBにおいてJDBC ドライバを介してデータベースへの接続機能を実現するコンポーネントです。
JDBC BC 動作概要


図2.9.7-1

2.9.7.1. サービスユニットのファイル構成

JDBC BC のサービスユニットのファイル構成について説明します。
JDBC BC のサービスユニットのフォルダ構成は下図の通りです。


図2.9.7.1-1

JDBC BCのサービスユニットに含まれるファイルについて以下に説明します。
JDBC BCのSUファイル
表2.9.7.1-1
項目
説明
/META-INF/jbi.xml
ServiceUnitの配備記述子
endpoints.xml
JDBC BC のArtifactファイル
*.wsdl
*.xsd
オペレーションやメッセージの定義を含むWSDL文書ファイルです。ファイルシステムのインポート操作で、ServiceUnitに追加してください。WSDL文書は、任意の名前でServiceUnit毎に一つだけ含めてください。WSDLがimportするスキーマファイルも同じ位置に格納します。
*.su
ServiceUnitの管理ファイル(編集不可)
WSDLファイルについて
WSDLファイルはServiceUnit作成時に生成されません。 [2.9.7.13. WSDLファイルの生成] の手順、もしくは、 予め、Developer's StudioのWebサービスプロジェクト等で作成してください。
Developer's Studioで、Webサービスプロジェクトの新規作成を行うには、メニュー ファイル新規プロジェクトを選択し、新規プロジェクト画面で、WebサービスWebサービスプロジェクト を選択してください。
なお、Outboundのみで戻り値がない場合は、JDBCのSUにWSDLを含める必要はありません。
詳細については、 [ アプリケーション開発ガイド(Java EE) > 1. Webサービスアプリケーションの開発 ] を参照してください。

WSDL定義例
JDBC BCのサンプルに含まれるWSDL定義ファイルを例にして、エンドポイント定義との対応付けについて説明します。
<?xml  version="1.0"  encoding="UTF-8"?>
<definitions  name="select"  
    targetNamespace="http://www.nec.co.jp/jbi/sample1.wsdl"
⇒サービス名、インタフェース名、オペレーション名の名前空間URIに対応
    xmlns:tns="http://www.nec.co.jp/jbi/sample1.wsdl"  
    xmlns="http://schemas.xmlsoap.org/wsdl/"  
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"  
    xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns1="http://com.nec.webotx">
    <types>
        <schema  targetNamespace="http://com.nec.webotx"
            xmlns="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://com.nec.webotx">
            <complexType  name="SimpleRecordBean">
⇒1レコードの型定義
                <sequence>
                    <element  name="CUSTOMER_ID"  type="string"/>
                    <element  name="CITY"  type="string"/>
                    <element  name="NAME"  type="string"/>
                    <element  name="EMAIL"  type="string"/>
                    <element  name="PHONE"  type="decimal"/>
⇒各要素はオペレーション定義のパラメタに対応
                </sequence>
            </complexType>

<complexType name="SimpleRecords"> ⇒複数レコードの型定義 <sequence> <element name="value" type="tns:SimpleRecordBean" minOccurs="0" maxOccurs="unbounded"/> </sequence> </complexType> </schema> </types>
<message name="consumerSelect_IN"> <part name="record" type="tns1:SimpleRecords"/></message> <message name="consumerSelect_OUT"></message> <message name="providerInsert"> <part name="record" type="tns1:SimpleRecords"/></message> <message name="providerInsertResponse"></message>
<portType name="sampleConsumerPort"> ⇒インタフェース名のローカル名に対応(コンシューマ) <operation name="moveRecords" parameterOrder="recoeds"> <input message="tns:consumerSelect_IN"/> <output message="tns:consumerSelect_OUT"/></operation> </portType> <portType name="sampleProviderPort"> ⇒インタフェース名のローカル名に対応(プロバイダ) <operation name="moveRecords" parameterOrder="recoeds"> <input message="tns:providerInsert"/> <output message="tns:providerInsertResponse"/></operation> </portType>
<binding name="sampleConsumerBinding" type="tns:sampleConsumerPort"> <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="rpc"/> <operation name="moveRecords"> ⇒オペレーション名のローカル名に対応(コンシューマ) <soap:operation soapAction=""/> <input> <soap:body use="literal" namespace="http://www.nec.co.jp/jbi/sample.wsdl"/></input> <output> <soap:body use="literal" namespace="http://www.nec.co.jp/jbi/sample.wsdl"/></output></operation> </binding> <binding name="sampleProviderBinding" type="tns:sampleProviderPort"> <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="rpc"/> <operation name="moveRecords"> ⇒オペレーション名のローカル名に対応(プロバイダ) <soap:operation soapAction=""/> <input> <soap:body use="literal" namespace="http://www.nec.co.jp/jbi/sample.wsdl"/></input> <output> <soap:body use="literal" namespace="http://www.nec.co.jp/jbi/sample.wsdl"/></output></operation> </binding>
<service name="sampleService"> ⇒サービスのローカル名に対応 <port name="sampleConsumer" binding="tns:sampleConsumerBinding"> <soap:address location="http://localhost/default/sample/consumer"/></port> <port name="sampleProvider" binding="tns:sampleProviderBinding"> <soap:address location="http://localhost/default/sample/provider"/></port></service> </definitions>

2.9.7.2. エンドポイントの設定

SUエディタを使用して JDBC BC の基本的な設定をする方法について説明します。


図2.9.7.2-1

Memo
 エンドポイントを追加する方法については、 2.7.1. エンドポイントの追加 をご覧下さい。

基本の設定項目
表2.9.7.2-1
項目
説明

エンドポイント一覧
JDBC BCのエンドポイントの一覧を表示します。
 
基本設定
エンドポイントロール
JDBC BCのエンドポイントロールを指定します。
“プロバイダ”、“コンシューマ”から選択[必須]
サービス名
エンドポイントロールがプロバイダの場合、JDBC BCが提供するサービス名と名前空間を指定します。
  エンドポイントロールがコンシューマの場合、呼び出し先のサービス名と名前空間を指定します。
QName(名前空間、ローカル名)[必須]
インタフェース名
エンドポイントロールがプロバイダの場合、JDBC BCが提供するインタフェース名と名前空間を指定します。
   エンドポイントロールがコンシューマの場合、呼び出し先のインタフェース名と名前空間を指定します。
QName(名前空間、ローカル名)[必須]
ESBインスタンス名
分散ESB機能を使用する場合にのみESBインスタンス名を指定します。 その他の場合は空欄にします。
文字(A-Z、a-z)、数字(0-9)、ハイフン(-)、点(.)、下線(_)の組み合わせ [任意]
オペレーション一覧
オペレーション名の一覧を表示します。
 
メッセージエクスチェンジハンドラ
メッセージエクスチェンジハンドラを指定します。
 
共通設定
共通項目(セキュリティ認証、メッセージ送信優先度、エラーリトライ)を設定します。
 
オプション一覧
オプションを設定します。
 
JDBCに関する設定項目
表2.9.7.2-2
項目
説明

JDBC BCの設定
JDBCデータソース名
   (JNDIサーバへの登録名)
JDBCデータソースのJNDI名を指定します。
    例) jdbc/Oracle
文字列(JNDI名)[必須]
JNDIサーバのアドレス
   (corbaname URL)
接続先の名前サーバを変更する場合に、接続するためのアドレス(corbaname URL)を指定します。
   例) corbaname://hostname1:2809
文字列(corbaname URL) [任意]
データベースのユーザ名
データベース接続ユーザを指定します。
【マルチバイト文字列指定可】
文字列[任意]
データベースのパスワード
データベース接続パスワードを指定します。
   「********」のようなアスタリスクになって文字が隠されるようになっています。
【マルチバイト文字列指定可】
文字列[任意]
※ 妥当性チェックを行うため、問題がある項目名が赤色となり、正しく修正すると、項目名が黒くなります。 詳細は、2.8. 妥当性チェックを参照してください。
   ※ コンシューマでエンドポイントロールを指定する場合、参照をクリックすると、SU-エンドポイント一覧 ダイアログが表示されます。このダイアログを利用して、カレントサービスアセンブリプロジェクトに存在しているサービスユニットに関するサービス名やインタフェース名などの情報を再利用できます。


図2.9.7.2-2

2.9.7.3. オペレーション設定

SUエディタを使用してオペレーションの設定をする方法について説明します。
 オペレーション一覧追加をクリックし、オペレーションを追加します。
 SUエディタにおける参照をクリックしてSU-エンドポイント一覧ダイアログからサービスユニットとエンドポイントを指定する場合、オペレーション一覧 にそれらの指定情報が表示されます。オペレーションリストから、1つのオペレーションを選択してオペレーション設定情報を再利用できます。


図2.9.7.3-1

オペレーションの設定項目
表2.9.7.3-1
項目
説明

オペレーション名
エンドポイントロールがプロバイダの場合、JDBC BCが提供するオペレーション名と名前空間を指定します。
   エンドポイントロールがコンシューマの場合呼び出し先のオペレーション名と名前空間を指定します。
QName(名前空間、ローカル名)[必須]
メッセージ交換方式
メッセージ交換方式を選択します。
“in-only”、“in-out”、“robust-in-only”から選択[必須]
   デフォルトは“in-only”
スキーマファイル インプット/アウトプット 対象SUフォルダのMETA-INFフォルダのschemaフォルダ配下にあるスキーマファイルの相対パスを指定します。
指定したスキーマファイルは、XSLT SE による変換の定義の際のインプット/アウトプットスキーマとして利用することができます。    [メッセージ交換方式を指定した場合のみ設定可能]
参照(B)
(インプット/アウトプット)
スキーマファイルの選択ダイアログを開きます。
スキーマファイルを選択すると、その相対パスがインプットおよびアウトプット のファイルのテキストボックスに表示されます。
利用方法については、[2.7.7. スキーマファイルの設定] を参照して下さい。
クエリのレコード数上限値
select実行時のレコードの取得上限値を指定します。
   指定しない場合は、抽出したすべてのレコードを対象とします。
数値(0以上)[任意]
ロール関連の設定
エンドポイントロールに対応するオペレーション関連情報を設定します。
“プロバイダ関連の設定を行う”、”コンシューマ関連の設定を行う”から選択[必須]
コンシューマロール関連のオペレーションを設定します。


図2.9.7.3-2

コンシューマロール関連のオペレーションの設定項目
表2.9.7.3-2
項目
説明

データ有無の監視間隔
Inboundにおける監視対象テーブルの監視間隔(ミリ秒)を指定します。
数値(0以上)[任意]
トランザクション
トランザクション制御を指定します。
“no-transaction”、”xa-transaction”から選択[必須]
   デフォルトは“no-transaction”
トランザクション開始位置
Inboundにおいて、トランザクション制御が指定されている場合の、制御の開始位置を指定します。
“クエリ実行前”、”クエリ実行後”から選択
   デフォルトは“クエリ実行前”
テープル名
Inboundにおける監視対象テーブルの名称を指定します。
【マルチバイト文字列指定可】
文字列(テーブル名)
   [テーブル名を指定する場合、必須]
SQL命令
実行するSQL命令を指定します。
【マルチバイト文字列指定可】
文字列(SQL命令)
   [SQL命令を指定するを選択した場合、必須]
レコード更新方法
Inboundにおいて、抽出したレコードの送信完了後の更新方法を指定します。
“Delete”、”MarkColumn”、”MoveRow”、”DoNothing”から選択[必須]
   デフォルトは“Delete”
プライマリキー名
Inboundにおける監視対象テーブルのプライマリキーの名称を指定します。
複合プライマリキーを指定する場合、カンマで区切って記述します。
【マルチバイト文字列指定可】
文字列(プライマリキー名)
   [任意]
更新対象項目名
Inboundにおいて、抽出したレコードの送信完了後の更新方法にMarkColumnを指定した場合に、更新する項目の名称を指定します。
【マルチバイト文字列指定可】
文字列(更新する項目の名称)
   [“MarkColumn”を選択した場合、必須]
更新値
Inboundにおいて、抽出したレコードの送信完了後の更新方法にMarkColumnを指定した場合に、更新する値を指定します。
【マルチバイト文字列指定可】
文字列(更新する値)
   [“MarkColumn”を選択した場合、必須]
レコード移動先テーブル名
Inboundにおいて、抽出したレコードの送信完了後の更新方法にMoveRowを指定した場合に、移動先となるテーブルの名称を指定します。
【マルチバイト文字列指定可】
文字列(テーブル名)
   [“MoveRow”を選択した場合、必須]
プロバイダロール関連オペレーションを設定します。


図2.9.7.3-3

プロバイダロール関連のオペレーションの設定項目
表2.9.7.3-3
項目
説明

クエリ実行タイムアウト値
クエリの実行を待ち合わせる秒数を指定します。
数値(0以上)[任意]
特殊文字のチェックを行う
Outboundにおいて、SQLインジェクションを防ぐための特殊文字チェックを行うかどうかを指定します。
true/false[必須]
   デフォルトはtrue
SQLの実行結果(行数)を
   戻り値として返却する
Outboundにおいて、In-Outを指定されている場合に、SQLの実行結果の行数を戻り値として返却する場合に、trueを指定します。
true/false[必須]
   デフォルトはfalse
SQL命令
実行するSQL命令を指定します。 コンシューマからのメッセージの内容をSQLで利用するには、SQLをPreparedStatementの書式で記述し、埋め込む情報を「パラメータ」で定義します。
例) insert into SAMPLE_OUT_TABLE(CUSTOMER_ID,CITY,NAME,EMAIL,PHONE) values (?,?,?,?,?)

この場合、「パラメータ」に次のような定義を行います。
  CUSTOMER_ID, 1, INTEGER
  CITY, 2, VARCHAR
  NAME, 3, VARCHAR
  EMAIL, 4, VARCHAR
  PHONE, 5, NUMERIC

文字列(SQL命令)[必須]
パラメータ
実行するSQLに埋め込むパラメータを設定します。


図2.9.7.3-4

パラメータの設定項目
表2.9.7.3-4
項目
説明

パラメータ名
実行するSQLに埋め込むパラメータの名称を指定します。
【マルチバイト文字列指定可】
文字列[必須]
パラメータの順番
実行するSQLに埋め込むパラメータの順番を指定します。
数値[必須]
パラメータの種別
実行するSQLに埋め込むパラメータの種別を指定します。java.sql.Typesに定義されている名称を利用します。
“INTEGER”、”VARCHAR”、”BIGINT”、”FLOAT”、
   ”DOUBLE”、”NUMERIC”、 ”BINARY”、”BIT”、
   ”BOOLEAN”、”TINYINT”、 “SMALLINT”、”REAL”、
   “DECIMAL”、”CHAR”、 “LONGVARCHAR”、
   “VARBINARY”、 “LONGVARBINARY”、 ”DATE”、“TIME”、
   ”TIMESTAMP”、“BLOB”、”CLOB”から選択 [必須]

2.9.7.4. セキュリティ認証の設定

セキュリティ認証を ON にし、設定 をクリックすると、セキュリティ認証詳細設定ダイアログが表示されます。


図2.9.7.4-1

表2.9.7.4-1
項目
説明

エンドポイント名のURL表記
エンドポイントをURL表記した値。リソース管理に用いられます。
http://webotxesb/<BC名>/エンドポイント名
省略された場合、ESB内部で自動生成されます。
エンドポイントの認証の設定
空の場合はエンドポイントの認証を行いません。
エンドポイントのID
認証に利用するIDを設定します。
文字列
パスワード
認証に利用するパスワードを設定します。パスワードは暗号化とします。
文字列
ログインモジュールの設定を行う
ログインモジュールの設定を行います。
文字列(任意)。デフォルト値:ESBSECUREMASTERRealm
エンドポイントの認可の設定
空の場合はエンドポイントの認可を行いません。
認可に用いる認証情報
認可に利用する認証情報を設定します。
コンシューマの場合
  • client
  • consumer
プロバイダの場合
  • client
  • consumer
  • provider
Principalの識別子
Principalの識別子を設定します。
文字列(任意)
認証済情報を伝播する
認証済情報転播設定、空の場合、伝播は行いません。

2.9.7.5. メッセージ送信優先度の設定

[2.7.3. メッセージ送信優先度の設定] を参照して下さい。

2.9.7.6. エラーリトライの設定

[2.7.4. エラーリトライの設定] を参照して下さい。

2.9.7.7. オプション一覧の設定

[2.7.5. オプション一覧の設定] を参照して下さい。

2.9.7.8. メッセージエクスチェンジハンドラの設定

[2.7.6. メッセージハンドラの設定] を参照して下さい。

2.9.7.9. メッセージ交換方式(MEP)

Outbound
   Outboundでの各MEPにおける JDBC BC の動作は次表のようになります。
JDBC BC OutboundのMEPと動作の対応
表2.9.7.9-1
MEP
動作の説明
In-Only
SQL命令実行においてSQL発行完了時点で結果(done)を返却します。
Robust In-Only
InsertやdeleteなどのSQL命令でその結果に応じてinメッセージに対する結果(error/done)を返却します。
SQL命令発行で例外を受けた場合にはerrorを返却します。
In-Out
SQLを発行した結果(取得レコード、更新レコード件数)に応じてその結果を含めたoutメッセージ、またはinメッセージに対する処理結果(error)を返却します。
In Optional-Out
( JDBC BC では対応しません)
Inbound
   Inboundでは、一定間隔でSQL命令(select)を発行し、対象となるテーブルを監視しておきメッセージ送信対象となるレコードが検出された場合、inメッセージを作成してこれを送信します。その後、MEPごとに意図する結果を受け取り、以下の更新方法のうち、指定した方法により送信対象になったレコードを更新します。
各MEPにおける動作は次表のようになります。
   なお、Robust In-OnlyやIn-Outについてはoutメッセージに含まれている戻り値は参照しません。
JDBC BC InboundのMEPと動作の対応
表2.9.7.9-2
MEP
動作の説明
In-Only
inメッセージに対する結果(done)を受け取り、送信対象となったレコードを更新します。
またトランザクション制御するように指定されている場合は、DB検索時にSQL命令発行前または発行後にトランザクションを開始し、レコード更新後にcommitを実行します。
Robust In-Only
inメッセージに対する結果(fault/done)を受け取り、結果がdoneの場合に送信対象となったレコードを更新します。
またトランザクション制御するように指定されている場合は、DB検索時にSQL命令発行前または発行後にトランザクションを開始し、レコード更新後にcommitを実行します。
In-Out
outメッセージまたはinメッセージに対する結果(fault)を受け取り、送信対象となったレコードを更新します。
受信したoutメッセージについては破棄します。
またトランザクション制御するように指定されている場合は、DB検索時にSQL命令発行前または発行後にトランザクションを開始し、レコード更新後にcommitを実行します。
In Optional-Out
(JDBC BCでは対応しません)
MEPに関する詳細は、概要編の「3.2NormarizedMessageRouter」-「メッセージ交換方式(MEP)」を参照してください。

2.9.7.10. ノーマライズ規則

JDBC BC で処理するSOAPメッセージの形式は、SOAPのRPC形式のペイロード(body要素)とします。encodedかliteralかは問いません。受信したメッセージからSQLの対応の型への変換は、Artifactに定義された型を基に行います。
Outbound
   NMRから受け取ったメッセージエクスチェンジをデータベースに対するSQLに変換することをデノーマライズと言います。また、SQLの実行結果をNMRに送信するメッセージエクスチェンジに変換することをノーマライズと言います。
デノーマライズ規則


図2.9.7.10-1

デノーマライズの規則は上図のようになっています。 メッセージコンテントのSOAPメッセージを解析してJavaのクラスに変換し、SQLのPreparedStatementのパラメタに埋め込んでSQLを発行します。プロパティや添付ファイルは使用されません。
メッセージエクスチェンジのエラーがあった場合、SQLの発行は行いません。その場合、JDBC BCによってFaultメッセージが生成され、その内容を含むメッセージエクスチェンジが NMR に返されます。
ノーマライズ規則


図2.9.7.10-2

ノーマライズ規則は上図のようになっています。 SQLの実行結果(取得レコード/更新レコードの件数)をSOAPメッセージに変換し、メッセージコンテントとなります。プロパティ、添付ファイルは使用されません。SQL発行の結果をもとにJBIのステータスを決定し、メッセージエクスチェンジのステータスにセットされます。 JDBC BC ではFaultメッセージをメッセージコンテントにセットすることはありません。
Inbound
   SQLの実行結果をNMRに送信するメッセージエクスチェンジに変換することをノーマライズと言います。NMRから受け取ったメッセージエクスチェンジを変換することをデノーマライズと言いますが、 JDBC BC ではメッセージを処理することはありません。
ノーマライズ規則


図2.9.7.10-3

ノーマライズ規則は上図のようになっています。 SQLの実行結果(取得レコード)をSOAPメッセージに変換し、メッセージコンテントとなります。プロパティ、添付ファイルは使用されません。
デノーマライズ規則


図2.9.7.10-4

デノーマライズの規則は上図のようになっています。メッセージエクスチェンジのステータスは、完了後のレコード更新を行うか否かの判定に使用されます。
Faultメッセージがあった場合、レコード更新は行われません。

WSDL1.1で定義されている範囲内で、java.sql.Typesにおける次のタイプの受け渡しをサポートしています。次にその一覧を示します。また、CLOB、BLOBについてはOracleのみがサポート対象です。

JDBC BC でサポートするJavaのクラスとXMLメッセージの型の一覧
表2.9.7.10-1
java.sql.Typesの定義
javaのクラス
XMLメッセージにおける型
literalの場合
encodedの場合
BIT
java.lang.Boolean
xsd:boolean
←同じです。または、soapenc:boolean
BOOLEAN
java.lang.Boolean
xsd:boolean
←同じです。または、soapenc:boolean
TINYINT
java.lang.Byte
xsd:byte
←同じです。または、soapenc:byte
SMALLINT
java.lang.Short
xsd:short
←同じです。または、soapenc:short
INTEGER
java.lang.Integer
xsd:int
←同じです。または、soapenc:int
BIGINT
java.lang.Long
xsd:long
←同じです。または、soapenc:long
REAL
java.lang.Float
xsd:float
←同じです。または、soapenc:float
FLOAT
java.lang.Double
xsd:double
←同じです。または、soapenc:double
DOUBLE
java.lang.Double
CHAR
java.lang.String
xsd:string
←同じです。
VARCHAR
java.lang.String
LONGVARCHAR
java.lang.String
CLOB
java.sql.Clob
NUMERIC
java.math.BigDecimal
xsd:integer
←同じです。
xsd:decimal
←同じです。
DECIMAL
java.math.BigDecimal
xsd:decimal
←同じです。
BINARY
byte[]
xsd:base64Binary
←同じです。
VARBINARY
byte[]
LONGVARBINARY
byte[]
BLOB
java.sql.Blob
DATE
java.sql.Date
xsd:date
←同じです。
TIME
java.sql.Time
xsd:time
←同じです。
TIMESTAMP
java.sql.Timestamp
xsd:dateTime
←同じです。
Java.sql.Typesと代表的なデータベースであるOracleのフィールド定義との対応について、一覧を示します。
Java.sql.TypesとOracleのフィールド定義の対応一覧
表2.9.7.10-2
java.sql.Typesの定義
Oracleのフィールド定義
BIT
NUMBER
BOOLEAN
NUMBER
TINYINT
NUMBER
SMALLINT
NUMBER
INTEGER
NUMBER
BIGINT
NUMBER
REAL
BINARY_FLOAT
FLOAT
BINARY_DOUBLE
DOUBLE
BINARY_DOUBLE
CHAR
CHAR
VARCHAR
VARCHAR2
LONGVARCHAR
LONG
CLOB
CLOB
NUMERIC
NUMBER
DECIMAL
NUMBER
BINARY
RAW
VARBINARY
RAW
LONGVARBINARY
LONG
BLOB
BLOB
DATE
DATE
TIME
DATE
TIMESTAMP
TIMESTAMP
NUMERIC
NUMBER

2.9.7.11. ノーマライズメッセージ

ここでは JDBC BC がNMRと送受信するノーマライズメッセージの説明をします。
ノーマライズ (SQLの実行結果からノーマライズメッセージへの変換)では、WSDLのinput/output messageを構成するpart要素のtype属性に従って、SQLの実行結果を変換し、ノーマライズメッセージへ格納します。

       SQLの実行結果
// SQL
select * from SAMPLE_IN_TABLE;
// 取得レコード
CUSTOMER_ID="11" #primaryKey
CITY="Tokyo"
NAME="suzuki taro"
EMAIL="suzuki_taro@sample.co.jp"
PHONE="11223344556"

       ノーマライズメッセージ
<moveRecords xmlns="http://www.nec.co.jp/jbi/sample.wsdl">
  <record xmlns="">
    <value>
      <CUSTOMER_ID>11</CUSTOMER_ID>
      <CITY>Tokyo</CITY>
      <NAME>suzuki taro</NAME>
      <EMAIL>suzuki_taro@sample.co.jp</EMAIL>
      <PHONE>11223344556</PHONE>
    </value>
  </record>
</moveRecords>
デノーマライズ (ノーマライズメッセージからSQLへの変換)では、エンドポイントに定義されたパラメータ情報に従って、ノーマライズメッセージからデータを取り出し、SQLを構築します。

       ノーマライズメッセージ
<moveRecords xmlns="http://www.nec.co.jp/jbi/sample.wsdl">
  <record xmlns="">
    <value>
      <CUSTOMER_ID>11</CUSTOMER_ID>
      <CITY>Tokyo</CITY>
      <NAME>suzuki taro</NAME>
      <EMAIL>suzuki_taro@sample.co.jp</EMAIL>
      <PHONE>11223344556</PHONE>
    </value>
  </record>
</moveRecords>

       SQLの実行結果
insert into SAMPLE_OUT_TABLE(CUSTOMER_ID,CITY,NAME,EMAIL,PHONE)
  values ('11','Tokyo','suzuki taro','suzuki_taro@sample.co.jp','11223344556');
     注: 上記はインデントを整形しており、実際とは異なります。

2.9.7.12. Eclipse DTP(Data Tools Platform)との連携

DTPを利用したSQL編集とテスト実行機能
従来のSQL編集画面と、Eclipse DTP(Data Tools Platform)との連携により、 を可能とします。
「プロバイダ関連設定ダイアログ」および「コンシューマ関連設定ダイアログ」のSQL編集ボタンにより、 Eclipse DTPを起動し、編集結果を反映します。


図2.9.7.12-1

データベース接続の設定
SQL 命令を編集するために利用されるデータベースへの接続情報を設定します。
SQL編集ボタンをクリックすると、下記の接続情報設定ダイアログが開きます。 接続中のデータベースの接続情報が表示され、変更することもできます。 接続していない場合、接続情報は空欄となるので、接続先を指定してください。


図2.9.7.12-2

DB設定情報の保持
開発環境のインストール直後には、設定値にDB設定情報がありません。「DB設定…」で設定することで、 その設定値を設定値として保存され、利用可能となります。

SQL編集
データベース接続の設定ダイアログで、OKボタンを押すと、Eclipse DTPの「SQL クエリー・ビルダー」ダイアログが開き、SQL文が表示されます。テーブル定義の参照/マウス操作でSQL命令が編集できます。


図2.9.7.12-3

「SQL クエリー・ビルダー」ダイアログのSQL命令フィールドで、右クリックメニューの「SQLの実行」でSQL命令のテストを実行することができます。


図2.9.7.12-4


図2.9.7.12-5


SQL編集結果の反映


図2.9.7.12-6

SQL編集を利用なし、手動でSQL命令或はパラメータを変更する場合、下記の変更確認ダイアログが表示されます。


図2.9.7.12-7

はいをクリックすると、編集結果はSQL命令或はパラメータに反映されます。いいえをクリックすると、編集結果は反映されません。

2.9.7.13. WSDLファイルの生成

応答メッセージ形式(output)を含む JDBC サービスユニットから、SUフォルダ直下にWSDL ファイルを生成する事ができます。

サービスユニット の右クリックメニューのWSDL出力を選択します。


図2.9.7.13-1

SOAP メッセージ形式で、 の、いずれかを選択し、OK ボタンを押します。


図2.9.7.13-2

生成に成功すると以下のダイアログが表示されます。


図2.9.7.13-3

応答メッセージ形式(output)を含まない場合、以下のエラーダイアログが表示され、WSDL ファイルは生成されません。


図2.9.7.13-4

SUと同じ名前のWSDLファイルとWSDLの情報を記載するXSDファイルを生成します。


図2.9.7.13-5

XSDに記載するtypeについては、「表2.9.7.10-1」をご覧ください。
ただし、NUMERICは、xsd:decimalとして生成するため、必要に応じて、xsd:integerに書き換えてからご利用ください。