Cosminexus ビジネスプロセス管理/エンタープライズサービスバス V8 サービスプラットフォーム 開発ガイド

[目次][用語][索引][前へ][次へ]

4.3.5 サービス部品電文を作成する(DBアダプタ電文の場合)

DBアダプタ電文のXMLフォーマット定義ファイルを作成するには,あらかじめSQLオペレーション定義ファイルを作成してから,csamkxmlsコマンドで生成します。

SQLオペレーション定義ファイルは,実行環境でDBアダプタを介してアクセスするデータベースの情報や,SQLの実行形式を定義するファイルです。DBアダプタ用のXMLフォーマット定義ファイルを作成するときの基となるファイルです。

SQLオペレーション定義ファイルとDBアダプタ用のXMLフォーマット定義ファイルの作成方法を次に説明します。

<この項の構成>
(1) SQLオペレーション定義ファイルの作成
(2) DBアダプタ用のXMLフォーマット定義ファイルの作成

(1) SQLオペレーション定義ファイルの作成

SQLオペレーション定義ファイルは,テキストエディタなどを使用してXML文書形式で作成します。XML文書で使用できない「<」,「>」,「&」などの文字を使用する場合,エスケープするか,CDATAセクションを利用する必要があります。

要素,属性およびテキストデータは,W3CのXMLの仕様に従って指定します。

なお,XML名前空間は使用できません。

作成するXML文書の詳細を説明します。

(a) ファイル名

SQLオペレーション定義ファイルのファイル名は,次の形式で指定します。

 
csa_sql_<任意の名称>.xml
 
(b) 構造

SQLオペレーション定義ファイルの構造を次に示します。

図4-3 SQLオペレーション定義ファイルの構造

[図データ]

(c) SQLオペレーション定義ファイルの形式

SQLオペレーション定義ファイルの形式を次に示します。なお,斜体の文字は可変値を表します。

 
<?xml version="XMLのバージョン" encoding="文字コード"?>
<DBadapter_SQL_OPERATION>
    <DATABASE_DATA>
        <DB_NAME>データベース参照名</DB_NAME>
        <DB_TYPE>データベース種別</DB_TYPE>
    </DATABASE_DATA>
    <SQL_DATA>
        <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>
    :
</DBadapter_SQL_OPERATION>
 

データベース情報(要素名:DATABASE_DATA)
下位の要素(DB_NAMEおよびDB_TYPE)で,データベースの情報を指定します。
 
<DATABASE_DATA>
    データベース参照名
    データベース種別
</DATABASE_DATA>
 

データベース参照名(要素名:DB_NAME)
DB Connectorのデータベース参照名を指定します。
 
<DB_NAME>データベース参照名</DB_NAME>
 

