3.3.5 DBアダプタを定義する
DBアダプタの定義方法について説明します。
- 〈この項の構成〉
(1) SQLオペレーション定義ファイルの作成
SQLオペレーション定義ファイルは,実行環境でDBアダプタを介してアクセスするデータベースの情報や,SQLの実行形式を定義するファイルです。DBアダプタ用のXMLフォーマット定義ファイルを作成するときの基となるファイルです。
SQLオペレーション定義ファイルの作成方法を次に説明します。
SQLオペレーション定義ファイルは,テキストエディタなどを使用してXML文書形式で作成します。XML文書で使用できない「<」,「>」,「&」などの文字を使用する場合,エスケープするか,CDATAセクションを利用する必要があります。
要素,属性およびテキストデータは,W3CのXMLの仕様に従って指定します。
なお,XML名前空間名は使用できません。
作成するXML文書の詳細を説明します。
- ●ファイル名
-
SQLオペレーション定義ファイルのファイル名は,次の形式で指定します。
csa_sql_<任意の名称>.xml
- ●構造
-
図3‒2 SQLオペレーション定義ファイルの構造 - ●SQLオペレーション定義ファイルの形式
-
SQLオペレーション定義ファイルの形式を次に示します。なお,斜体の文字は可変値を表します。
<?xml version="XMLのバージョン" encoding="文字コード"?> <DBadapter_SQL_OPERATION dba_separate_transaction="トランザクション分離オプション" sqloperation_chk="SQL命令チェックオプション"> <DATABASE_DATA> <DB_NAME dynamic="接続先の動的変更オプション">データベース参照名</DB_NAME> <DB_TYPE>データベース種別</DB_TYPE> </DATABASE_DATA> <SQL_DATA encoding="文字バイナリデータのエンコード・デコード形式"> <SQL識別子 out_maxOccurs="検索結果出力最大件数"> SQL命令 <引数要素名 dba_inf="引数の種別" data_type="データ型"/> </SQL識別子> : </SQL_DATA> <MULTI_SQL_DATA> <MAX_SQL_NO>1回のサービス部品実行要求で実行するSQL文の最大個数</MAX_SQL_NO> </MULTI_SQL_DATA> </DBadapter_SQL_OPERATION>
SQLオペレーション定義ファイルで定義する内容について次に説明します。
- XML宣言
-
XMLのバージョンには,XMLの言語仕様に従ってXMLのバージョンを指定します。文字コードにはUTF-8を指定してください。なお,文字コードの指定は省略できます。省略した場合の値は「UTF-8またはUTF-16」になります。
<?xml version="XMLのバージョン" encoding="文字コード"?>
- ルート要素(要素名:DBadapter_SQL_OPERATION)
-
SQLオペレーション定義ファイルのルート要素です。
<DBadapter_SQL_OPERATION dba_separate_transaction="Y|N" sqloperation_chk="Y|N"> : </DBadapter_SQL_OPERATION>
-
dba_separate_transaction
DBアダプタのトランザクションをビジネスプロセスとは別に開始するかどうかを指定します。トランザクションを分離する場合はYを,分離しない場合はNを指定します。指定を省略した場合は,HCSCサーバランタイム定義ファイルの「dba-separate-transaction」の値が有効となります。この属性と,HCSCサーバランタイム定義ファイルに「dba-separate-transaction」の両方が指定してある場合は,この属性の指定値が優先されます。
なお,この属性にYを指定する場合は,事前にDBアダプタのアプリケーション統合属性ファイルのtrans-attribute要素の指定値を「Required」から「RequiresNew」に変更してください。
-
sqloperation_chk
DBアダプタで実行するSQL命令の制限をするかどうかを指定します。SQL命令をSELECTとINSERTに制限する場合はYを,SQL命令でSELECTとINSERTに加えてUPDATEとDELETEを実行する場合はNを指定します。指定を省略した場合は,Yが指定されているときと同じ動作となります。
-
- データベース情報(要素名:DATABASE_DATA)
-
下位の要素(DB_NAMEおよびDB_TYPE)で,データベースの情報を指定します。
<DATABASE_DATA> データベース参照名 データベース種別 </DATABASE_DATA>
- データベース参照名(要素名:DB_NAME)
-
DB Connectorのデータベース参照名を指定します。
DBアダプタ実行時に,ここで指定した値を元にアプリケーション統合属性ファイルのリソース参照を検索するため,アプリケーション統合属性ファイルのres-ref-name要素指定値と同じ値を指定してください。
dynamic属性にYが設定されている場合はこの要素の値は省略できます。また,この要素の値がすでに設定されていた場合は指定を無視します。
<DB_NAME dynamic="Y|N">データベース参照名</DB_NAME>
-
dynamic
接続先を動的に変更するかどうかを指定します。
接続先を動的に変更する場合はYを,動的に変更しない場合はNを指定します。指定を省略した場合は,Nが指定されたときと同じ動作になります。
-
- データベース種別(要素名:DB_TYPE)
-
データベースの種別として次のどれかを指定します。
-
HIRDB
DBMSとしてHiRDBを使用する場合(DB ConnectorとしてDBConnector_DABJ_CP/XA.rarを使用する場合)に指定します。
-
HIRDB-TYPE4
DBMSとしてHiRDBを使用する場合(DB ConnectorとしてDBConnector_HiRDB_Type4_CP/XA.rarを使用する場合)に指定します。
-
ORACLE
DBMSとしてOracleを使用する場合(DB ConnectorとしてDBConnector_DABJ_CP/XA.rarを使用する場合)に指定します。
-
ORACLE-THIN
DBMSとしてOracleを使用する場合(DB ConnectorとしてDBConnector_Oracle_CP/XA.rarを使用する場合)に指定します。
<DB_TYPE>データベース種別</DB_TYPE>
-
- SQL情報(要素名:SQL_DATA)
-
下位の要素(SQL識別子およびSQL実行文)で,実行するSQLの情報を指定します。
<SQL_DATA encoding="hexBinary|base64Binary"> SQL識別子 SQL実行文 </SQL_DATA>
-
encoding
バイナリデータのエンコード・デコード形式を指定します。
hexBinary形式でエンコードまたはデコードする場合はhexBinaryを,base64Binary形式でエンコードまたはデコードする場合はbase64Binaryを指定します。指定を省略した場合は,hexBinaryが指定されたときと同じ動作になります。
なお,この属性が有効になるのは,data_type属性に次のデータ型が指定された場合だけです。
・HiRDBの場合:LONGVARBINARY
・Oracleの場合:VARBINARY,LONGVARBINARY,BLOB
- 注意事項
-
バイナリデータをデータ変換する場合,SQLオペレーション定義ファイルのencoding属性に指定した値とバイナリフォーマット定義ファイルに指定したエンコード・デコード形式を合わせてください。形式が異なる場合の動作は保証されません。
- 参考
-
09-50より前の環境からDBアダプタをバージョンアップした場合に,エンコード・デコード形式をbase64binaryに変更する手順を次に示します。
-
開発環境でバイナリフォーマット定義ファイルを再作成します。
-
SQLオペレーション定義ファイルを修正(エンコード・デコード形式を設定)します。
-
修正したSQLオペレーション定義ファイルを使用してcsamkxmlsコマンドでXMLスキーマを生成します。
-
XMLスキーマとバイナリフォーマット定義ファイルを開発環境でDBアダプタに設定します。
-
開発環境でマッピング定義を再設定します。
-
開発環境で修正したSQLオペレーション定義ファイルをDBアダプタに設定します。
-
DBアダプタを再配備します。
-
-
- SQL識別子(要素名:任意((1〜256文字)))
-
実行するSQLを識別するための要素です。この要素を省略した場合,SQL文を実行しません。下位の引数要素でSQL実行文を指定します。属性としてout_maxOccursを指定できます。また,実行するSQL命令の数にあわせて複数回指定できます。
なお,SQL識別子の名称として「DBadapter」および「DBA_MULTI_SQL」は指定できません。
<SQL識別子 out_maxOccurs="検索結果出力最大件数"> SQL実行文 </SQL識別子> :
-
out_maxOccurs
検索結果の最大出力件数を指定します。省略した場合は1000が設定されます。0を指定した場合は,2147483647が設定されます。
-
- SQL実行文
-
SQL実行文を指定します。SQLの構文は,利用するデータベースの仕様に従います。SQL実行文の表や列の名称およびデータなどの可変部分(引数要素)を指定します。
なお,SQL文の終わりを示すセミコロン(;)は必要ありません。
SQL命令 <引数要素名 dba_inf="引数の種別" data_type="データ型"/>
なお,SQL実行文の先頭は,「SELECT△」または次のどれかを指定します(△は半角スペース)。
-
「INSERT△」
-
「UPDATE△」
-
「DELETE△」
ただし,「SELECT△」,または「INSERT△」,「UPDATE△」,「DELETE△」のどれかの直後に引数要素がある場合,「△」(半角スペース)は省略できます。
指定内容を次に示します。
-
- SQL命令
-
指定できるSQL命令はSELECT,またはINSERT,UPDATE,DELETEです。
SELECTで検索できるデータ型について,次の表に示します。
表3‒3 SELECTで検索できるデータ型(HiRDBの場合) HiRDBのデータ型
検索の可否
HiRDB Type4 JDBC Driverの場合
INT〔EGER〕
○
SMALLINT
○
〔LARGE〕 DEC〔IMAL〕
NUMERIC
○
FLOAT
DOUBLE PRECISION
○
SMALLFLT
REAL
○
CHAR〔ACTER〕
○
VARCHAR
CHAR〔ACTER〕VARYING
○
NCHAR
NATIONAL CHAR
○
NVARCHAR
NATIONAL CHAR〔ACTER〕VARYING
NCHAR VARYING
○
MCHAR
○
MVARCHAR
○
DATE
○
TIME
○
TIMESTAMP
○
INTERVAL YEAR TO DAY
−
INTERVAL HOUR TO SECOND
−
BLOB
BINARY LARGE OBJECT
○
BINARY
○
BOOLEAN
−
表3‒4 SELECTで検索できるデータ型(Oracleの場合) Oracleのデータ型
検索の可否
Oracle JDBC Thin Driverの場合
VARCHAR2
○
NVARCHAR2
○
NUMBER
○
LONG
○
DATE
○※
BINARY_FLOAT
−
BINARY_DOUBLE
−
TIMESTAMP
−
TIMESTAMP WITH TIME ZONE
−
TIMESTAMP WITH LOCAL TIME ZONE
−
INTERVAL YEAR TO MONTH
−
INTERVAL DAY TO SECOND
−
RAW
○
LONG RAW
○
ROWID
○
UROWID
−
CHAR
○
NCHAR
○
CLOB
○
NCLOB
○
BLOB
○
BFILE
−
ユーザ定義型(オブジェクト型)
−
ユーザ定義型(REFデータ型)
−
ユーザ定義型(VARRAY)
−
ユーザ定義型(ネストした表)
−
- ●ポイント
-
DBアダプタで検索できないデータ型でも,データベースが提供する関数(ファンクション)を使用して検索できるデータ型に変換できれば,検索できるようになります。
OracleのTIMESTAMP型(列名:c_ts)をTO_CHARファンクションでVARCHAR2型に変換して検索する場合の例を次に示します。
SELECT TO_CHAR(c_ts) FROM 表名
- 引数要素名
-
任意の引数要素の名称を指定します。複数の引数要素を同一名称で指定した場合,同じ引数として扱われます。同一名称の引数要素で,それぞれの属性dba_infおよびdata_typeに異なる値を設定した場合はエラーになります。
- dba_inf="引数の種別"
-
引数の種別を指定します。
引数の種別の種類として指定できる内容を次に示します。
-
table
引数がデータベースに実在するテーブルの名称の場合に指定します。引数として利用するデータはstring型です。
-
column
引数がデータベースに実在する列の名称の場合に指定します。引数として利用するデータはstring型です。
-
data
引数がテーブルおよび列の名称以外のデータの場合に指定します。この値を指定した場合,引数として利用するデータのデータ型を属性data_typeに指定する必要があります。また,引数として利用するデータを表3-3および表3-4に示すJavaのデータ型またはクラスに変換して,SQL文に埋め込みます。引数として利用するデータを変換できない場合は,エラーとなります。
なお,この値を指定した場合,引数要素をINパラメタ(?パラメタまたはバインド変数)として扱います。SQL文中にINパラメタを指定できる個所は,利用するデータベースの仕様に従います。指定できない個所にINパラメタを定義した場合,エラーになります。なお,SQLの実行時に,引数要素は「?」に置き換えられて実行されます。
-
preset
引数がテーブルおよび列の名称以外のデータの場合に指定します。この値を指定した場合,引数として利用するデータをそのままSQL文に埋め込みます。引数として利用するデータはstring型です。
-
- data_type="データ型"
-
属性dba_infにdataを指定した場合に,引数として利用するデータの型を指定します。データベースのデータ型とdata_typeに指定できるデータの型の対応を次の表に示します。
表3‒5 data_typeに指定できるデータ型(HiRDBの場合) HiRDBのデータ型
data_typeに指定できるデータ型
引数として利用するデータの変換先のデータ型およびクラス
INT〔EGER〕
INTEGER
int
SMALLINT
SMALLINT
short
〔LARGE〕 DEC〔IMAL〕
NUMERIC
DECIMAL
java.math.BigDecimal
FLOAT
DOUBLE PRECISION
FLOAT
double
SMALLFLT
REAL
REAL
float
CHAR〔ACTER〕
CHAR
java.lang.String
NCHAR
NATIONAL CHAR
MCHAR
VARCHAR
CHAR〔ACTER〕VARYING
VARCHAR
java.lang.String
NVARCHAR
NATIONAL CHAR〔ACTER〕VARYING
NCHAR VARYING
MVARCHAR
DATE
DATE
java.sql.Date
TIME
TIME
java.sql.Time
TIMESTAMP
TIMESTAMP
java.sql.Timestamp
BLOB
BINARY LARGE OBJECT
LONGVARBINARY
byte[]
BINARY
LONGVARBINARY
byte[]
Oracleのデータ型 |
data_typeに指定できるデータ型 |
引数として利用するデータの変換先のデータ型およびクラス |
---|---|---|
LONG |
LONGVARCHAR |
java.io.Reader |
NUMBER |
NUMERIC |
java.math.BigDecimal |
VARCHAR2 |
VARCHAR |
java.lang.String |
NVARCHAR2 |
− |
|
ROWID |
CHAR |
|
CHAR |
CHAR |
|
NCHAR |
− |
|
CLOB |
CLOB※1 |
|
NCLOB |
− |
|
DATE |
DATE※2 |
java.sql.Date |
TIME※3 |
java.sql.Time |
|
TIMESTAMP※4 |
java.sql.Timestamp |
|
RAW |
VARBINARY |
byte[] |
LONG RAW |
LONGVARBINARY |
byte[] |
BLOB |
BLOB |
byte[] |
- 複数SQL文実行情報(要素名:MULTI_SQL_DATA)
-
サービスリクエスタからの1回のサービス部品実行要求で複数のSQL文を実行する場合に,実行するSQL文の最大個数を,下位の要素(MAX_SQL_NO)で指定します。単一のSQL文を実行する場合には,この要素は省略できます。
<MULTI_SQL_DATA> 実行するSQL文の最大個数 </MULTI_SQL_DATA>
- 実行するSQL文の最大個数(要素名:MAX_SQL_NO)
-
実行するSQL文の最大個数(サービスリクエスタからの要求電文のDBA_MULTI_SQL要素の最大出現回数)を,1〜2,147,483,647の範囲内で指定します。省略した場合の値は「1024」になります。
<MAX_SQL_NO>1回のサービス部品実行要求で実行するSQL文の最大個数</MAX_SQL_NO>
- ●作成例
-
SQLオペレーション定義ファイルの作成例を次に示します。
- 作成例の条件
-
データベース参照名:DB_SERVER1
スキーマ名:DBA
テーブル名:受注表
テーブル構成:
受注番号
(INTEGER)
得意先コード(CHAR)
商品コード
(CHAR)
受注個数
(INTEGER)
1
AA001
0001
5
2
AB002
0001
1
3
AA001
0102
3
4
XA005
0103
1
5
AA001
0105
1
実行するSQLの形式:
OPERATION1:SELECT * FROM DBA.受注表 WHERE <val1> <val2> <val3> OPERATION2:SELECT <val1> SUM(<val2>) FROM DBA.受注表 GROUP BY <val3> OPERATION3:INSERT INTO DBA.受注表 VALUES(<val1>,<val2>,<val3>,<val4>)
- SQLオペレーション定義ファイルの作成例(単一のSQL文を実行する場合)
<?xml version="1.0" encoding="UTF-8" ?> <DBadapter_SQL_OPERATION> <DATABASE_DATA> <DB_NAME>DB_SERVER1</DB_NAME> <DB_TYPE>HIRDB</DB_TYPE> </DATABASE_DATA> <SQL_DATA> <OPERATION1> SELECT * FROM DBA.受注表 WHERE <val1 dba_inf="column"/> <val2 dba_inf="preset"/> <val3 dba_inf="data" data_type="CHAR"/> </OPERATION1> <OPERATION2> SELECT <val1 dba_inf="column"/> SUM(<val2 dba_inf="column"/>) FROM DBA.受注表 GROUP BY <val3 dba_inf="column"/> </OPERATION2> <OPERATION3> INSERT INTO DBA.受注表 VALUES(<val1 dba_inf="data" data_type="INTEGER" />, <val2 dba_inf="data" data_type="CHAR"/>, <val3 dba_inf="data" data_type="CHAR"/>, <val4 dba_inf="data" data_type="INTEGER"/>) </OPERATION3> </SQL_DATA> </DBadapter_SQL_OPERATION>
- SQLオペレーション定義ファイルの作成例(複数のSQL文を実行する場合)
-
次の例では,1回のサービス部品実行要求で実行するSQL文の最大個数を「10」にしています。
<?xml version="1.0" encoding="UTF-8" ?> <DBadapter_SQL_OPERATION> <DATABASE_DATA> <DB_NAME>DB_SERVER1</DB_NAME> <DB_TYPE>HIRDB</DB_TYPE> </DATABASE_DATA> <SQL_DATA> <OPERATION1> SELECT * FROM DBA.受注表 WHERE <val1 dba_inf="column"/> <val2 dba_inf="preset"/> <val3 dba_inf="data" data_type="CHAR"/> </OPERATION1> <OPERATION2> SELECT <val1 dba_inf="column"/> SUM(<val2 dba_inf="column"/>) FROM DBA.受注表 GROUP BY <val3 dba_inf="column"/> </OPERATION2> <OPERATION3> INSERT INTO DBA.受注表 VALUES(<val1 dba_inf="data" data_type="INTEGER" />, <val2 dba_inf="data" data_type="CHAR"/>, <val3 dba_inf="data" data_type="CHAR"/>, <val4 dba_inf="data" data_type="INTEGER"/>) </OPERATION3> </SQL_DATA> <MULTI_SQL_DATA> <MAX_SQL_NO>10</MAX_SQL_NO> </MULTI_SQL_DATA> </DBadapter_SQL_OPERATION>
(2) 電文フォーマットの作成
DBアダプタの場合,WSDLが生成されないため,サービス部品の電文フォーマットも自動生成されません。そのため,サービス部品の電文フォーマット(DBアダプタ用のXMLフォーマット定義ファイル)を作成して,設定する必要があります。
(a) DBアダプタ用のXMLフォーマット定義ファイルの作成
DBアダプタ用のXMLフォーマット定義ファイルを作成するには,「(1) SQLオペレーション定義ファイルの作成」で作成したSQLオペレーション定義ファイルの名称を-oオプションに指定してcsamkxmlsコマンドを実行します。
- ●コマンドの実行例
-
csamkxmlsコマンドの実行形式を次に示します。
<サービスプラットフォームのインストールディレクトリ>\CSC\bin\csamkxmls -o <SQLオペレーション定義ファイルの名称> -x <DBアダプタ用のXMLフォーマット定義ファイルの名称>
csamkxmlsコマンドの詳細については,マニュアル「サービスプラットフォーム リファレンス」の「csamkxmls(DBアダプタ用のXMLフォーマット定義ファイルの生成)」を参照してください。
- 注意事項
-
csamkxmlsコマンドを実行したとき,SQLオペレーション定義ファイルのファイルサイズが大きいと,「java.lang.OutOfMemoryError」のメッセージが表示されることがあります。
このエラーが表示された場合,環境変数HCSCDBA_XMXに,現在のJavaVMのメモリ割り当てサイズよりも大きい値を設定して,再度コマンドを実行してください。
環境変数HCSCDBA_XMXには,JavaVMのヒープサイズ(-Xmx)に設定される値(単位:Mbyte)を指定します。省略した場合,JavaVMのヒープサイズはJavaコマンドを実行する環境に依存します。
- 設定例
-
set HCSCDBA_XMX=64
- 注意事項
-
DBアダプタ用のXMLフォーマット定義ファイルは,SQLオペレーション定義ファイルで指定したSQL識別子の数だけフォーマットを含みます。単一のSQL文を実行する場合,データ変換を定義するときには,SQL識別子ごとにオペレーションを変更(サービスアダプタ定義画面でオペレーションを追加)して定義する必要があります。複数のSQL文を実行する場合,データ変換を定義するときには,SQL識別子ごとにオペレーションを変更して定義する必要はありません。
データ変換の定義については,マニュアル「サービスプラットフォーム 開発ガイド 基本開発編」の「7. データ変換の定義」を参照してください。サービスアダプタ定義画面については,マニュアル「サービスプラットフォーム リファレンス」の「1.2.2 サービスアダプタ定義画面」を参照してください。
(3) サービスアダプタ定義画面での操作
DBアダプタを定義する場合の手順を次に示します。
-
サービスアダプタ定義画面を表示します。
サービスアダプタ定義画面の表示方法については,「3.3.1(4) サービスアダプタ定義画面の表示」を参照してください。
-
サービス部品制御情報の[サービス名]および[サービスID]を必要に応じて編集します。
サービス名は,DBアダプタを追加したときに入力した名称から異なる名称に変更したい場合に入力してください。
サービスIDは,運用管理者がHCSCサーバの操作(オペレーション)を行うときに必要になる識別情報です。サービス名との関連がわかるような形で命名することを推奨します。
-
サービス部品制御情報の[追加]ボタンをクリックして,オペレーションを追加します。
オペレーション名は,サービスリクエスタからHCSCサーバを呼ぶときに必要になる識別情報です。
-
サービス部品制御情報の[システム例外をフォルトに変換する]チェックボックスを必要に応じてチェックします。
-
オペレーション情報の[通信モデル]のドロップダウンリストから,「同期」または「非同期」を選択します。
応答が必要な場合は「同期」を選択してください。
-
要求電文について,手順7.から手順16.までを実施します。
-
次に示す操作をします。
- 標準電文のフォーマットを指定する場合
-
手順8.〜10.を実施して,手順11.に進みます。
- 標準電文のフォーマットを指定しない場合
-
手順11.に進みます。
-
標準電文の[使う]チェックボックスをチェックします。
-
標準電文の[参照]ボタンをクリックして,[電文フォーマット]に標準電文のフォーマットを指定します。
指定できる電文フォーマットの形式については,マニュアル「サービスプラットフォーム 開発ガイド 基本開発編」の「2.6.5 XMLスキーマの適用範囲」を参照してください。なお,外部のXMLスキーマを参照している電文フォーマットは指定できません。
-
標準電文の[表示]ボタンをクリックします。
標準電文のフォーマットが表示されます。必要に応じて指定した標準電文のフォーマットを確認してください。
-
サービス部品電文の[参照]ボタンをクリックして,[電文フォーマット]にサービス部品電文のフォーマットを指定します。
ここには,作成したDBアダプタ用のXMLフォーマット定義ファイルを指定します。
[電文フォーマット]に指定できる電文種別は,XML電文だけです。
-
サービス部品電文の[表示]ボタンをクリックします。
サービス部品電文のフォーマットが表示されます。必要に応じて指定したサービス部品電文のフォーマットを確認してください。
-
必要に応じて,データ変換定義を行います。
次に示す操作をします。
- 標準電文の[使う]チェックボックスをチェックした場合
-
手順14.〜16.を実施して,手順17.に進みます。
- 標準電文の[使う]チェックボックスをチェックしない場合
-
手順17.に進みます。
-
データ変換定義のファイル名を入力します。
-
[編集]ボタンをクリックします。
データ変換定義画面が表示されます。
なお,初めて定義する場合は,[ルート要素選択]ダイアログが表示されます。
また,電文フォーマットを変更した場合は,電文フォーマットの変更を反映するかを確認するダイアログが表示されます。電文フォーマットを変更した場合の手順は,マニュアル「サービスプラットフォーム 開発ガイド 基本開発編」の「7.3.2 電文フォーマットを変更した場合の定義手順」を参照してください。
-
標準電文とサービス部品電文の内容をマッピングします。
-
手順5.の[通信モデル]で「同期」を選択した場合,応答電文についても同様に,手順7.から手順16.までを実施します。
-
サービスアダプタ定義(詳細)タブをクリックします。
-
サービスアダプタ(EJB-JARファイル)および独自定義ファイルの名称を確認します。
サービスアダプタ(EJB-JARファイル)の名称が「cscdba_ejb.jar」,独自定義ファイルの名称が「cscadapter_property.xml」であることを確認してください。
ユーティリティクラス(JARファイル)の設定は不要です。
-
独自定義ファイルの[追加]ボタンをクリックして,次のファイルを追加します。
-
SQLオペレーション定義ファイル
[csa_sql_<任意の名称>.xml]
-
(4) アプリケーション統合属性ファイルの編集
サービスプラットフォームが提供するテンプレートファイルを利用して,アプリケーション統合属性ファイルを編集します。
アプリケーション統合属性ファイルの編集手順を示します。
-
サービスアダプタ定義画面(詳細)の[独自定義ファイル]で「cscadapter_property.xml」を選択し,[編集]ボタンをクリックします。
アプリケーション統合属性ファイルを編集するためのエディタが起動します。
-
エディタ上でアプリケーション統合属性ファイルを編集します。
アプリケーション統合属性ファイルによるプロパティ設定については,マニュアル「アプリケーションサーバ アプリケーション設定操作ガイド」の「9.2 アプリケーション統合属性ファイルによるプロパティ設定」を参照してください。アプリケーション統合属性ファイルの詳細については,マニュアル「アプリケーションサーバ リファレンス 定義編(アプリケーション/リソース定義)」の「3.1 アプリケーション統合属性ファイル」を参照してください。
アプリケーション統合属性ファイルに設定する項目について,次の表に示します。
表3‒7 アプリケーション統合属性ファイルの設定項目 タグ
説明
設定内容
変更
可否
設定例
<hitachi-application-all-property>
ルートタグ
−
否
−
<ejb-jar>
EJBに関する情報の定義の開始タグ
−
否
−
<hitachi-session-bean-property>
SessionBeanの属性の定義の開始タグ
−
否
−
<resource-ref>
リソース参照についての定義の開始タグ※1
−
否
−
<res-ref-name>
リソース参照名
SQLオペレーション定義ファイルの<DB_NAME>タグに指定したデータベース参照名
可
DB_SERVER1
<res-sharing-scope>
参照したリソースを共有するかどうかの指定
DBアダプタが参照するDB Connectorを共有するかどうかの指定
可
Shareable
<linked-to>
データソース表示名
DB Connectorのプロパティ定義(display-name)に指定したリソースアダプタの名称
可
DB_Connector_for_HiRDB_Type4_XAやDB_Connector_for_Oracle_XAなど※2
display-nameを変更した場合は変更後の名称。
</resource-ref>
リソース参照についての定義の終了タグ
−
否
−
<container-transaction>
コンテナのトランザクションについての定義の開始タグ
−
否
−
<trans-attribute>
メソッドに割り当てるトランザクション属性
トランザクションを引き継ぐRequired
可
Required※3
</container-transaction>
コンテナのトランザクションについての定義の終了タグ
−
否
−
<session-runtime>
runtimeの定義の開始タグ
−
否
−
<stateless>
statelessの定義の開始タグ
−
否
−
<pooled-instance>
プール内のインスタンスについての定義の開始タグ
−
否
−
<minimum>
プール内のインスタンスの最小数
DBアダプタのインスタンスの最小数
可
0または1≦minimum≦maximum
<maximum>
プール内のインスタンスの最大数
DBアダプタのインスタンスの最大数
可
0(無制限)または1≦maximum≦maximum-sessions
</pooled-instance>
プール内のインスタンスについての定義の終了タグ
−
否
−
</stateless>
statelessの定義の終了タグ
−
否
−
</session-runtime>
runtimeの定義の終了タグ
−
否
−
</hitachi-session-bean-property>
SessionBeanの属性の定義の終了タグ
−
否
−
</ejb-jar>
EJBに関する情報の定義の終了タグ
−
否
−
</hitachi-application-all-property>
ルートタグ
−
否
−
- 注意事項
-
表3-7で示した設定・変更できる項目以外は,設定・変更しないでください。
-
Eclipseのメニューから[ファイル]−[保管]を選択し,定義内容を保存します。
(5) データ変換
要求電文のデータ変換を行う場合,サービスアダプタ定義画面で標準電文にサービスリクエスタから入力される電文を設定し,データ変換定義画面でデータ変換を定義します。応答電文のデータ変換を行う場合,サービス部品から返される電文に標準電文を設定し,データ変換定義画面でデータ変換を定義します。
(a) データ変換が必要なケース
サービスリクエスタの電文の形式と,DBアダプタ電文の形式が異なる場合,データ変換が必要です。
次のような場合は,標準電文のフォーマットを指定してデータ変換を定義します。
-
DBアダプタに指定した電文フォーマット(XMLフォーマット定義ファイル)と異なる電文フォーマットでDBアダプタを呼びたい場合
-
DBアダプタに指定した電文フォーマット(XMLフォーマット定義ファイル)と異なる電文フォーマットでDBアダプタからの応答を受け取りたい場合
(b) データ変換の定義
-
要求電文のデータ変換をする場合
サービスアダプタ定義画面で標準電文にサービスリクエスタから入力される電文を設定し,データ変換定義画面でデータ変換を定義します。
要求電文については,DBアダプタに指定した電文フォーマット(XMLフォーマット定義ファイル)のDBA_IN_DATAと対応付けます。
-
応答電文のデータ変換をする場合
サービス部品から返される電文に標準電文を設定し,データ変換定義画面でデータ変換を定義します。
応答電文については,DBアダプタに指定した電文フォーマット(XMLフォーマット定義ファイル)のDBA_OUT_DATAと対応付けます。
データ変換の詳細については,マニュアル「サービスプラットフォーム 開発ガイド 基本開発編」の「7. データ変換の定義」を参照してください。
(6) EARファイルの入れ替え
DBアダプタの追加時にEARファイルを設定します。DBアダプタを追加したあとにEARファイルを修正する必要がある場合,DBアダプタのサービスアダプタ定義画面で,EARファイルを入れ替えます。
DBアダプタのサービスアダプタ定義画面で,EARファイルを入れ替える手順を次に示します。
-
ツリービューのサービス定義一覧で,EARファイルを入れ替えるDBアダプタをダブルクリックします。
サービスアダプタ定義画面が表示されます。
-
画面下部の[サービスアダプタ定義(詳細)]タブをクリックします。
サービスアダプタ定義(詳細)画面が表示されます。
-
サービスアダプタ定義(詳細)画面で,[参照]ボタンをクリックします。
-
入れ替えるEARファイルを指定します。
(7) サービスリクエスタの作成
DBアダプタに要求を出すサービスリクエスタは,要求電文を受け付ける標準受付の種類によって作成方法が異なります。それぞれの標準受付の種類ごとの作成方法を参照して作成してください。参照先を次の表に示します。
標準受付の種類 |
参照先 |
|
---|---|---|
同期受付 |
Webサービス(SOAP1.1) |
マニュアル「サービスプラットフォーム 開発ガイド 基本開発編」の「9.2 標準の同期受付(Webサービス)に要求を出すサービスリクエスタ(SOAP通信基盤)」 |
Webサービス(SOAP1.2) |
マニュアル「サービスプラットフォーム 開発ガイド 基本開発編」の「9.3 標準の同期受付(Webサービス)に要求を出すサービスリクエスタ(JAX-WSエンジン)」 |
|
SessionBean |
マニュアル「サービスプラットフォーム 開発ガイド 基本開発編」の「9.4 標準の同期受付(SessionBean)に要求を出すサービスリクエスタ」 |
|
非同期 |
MDB(WS-R) |
マニュアル「サービスプラットフォーム 開発ガイド 基本開発編」の「9.5 標準の非同期受付(MDB(WS-R))に要求を出すサービスリクエスタ」 |
MDB(DBキュー) |
マニュアル「サービスプラットフォーム 開発ガイド 基本開発編」の「9.6 標準の非同期受付(MDB(DBキュー))に要求を出すサービスリクエスタ」 |
以降の項では,DBアダプタ電文の形式について説明します。
DBアダプタ用のサービスリクエスタの電文の形式が,DBアダプタ電文の形式と異なる場合,データ変換が必要です。データ変換の詳細については,マニュアル「サービスプラットフォーム 開発ガイド 基本開発編」の「7. データ変換の定義」を参照してください。
(a) 要求電文の形式
要求電文は,XML文書形式で作成します。
要素,属性およびテキストデータは,W3CのXMLの仕様に従って指定します。XML文書で使用できない「<」,「>」,「&」などの文字を使用する場合,エスケープするか,CDATAセクションを利用する必要があります。
要求電文の形式は,単一のSQL文の実行を要求する場合と,複数のSQL文の実行を要求する場合とで異なります。
要求電文の形式を次に示します。なお,斜体の文字は可変値を表します。
- 単一のSQL文の実行を要求する場合
-
ルート要素(DBadapter要素)の下位要素としてSQL識別子要素を記述します。記述できるSQL識別子要素の数は,1つだけです。
<DBadapter> <SQL識別子 out_maxOccurs="検索結果出力最大件数"> <DBA_IN_DATA> <引数要素 nulldata="空要素の扱い">引数要素のデータ</引数要素> : </DBA_IN_DATA> </SQL識別子> </DBadapter>
- 複数のSQL文の実行を要求する場合
-
ルート要素(DBadapter要素)の下位要素としてDBA_MULTI_SQL要素を記述します。複数のDBA_MULTI_SQL要素を記述できます。記述できる数は,SQLオペレーション定義ファイルのMAX_SQL_NO要素に設定した値以下です。
<DBadapter> <DBA_MULTI_SQL> <SQL識別子 out_maxOccurs="検索結果出力最大件数"> <DBA_IN_DATA> <引数要素 nulldata="空要素の扱い">引数要素のデータ</引数要素> : </DBA_IN_DATA> </SQL識別子> </DBA_MULTI_SQL> : </DBadapter>
(b) 要求電文の要素と属性
要求電文の要素と属性について次の表に示します。なお,要素および属性の指定は,SQLオペレーション定義ファイルの設定値に依存します。SQLオペレーション定義ファイルについては「(1) SQLオペレーション定義ファイルの作成」を参照してください。
要素名・属性名 |
種別 |
内容と設定値 |
設定値の型 |
省略可否 |
---|---|---|---|---|
DBadapter |
要素 |
ルート要素です。次の下位要素があります。
|
− |
× |
DBA_MULTI_SQL |
要素 |
サービスリクエスタからの要求が,複数のSQL文を実行する要求であることを示す要素です。SQL識別子以降の下位要素で入力情報を設定します。 SQLオペレーション定義ファイルのMAX_SQL_NO要素に設定した値以内で複数記述できます。
|
− |
○ |
SQL識別子 |
要素 |
SQL識別子にはSQLオペレーション定義ファイルで指定したSQL識別子の名称を指定します。 DBA_IN_DATA以降の下位要素で,入力情報を設定します。 属性にout_maxOccursがあります。 |
− |
○ |
out_maxOccurs |
属性 |
検索結果出力最大件数を指定します。0以上の値を指定します。
|
xsd:int |
○ |
DBA_IN_DATA |
要素 |
引数要素以降の下位要素で,SQLオペレーション定義ファイルで設定した引数要素のデータを設定します。 |
− |
× |
引数要素 |
要素 |
引数要素にはSQLオペレーション定義ファイルで指定した引数要素の名称を指定します。 この要素には,SQLオペレーション定義ファイルで指定した引数要素のデータが格納されます。 属性にnulldataがあります。
|
xsd:stringまたはdata_typeの設定値※ |
× |
nulldata |
属性 |
SQLオペレーション定義ファイルで指定したdba_inf(引数の種別)が「data」の場合に,空要素のデータを「null」として扱うかどうかを指定します(dba_infが「data」以外の場合は,指定できません)。
なお,省略した場合,この属性には「"N"」が設定されます。 |
xsd:string {Y|N} |
○ |
data_typeの設定値 |
引数要素の型 |
---|---|
INTEGER |
xsd:int※ |
SMALLINT |
xsd:short※ |
DECIMAL |
xsd:string |
FLOAT |
xsd:double※ |
REAL |
xsd:float※ |
CHAR |
xsd:string |
VARCHAR |
xsd:string |
DATE |
xsd:date※ |
TIME |
xsd:string |
TIMESTAMP |
xsd:string |
LONGVARBINARY |
xsd:hexBinary |
xsd:base64Binary |
data_typeの設定値 |
引数要素の型 |
---|---|
NUMERIC |
xsd:string |
CHAR |
xsd:string |
VARCHAR |
xsd:string |
DATE |
xsd:date※ |
TIME |
xsd:string |
TIMESTAMP |
xsd:string |
LONGVARCHAR |
xsd:string |
CLOB |
xsd:string |
VARBINARY |
xsd:hexBinary |
xsd:base64Binary |
|
LONGVARBINARY |
xsd:hexBinary |
xsd:base64Binary |
|
BLOB |
xsd:hexBinary |
xsd:base64Binary |
なお,DBアダプタに送信する要求電文で設定する引数要素の値は,次の表のとおりに扱います。
要求電文の引数要素の値 |
SQLオペレーション定義ファイルの設定値 |
要求電文のnulldataの属性値 |
引数要素の扱い |
|
---|---|---|---|---|
dba_infの属性値 |
data_typeの属性値 |
|||
空要素 |
data |
− |
"Y"または"△Y△"※ |
null |
"Y"または"△Y△"以外(省略時も含む) |
空文字列("") |
|||
data以外 |
− |
− |
空文字列("") |
|
空要素以外 |
data |
CHAR,VARCHAR,LONGVARCHAR,CLOB |
− |
値の前後の空白文字は削除しません。<引数要素>△ABC△</引数要素>は,空白文字を削除しないで"△ABC△"として扱います。 |
CHAR,VARCHAR,LONGVARCHAR,CLOB以外 |
− |
値の前後の空白文字を削除します。<引数要素>△123△</引数要素>は,空白文字を削除して"123"として扱います。 |
||
data以外 |
− |
− |
値の前後の空白文字は削除しません。<引数要素>△ABC△</引数要素>は,空白文字を削除しないで"△ABC△"として扱います。 |
(c) 応答電文の形式
応答電文は,XML文書形式で出力されます。
なお,検索結果(列名など)にXML文書で使用できない「<」や「&」などの文字が含まれていた場合,「<」や「&」などにエスケープして応答電文に設定されます。そのため,データベースに格納されているデータをエスケープする必要はありません。
応答電文の形式は,単一のSQL文の実行要求に対する応答の場合と,複数のSQL文の実行要求に対する応答の場合とで異なります。
応答電文の形式を次に示します。なお,斜体の文字は可変値を表します。
- 単一のSQL文の実行要求に対する応答の場合
-
ルート要素(DBadapter要素)の下位要素としてSQL識別子要素が出力されます。
<DBadapter> <SQL識別子 out_maxOccurs="検索結果出力最大件数"> <DBA_IN_DATA> <引数要素 nulldata="空要素の扱い">引数要素のデータ</引数要素> : </DBA_IN_DATA> <DBA_OUT_DATA> <DBA_ResultSetNo>SQLリターン値</DBA_ResultSetNo> <DBA_ResultSetXmlNo>検索結果の件数</DBA_ResultSetXmlNo> <DBA_ResultSetName> <DBA_ResultColumnName cid="列番号">列の名称</DBA_ResultColumnName> : </DBA_ResultSetName> <DBA_ResultSet lid="行番号"> <DBA_ResultColumn cid="列番号">該当行n列目の検索結果</DBA_ResultColumn> : </DBA_ResultSet> : </DBA_OUT_DATA> </SQL識別子> </DBadapter>
- 複数のSQL文の実行要求に対する応答の場合
-
ルート要素(DBadapter要素)の下位要素としてDBA_MULTI_SQL要素が出力されます。要求電文で記述したDBA_MULTI_SQL要素と同数のDBA_MULTI_SQL要素が出力されます。
<DBadapter> <DBA_MULTI_SQL> <SQL識別子 out_maxOccurs="検索結果出力最大件数"> <DBA_IN_DATA> <引数要素 nulldata="空要素の扱い">引数要素のデータ</引数要素> : </DBA_IN_DATA> <DBA_OUT_DATA> <DBA_ResultSetNo>SQLリターン値</DBA_ResultSetNo> <DBA_ResultSetXmlNo>検索結果の件数</DBA_ResultSetXmlNo> <DBA_ResultSetName> <DBA_ResultColumnName cid="列番号">列の名称</DBA_ResultColumnName> : </DBA_ResultSetName> <DBA_ResultSet lid="行番号"> <DBA_ResultColumn cid="列番号">該当行n列目の検索結果</DBA_ResultColumn> : </DBA_ResultSet> : </DBA_OUT_DATA> </SQL識別子> </DBA_MULTI_SQL> : </DBadapter>
なお,要求電文で入力情報が0(ゼロ)の場合,応答電文は次の形式で出力されます。
(d) 応答電文の要素と属性
応答電文の要素と属性について次の表に示します。
要素名・属性名 |
種別 |
内容と設定値 |
格納される値の型 |
省略 |
---|---|---|---|---|
DBadapter |
要素 |
ルート要素です。次の下位要素があります。
|
− |
× |
DBA_MULTI_SQL |
要素 |
サービスリクエスタからの複数のSQL文の実行要求に対する応答であることを示す要素です。SQL識別子以降の下位要素に入力情報(要求電文での設定情報)および出力情報(SQLの実行結果情報)が出力されます。 要求電文で記述したDBA_MULTI_SQL要素と同数のDBA_MULTI_SQL要素が出力されます。 |
− |
×※1 |
SQL識別子 |
要素 |
下位の要素「DBA_IN_DATA」および「DBA_OUT_DATA」に,それぞれ入力情報(要求電文での設定情報)および出力情報(SQLの実行結果情報)が格納されます。 SQL識別子は,要求電文に設定したSQL識別子です。 なお,属性out_maxOccurs(検索結果出力最大件数)は,要求電文で設定した場合にだけ格納されます。 |
− |
× |
DBA_IN_DATA |
要素 |
要求電文で設定した入力情報がこの要素の下位要素に格納されます。 |
− |
× |
DBA_OUT_DATA |
要素 |
下位の要素にSQL実行時の出力情報が格納されます。実行したSQLによって,格納される出力情報が異なります。
|
− |
× |
DBA_ResultSetNo |
要素 |
実行したSQLによって,格納される出力情報が異なります。
|
xsd:int |
× |
DBA_ResultSetXmlNo |
要素 |
実行したSQLがSELECTの場合,実際の検索結果の件数(DBA_ResultSetNoの値)のうち,この応答電文に格納されている検索結果の件数が格納されます。 DBA_ResultSetNoの値が,要求電文またはSQLオペレーション定義ファイルのout_maxOccursに指定した値よりも大きい場合,out_maxOccursに指定した値が格納されます。 また,格納される要素の値が2,147,483,647を超えた場合,2,147,483,647が格納されます。 |
xsd:int |
○ |
DBA_ResultSetName |
要素 |
実行したSQLがSELECTの場合,検索結果の列の名称が,下位要素DBA_ResultColumnNameに格納されます。 なお,検索結果が0件の場合,この要素は格納されません。 |
− |
△ |
DBA_ResultColumnName |
要素 |
実行したSQLがSELECTの場合,該当する列の名称が格納されます。 なお,結果の列がデータベースの列の場合,「列名」の形式で設定されます。また,結果の列名が取得されない場合,SQLを発行した先のデータベースの仕様に従った名称が返されます。 属性にcidがあります。 |
xsd:string |
△ |
cid |
属性 |
DBA_ResultColumnNameに格納される値の列番号を示します。 |
xsd:int |
|
DBA_ResultSet |
要素 |
実行したSQLがSELECTの場合,一行ごとの結果情報が,下位要素のDBA_ResultColumnに格納されます。なお,検索結果が0件の場合,この要素は格納されません。 属性にlidがあります。 |
− |
△ |
lid |
属性 |
DBA_ResultSetに格納される値の行番号を示します。 また,格納される要素の値が2,147,483,647を超えた場合,2,147,483,647が格納されます。 |
xsd:int |
|
DBA_ResultColumn |
要素 |
該当する行(DBA_ResultSetで示される行)のn列目の検索結果が格納されます。※2 属性にcidおよびnulldataがあります。 |
xsd:string |
△ |
cid |
属性 |
DBA_ResultColumnに格納される値の列番号を示します。 |
xsd:int |
|
nulldata |
属性 |
DBA_ResultColumnに格納されたデータがnullであるかどうかを示します。 nullの場合「Y」が設定されます。nullでない場合,この属性は設定されません。 |
xsd:string |
SELECT VARCHAR_FORMAT(c_ts, 'YYYY-MONTH-DD HH:MI') FROM 表名