データベース種別(要素名: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>
    SQL識別子
        SQL実行文
</SQL_DATA>
 

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△」のどちらかを指定します(△は半角スペース)。ただし,「SELECT△」または「INSERT△」の直後に引数要素がある場合,「△」(半角スペース)は省略できます。
指定内容を次に示します。
SQL命令
指定できるSQL命令はSELECTまたはINSERTです。
SELECTで検索できるデータ型について,次の表に示します。

表4-1 SELECTで検索できるデータ型(HiRDBの場合)

HiRDBのデータ型 検索の可否
DBPSVの場合 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

(凡例)
○:SELECTで検索できます。
−:SELECTで検索できません。

〔 〕で囲まれた部分は省略できることを意味します。

注※
DBPSVとは,Cosminexus DABroker LibraryのJdbcDbpsvDriverです。

 

表4-2 SELECTで検索できるデータ型(Oracleの場合)

Oracleのデータ型 検索の可否
DBPSV※1の場合 Oracle JDBC Thin Driverの場合
VARCHAR2
NVARCHAR2
NUMBER
LONG
DATE ※2
BINARY_FLOAT※3
BINARY_DOUBLE※3
TIMESTAMP
TIMESTAMP WITH TIME ZONE
TIMESTAMP WITH LOCAL TIME ZONE
INTERVAL YEAR TO MONTH
INTERVAL DAY TO SECOND
RAW
LONG RAW
ROWID
UROWID ※4
CHAR
NCHAR
CLOB
NCLOB
BLOB
BFILE
ユーザ定義型(オブジェクト型)
ユーザ定義型(REFデータ型)
ユーザ定義型(VARRAY)
ユーザ定義型(ネストした表)

(凡例)
○:SELECTで検索できます。
−:SELECTで検索できません。

注※1
DBPSVとは,Cosminexus DABroker LibraryのJdbcDbpsvDriverです。

注※2
Oracle 11gのOracle JDBC Thin Driverを利用する場合,論理J2EEサーバの定義でJVMの起動パラメタとして次の値を設定する必要があります。
-Doracle.jdbc.mapDateToTimestamp=false
起動パラメタの設定の詳細については,マニュアル「Cosminexus アプリケーションサーバ 運用管理ポータル操作ガイド」の「10.9.20 起動パラメタの設定(J2EEサーバ)」を参照してください。

注※3
接続するデータベースがOracle 10gおよびOracle 11gの場合だけ使用できます。

注※4
SELECTで検索してもエラーにはなりませんが,検索した場合の動作は保証されません。

●ポイント
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に指定する必要があります。また,引数として利用するデータを表4-1および表4-2に示すjavaのデータ型またはクラスに変換して,SQL文に埋め込みます。引数として利用するデータを変換できない場合は,エラーとなります。
    なお,この値を指定した場合,引数要素をINパラメタ(?パラメタまたはバインド変数)として扱います。SQL文中にINパラメタを指定できる個所は,利用するデータベースの仕様に従います。指定できない個所にINパラメタを定義した場合,エラーになります。なお,SQLの実行時に,引数要素は「?」に置き換えられて実行されます。
  • preset
    引数がテーブルおよび列の名称以外のデータの場合に指定します。この値を指定した場合,引数として利用するデータをそのままSQL文に埋め込みます。引数として利用するデータはstring型です。
data_type="データ型"
属性dba_infにdataを指定した場合に,引数として利用するデータの型を指定します。データベースのデータ型とdata_typeに指定できるデータの型の対応を次の表に示します。

表4-3 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[]

注 〔 〕で囲まれた部分は省略できることを意味します。


 

表4-4 data_typeに指定できるデータ型(Oracleの場合)

Oracleのデータ型 data_typeに指定できるデータ型 引数として利用するデータの変換先のデータ型およびクラス
DBPSV※1の場合 Oracle JDBC Thin Driverの場合
LONG LONGVARCHAR LONGVARCHAR java.io.Reader
NUMBER NUMERIC NUMERIC java.math.BigDecimal
VARCHAR2 VARCHAR VARCHAR java.lang.String
NVARCHAR2 VARCHAR
ROWID CHAR CHAR
CHAR CHAR CHAR
NCHAR CHAR
CLOB CLOB CLOB※2
  • DBPSV※1の場合
    java.sql.Clob
  • Oracle JDBC Thin Driverの場合
    java.io.Reader
NCLOB CLOB
DATE DATE※3 DATE※3 java.sql.Date
TIME※4 TIME※4 java.sql.Time
TIMESTAMP※5 TIMESTAMP※5 java.sql.Timestamp
RAW VARBINARY byte[]
LONG RAW LONGVARBINARY byte[]
BLOB BLOB byte[]

(凡例)
−:指定できません。

注※1
DBPSVとは,Cosminexus DABroker LibraryのJdbcDbpsvDriverです。

注※2
JDBCドライバのバージョンが10.2の場合にだけ指定できます。10.2以外のバージョンのJDBCドライバを使用した場合,データが破損するおそれがあります。

注※3
設定する値の形式が「yyyy-mm-dd」の場合に指定します。

注※4
設定する値の形式が「hh:mm:ss」の場合に指定します。

注※5
設定する値の形式が「yyyy-mm-dd hh:mm:ss」の場合に指定します。

複数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>
 
(d) 作成例

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アダプタ用のXMLフォーマット定義ファイルの作成

DBアダプタ用のXMLフォーマット定義ファイルを作成するには,「(1) SQLオペレーション定義ファイルの作成」で作成したSQLオペレーション定義ファイルの名称を-oオプションに指定してcsamkxmlsコマンドを実行します。

(a) コマンドの実行例

csamkxmlsコマンドの実行形式を次に示します。

 
<Cosminexusのインストールディレクトリ>\CSC\bin\csamkxmls -o <SQLオペレーション定義ファイルの名称> -x <DBアダプタ用のXMLフォーマット定義ファイルの名称>
 

csamkxmlsコマンドの詳細については,マニュアル「Cosminexus サービスプラットフォーム リファレンス」の「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. データ変換の定義」を参照してください。サービスアダプタ定義画面については,マニュアル「Cosminexus サービスプラットフォーム リファレンス」の「1.2.2 サービスアダプタ定義画面」を参照してください。
(b) 作成例

作成されるXMLフォーマット定義ファイルは,次のようになります。

図4-4 (例1)SELECT文を使用し,WHRER句の値を引数化したい場合

[図データ]

図4-5 (例2)SELECT文を使用し,取得する列名も引数化したい場合

[図データ]

図4-6 (例3)SELECT文を使用し,WHRER句の列名や式も引数化したい場合

[図データ]