JBoss Enterprise Data Services 5 Data Services クライアント開発者

JBoss Enterprise Data Services 5
Data Services クライアント開発者
ガイド
JBoss 開発者向け
エディッション 5.2.0
Landmann
JBoss Enterprise Data Services 5 Data Services クライアント開発者ガ
イド
JBoss 開発者向け
エディッション 5.2.0
Landmann
[email protected] m
法律上の通知
Copyright © 2011 Red Hat, Inc..
T his document is licensed by Red Hat under the Creative Commons Attribution-ShareAlike 3.0 Unported
License. If you distribute this document, or a modified version of it, you must provide attribution to Red
Hat, Inc. and provide a link to the original. If the document is modified, all Red Hat trademarks must be
removed.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section
4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, JBoss, MetaMatrix, Fedora, the Infinity Logo,
and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux ® is the registered trademark of Linus T orvalds in the United States and other countries.
Java ® is a registered trademark of Oracle and/or its affiliates.
XFS ® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States
and/or other countries.
MySQL ® is a registered trademark of MySQL AB in the United States, the European Union and other
countries.
Node.js ® is an official trademark of Joyent. Red Hat Software Collections is not formally related to or
endorsed by the official Joyent Node.js open source or commercial project.
T he OpenStack ® Word Mark and OpenStack Logo are either registered trademarks/service marks or
trademarks/service marks of the OpenStack Foundation, in the United States and other countries and
are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or
sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.
概要
本書を読んで Data Services の JDBC 拡張を使用してクライアントアプリケーションより仮想データベー
スへアクセスする方法を学びましょう。トランザクションや SSL、Hibernate の統合についても取り上げ
ます。
目次
目次
.はじめに
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4. . . . . . . . . .
1. 本書の表記規則
4
1.1. 書体の表記規則
4
1.2. 引用文の表記規則
5
1.3. 注記および警告
6
2. サポート、およびフィードバックのお願い
6
2.1. サポートが必要ですか?
6
2.2. フィードバックをお願いします
7
. . .1章
第
. . . .Data
. . . . . Services
. . . . . . . . . .サーバーへの接続
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8. . . . . . . . . .
1.1. ドライバークラスを使用した接続
8
1.1.1. URL 形式
9
1.1.2. URL 接続プロパティー
10
1.2. データソースクラスを使用した接続
12
1.2.1. Data Services の DataSource 接続プロパティー
13
1.3. JBoss AS データソース
14
1.3.1. DataSource 接続
15
1.3.2. ドライバーベースの接続
15
1.3.3. ローカル JDBC 接続
15
1.4. 複数ホストの使用
16
1.4.1. フェイルオーバー
17
1.4.2. ロードバランシング
17
1.4.3. 詳細設定
18
1.4.4. 再認証
18
. . .2章
第
. . . .準備済みステートメント
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
............
. . .3章
第
. . . JDBC
. . . . . . .API
. . . .への
. . . . .Data
. . . . . Services
. . . . . . . . . .の拡張
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
............
3.1. ステートメントの拡張
20
3.2. 実行プロパティー
20
3.3. SET ステートメント
21
3.4. SHOW ステートメント
22
3.5. トランザクションステートメント
23
3.6. 部分結果モード
23
3.7. XML 拡張
24
3.7.1. ドキュメントのフォーマット
24
3.7.2. スキーマ検証
25
. . .4.章
第
. . .JDBC
. . . . . . でのトランザクション
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
............
4.1. ローカルトランザクション
26
4.1.1. ローカルトランザクションの無効化
26
4.2. 要求レベルトランザクション
27
4.2.1. 複数挿入バッチ
28
4.3. グローバルトランザクションの使用
28
4.4. 制限
29
4.4.1. アプリケーションの制限
29
4.4.2. エンタープライズ情報システムサポート
30
. . .5章
第
. . . .SSL
. . . . クライアント接続
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .31
...........
5.1. デフォルトのセキュリティー
31
5.2. SSL モデル
31
5.3. クライアントの SSL 設定
32
5.3.1. オプション 1: Java SSL プロパティー
32
1
JBoss Enterprise D ata Services 5 D ata Services クライアント開発者ガイド
5.3.2. オプション 2: Deta Services 固有のプロパティー
32
. . .6章
第
. . . .Data
. . . . . Services
. . . . . . . . . .を
. . Hibernate
. . . . . . . . . . .と使用する
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .35
...........
6.1. 制限
35
6.2. 設定
35
. . .7章
第
. . . .ODBC
. . . . . . .サポート
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .37
...........
7.1. ODBC ドライバークライアントのインストール
37
7.1.1. Red Hat Enterprise Linux やその他の UNIX オペレーティングシステムに ODBC ドライバー
をインストールする
37
7.1.2. Microsoft Windows に ODBC ドライバーをインストールする
38
.サポート対象外の
. . . . . . . . . . . . . . . . . JDBC
. . . . . . .メソッド
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4. .2. . . . . . . . . .
A.1. ResultSet の制限
42
A.2. java.sql のサポート対象外のクラスおよびメソッド
42
A.3. javax.sql のサポート対象外のクラスおよびメソッド
47
.Keytool
. . . . . . . .を用いた自己署名証明書の生成
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4. .8. . . . . . . . . .
B.1. 秘密鍵と公開鍵のペアの作成
48
B.2. 公開鍵の抽出
48
B.3. トラストストアの作成
48
. . . . . .Lesser
GNU
. . . . . . . General
. . . . . . . . .Public
. . . . . . .License
. . . . . . . . 2.1
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
............
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
改訂履歴
............
2
目次
3
JBoss Enterprise D ata Services 5 D ata Services クライアント開発者ガイド
はじめに
1. 本 書 の 表 記 規 則
本ガイドでは、一部の単語や語句を強調して、特定の情報に対する読者の注意を促すために、以下のよう
な表記規則を採用しています。
本ガイドの PDF および紙書籍版では、Liberation フォントセットの書体を使用しています。また、
Liberation フォントセットがご使用のシステムにインストールされている場合には、HT ML 版もこの書体
で表示されます。インストールされていない場合には、別の対応する書体で表示されます。なお、Red
Hat Enterprise Linux 5 以降のバージョンでは、Liberation フォントセットがデフォルトでインストールさ
れる点に注意してください。
1.1. 書体の表記規則
本ガイドでは、特定の単語や語句に対する注意を促すために、4 つの書体表記規則を採用しています。こ
れらの表記規則および適用される状況は、以下のとおりです。
太字の等幅フォント
シェルコマンド、ファイル名、パスなど、システムへの入力を強調するために使用します。また、キー名
やキーの組み合わせを強調するのにも使用します。以下が例となります。
作業ディレクトリ内の m y_next_bestselling_novel というファイルの内容を表示する
には、シェルプロンプトで cat m y_next_bestselling_novel というコマンドを入力し
て Enter キーを押し、そのコマンドを実行します。
上記の例には、ファイル名、シェルコマンド、キー名が含まれており、すべて太字の等幅フォントで表示
されていますが、文脈で区別することができます。
キーの組み合わせは、プラス記号 (+) で各キーがつながれているので、個別のキーと区別することができ
ます。以下が例となります。
Enter を押してコマンドを実行します。
Ctrl+Alt+F2 を押して仮想ターミナルに切り替えます。
第 1 の例では、押すべき特定のキー名が強調されています。第 2 の例では、3 つのキーを同時に押す、
キーの組み合わせが強調されています。
ソースコードを記載する場合、その段落で言及されるクラス名、メソッド、関数、変数名、戻り値は上記
のように 太字の等幅フォント で表示されます。以下が例となります。
ファイル関連のクラスには、filesystem (ファイルシステム)、file (ファイル)、dir
(ディレクトリ) などがあります。各クラスにそれぞれ独自のパーミッションセットが関連付
けられています。
太字の可変幅フォント
この書体は、アプリケーション名、ダイアログボックスのテキスト、ラベル付きボタン、チェックボック
ス/ラジオボタンのラベル、メニュータイトル、サブメニュータイトルなど、システムで表示される単語や
語句であることを示します。以下が例となります。
メインメニューバーから システム → 設定 → マウス の順で選択し、マウスの設定 を起動
します。全般 タブで 左利き のラジオボタンを選択して 閉じる をクリックし、マウスの主
4
はじめに
ボタンを左から右へ切り替えます (左利きのユーザーが使用するのに適切な設定に変更しま
す)。
gedit ファイルに特殊文字を入力するには、メインのメニューバーから アプリケーション
→ アクセサリ → 文字マップ の順に選択します。次に 文字マップ のメニューバーから 検
索 → 検索 … の順に選択して 検索 フィールドに文字名を入力し、次を検索 をクリックしま
す。検索対象の文字が 文字テーブル に強調表示されます。その文字をダブルクリックして
コピーする文字列 のフィールドに表示されたら、コピー ボタンをクリックします。この後
に編集中のドキュメントに戻り、gedit のメニューバーから 編集 → 貼り付け の順で選択し
ます。
上記のテキストには、アプリケーション名、システム全体のメニュー名と項目、アプリケーション固有の
メニュー名、GUI インターフェースで使用されているボタンおよびテキストが含まれており、これらはす
べて、太字の可変幅フォントで表示されていますが、文脈で区別することができます。
太字斜体の等幅フォント または 太字斜体の可変幅フォント
太字の等幅フォントおよび太字の可変幅フォントに斜体を使用した場合には、いずれも置き換え可能な可
変テキストであることを意味します。斜体は、記載されている通りには入力しないテキスト、あるいは状
況によって変化するテキストを示します。以下が例となります。
ssh を使用してリモートマシンに接続するには、シェルプロンプトで ssh
username@ domain.name と入力します。リモートマシンが exam ple.com で、そのマシン
上のユーザー名が john である場合には、ssh john@ exam ple.com と入力してください。
m ount -o rem ount file-system のコマンドは、指定したファイルシステムを再マウン
トします。たとえば、/hom e ファイルシステムを再マウントするコマンドは m ount -o
rem ount /hom e となります。
現在インストール済みのパッケージのバージョンを確認するには、rpm -q package のコマ
ンドを使用します。その結果、次のような出力が返されます: package-version-release
ユーザー名、ドメイン名、ファイルシステム、パッケージ、バージョン、およびリリースが太字のイタ
リック体で表示されている点に注意してください。これらの語句はプレースホルダーで、コマンドを発行
する際に入力するテキストまたはシステムによって表示されるテキストのいずれかです。
斜体は、著作物のタイトルを表すという標準的な用途の他に、重要な用語の初出時にも使用されます。以
下が例となります。
Publican は DocBook の出版システムです。
1.2. 引用文の表記規則
端末の出力とソースコードは、周囲のテキストとは視覚的に区切られて表示されます。
端末に送信される出力は、ローマン体の等幅フォント を使用して以下のように表示されます。
books
books_tests
Desktop
Desktop1
documentation
downloads
drafts
images
mss
notes
photos
scripts
stuff
svgs
svn
ソースコードの表示にも ローマン体の等幅フォント が使用されますが、以下のような構文強調表示が追
加されます。
5
JBoss Enterprise D ata Services 5 D ata Services クライアント開発者ガイド
package org.jboss.book.jca.ex1;
import javax.naming.InitialContext;
public class ExClient
{
public static void main(String args[])
throws Exception
{
InitialContext iniCtx = new InitialContext();
Object
ref
= iniCtx.lookup("EchoBean");
EchoHome
home
= (EchoHome) ref;
Echo
echo
= home.create();
System.out.println("Created Echo");
System.out.println("Echo.echo('Hello') = " + echo.echo("Hello"));
}
}
1.3. 注記および警告
本ガイドでは、見落としがちな情報に注意を促すために、次にあげる 3 つの視覚的スタイルを使用してい
ます。
注記
注記には、対象のタスクに関するヒント、ショートカット、その他のアプローチなどを記載してい
ます。注記を無視しても、悪影響はありませんが、作業を効率的に行うためのコツを見逃してしま
う可能性があります。
重要
重要の欄には、現行セッションのみに適用される設定の変更や、更新を適用するのに再起動が必要
なサービスなど、見落としがちな情報を記載しています。「重要」と記載された事項を無視して
も、データ損失などには至りませんが、作業が思ったようにスムーズに進まなくなる可能性があり
ます。
警告
警告は、無視しないでください。警告を無視すると、データ損失が発生する可能性が非常に高くな
ります。
2. サ ポ ー ト 、 お よ び フ ィ ー ド バ ッ ク の お 願 い
2.1. サポートが必要ですか?
本書に説明してある手順で問題があれば、Red Hat カスタマーポータル(http://access.redhat.com)をご覧
ください。カスタマーポータルでは以下を行うことができます。
6
はじめに
Red Hat 製品に関する技術的なサポートの記載をナレッジベースで検索、閲覧することができます。
サポートケースを Red Hat グローバルサポートサービス(GSS)に提出することができます。
他の製品文書を参照することができます。
また、Red Hat は Red Hat のソフトウェアやテクノロジーに関するディスカッションの場として多くの
メーリングリストを設置しています。公開されているメーリングリストについて
はhttps://www.redhat.com/mailman/listinfoで一覧を参照してください。メーリングリストをサブスクライ
ブする、またはメーリングリストのアーカイブを参照する場合はそのメーリングリスト名をクリックしま
す。
2.2. フィードバックをお願いします
誤植、本ガイドの改善案がある場合、ご意見お待ちしております。製品JBoss Enterprise SOA
Platform 、コンポーネントdoc-Data_Services_Client_Developer_GuideとしBugzilla から報
告してください。以下のリンクhttp://bugzilla.redhat.com/から、あらかじめ記入が施されている本製品の
バグレポートへ移動できます。
Bugzilla のDescription フィールドにある以下のテンプレートに記載してください。できるだけ具体的
に問題を説明していただけると、迅速に問題解決へ向けた取り組みが行いやすくなります。
文書URL:
項、項のタイトル:
問題の説明:
改善案:
追加情報:
問題報告の功績が認められるよう、名前を記載するのを忘れないようにしてください 。
7
JBoss Enterprise D ata Services 5 D ata Services クライアント開発者ガイド
第 1章 Data Services サーバーへの接続
本章では Java Database Connectivity API (JDBC) を使用して Data Services の仮想データベースへ接続
する異なるメソッドについて説明します。ここでは JDBC の基本知識が必要となります。JDBC を使用し
たことがない場合は http://download.oracle.com/javase/tutorial/jdbc/index.html の Java JDBC ドキュメン
トを参照してください。
Data Services の JDBC API は Data Services サーバーにデプロイされたすべての仮想データベース
(VDB) への JDBC によるアクセスを提供します。クライアントアプリケーションは Data Services サー
バーに接続し、Data Services の JDBC API を使用してデプロイされた VDB に対して SQL クエリを発行
することができます。標準の JDBC API クラスを使用してメタデータへ問い合わせをしたり、クエリを実
行することもできます。
Data Services の VDB へ JDBC 接続を作成する以下の 3 つの方法について説明します。
1. org.teiid.jdbc.T eiidDriver ドライバークラスを使用
2. org.teiid.jdbc.T eiidDatasource データソースクラスを使用
3. デプロイされた JBoss データソースを使用
Data Services の VDB に接続する際、次の点を考慮する必要があります。
1. Data Services クライアント JAR — teiid-client.jar — は Data Services VDB に接続してい
るクライアントアプリケーションのクラスパス上に存在する必要があります。 この JAR ファイル
は Data Services サーバーの jbossas/server/PROFILE/lib ディレクトリにあり、JDBC を使
用して Data Services VDB に接続するためのクラスが含まれています。
2. Data Services JDBC API は JDBC 4.0 の仕様と互換性がありますが、すべてのメソッドを完全サ
ポートしているわけではありません。更新可能な結果セットや SQL3 データタイプなどの上級機能
もサポートされません。
サポート対象外のメソッドの詳細は 付録A サポート対象外の JDBC メソッド を参照してくださ
い。
3. Data Services VDB に接続しているクライアントアプリケーションは Java 1.6 JDK が必要になりま
す。Java の以前のバージョンはサポートされません。
4. Data Services サーバーに接続する前に以下の点について確認してください。
a. Data Services サーバーがインストールされ、稼働している。
b. アプリケーションが接続しようとしている仮想データベース (VDB) はデプロイされている。
手順はスタートガイドと Data Services 管理者ガイド を参照してください。
1.1. ド ラ イ バ ー ク ラ ス を 使 用 し た 接 続
Java の java.sql.DriverManager クラスを使用して接続を作成する場合に使用するドライバークラ
スは org.teiid.jdbc.T eiidDriver になります。
完全な例は eds/teiid/exam ples/sim pleclient/ ディレクトリに含まれているソースコードを参
照してください。
手順 1.1 ドライバークラスによる接続の作成
1. Data Services クライアント JAR がクラスパス上に存在するようにする
クライアントアプリケーションでは Data Services クライアント JAR がクラスパス上に存在しなけ
ればなりません。アプリケーションが Data Services がインストールされているアプリケーション
サーバーで稼働しているウェブアプリケーションである場合、Data Services クライアント JAR は
既にクラスパス上に存在しますが、それ以外の場合は Data Services クライアント JAR — teiid-
8
第1章 D ata Services サーバーへの接続
client.jar — をクライアントアプリケーションのクラスパス上に追加する必要がありま
す。teiid-client.jar は Data Services サーバーの jbossas/server/PROFILE/lib ディレ
クトリにあります。
2. 接続オブジェクトの作成
DriverManager.getConnection() メソッドを使用して接続オブジェクトを作成します。
例 1.1 ドライバー接続の作成
public class TeiidClient
{
public Connection getConnection(String user, String password) throws
Exception
{
String url =
"jdbc:teiid:myVDB@mm://localhost:31000;ApplicationName=myApp";
return DriverManager.getConnection(url, user, password);
}
}
接続 URL の形式は 「URL 形式」 を参照してください。
URL 接続プロパティーの一覧は 「URL 接続プロパティー」 を参照してください。
1.1.1. URL 形式
JDBC 接続に次の URL 形式を使用します:
jdbc:teiid:VDB-NAME@mm[s]://HOSTNAME:PORT;[prop-name=prop-value;]*
VDB-NAME
接続している VDB の名前です。VDB 名の中にバージョン情報を含めることもできます。例えば
m yvdb.2 の場合、下記で定義されている version=2 接続プロパティーを提供することと同等
になります。ただし、この形式の VDB 名と version プロパティーを同時に使用することはで
きません。
mm[s]
Data Services の JDBC プロトコルです。m m は通常接続のデフォルトになります。m m s は
adminAPI ツールのデフォルトで、暗号化に SSL を使用します。Data Services で SSL を使用す
る場合の詳細は 5章SSL クライアント接続 を参照してください。
HOST NAME
Data Services サーバーがインストールされているサーバーです。
PORT
Data Services サーバーが着信 JDBC 接続をリッスンするポートです。
[prop-name=prop-value]
セミコロン (;) で区切った追加の名前/値ペアを提供することもできます。? や =、; などの予約
文字が含まれる場合、プロパティー値を URL エンコードしなければなりません。
9
JBoss Enterprise D ata Services 5 D ata Services クライアント開発者ガイド
サポート対象の URL プロパティーの完全リストは 「URL 接続プロパティー」 を参照してくださ
い。
1.1.2. URL 接続プロパティー
次の表は、Data Services JDBC ドライバーの URL 接続文字列や Data Services の JDBC データソースク
ラスと使用できるサポート対象の接続プロパティーをすべて表しています。
10
第1章 D ata Services サーバーへの接続
表 1.1 接続プロパティー
プロパティー名
タイプ
詳細
ansiQuotedIdentifiers
boolean
SQL の二重引用符で囲まれたエントリーの解析動作
を設定します。デフォルトは true で、二重引用符で
囲まれたエントリーを識別子として解析します。
false に設定すると、有効な文字列リテラルである二
重引用符で囲まれたエントリーは文字列リテラルとし
て解析されます。
ApplicationNam e
String
クライアントアプリケーションの名前です。管理者が
接続を識別できるようにします。
autoCom m itT xn
String
autoCommit が true に設定されている場合のみ適用さ
れます。データの整合性を維持するため、実行された
コマンドをどのように Data Services 内でトランザク
ションとしてラップする必要があるかを判断します。
ON - 常にコマンドを分散トランザクションでラッ
プする
OFF - コマンドを分散トランザクションでラップ
しない
DET ECT (デフォルト) - 実行されたコマンドが 2
つ以上のソースにまたがる場合に自動的に分散ト
ランザクションを使用する
詳細は 4章JDBC でのトランザクション を参照してく
ださい。
autoFailover
boolean
true の場合、コミュニケーションの例外の後に新しい
サーバーインスタンスを自動的に選択します。デフォ
ルトは false です。接続が管理されている場合は接続
をプールよりパージできるため、通常この機能は必要
ではありません。
disableLocalT xn
boolean
true の場合、autoCommit 設定では ローカルトランザ
クションのコミットとロールバックが無視されます。
デフォルトは false です。
FetchSize
int
結果セットのサイズです。デフォルトのサイズは
500 です。<=0 はデフォルトを使用する必要がある
ことを表します。
NoExec
String
(通常、接続プロパティーとして設定されません) ON
または OFF を設定できます。ON の場合、クエリが
実行されないようにしますが、解析やプランニングは
発生します。デフォルトは OFF です。
partialResultsMode
boolean
部分的な結果モードを有効または無効にします。詳細
は 「部分結果モード」 を参照してください。
PassthroughAuthentication
boolean
「ローカル」接続のみに適用されます。このオプショ
ンが true に設定されると、Data Services は呼び出し
スレッド上で既に認証されたセキュリティーコンテキ
ストを検索します。認証されたセキュリティーコンテ
キストが検出された場合、そのユーザーの認証情報を
使用してセッションを作成します。また Data
Services は接続の寿命期間の間、同じユーザーが接
続を使用していることを検証します。呼び出しスレッ
ド上で異なるセキュリティーコンテキストが検出され
11
JBoss Enterprise D ata Services 5 D ata Services クライアント開発者ガイド
ると、新しいユーザーが Data Services へログインで
きる場合は接続のアイデンティティーを切り替えま
す。ログインできない場合、接続の実行に失敗しま
す。
useCallingT hread
boolean
「ローカル」接続のみに適用されます。このオプショ
ンが true (デフォルト) に設定されると、クエリの処
理に呼び出しスレッドが使用されます。 false の場合
はエンジンスレッドが使用されます。
QueryT im eout
integer
デフォルトのクエリタイムアウト (秒単位) になりま
す。>= 0 である必要があります。0 はタイムアウト
がないことを表しま
す。Statem ent.setQueryT im eout によって上書
きすることが可能です。デフォルトは 0 です。
useJDBC4 Colum nNam eAndLab
elSem antics
boolean
JDBC4 の変更により、エイリアスのない列名を
ResultSetMetadata 列名として返すようになりまし
た。以前は、列の別名が使用されると列名として返さ
れました。このプロパティーを false に設定すると、
JDBC3 やそれ以前 JDBC に対するサポートが必要な
時に後方互換性を有効にします。デフォルトは true
です。
Password
String
ユーザーの認証情報
resultSetCacheMode
boolean
結果セットキャッシングを有効または無効にします。
デフォルトは false です。
SHOWPLAN
String
(通常、接続プロパティーとして設定されません)
ON|OFF|DEBUG を設定できます。ON の場合、 結果
と共にクエリプランを返します。DEBUG の場合、さ
らにクエリプランナーのデバッグ情報をログに出力
し、結果と共に返します。プランとログは JDBC の
API 拡張より入手可能です。デフォルトは OFF で
す。
user
String
ユーザー名
version
integer
VDB のバージョン番号
1.2. デ ー タ ソ ー ス ク ラ ス を 使 用 し た 接 続
org.teiid.jdbc.T eiidDatasource クラスは javax.sql.DataSource ベースの接続ファクトリ
です。これを使用して JDBC DataSource 接続や XADataSource 接続を作成することができます。このク
ラスを使用して管理された接続や XA 接続を作成します。Data Services は XA プロトコルをサポートし、
XA をサポートする Data Services のソースへ XA トランザクションが拡張されます。
また、Data Services の DataSource クラスはシリアライズ可能で、JNDI ネーミングサービスと併用する
ことができます。
完全な例は eds/teiid/exam ples/sim pleclient/ ディレクトリに含まれているソースコードを参
照してください。
手順 1.2 T eiidDatasource クラスを使用した接続の作成
1. Data Services クライアント JAR がクラスパス上に存在するようにする
クライアントアプリケーションでは Data Services クライアント JAR がクラスパス上に存在しなけ
12
第1章 D ata Services サーバーへの接続
ればなりません。アプリケーションが Data Services がインストールされているアプリケーション
サーバーで稼働しているウェブアプリケーションである場合、Data Services クライアント JAR は
既にクラスパス上に存在しますが、それ以外の場合は Data Services クライアント JAR — teiidclient.jar — をクライアントアプリケーションのクラスパス上に追加する必要がありま
す。teiid-client.jar は Data Services サーバーの jbossas/server/PROFILE/lib ディレ
クトリにあります。
2. 接続オブジェクトの作成
org.teiid.jdbc.T eiidDataSource オブジェクトを作成するには、必要なプロパティーを設
定し、T eiidDataSource.getConnection() メソッドを使用して接続オブジェクトを取得し
ます。
例 1.2 ドライバー接続の作成
public class TeiidClient
{
public Connection getConnection(String user, String password) throws
Exception
{
TeiidDataSource ds = new TeiidDataSource();
ds.setUser(user);
ds.setPassword(password);
ds.setServerName("localhost");
ds.setPortNumber(31000);
ds.setDatabaseName("myVDB");
return ds.getConnection();
}
}
接続プロパティーの完全一覧は 「Data Services の DataSource 接続プロパティー」 を参照してくださ
い。
1.2.1. Data Services の DataSource 接続プロパティー
version 以外の 「URL 接続プロパティー」 に記載されている URL 接続プロパティー
は、org.teiid.jdbc.T eiidDataSource に対応する「セットメソッド」を持っていま
す。version は T eiidDataSource で DatabaseVersion として参照されます。
URL より想定されるプロパティーは、 表1.2「Datasource プロパティー」 の通り追加のセットメソッド
を持っています。
13
JBoss Enterprise D ata Services 5 D ata Services クライアント開発者ガイド
表 1.2 Datasource プロパティー
プロパティー名
タイプ
詳細
AlternateServers
String
「ホスト:ポート」 エントリーのオプションの区切りリス
トです。詳細は 「複数ホストの使用」 を参照してくだ
さい。
AdditionalProperties
String
接続 URL のプロパティー文字列と同じ形式であるプロパ
ティーのオプション設定です。
DatabaseNam e
String
Data Services にデプロイされた仮想データベース
(VDB) の名前です。任意でデータベース名の中に
DatabaseVersion が含まれるようにすることも可能で
す。例えば、「myvdb.2」は値が 2 に設定された
DatabaseVersion プロパティーを設定することと同じに
なります。しかし、この形式のデータベース名を使用
し、同時に DatabaseVersion プロパティーを使用するこ
とはできません。
DatabaseVersion
integer
VDB バージョン
DataSourceNam e
String
このデータソースに付与された名前
PortNum ber
integer
サーバー処理がリッスンするポート番号。
ServerNam e
String
Data Services ランタイムがインストールされている
サーバーのホスト名。
secure
boolean
安全な接続。クライアントサーバー間で SSL (mms) ベー
スの接続を使用するように示すためのフラグです。
1.3. JBoss AS デ ー タ ソ ー ス
Data Services を JDBC データソースとして設定することができます。設定後、JNDI からデータソースへ
接続したり、Java EE アプリケーションへデータソースを挿入することができます。Deta Services の
データソースは他のデータベースリソースのデータソースと同様にデプロイされます。
接続している T eiid インスタンスが JBoss AS インスタンスと同じ VM に存在する場合は特例となりま
す。ご使用のデプロイメントがこれに該当する場合は 「ローカル JDBC 接続」 の指示に従ってくださ
い。
手順 1.3 Data Services データソースのデプロイ
1. 必要な場合は Data Services のクライアントライブラリをデプロイする
データソースをデプロイするアプリケーションサーバーが Data Services が稼働しているアプリ
ケーションサーバーインスタンスと同じでない場合、Data Services のクライアント JAR をインス
トールする必要があります。インストールするには、Data Services のクライアント JAR ファイル
teiid-client.jar を PROFILE/lib/ ディレクトリへコピーします。
Data Services クライアント JAR ファイルは Data Services サーバーの PROFILE/lib/ ディレク
トリにあります。
2. データソースファイルを作成する
データソースファイルはデータソースの設定が含まれる XML ファイルです。命名規則は
DATASOURCE-NAME-ds.xm l となり、DATASOURCE-NAME をデータソースの論理名に置き換えま
す。
下記の通り、ファイルの内容はデプロイメントのタイプ (XADatasource、 Driver、Local) によって
異なります。
14
第1章 D ata Services サーバーへの接続
3. データソースファイルのデプロイ
サーバーの PROFILE/deploy/ ディレクトリへファイルをコピーしてデータソースをデプロイしま
す。
* -ds.xm l ファイルに指定されている JNDI 名を使用してデータソースにアクセスできるようになりま
す。
1.3.1. DataSource 接続
デプロイメント環境に固有する正しい DatabaseName、ServerName、ポート番号、認証情報を把握する
ようにしてください。
例 1.3 Data Services の DataSource クラスを使用する XADataSource
<datasources>
<xa-datasource>
<jndi-name>TEIID-DS</jndi-name>
<xa-datasource-class>org.teiid.jdbc.TeiidDataSource</xa-datasource-class>
<xa-datasource-property name="DatabaseName">myVDB</xa-datasource-property>
<xa-datasource-property name="serverName">localhost</xa-datasourceproperty>
<xa-datasource-property name="portNumber">31000</xa-datasource-property>
<xa-datasource-property name="user">admin</xa-datasource-property>
<xa-datasource-property name="password">password</xa-datasource-property>
<!-- pool and other JBoss datasource properties -->
<check-valid-connection-sql>SELECT 1</check-valid-connection-sql>
<min-pool-size>5</min-pool-size>
<max-pool-size>10</max-pool-size>
</xa-datasource>
</datasources>
1.3.2. ドライバーベースの接続
Data Services の JDBC ドライバークラス org.teiid.jdbc.T eiidDriver を使用してデータソース
を作成することもできます。
<datasources>
<local-tx-datasource>
<jndi-name>TEIID-DS</jndi-name>
<connection-url>jdbc:teiid:myVDB@mm://localhost:31000</connection-url>
<driver-class>org.teiid.jdbc.TeiidDriver</driver-class>
<user-name>admin</user-name>
<password>teiid</password>
<!-- pool and other JBoss datasource properties -->
<check-valid-connection-sql>SELECT 1</check-valid-connection-sql>
<min-pool-size>5</min-pool-size>
<max-pool-size>10</max-pool-size>
</local-tx-datasource>
</datasources>
1.3.3. ローカル JDBC 接続
15
JBoss Enterprise D ata Services 5 D ata Services クライアント開発者ガイド
T eiid ランタイムがインストールされている JBoss AS インスタンスにクライアントアプリケーションを
デプロイする場合、ソケットベースの JDBC 接続を用いずに接続する方法があります。JDBC API が同じ
VM でローカル T eiid ランタイムをルックアップする「ローカル」接続を確立するには若干変更された
データソースを使用します。
警告
DataSource は T eiid の VDB がデプロイされる前に起動するため、ローカル接続の最小プールサイ
ズをデフォルトの 0 のままにしておきます。最小プールサイズを変更すると、T eiid DataSource
の起動時にエラーが発生します。
注記
デフォルトでは、ローカル接続は呼び出しスレッドを使用して処理操作を実行するため、呼び出し
スレッドのブロック中にエンジンスレッドを使用しません。この動作を無効にするには、接続プロ
パティー useCallingT hreads=false を設定します。
例 1.4 ローカルデータソース
<datasources>
<xa-datasource>
<jndi-name>TEIID-DS</jndi-name>
<xa-datasource-class>org.teiid.jdbc.TeiidDataSource</xa-datasource-class>
<xa-datasource-property name="DatabaseName">myVDB</xa-datasource-property>
<xa-datasource-property name="user">admin</xa-datasource-property>
<xa-datasource-property name="password">password</xa-datasource-property>
<!-- pool and other JBoss datasource properties -->
<max-pool-size>10</max-pool-size>
</xa-datasource>
</datasources>
1.4. 複 数 ホ ス ト の 使 用
フェイルオーバー機能とロードバランシング機能を使用すると、同じクラスターの複数の Data Services
サーバーへ接続することができます。
これらの機能を有効にするには、クライアントが複数のホスト名とポート番号の組み合わせを
host:port のコンマ区切りリストとして URL 接続文字列に指定するのが最も簡単な方法となります。
例 1.5 URL 接続文字列の例
jdbc:teiid:<vdb-name>@mm://host1:31000,host1:31001,host2:31000;version=2
DataSource を使用して Data Services サーバーに接続する場合、AlternateServers プロパティーま
たはメソッドを使用してフェイルオーバーサーバーを定義することができます。この形式も host:port
16
第1章 D ata Services サーバーへの接続
のコンマ区切りリストになります。
クライアントはリストより Data Services サーバーの 1 つを無作為に選択し、そのサーバーとのセッショ
ンを確立します。そのサーバーへ接触できない場合、無作為順に残りの各サーバーへ接続しようとしま
す。これにより、接続時間のフェイルオーバーと無作為サーバー選択のロードバランシングの両方を可能
にします。
1.4.1. フェイルオーバー
管理接続 (AdminShell によって使用される接続など) が使用される場合や、autoFailover 接続プロパ
ティーが true に設定されている場合、接続後のフェイルオーバーが使用されます。接続前のフェイルオー
バーではほぼ毎秒ごとに ping を送信し、使用前に接続をテストします。ping に失敗すると、操作を実行
する前に新しいインスタンスが選択されます。
この場合、クライアントはトランザクションやクエリを再起動せず、セッションスコープが指定された一
時テーブルも再作成しないため、本当の「透過的なアプリケーションフェイルオーバー」とはみなされま
せん。非管理接続と併用する場合は細心の注意を払ってください。
1.4.2. ロードバランシング
接続後のロードバランシングは 2 通りに使用できます。1 つ目は、T eiidDataSource を使用し、Data
Services の PooledConnections によって返された接続の close メソッドが呼び出された場合、新し
いサーバーインスタンスが自動的に選択されます。しかし、ドライバーベースの接続を使用したり、接続
プールで T eiidDataSource を使用する場合、ロードバランシングは自動的に発生しません。2 つ目
は、set ステートメント SET NEWINST ANCE T RUE を使用して明示的にロードバランシングを誘発する
ことができます。通常、このステートメントを手作業で発行する必要はありませんが、DataSource 設定
の接続テストクエリとして使用します。
例 1.6 接続後にロードバランシングを使用する JBoss AS DataSource
<datasources>
<local-tx-datasource>
<jndi-name>TEIID-DS</jndi-name>
<connection-url>
jdbc:teiid:myVDB@mm://localhost:31000,mm://localhost:32000
</connection-url>
<driver-class>org.teiid.jdbc.TeiidDriver</driver-class>
<user-name>admin</user-name>
<password>teiid</password>
<!-- pool and other JBoss datasource properties -->
<check-valid-connection-sql>SET NEWINSTANCE TRUE</check-valid-connectionsql>
<min-pool-size>5</min-pool-size>
<max-pool-size>10</max-pool-size>
</local-tx-datasource>
</datasources>
Data Services は再使用される追加のソケット接続のプールを維持します。ロードバランシングでは接続
を別のサーバーインスタンスに切り替える潜在的なコストを削減できます。デフォルト設定では 16 の接
続を維持します。これはクライアント jar の teiid-client-settings.properties ファイルにある
org.teiid.sockets.m axCachedInstances プロパティーによって設定されます。クライアントア
プリケーションが大量の Data Services インスタンスへ接続し、接続後にロードバランシングが使用され
る場合、キャッシュ済みインスタンスの数を増やすよう考慮してください。設定するに
は、org.teiid.sockets.m axCachedInstances システムプロパティーを作成して必要値を設定す
17
JBoss Enterprise D ata Services 5 D ata Services クライアント開発者ガイド
るか、新規の teiid-client-settings.properties ファイルを作成してクライアント jar ファイル
の前になるようクラスパスに挿入します。
重要
現在トランザクションを実行しているセッションレベル一時テーブル、セッションレベルのキャッ
シュエントリー、指定セッションの PreparedPlans は他のクラスターのメンバーは使用できませ
ん。そのため、論理接続が閉じられ、実際の接続が再使用された時のみロードバランシングを接続
後に使用することが推奨されます。これは典型的な接続プールのパターンになります。
1.4.3. 詳細設定
サーバーディスカバリー、ロードバランシング、フェイルオーバー、再トライ、再トライの遅延などはデ
フォルトのポリシーが適切でない場合にカスタマイズすることができます。カスタマイズを行う前に
org.teiid.net.socket.ServerDiscovery インターフェースとデフォルト実装の
org.teiid.net.socket.UrlServerDiscovery を参照してください。
UrlServerDiscovery 実装は次を提供します。
URL ホストからのサーバーディスカバリー (DataSource サーバー/alternativeServers)
ロードバランシングやフェイルオーバーの無作為選択
ホストごとに 1 つの接続を試行
バイアスなし
ブラックリスト
その他の上級機能
フォールバックストラテジーとして使用し、必要な changed メソッドのみを実装できるようにするた
め、通常は UrlServerDiscovery を拡張します。接続ごとに 1 つの ServerDiscovery インスタン
スが作成されることを考慮することが重要となります。インスタンス間での情報共有は、静的ステートま
たはその他の共有ルックアップより行います。
カスタマイズしたサーバーディスカバリークラスは、完全なクラス名を使用して discoveryStategy 接続ま
たは DataSource プロパティーによって参照されなければなりません。
haproxy などの外部 tcp ロードバランサーの使用を選択することもできます。通常、ロードバランサーの
単一ホスト/ポートのみを使用するよう T eiid ドライバーや DataSource を設定します。
1.4.4. 再認証
T eiid 接続 (org.teiid.jdbc.T eiidConnection インターフェースによって定義される) は
changeUser メソッドによる接続の再認証をサポートしています。 再認証に成功すると、指定のアイデン
ティティーを用いて現在の接続が使用されます。既存のステートメント/結果セットも以前のアイデンティ
ティーで使用可能です。
18
第2章 準備済みステートメント
第 2章 準備済みステートメント
Data Services は java.sql.PreparedStatem ent の標準実装を提供します。準備されたステートメ
ントによって、サーバーがステートメントの解析や解決、プランニングをスキップできるため、共通ス
テートメントの実行を迅速化するために大変重要です。
準備済みステートメントを使用する際、次の点を考慮してください。
Data Services がサーバー側でプランキャッシングを実行するため、クライアント側の Data Services
PreparedStatem ents をプールする必要はありません。
キャッシュ済みプランの数は設定可能です。プランは LRU の順 (最後に使用されてから未使用の期間
が長い順) にパージされます。
キャッシュ済みプランはクラスターによって分散されません。クラスターメンバーごとに新しいプラ
ンを作成する必要があります。
プランは VDB 全体または特定セッションに対してキャッシュされます。プランの範囲は、プランイン
グ処理中に評価された関数に基づき自動的に検出されます。
現在、コスト情報のランタイム更新は再プランニングを実行しません。現時点ではセッションスコー
プが指定された一時テーブルや内部実体化されたテーブルのみがコスト情報を更新します。
CallableStatem ent より実行される保存されたプロシージャーのプランは
PreparedStatem ent と同様にキャッシュされます。
関数の署名が 1 つのみである場合や戻り値の型が判断される述語で関数が使用された場合、関数署名
のバインド変数タイプ (例: where t.col = abs(?)) を判断することができます。さらに複雑な状
況では、upper(convert(?, string)) のように cast や convert を使用してヒントを追加する必
要がある場合があります。
PreparedStatem ent の使用に関する詳細は
http://download.oracle.com/javase/6/docs/technotes/guides/jdbc/getstart/preparedstatement.html の Java
ドキュメントを参照してください。
19
JBoss Enterprise D ata Services 5 D ata Services クライアント開発者ガイド
第 3章 JDBC API への Data Services の拡張
3.1. ス テ ー ト メ ン ト の 拡 張
Data Services のステートメント拡張インターフェース org.teiid.jdbc.T eiidStatem ent は JDBC
の標準を越えた機能を提供します。この拡張インターフェースを使用するには、接続によって返されたス
テートメントをキャストまたはアンラップします。拡張インターフェース上で次のメソッドが提供されま
す。
表 3.1 接続プロパティー
メソッド名
詳細
getAnnotations
ステートメントが最後に SHOWPLAN ON|DEBUG で実行された場
合、クエリエンジンアノテーションを取得します。各
org.teiid.client.plan.Annotation には説明やカテゴ
リー、深刻度が含まれ、クエリプランナーによる選択を理解するた
めに使用されるクエリプランニング中に記録されたノートの解決が
含まれることもあります。
getDebugLog
ステートメントが最後に SHOWPLAN DEBUG で実行された場合、
デバッグログを取得します。
getExecutionProperty
ステートメントオブジェクト上に存在する実行プロパティーの現在
の値を取得します。
getPlanDescription
ステートメントが最後に SHOWPLAN ON|DEBUG で実行された場
合、クエリプランの詳細を取得します。プランは
org.teiid.client.plan.PlanNode オブジェクトで構成され
たツリーです。 通常、プランをテキスト形式に変換するために
PlanNode.toString() または PlanNode.toXm l() が使用され
ます。
getRequestIdentifier
このステートメント上で最後に実行されたコマンドの識別子を取得
します。コマンドが実行されていない場合は null が返されます。
setExecutionProperty
このステートメントの実行プロパティーを設定します。詳細は 「実
行プロパティー」 の項を参照してください。実行プロパティーが実
行されたステートメントのみに適用される場合以外は一般的に SET
ステートメントの使用が適切です。詳細は 「SET ステートメント」
を参照してください。
setPayload
トランスレーターに渡すコマンド毎のペイロードを設定します。現
在、ビルトインは Oracle データソースへのヒント送信のみに使用さ
れます。
3.2. 実 行 プ ロ パ テ ィ ー
実行プロパティーはステートメントごとに T eiidStatem ent インターフェースから設定することがで
きます。また、SET ステートメントを使用して接続上で設定することも可能です。プロパティーキーは
org.teiid.jdbc.ExecutionProperties インターフェース上の定数によって定義されます。
詳細は 「ステートメントの拡張」 と 「SET ステートメント」 を参照してください。
20
第3章 JD BC API への D ata Services の拡張
表 3.2 実行プロパティー
プロパティー名 /文字列定数
詳細
PROP_T XN_AUT O_WRAP /
autoCom m itT xn
接続プロパティーと同様。
PROP_PART IAL_RESULT S_MO
DE / partialResultsMode
詳細は 「部分結果モード」 を参照してください。
PROP_XML_FORMAT /
XMLForm at
XML ドキュメントモデルによって返された XML ドキュメントの
フォーマットを決定します。詳細は 「ドキュメントのフォーマッ
ト」 を参照してください。
PROP_XML_VALIDAT ION /
XMLValidation
XML ドキュメントモデルによって返された XML ドキュメントが処理
後にスキーマに対して検証されるかを決定します。詳細はリファレ
ンスガイドの「XML SELECT コマンド」の章と「ドキュメントの検
証」の項を参照してください。
RESULT _SET _CACHE_MODE /
resultSetCacheMode
接続プロパティーと同様。
SQL_OPT ION_SHOWPLAN /
SHOWPLAN
接続プロパティーと同様。
NOEXEC / NOEXEC
接続プロパティーと同様。
JDBC4 COLUMNNAMEANDLABEL
SEMANT ICS /
useJDBC4 Colum nNam eAndLa
belSem antics
接続プロパティーと同様。
3.3. SET ス テ ー ト メ ン ト
SET ステートメントを使用して接続上で実行プロパティーを設定することもできます。現在、SET ス
テートメントは Data Services の言語機能ではなく、JDBC クライアントでのみ処理されます。
SET の構文:
SET (パラメーター|SESSION AUT HORIZ AT ION) 値
構文ルール:
「パラメーター」は引用符で囲まれていない識別子でなければなりません。空白文字は使用できませ
ん。
「値」は引用符で囲まれていない識別子か引用符で囲まれた文字列リテラルの値になります。
SET ステートメントはプランニングや実行を制御するために最も一般的に使用されます。
SET SHOWPLAN (ON|DEBUG|OFF)
SET NOEXEC (ON|OFF)
21
JBoss Enterprise D ata Services 5 D ata Services クライアント開発者ガイド
例 3.1 プランデバッグを有効にする
Statement s = connection.createStatement();
s.execute("SET SHOWPLAN DEBUG");
...
Statement s1 = connection.createStatement();
ResultSet rs = s1.executeQuery("select col from table");
ResultSet planRs = s1.exeuteQuery("SHOW PLAN");
planRs.next();
String debugLog = planRs.getString("DEBUG_LOG");
SET ステートメントを使用して認証を制御することも可能です。SET SESSION AUT HORIZ AT ION ス
テートメントは認証情報が現在接続上に設定されている場合に 「再認証」 を実行します。SET
PASSWORD ステートメントを発行して接続の認証情報を変更することもできます。 SET PASSWORD
ステートメントは再認証を実行しません。
例 3.2 セッション承認の変更
Statement s = connection.createStatement();
s.execute("SET PASSWORD 'someval'");
s.execute("SET SESSION AUTHORIZATION 'newuser'");
3.4. SHOW ス テ ー ト メ ン ト
SHOW ステートメントを使用するとさまざまな情報を表示することができます。現在、SHOW ステート
メントは Data Services の言語機能ではなく、JDBC クライアントでのみ処理されます。
SHOW PLAN
SHOW PLAN は、clob 列 PLAN_T EXT や xml 列 PLAN_XML、以前実行されたクエリの値が含ま
れる行を持つ clob 列 DEBUG_LOG が含まれる結果セットを返します。SHOWPLAN が OFF で
あったり、プランがない場合、返される行はありません。SHOWPLAN が DEBUG に設定されて
いない場合、DEBUG_LOG は null 値を返します。
SHOW ANNOT AT IONS
SHOW ANNOT AT IONS は文字列 CAT EGORY、PRIORIT Y、ANNOT AT ION、RESOLUT ION お
よび以前実行されたクエリの各アノテーションに対する行が含まれる結果セットを返します。
SHOWPLAN が OFF であったり、プランがない場合、返される行はありません。
SHOW プロパティー
SHOW プロパティーは SET の逆となるプロパティーで、指定されたプロパティーのプロパ
ティー値を表示します。プロパティーキーと一致する名前を持つ単一の文字列が含まれる結果
セットを返します。
SHOW ALL
SHOW ALL は、NAME 文字列とすべてのプロパティー値に対する行エントリーを持つ VALUE 文
字列が含まれる結果セットを返します。
22
第3章 JD BC API への D ata Services の拡張
SHOW ステートメントは、例3.1「プランデバッグを有効にする」 の通りクエリプランの読み出しに最も
一般的に使用されます。
3.5. ト ラ ン ザ ク シ ョ ン ス テ ー ト メ ン ト
JDBC 接続を直接使用できない場合、トランザクションステートメントを使用してローカルトランザク
ションを制御することができます。
ST ART T RANSACT ION
ST ART T RANSACT ION は connection.setAutoCom m it(false) と同じです。
COMMIT
COMMIT は connection.setAutoCom m it(true) と同じです。
ROLLBACK
ROLLBACK は connection.rollback() と同じで、自動コミットモードへ戻ります。
3.6. 部 分 結 果 モ ー ド
Data Service サーバーは「部分結果」クエリモードをサポートします。このモードはクエリプロセッサー
の挙動を変更するため、一部のデータソースがない場合でもサーバーは結果を返します。
例えば、異なるサプライヤーに対して 2 つのデータソースが存在し、データデザイナーによって 2 つのサ
プライヤーからの情報を結合 (union) する仮想グループが作成されたとします。部分結果クエリモードを
使用せずにアプリケーションがクエリを提出し、1 つのサプライヤーのデータベースがダウンした場合、
仮想グループに対するクエリは例外を返します。しかし、アプリケーションが同じクエリを「部分結果」
クエリモードで実行すると、サーバーは稼働しているデータソースよりデータを返し、ダウンしている
データソースからはデータを返しません。
「部分結果」モードを使用する際、処理中にソースが例外をスローしてもユーザーのクエリが失敗する原
因にはなりません。ソースは障害点の後にこれ以上の行を返さないとみなされます。多くの場合でソース
は 0 行を返します。
不足している情報がうまく処理されるため、 UNION クエリや OUT ER JOIN クエリを使用する時のこの
挙動は大変便利です。他のクエリの多くは部分結果モードで使用された時にソースがないと 0 行を返しま
す。
クエリから除外される各ソースに対して、ソースと障害を説明する警告が生成されます。これらの警告は
Statem ent.getWarnings() メソッドより取得できます。このメソッドは SQLWarning オブジェクト
を返しますが、「部分結果」警告の場合はこのオブジェクトが
org.teiid.jdbc.PartialResultsWarning クラスのインスタンスになります。このクラスを使用
すると、名前ごとに失敗したすべてのソースの一覧を取得したり、各リソースアダプターによってスロー
された特定の例外を取得することができます。
23
JBoss Enterprise D ata Services 5 D ata Services クライアント開発者ガイド
注記
Data Services は結果全体が形成される前にカーソルの使用をサポートするため、結果の最初の
バッチがクライアントに返されるまでデータソースの失敗が判断されない可能性があります。これ
は union による結合の場合に発生しますが、join では発生しません。確実にすべての警告が蓄積さ
れるようにするため、結果セット全体が読み取られた後にステートメントをチェックする必要があ
ります。
部分結果モードはデフォルトで無効になっていますが、DataSource 上に setPartialResultsMode("true")
を設定するか、JDBC URL に partialResultsMode=true を設定すると接続のすべてのクエリに対して有効
にすることができます。いずれの設定方法でも部分結果モードが後に SET ステートメントと切り替わる
ことがあります。詳細は 「SET ステートメント」 を参照してください。
例 3.3 部分結果モードの設定
Statement statement = ...obtain statement from Connection...
statement.execute("set partialResultsMode true");
例 3.4 部分結果の警告の取得
statement.execute("set partialResultsMode true");
ResultSet results = statement.executeQuery("SELECT Name FROM Accounts");
while (results.next())
{
//process the result set
}
SQLWarning warning = statement.getWarnings();
if(warning instanceof PartialResultsWarning)
{
PartialResultsWarning partialWarning = (PartialResultsWarning)warning;
Collection failedConnectors = partialWarning.getFailedConnectors();
Iterator iter = failedConnectors.iterator();
while(iter.hasNext())
{
String connectorName = (String) iter.next();
SQLException connectorException =
partialWarning.getConnectorException(connectorName);
System.out.println(connectorName + ": " + ConnectorException.getMessage();
}
}
3.7. XML 拡 張
XML 拡張はクエリから XML ドキュメントモデルへの XML 結果に適用されますが、SQL/XML によって作
成された XML や他のソースより読み取られた XML には適用されません。
3.7.1. ドキュメントのフォーマット
24
第3章 JD BC API への D ata Services の拡張
PROP_XML_FORMAT 実行プロパティーを設定して、XML ドキュメントモデルから XML ドキュメントが
フォーマットされる方法を変更することができます。定数の有効な値は同じ ExecutionProperties イ
ンターフェースに定義されています。
XML_T REE_FORMAT
XML_T REE_FORMAT は表示向けにフォーマットされた XML のバージョンを返します。XML は
XML をツリーとしてフォーマットするため適切に改行やタブを使用します。フォーマットに要す
る時間が長く、ドキュメントのサイズも大きいため、フォーマットの速度は遅くなります。
XML_COMPACT _FORMAT
XML_COMPACT _FORMAT はパフォーマンスを最適化するためフォーマットされた XML のバー
ジョンを返します。XML は単一の長い文字列で不必要な空白文字は存在しません。
重要
PROP_XML_FORMAT 実行プロパティーが設定されていない場合、元のモデルにおける XML ドキュ
メントのフォーマットフラグが使用されます。この場合、ドキュメントの設定によりドキュメント
のツリーまたはコンパクトが作成されます。
3.7.2. スキーマ検証
PROP_XML_VALIDAT ION 実行プロパティーを設定すると、クライアントに返す前にサーバーが XML ド
キュメントモデルのドキュメントをスキーマに対して検証するよう示すことができます。スキーマ検証が
有効になっている場合、ドキュメントが関連するスキーマに適合しないとサーバーは SQLWarning を送信
します。スキーマ検証を使用すると XML クエリのパフォーマンスが低下します。
25
JBoss Enterprise D ata Services 5 D ata Services クライアント開発者ガイド
第 4章 JDBC でのトランザクション
Data Services の JDBC API はクライアントの観点からグローバル、ローカル、要求レベルの 3 種類のト
ランザクションをサポートとします。これらのトランザクションはすべて Data Services サーバーによっ
て XA トランザクションとして実装されます。XA トランザクションの詳細は
http://www.oracle.com/technetwork/java/javaee/tech/jta-138684.html の JT A 仕様を参照してください。
4.1. ロ ー カ ル ト ラ ン ザ ク シ ョ ン
接続クラスは autoCom m it フラグを使用してローカルトランザクションを明示的に制御します。デフォ
ルトでは autoCommit は要求レベルまたは黙示的トランザクションの制御を示す true に設定されていま
す。例4.1「autoCommit を使用したローカルトランザクションの制御」 を参照してください。
例 4 .1 autoCommit を使用したローカルトランザクションの制御
// Set auto commit to false and start a transaction
connection.setAutoCommit(false);
try
{
// Execute multiple updates
Statement statement = connection.createStatement();
statement.executeUpdate("INSERT INTO Accounts (ID, Name) VALUES (10,
‘Mike’)");
statement.executeUpdate("INSERT INTO Accounts (ID, Name) VALUES (15,
‘John’)");
statement.close();
// Commit the transaction
connection.commit();
}
catch(SQLException e)
{
// If an error occurs, rollback the transaction
connection.rollback();
}
この例では次の項目が実行されます。
1. autoCom m it フラグを false に設定します。トランザクションの接続へのバインドを開始します。
2. トランザクションのコンテキスト内で複数の更新を実行します。
3. ステートメントが完了すると、com m it() を呼び出してトランザクションがコミットされます。
4. エラーが発生すると rollback() メソッドを使用してトランザクションがロールバックされま
す。
次の操作はいずれもローカルトランザクションを終了します。
1. Connection.setAutoCom m it(true) - 以前 false に設定された場合
2. Connection.com m it()
3. Connection.rollback()
4. タイムアウトするとトランザクションは自動的にロールバックされます。
26
第4章 JD BC でのトランザクション
場合によってはすべてのアクセスが読み取り専用でトランザクションが必要でない時でも Data Services
より上のツールやフレームワークが setAutoCom m it(false) や com m it()、rollback() を呼び出
すことがあります。ローカルトランザクションの範囲では Data Services が起動し、XA トランザクショ
ンをコミットしようとするため、設定が複雑になったりパフォーマンスが劣化する原因となることがあり
ます。
このような場合、デフォルトの JDBC の動作を上書きし、実行されたコマンドに関係なくこれらのメソッ
ドは何も実行しないよう示すことができます。ローカルトランザクションの使用を無効にするには、この
プロパティーを JDBC 接続 URL に追加します。
disableLocalTxn=true
警告
ローカルトランザクションを無効にすると危険な場合があります。読み取り時に結果が不整合と
なったり、書き込み時にデータストアのデータが不整合となることがあります。安全性を保つた
め、呼び出しアプリケーションがローカルトランザクションを必要としないことが確定している場
合のみこのモジュールを使用するようにしてください。
4.2. 要 求 レ ベ ル ト ラ ン ザ ク シ ョ ン
要求レベルトランザクションは、要求がグローバルトランザクションまたはローカルトランザクションの
範囲にない場合 (autoCom m it が true の場合) に使用されます。要求レベルトランザクションではアプ
リケーションが明示的にコミットやロールバックを呼び出す必要はありません。各コマンドは、サーバー
によって自動的にコミットまたはロールバックされる独自のトランザクションとなることが想定されま
す。
Data Services サーバーは仮想テーブルより更新を実行できます。これらの更新によって、アプリケー
ションが単一の仮想テーブルに対して更新コマンドを発行した場合でも複数の物理システムに対して更新
が行われることがあります。ほとんどの場合でユーザーはクエリ済みテーブルが複数のソースを更新しト
ランザクションが必要となることを認識しません。
そのため、Data Services サーバーは必要な場合にアプリケーションがトランザクションでコマンドを自
動的にラップできるようにします。このラッピングはクエリのパフォーマンスに影響するため、複数の
ラッピングモードよりご使用の環境に合ったモードを選択することができます。アプリケーションが必要
とするのは高い整合性か高いパフォーマンスのどちらかであるか選択する必要があります。例えば、デー
タソースがトランザクションに対応していない場合、トランザクションのラッピングを (完全に) 無効にし
てパフォーマンスを最大限に向上するとよいでしょう。
トランザクションラッピングを以下のモードの 1 つに設定することが可能です。
1. ON
このモードは必要性を確認せずに常にトランザクションのコマンドをラップします。これが最も安
全なモードです。
2. OFF
このモードはトランザクションのコマンドを自動的にラップせず、コマンドをラップする必要性も
確認しません。このモードではエラーを出さずにトランザクション外部のソースを複数更新できる
ため、危険な場合があります。このモードでは更新やトランザクションを使用しないアプリケー
ションのパフォーマンスが最良となります。
3. DET ECT
27
JBoss Enterprise D ata Services 5 D ata Services クライアント開発者ガイド
このモードはトランザクションで複数ソースの更新が実行されることをユーザーが認識しないと想
定します。Data Services サーバーは各コマンドをチェックし、複数ソースの更新であるかを確認
しトランザクション内でラップします。単一ソースの場合はソースレベルのコマンドトランザク
ションを使用します。
実行プロパティーを使用して接続を確立する時やクエリごとにトランザクションモードをプロパティーと
して設定することができます。詳細は 「実行プロパティー」 を参照してください。
4.2.1. 複数挿入バッチ
クエリ表現 (または廃止された SELECT INT O) で INSERT を発行すると、個別のソースの INSERT に
よって処理される複数の挿入バッチが Data Servces サーバーによって処理されることがあります。目的
のソースが XA をサポートしていることを確認してください。サポートしていない場合、障害が発生する
と補正処理が行われます。
4.3. グ ロ ー バ ル ト ラ ン ザ ク シ ョ ン の 使 用
グローバルまたはクライアント XA トランザクションは Data Services JDBC API が単一のクライアントリ
ソースの範囲を越えるトランザクションに参加できるようにします。この場合、接続の確立に Data
Services の DataSource クラスを使用します。
JBoss や WebSphere、Weblogic などのアプリケーションサーバーにおける UserT ransaction のコンテ
キストで DataSource が使用されると、結果として生じる接続には現在の XA トランザクションが関連付
けされます。XA トランザクションとの対話に必要な追加のクライアント JDBC コードはありません。
28
第4章 JD BC でのトランザクション
例 4 .2 手作業による XA トランザクションの使用
XAConnection xaConn = null;
XAResource xaRes = null;
Connection conn = null;
Statement stmt = null;
try
{
xaConn = <XADataSource instance>.getXAConnection();
xaRes = xaConn.getXAResource();
Xid xid = <new Xid instance>;
conn = xaConn.getConnection();
stmt = conn.createStatement();
xaRes.start(xid, XAResource.TMNOFLAGS);
stmt.executeUpdate("insert into …");
// other statements on this connection or other resources enlisted in this
transaction
// ...
xaRes.end(xid, XAResource.TMSUCCESS);
if (xaRes.prepare(xid) == XAResource.XA_OK)
{
xaRes.commit(xid, false);
}
}
catch (XAException e)
{
xaRes.rollback(xid);
}
finally
{
// clean up code
// ...
}
グローバルトランザクションを使用すると複数の Data Services XAConnections が同じトランザクション
に参加することができます。Data Services JDBC XAResource の isSam eRM() メソッドはクラスターの
同じサーバーインスタンスへ接続が確立されている場合に true のみを返すことに注意してください。
Data Services の接続が異なるサーバーインスタンスへ確立されていると、同じクラスターメンバーの場
合とはトランザクションの挙動が異なることがあります。例えば、クライアントトランザクションマネー
ジャーが各接続に同じ XID を使用する場合、異なるクラスターメンバーよりアクセスされた同じ物理ソー
スより重複した XID 例外が発生することがあります。クライアントトランザクションマネージャーが各接
続に異なるブランチ識別子を使用する場合、ブランチ識別子に従って変更をロックしたり分離するソース
に問題が発生することがあります。
4.4. 制 限
4.4.1. アプリケーションの制限
グローバルやローカル、要求レベルのトランザクションの使用はすべて相互排他的です。要求レベルトラ
ンザクションはグローバルまたはローカルトランザクションにない時のみ適用されます。グローバルトラ
ンザクションとローカルトランザクションを同時に組み合わせると例外が発生します。
29
JBoss Enterprise D ata Services 5 D ata Services クライアント開発者ガイド
4.4.2. エンタープライズ情報システムサポート
エンタープライズ情報システム (EIS) を表す基盤のリソースアダプターや EIS 自体は、XA トランザクショ
ンが Data Services を使用して分散 XA トランザクションに参加できるようサポートしなければなりませ
ん。ソースシステムが XA をサポートしない場合、分散トランザクションには参加できません。しかし、
ソースは XA サポートがなくてもデータの統合には参加することができます。
XA トランザクションへの参加はリソースアダプターの XA 機能に従って自動的に判断されます。分散トラ
ンザクションへの参加が必要な場合、開発者が責任を持って XA リソースを設定するようにしてくださ
い。
30
第5章 SSL クライアント接続
第 5章 SSL クライアント接続
本章ではトランスポートレベルでのデータアクセスの保護を目的とした Data Services で使用できる異な
るセキュリティー設定について説明します。データレベルセキュリティーであるデータロールについての
詳細は、リファレンスガイドのデータロールの章を参照してください。
5.1. デ フ ォ ル ト の セ キ ュ リ テ ィ ー
デフォルトでは、接続ごとにネゴシエートされる http://en.wikipedia.org/wiki/DiffieHellman_key_exchange キーを使用してクライアントサーバー間に存在するすべての JDBC/管理に影響さ
れる (非データ) メッセージが暗号化されます。この暗号化は JdbcSslConfiguration の
clientEncryptionEnabled プロパティーと jboss-beans ファイルの Adm inSslConfiguration
セクションによって制御されます。
ソケット接続を使用している場合、更にチャネルを安全にする必要があります。特に ODBC は現在プレー
ンテキストの認証のみをサポートしているため更なるセキュリティーが必要です。
5.2. SSL モ デ ル
Data Services は クライアント JDBC アプリケーションと Data Services サーバーの間で SSL ベースの
チャネルをサポートします。Data Services は次の SSL モードをサポートします。
1. 匿名 (Anonymous) - 証明書は必要ありませんが、すべての通信が
T LS_DH_anon_WIT H_AES_128_CBC_SHA SSL スイートを使用して暗号化されます。
2. 一方向 (1-way) – サーバーからクライアントへのトラフィックのみが認証されます。サーバーと
キーを認証するクライアントのトラストストアに対して秘密鍵のキーストアを作成する必要があり
ます。SSL スイートがネゴシエートされます。
3. 双方向 (2-way) – クライアントとサーバーの相互認証です。サーバーアプリケーションとクライア
ントアプリケーションはそれぞれ秘密鍵のキーストアと相手側を認証するトラストストアを保有し
ています。
SSL モードによっては組織での秘密鍵の作成や取得のガイドラインに従うようにしてください。組織にお
ける必要条件がない場合、本ガイドに従って対応するキーストアとトラストストアで自己署名証明書を作
成してください。詳細は 付録B Keytool を用いた自己署名証明書の生成 を参照してください。
異なる SSL モードに必要となるキーストアとトラストストアの組み合わせは次の通りです。ファイル名は
例として使用されているため、変更することが可能です。
一方向
server.keystore - サーバーの秘密鍵を保有
server.truststore - サーバーの公開鍵を保有
双方向
server.keystore - サーバーの秘密鍵を保有
server.truststore - サーバーの公開鍵を保有
client.keystore - クライアントの秘密鍵
client.truststore - クライアントの公開鍵を保有
31
JBoss Enterprise D ata Services 5 D ata Services クライアント開発者ガイド
5.3. ク ラ イ ア ン ト の SSL 設 定
各 SSL モードに必要なプロパティーを定義するセクションは次の通りです。
重要
Data Services の設定ではデフォルトで SSL が有効になっています。SSL が有効な状態で Data
Services サーバーに接続する時、jdbc:teiid:MY-VDB@ m m s://HOST:PORT のように JDBC 接
続 URL の代わりに m m s プロトコルを使用する必要があります。
一方向 SSLや双方向 SSL を有効するためにクライアントが設定できるプロパティーは 2 セットありま
す。
5.3.1. オプション 1: Java SSL プロパティー
JVM 以下に SSL を設定する標準的な Java が定義されたシステムプロパティーがあります。Data
Serivces による SSL の使用は独自なものではありません。次のシステムプロパティーをクライアントの
VM 処理に提供します。
例 5.1 一方向 SSL
-Djavax.net.ssl.trustStore=<dir>/server.truststore (required)
-Djavax.net.ssl.trustStorePassword=<password> (optional)
-Djavax.net.ssl.keyStoreType (optional)
例 5.2 2 方向 SSL
-Djavax.net.ssl.keyStore=<dir>/client.keystore (required)
-Djavax.net.ssl.keyStrorePassword=<password> (optional)
-Djavax.net.ssl.trustStore=<dir>/server.truststore (required)
-Djavax.net.ssl.trustStorePassword=<password> (optioanl)
-Djavax.net.ssl.keyStroreType=<keystore type> (optional)
5.3.2. オプション 2: Deta Services 固有のプロパティー
このオプションは、匿名モードの場合や上記の javax ベースのプロパティーがホストプロセスによって
既に使用されている場合に使用します。例えば、クライアントアプリケーションが HT T PS に対して設定
された T omcat のプロセスで、上記の Java ベースのプロパティーが既に使用されている場合、Data
Services 固有の証明書キーを HT T PS 証明書キーストアへインポートすることはできません。
この場合、異なるセットの Data Services 固有の SSL プロパティーをシステムプロパティーとして設定し
たり、teiid-client-settings.properties ファイルの内部を設定することができます。teiid-clientsettings.properties ファイルはルートの teiid-client.jar ファイルの中にあります。このファイルを
展開するかコピーを作成し、選択した SSL モードに必要なプロパティー値を変更した後、クライアントア
プリケーションのクラスパス上で teiid-client.jar ファイルの前にこのファイルを置きます。
teiid-client-settings.properties 内の SSL プロパティーおよび定義は次の通りです。
32
第5章 SSL クライアント接続
########################################
# SSL Settings
########################################
#
# The key store type.
#
Defaults to JKS
org.teiid.ssl.keyStoreType=JKS
#
# The key store algorithm, defaults to
# the system property "ssl.TrustManagerFactory.algorithm"
#
#org.teiid.ssl.algorithm=
#
#
#
#
#
#
#
#
The classpath or filesystem location of the
key store.
This property is required only if performing 2-way
authentication that requires a specific private
key.
#org.teiid.ssl.keyStore=
#
# The key store password (not required)
#
#org.teiid.ssl.keyStorePassword=
#
#
#
#
#
#
#
#
The classpath or filesystem location of the
trust store.
This property is required if performing 1-way
authentication that requires trust not provided
by the system defaults.
#org.teiid.ssl.trustStore=
#
# The trust store password (not required)
#
#org.teiid.ssl.trustStorePassword=
#
# The cipher protocol, defaults to SSLv3
#
org.teiid.ssl.protocol=SSLv3
#
# Whether to allow anonymous SSL
# (the TLS_DH_anon_WITH_AES_128_CBC_SHA cipher suite)
33
JBoss Enterprise D ata Services 5 D ata Services クライアント開発者ガイド
# defaults to true
#
org.teiid.ssl.allowAnon=true
例 5.3 一方向 SSL
org.teiid.ssl.trustStore=<dir>/server.truststore (required)
例 5.4 2 方向 SSL
org.teiid.ssl.keyStore=<dir>/client.keystore (required)
org.teiid.ssl.trustStore=<dir>/server.truststore (required)
例 5.5 匿名
org.teiid.ssl.trustStore=NONE
34
第6章 D ata Services を Hibernate と使用する
第 6章 Data Services を Hibernate と使用する
6.1. 制 限
Hibernate の多くのユースケースでは、データソースが CREAT E T ABLE や DROP T ABLE などの DDL
(データ定義言語) ステートメントと SELECT 、UPDAT E、INSERT 、DELET E などの DML (データ操
作言語) ステートメントを処理できる能力 (適切なユーザーパーミッションにより) を持っていること
を前提としています。 T eiid は広範囲の DML に対応できますが、特定ソースに対する DDL を直接サ
ポートしていません。
シーケンスとアイデンティティーの生成はサポートされていません。hilo ジェネレーターなど、テーブ
ル値を基にした識別子の生成には T eiid を介して識別子テーブルを公開する必要があります。GUID 識
別子生成のストラテジーは直接サポートされます。
6.2. 設 定
大部分では、Hibernate より Data Services の VDB (仮想データベース) と対話することは他のタイプの
データソースと動作することと同じになります。最初に Data Services の DBC API クライアント JAR
ファイルと Data Services の Hibernate ダイアレクト JAR を Hibernate のクラスパスに置きます。
下記のファイルは JBOSS_HOME/server/PROFILE/lib ディレクトリにあります。
teiid-client.jar
teiid-hibernate-dialect-7.1.1.jar
これらの JAR ファイルには org.teiid.dialect.T eiidDialect や
org.teiid.jdbc.T eiidDriver、 org.teiid.jdbc.T eiidDataSource クラスがあります。
次に 手順6.1「Hibernate の設定」 に従って hibernate.cfg.xm l ファイルに Hibernate を設定しま
す。VDB-NAME、HOST 、PORT 、USERNAME、 PASSWORD を適切な値に置き換えます。
手順 6.1 Hibernate の設定
1. Data Services のドライバークラスの指定
connection.driver_class プロパティーに Data Services ドライバークラスを指定します。
<property name="connection.driver_class">
org.teiid.jdbc.TeiidDriver
</property>
2. 接続 URL の設定
connection.url プロパティーに VDB の URL を指定します。
<property name="connection.url">
jdbc:teiid:VDB-NAME@mm://HOST:POST;user=USERNAME;password=PASSWORD
</property>
注記
Hibernate が アプリケーションサーバーと同じ VM にある場合、必ず 「ローカル JDBC 接
続」 を使用してください。
35
JBoss Enterprise D ata Services 5 D ata Services クライアント開発者ガイド
3. dialect プロパティーに Data Services のダイアレクトクラスを指定する
<property name="dialect">
org.teiid.dialect.TeiidDialect
</property>
hibernate.cfg.xm l の代わりに hibernate.properties ファイルに接続プロパティーを追
加することもできます。
hibernate.connection.driver_class=org.teiid.jdbc.TeiidDriver
hibernate.connection.url=jdbc:teiid:VDB-NAME@mm://HOST:PORT
hibernate.connection.username=USERNAME
hibernate.connection.password=PASSWORD
hibernate.dialect=org.teiid.dialect.TeiidDialect
VDB に同じテーブル名を持つ複数のソースモデルやビューモデルが含まれている可能性が高いため、
Hibernate マッピングファイルに完全修飾テーブル名を指定する必要があります。
<class name="CLASSNAME" table="SOURCE/VIEW_MODEL_NAME.[SCHEMA_NAME.]TABLENAME">
...
</class>
例 6.1 マッピング例
<class name="org.teiid.example.Publisher" table="BOOKS.BOOKS.PUBLISHERS">
...
</class>
36
第7章 OD BC サポート
第 7章 ODBC サポート
JBoss Enterprise Data Services は PostgreSQL データベースサーバーをエミュレートして ODBC (Open
DataBase Connectivity) のアクセスをデプロイされた VDB に提供します。 デフォルトでは JBoss
Enterprise Data Services 上の ODBC は 354 32 番ポートで有効になっています。ODBC 準拠のクライア
ントアプリケーションはサポート対象の PostgreSQL ODBC ドライバーを使用して VDB に接続すること
ができます。サポート対象の PostgreSQL ODBC ドライバーは http://access.redhat.com よりダウンロー
ドできます。
注記
ODBC は標準化されたデータベースアクセス方法で、1992 年に SQL Access グループによって開
発されました。Java の JDBC と同様に、使用されているデータベース管理システム (DBMS) に関
係なく一貫性のあるクライアントアクセスを可能にします。
警告
現在、T eiid は ODBC に対してプレーンテキストのパスワード認証のみをサポートしています。ク
ライアントサーバーが SSL を使用するよう設定されていない場合、パスワードはネットワーク上
でプレーンテキストにて送信されます。SSL を使用せずに送信中のパスワードを保護する必要があ
る場合は、クライアントからの安全なパスワード値を許可する (暗号化またはハッシュ化など) セ
キュリティードメインをインストールするようにしてください。
7.1. ODBC ド ラ イ バ ー ク ラ イ ア ン ト の イ ン ス ト ー ル
異なるオペレーティングシステムでサポートされる PostgreSQL ODBC ドライバーのインストールパッ
ケージは http://access.redhat.com よりダウンロードできます。
Red Hat Enterprise Linux や その他サポート対象オペレーティングシステム向けのドライバーパッケージ
をインストールおよび設定する手順は以下の項を参照してください。
重要
ODBC の設定には管理パーミッションを持つユーザーアカウントが必要となります。Red Hat
Enterprise Linux やその他の UNIX オペレーティングシステムでは sudo コマンドの使用や root
ユーザーアカウントへのアクセスを許可する必要があります。Microsoft Windows では管理者アカ
ウント使用する必要があります。
7.1.1. Red Hat Enterprise Linux やその他の UNIX オペレーティングシステムに
ODBC ドライバーをインストールする
手順 7.1 Red Hat Enterprise Linux やその他の UNIX オペレーティングシステムに ODBC ドライ
バーをインストールする
1. ダウンロード
http://access.redhat.com よりご使用のオペレーティングシステム向けの正しい ODBC ドライバー
インストールパッケージをダウンロードします。
2. パッケージの解凍
37
JBoss Enterprise D ata Services 5 D ata Services クライアント開発者ガイド
/opt ディレクトリにインストールパッケージを展開します。
3. 環境の設定
/opt/redhat/eds-5.x/etc/setenv.sh スクリプトを実行します。
[localhost etc]$ ./setenv.sh
このスクリプトは必要なディレクトリを LD_LIBRARY_PAT H および PAT H 環境変数に追加しま
す。
4. DSN の設定
/opt/redhat/eds-5.x/etc/odbc.ini ファイルを編集し、正しいユーザー名、パスワード、
データベースで更新します。データベース名は VDB 名です。
[<DSN name>]
Driver = /usr/lib/psqlodbc.so
Description = PostgreSQL Data Source
Servername = <Teiid Host name or ip>
Port = 35432
Protocol = 7.4-1
UserName = <user-name>
Password = <password>
Database = <vdb-name>
ReadOnly = no
ServerType = Postgres
ConnSettings =
UseServerSidePrepare=1
ByteaAsLongVarBinary=1
Optimizer=0
Ksqo=0
Debug=0
Fetch = 10000
# enable below when dealing large resultsets
#UseDeclareFetch=1
5. 完了
これで ODBC ドライバーが適切にインストールされ、eds という名前の DSN が使用できるように
なります。
7.1.2. Microsoft Windows に ODBC ドライバーをインストールする
手順 7.2 Microsoft Windows に ODBC ドライバーをインストールする
1. ダウンロード
http://access.redhat.com よりご使用のオペレーティングシステム向けの正しい ODBC ドライバー
インストールパッケージをダウンロードします。
2. インストーラーの解凍および実行
インストールパッケージを解凍し、setup.exe 実行可能ファイルをダブルクリックしてインス
トーラーを開始します。
3. インストール場所の提供
インストーラーより入力を求められたら ODBC ドライバーをインストールするディレクトリを入力
します。
4. 完了
インストーラーが必要なファイルを指定場所へコピーします。これで ODBC ドライバーが使用でき
るようになります。
38
第7章 OD BC サポート
5. DSN の設定
a. ODBC データソース管理者アプレットを開く
Start menu より以下を実行します。
Settings の選択後、Control Panel を選択します。
Administrative T ools をダブルクリックします。
Data Sources (ODBC) をダブルクリックします。
これで ODBC データソース管理者アプレットが表示されます。
b. DSN の追加
追加したい DSN のタイプに関連するタブをクリックします。Create New Data Source
ダイアログボックスが開きます。データソーステーブルのドライバーとして PostgreSQL
Unicode を選択し、Finish をクリックすると PostgreSQL Unicode ODBC Driver
Setup ダイアログボックスが開きます。
図 7.1 PostgreSQL の Unicode ODBC ドライバーの設定
c. 詳細の入力
次の内容を PostgreSQL ODBC Driver Setup ダイアログボックスに入力します。
Data Source フィールドにデータソースに割り当てたい名前を入力します
Database フィールドにこのデータソースを使用してアクセスする VDB の名前を入力し
ます。
Server フィールドに Data Services サーバーのホスト名か IP アドレスを入力します。
ファイアウォールや NAT アドレスを使用して接続する場合はファイアウォールまたは
NAT アドレスを使用します。
Port フィールドに Data Services システムが ODBC 要求をリッスンするポートの番号を
入力します。Data Services によって使用されるデフォルトのポート番号は 354 32 で
す。
User Nam e および Password フィールドに Data Services サーバーへの接続に使用す
るユーザー名とパスワードを入力します。
SSL Mode は disable のままにしておいてください。 現在 SSL 接続はサポートされて
いません。
Description フィールドにデータソースの説明を入力します。
d. オプションページ 1
Datasource ボタンをクリックして Advanced Options ダイアログボックスを表示しま
す。
39
JBoss Enterprise D ata Services 5 D ata Services クライアント開発者ガイド
図7.2「DSN オプションページ 1」 の通りオプションを設定します。
図 7.2 DSN オプションページ 1
e. オプションページ 2
Page 2 ボタンをクリックしてオプションの 2 ページ目を表示します。
図7.3「DSN オプションページ 2」 の通りオプションを設定し、OK をクリックします。
40
第7章 OD BC サポート
図 7.3 DSN オプションページ 2
f. 保存およびテスト
Save をクリックして変更を保存します。T est ボタンをクリックして接続が有効であるか確
認することもできます。
41
JBoss Enterprise D ata Services 5 D ata Services クライアント開発者ガイド
サポート対象外の JDBC メソッド
本付録は JDK 1.6 JDBC を基にした Data Services ではサポートされない JDBC メソッドの一覧を提供し
ます。下記に指定がない限り Data Services は他のメソッドをすべてサポートします。
一覧にあるメソッドでコメントのないものは、サポート対象外であることを示し、SQLException タイ
プの例外をスローします。
記載されている通り、例外をスローしないメソッドもありますが、想定外の動作をする可能性がありま
す。引数の指定がない場合、関連 (上書き) するメソッドもすべてサポート対象外となります。引数が指定
されている場合、指定のあるメソッドの形式のみがサポート対象外となります。
A.1. ResultSet の 制 限
T YPE_SCROLL_SENSIT IVE はサポートされません。
UPDAT ABLE ResultSet はサポートされません。
プロシージャの実行より複数の ResultSet を返すことはサポートされません。
A.2. java.sql の サ ポ ー ト 対 象 外 の ク ラ ス お よ び メ ソ ッ ド
42
サポート対象外の JD BC メソッド
表 A.1 接続プロパティー
クラス名
メソッド
Array
Not Supported
Blob
getBinaryStream(long, long) SQLFeatureNotSupportedException をスロー
setBinaryStream(long) - - SQLFeatureNotSupportedException
をスロー
setBytes - - SQLFeatureNotSupportedException をスロー
truncate(long) - SQLFeatureNotSupportedException をスロー
CallableStatem ent
43
JBoss Enterprise D ata Services 5 D ata Services クライアント開発者ガイド
CallableStatem ent
getArray - SQLFeatureNotSupportedException をスロー
getBigDecimal(String parameterName)SQLFeatureNotSupportedException をスロー
getBlob(String parameterName)SQLFeatureNotSupportedException をスロー
getBoolean(String parameterName)SQLFeatureNotSupportedException をスロー
getByte(String parameterName)SQLFeatureNotSupportedException をスロー
getBytes(String parameterName)SQLFeatureNotSupportedException をスロー
getCharacterStream(String parameterName)SQLFeatureNotSupportedException をスロー
getClob(String parameterName)SQLFeatureNotSupportedException をスロー
getDate(String parameterName, *)SQLFeatureNotSupportedException をスロー
getDouble(String parameterName)SQLFeatureNotSupportedException をスロー
getFloat(String parameterName)SQLFeatureNotSupportedException をスロー
getInt(String parameterName)SQLFeatureNotSupportedException をスロー
getLong(String parameterName)SQLFeatureNotSupportedException をスロー
getNCharacterStream - SQLFeatureNotSupportedException をス
ロー
getNClob - SQLFeatureNotSupportedException をスロー
getNString - SQLFeatureNotSupportedException をスロー
getObject(int parameterIndex, Map<String, Class<?>> map) SQLFeatureNotSupportedException をスロー
getObject(String parameterName) SQLFeatureNotSupportedException をスロー
getRef - SQLFeatureNotSupportedException をスロー
getRowId - SQLFeatureNotSupportedException をスロー
getShort(String parameterName) SQLFeatureNotSupportedException をスロー
getSQLXML(String parameterName) SQLFeatureNotSupportedException をスロー
getString(String parameterName) SQLFeatureNotSupportedException をスロー
getTime(String parameterName, *) SQLFeatureNotSupportedException をスロー
getTimestamp(String parameterName, *) SQLFeatureNotSupportedException をスロー
getURL(String parameterName) SQLFeatureNotSupportedException をスロー
registerOutParameter - 無視
registerOutParameter(String parameterName, *) SQLFeatureNotSupportedException をスロー
setAsciiStream - SQLFeatureNotSupportedException をスロー
setBigDecimal(String parameterName, BigDecimal x)SQLFeatureNotSupportedException をスロー
setBinaryStream(String parameterName, *) SQLFeatureNotSupportedException をスロー
setBlob(String parameterName, *)SQLFeatureNotSupportedException をスロー
setBoolean(String parameterName, boolean x) SQLFeatureNotSupportedException をスロー
setByte(String parameterName, byte x) -
44
サポート対象外の JD BC メソッド
SQLFeatureNotSupportedException をスロー
setBytes(String parameterName, byte[] x) SQLFeatureNotSupportedException をスロー
setCharacterStream - SQLFeatureNotSupportedException をス
ロー
setClob(String parameterName, *) SQLFeatureNotSupportedException をスロー
setDate(String parameterName, *) SQLFeatureNotSupportedException をスロー
setDouble(String parameterName, double x) SQLFeatureNotSupportedException をスロー
setFloat(String parameterName, float x) SQLFeatureNotSupportedException をスロー
setLong(String parameterName, long x) SQLFeatureNotSupportedException をスロー
setNCharacterStream - SQLFeatureNotSupportedException をス
ロー
setNClob - SQLFeatureNotSupportedException をスロー
setNString - SQLFeatureNotSupportedException をスロー
setNull - SQLFeatureNotSupportedException をスロー
setObject(String parameterName, *) SQLFeatureNotSupportedException をスロー
setRowId(String parameterName, RowId x) SQLFeatureNotSupportedException をスロー
setSQLXML(String parameterName, SQLXML xmlObject) SQLFeatureNotSupportedException をスロー
setShort(String parameterName, short x) SQLFeatureNotSupportedException をスロー
setString(String parameterName, String x) SQLFeatureNotSupportedException をスロー
setTime(String parameterName, *) SQLFeatureNotSupportedException をスロー
setTimestamp(String parameterName, *) SQLFeatureNotSupportedException をスロー
setURL(String parameterName, URL val) SQLFeatureNotSupportedException をスロー
Clob
getCharacterStream(long arg0, long arg1) SQLFeatureNotSupportedException をスロー
setAsciiStream(long arg0) - SQLFeatureNotSupportedException
をスロー
setCharacterStream(long arg0) SQLFeatureNotSupportedException をスロー
setString - SQLFeatureNotSupportedException をスロー
truncate - SQLFeatureNotSupportedException をスロー
Connection
45
JBoss Enterprise D ata Services 5 D ata Services クライアント開発者ガイド
Connection
createArrayOf - SQLFeatureNotSupportedException をスロー
createBlob - SQLFeatureNotSupportedException をスロー
createClob - SQLFeatureNotSupportedException をスロー
createNClob - SQLFeatureNotSupportedException をスロー
createSQLXML - SQLFeatureNotSupportedException をスロー
createStatement(int resultSetType,int resultSetConcurrency,
int resultSetHoldability) - SQLFeatureNotSupportedException
createStruct(String typeName, Object[] attributes) SQLFeatureNotSupportedException をスロー
getClientInfo - SQLFeatureNotSupportedException をスロー
prepareCall(String sql, int resultSetType,int
resultSetConcurrency, int resultSetHoldability) SQLFeatureNotSupportedException をスロー
prepareStatement(String sql, int autoGeneratedKeys) SQLFeatureNotSupportedException をスロー
prepareStatement(String sql, int[] columnIndexes) SQLFeatureNotSupportedException をスロー
prepareStatement(String sql, String[] columnNames) SQLFeatureNotSupportedException をスロー
releaseSavepoint - SQLFeatureNotSupportedException をスロー
rollback(Savepoint savepoint) SQLFeatureNotSupportedException をスロー
setHoldability - SQLFeatureNotSupportedException をスロー
setSavepoint - SQLFeatureNotSupportedException をスロー
setTypeMap - SQLFeatureNotSupportedException をスロー
DatabaseMetaData
getAttributes - SQLFeatureNotSupportedException をスロー
getClientInfoProperties - SQLFeatureNotSupportedException
をスロー
getFunctionColumns - SQLFeatureNotSupportedException をス
ロー
getFunctions - SQLFeatureNotSupportedException をスロー
getRowIdLifetime - SQLFeatureNotSupportedException をスロー
NClob
Not Supported
PreparedStatem ent
execute(String sql) - SQLException をスロー
executeQuery(String sql) - SQLException をスロー
executeUpdate(String sql) - SQLException をスロー
setArray - SQLFeatureNotSupportedException をスロー
setNCharacterStream - SQLFeatureNotSupportedException をス
ロー
setNClob - SQLFeatureNotSupportedException をスロー
setRef - SQLFeatureNotSupportedException をスロー
setRowId - SQLFeatureNotSupportedException をスロー
setUnicodeStream - SQLFeatureNotSupportedException をスロー
Ref
ResultSet
46
Not Im plem ented
サポート対象外の JD BC メソッド
ResultSet
deleteRow - SQLFeatureNotSupportedException をスロー
getArray - SQLFeatureNotSupportedException をスロー
getAsciiStream - SQLFeatureNotSupportedException をスロー
getHoldability - SQLFeatureNotSupportedException をスロー
getNCharacterStream - SQLFeatureNotSupportedException をス
ロー
getNClob - SQLFeatureNotSupportedException をスロー
getNString - SQLFeatureNotSupportedException をスロー
getObject(*, Map<String, Class<?>> map) SQLFeatureNotSupportedException をスロー
getRef - SQLFeatureNotSupportedException をスロー
getRowId - SQLFeatureNotSupportedException をスロー
getUnicodeStream - SQLFeatureNotSupportedException をスロー
getURL - SQLFeatureNotSupportedException をスロー
insertRow - SQLFeatureNotSupportedException をスロー
moveToInsertRow - SQLFeatureNotSupportedException をスロー
refreshRow - SQLFeatureNotSupportedException をスロー
rowDeleted - SQLFeatureNotSupportedException をスロー
rowInserted - SQLFeatureNotSupportedException をスロー
rowUpdated - SQLFeatureNotSupportedException をスロー
setFetchDirection - SQLFeatureNotSupportedException をスロー
update* - SQLFeatureNotSupportedException をスロー
RowId
Not Supported
Savepoint
not Supported
SQLData
Not Supported
SQLInput
not Supported
SQLOutput
Not Supported
Statem ent
execute(String, int)
execute(String, int[])
execute(String, String[])
executeUpdate(String, int)
executeUpdate(String, int[])
executeUpdate(String, String[])
getGeneratedKeys()
getResultSetHoldability()
setCursorName(String)
Struct
Not Supported
A.3. javax.sql の サ ポ ー ト 対 象 外 の ク ラ ス お よ び メ ソ ッ ド
表 A.2 接続プロパティー
クラス名
メソッド
RowSet*
Not Supported
Statem entEventListener
Not Supported
47
JBoss Enterprise D ata Services 5 D ata Services クライアント開発者ガイド
Keytool を用いた自己署名証明書の生成
自己署名証明書を生成するには、Java SDK のすべてのバージョンに含まれる「keytool」と呼ばれるプロ
グラムが必要となります。以下の手順は、セキュリティーキーを持つ一方向 SSL 設定にキーストアファイ
ルとトラストストアファイルの両方を作成する手順となります。
B.1. 秘 密 鍵 と 公 開 鍵 の ペ ア の 作 成
keytool -genkey -alias teiid -keyalg RSA -validity 365 –keystore
server.keystore –storetype JKS
Enter keystore password: <enter password>
What is your first and last name?
[Unknown]: <user’s name>
What is the name of your organizational unit?
[Unknown]: <department name>
What is the name of your organization?
[Unknown]: <company name>
What is the name of your City or Locality?
[Unknown]: <city name>
What is the name of your State or Province?
[Unknown]: <state name>
What is the two-letter country code for this unit?
[Unknown]: <country name>
Is CN=<user’s name>, OU=<department name>, O="<company name>",
L=<city name>, ST=<state name>, C=<country name> correct?
[no]: yes
Enter key password for <server>
(Return if same as keystore password)
新規作成した秘密鍵を基に server.keystore をキーストアとして使用することができます。
B.2. 公 開 鍵 の 抽 出
上記で作成した server.keystore よりトラストストアを作成するための公開鍵を抽出することができま
す。
keytool -export -alias teiid –keystore server.keystore -rfc -file public.cert
Enter keystore password: <enter passsword>
上記は server.keystore の秘密鍵を基に公開鍵が含まれる public.cert ファイルを作成します。
B.3. ト ラ ス ト ス ト ア の 作 成
48
Keytool を用いた自己署名証明書の生成
keytool -import -alias teiid -file public.cert –storetype JKS -keystore
server.truststore
Enter keystore password: <enter password>
Owner: CN=<user's name>, OU=<dept name>, O=<company name>, L=<city>, ST=<state>,
C=<country>
Issuer: CN=<user's name>, OU=<dept name>, O=<company name>, L=<city>, ST=<state>,
C=<country>
Serial number: 416d8636
Valid from: Fri Jul 31 14:47:02 CDT 2009 until: Sat Jul 31 14:47:02 CDT 2010
Certificate fingerprints:
MD5: 22:4C:A4:9D:2E:C8:CA:E8:81:5D:81:35:A1:84:78:2F
SHA1: 05:FE:43:CC:EA:39:DC:1C:1E:40:26:45:B7:12:1C:B9:22:1E:64:63
Trust this certificate? [no]: yes
これで server.truststore が作成されました。自己署名証明書を作成する方法はたくさんあるため上
記の手順はその1つとなります。openssl を使用して自己署名証明書を作成するには
http://www.akadia.com/services/ssh_test_certificate.html のチュートリアルを参照してください。
49
JBoss Enterprise D ata Services 5 D ata Services クライアント開発者ガイド
GNU Lesser General Public License 2.1
50
GNU Lesser General Public License 2.1
GNU LESSER GENERAL PUBLIC LICENSE
Version 2.1, February 1999
Copyright (C) 1991, 1999 Free Software Foundation, Inc.
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
[This is the first released version of the Lesser GPL. It also counts
as the successor of the GNU Library Public License, version 2, hence
the version number 2.1.]
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
Licenses are intended to guarantee your freedom to share and change
free software--to make sure the software is free for all its users.
This license, the Lesser General Public License, applies to some
specially designated software packages--typically libraries--of the
Free Software Foundation and other authors who decide to use it. You
can use it too, but we suggest you first think carefully about whether
this license or the ordinary General Public License is the better
strategy to use in any particular case, based on the explanations below.
When we speak of free software, we are referring to freedom of use,
not price. Our General Public Licenses are designed to make sure that
you have the freedom to distribute copies of free software (and charge
for this service if you wish); that you receive source code or can get
it if you want it; that you can change the software and use pieces of
it in new free programs; and that you are informed that you can do
these things.
To protect your rights, we need to make restrictions that forbid
distributors to deny you these rights or to ask you to surrender these
rights. These restrictions translate to certain responsibilities for
you if you distribute copies of the library or if you modify it.
For example, if you distribute copies of the library, whether gratis
or for a fee, you must give the recipients all the rights that we gave
you. You must make sure that they, too, receive or can get the source
code. If you link other code with the library, you must provide
complete object files to the recipients, so that they can relink them
with the library after making changes to the library and recompiling
it. And you must show them these terms so they know their rights.
We protect your rights with a two-step method: (1) we copyright the
library, and (2) we offer you this license, which gives you legal
permission to copy, distribute and/or modify the library.
To protect each distributor, we want to make it very clear that
there is no warranty for the free library. Also, if the library is
modified by someone else and passed on, the recipients should know
that what they have is not the original version, so that the original
author's reputation will not be affected by problems that might be
introduced by others.
Finally, software patents pose a constant threat to the existence of
any free program. We wish to make sure that a company cannot
51
JBoss Enterprise D ata Services 5 D ata Services クライアント開発者ガイド
effectively restrict the users of a free program by obtaining a
restrictive license from a patent holder. Therefore, we insist that
any patent license obtained for a version of the library must be
consistent with the full freedom of use specified in this license.
Most GNU software, including some libraries, is covered by the
ordinary GNU General Public License. This license, the GNU Lesser
General Public License, applies to certain designated libraries, and
is quite different from the ordinary General Public License. We use
this license for certain libraries in order to permit linking those
libraries into non-free programs.
When a program is linked with a library, whether statically or using
a shared library, the combination of the two is legally speaking a
combined work, a derivative of the original library. The ordinary
General Public License therefore permits such linking only if the
entire combination fits its criteria of freedom. The Lesser General
Public License permits more lax criteria for linking other code with
the library.
We call this license the "Lesser" General Public License because it
does Less to protect the user's freedom than the ordinary General
Public License. It also provides other free software developers Less
of an advantage over competing non-free programs. These disadvantages
are the reason we use the ordinary General Public License for many
libraries. However, the Lesser license provides advantages in certain
special circumstances.
For example, on rare occasions, there may be a special need to
encourage the widest possible use of a certain library, so that it becomes
a de-facto standard. To achieve this, non-free programs must be
allowed to use the library. A more frequent case is that a free
library does the same job as widely used non-free libraries. In this
case, there is little to gain by limiting the free library to free
software only, so we use the Lesser General Public License.
In other cases, permission to use a particular library in non-free
programs enables a greater number of people to use a large body of
free software. For example, permission to use the GNU C Library in
non-free programs enables many more people to use the whole GNU
operating system, as well as its variant, the GNU/Linux operating
system.
Although the Lesser General Public License is Less protective of the
users' freedom, it does ensure that the user of a program that is
linked with the Library has the freedom and the wherewithal to run
that program using a modified version of the Library.
The precise terms and conditions for copying, distribution and
modification follow. Pay close attention to the difference between a
"work based on the library" and a "work that uses the library". The
former contains code derived from the library, whereas the latter must
be combined with the library in order to run.
GNU LESSER GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License Agreement applies to any software library or other
program which contains a notice placed by the copyright holder or
other authorized party saying it may be distributed under the terms of
52
GNU Lesser General Public License 2.1
this Lesser General Public License (also called "this License").
Each licensee is addressed as "you".
A "library" means a collection of software functions and/or data
prepared so as to be conveniently linked with application programs
(which use some of those functions and data) to form executables.
The "Library", below, refers to any such software library or work
which has been distributed under these terms. A "work based on the
Library" means either the Library or any derivative work under
copyright law: that is to say, a work containing the Library or a
portion of it, either verbatim or with modifications and/or translated
straightforwardly into another language. (Hereinafter, translation is
included without limitation in the term "modification".)
"Source code" for a work means the preferred form of the work for
making modifications to it. For a library, complete source code means
all the source code for all modules it contains, plus any associated
interface definition files, plus the scripts used to control compilation
and installation of the library.
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running a program using the Library is not restricted, and output from
such a program is covered only if its contents constitute a work based
on the Library (independent of the use of the Library in a tool for
writing it). Whether that is true depends on what the Library does
and what the program that uses the Library does.
1. You may copy and distribute verbatim copies of the Library's
complete source code as you receive it, in any medium, provided that
you conspicuously and appropriately publish on each copy an
appropriate copyright notice and disclaimer of warranty; keep intact
all the notices that refer to this License and to the absence of any
warranty; and distribute a copy of this License along with the
Library.
You may charge a fee for the physical act of transferring a copy,
and you may at your option offer warranty protection in exchange for a
fee.
2. You may modify your copy or copies of the Library or any portion
of it, thus forming a work based on the Library, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) The modified work must itself be a software library.
b) You must cause the files modified to carry prominent notices
stating that you changed the files and the date of any change.
c) You must cause the whole of the work to be licensed at no
charge to all third parties under the terms of this License.
d) If a facility in the modified Library refers to a function or a
table of data to be supplied by an application program that uses
the facility, other than as an argument passed when the facility
is invoked, then you must make a good faith effort to ensure that,
in the event an application does not supply such function or
table, the facility still operates, and performs whatever part of
53
JBoss Enterprise D ata Services 5 D ata Services クライアント開発者ガイド
its purpose remains meaningful.
(For example, a function in a library to compute square roots has
a purpose that is entirely well-defined independent of the
application. Therefore, Subsection 2d requires that any
application-supplied function or table used by this function must
be optional: if the application does not supply it, the square
root function must still compute square roots.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Library,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Library, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote
it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Library.
In addition, mere aggregation of another work not based on the Library
with the Library (or with a work based on the Library) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may opt to apply the terms of the ordinary GNU General Public
License instead of this License to a given copy of the Library. To do
this, you must alter all the notices that refer to this License, so
that they refer to the ordinary GNU General Public License, version 2,
instead of to this License. (If a newer version than version 2 of the
ordinary GNU General Public License has appeared, then you can specify
that version instead if you wish.) Do not make any other change in
these notices.
Once this change is made in a given copy, it is irreversible for
that copy, so the ordinary GNU General Public License applies to all
subsequent copies and derivative works made from that copy.
This option is useful when you wish to copy part of the code of
the Library into a program that is not a library.
4. You may copy and distribute the Library (or a portion or
derivative of it, under Section 2) in object code or executable form
under the terms of Sections 1 and 2 above provided that you accompany
it with the complete corresponding machine-readable source code, which
must be distributed under the terms of Sections 1 and 2 above on a
medium customarily used for software interchange.
If distribution of object code is made by offering access to copy
from a designated place, then offering equivalent access to copy the
source code from the same place satisfies the requirement to
distribute the source code, even though third parties are not
compelled to copy the source along with the object code.
5. A program that contains no derivative of any portion of the
54
GNU Lesser General Public License 2.1
Library, but is designed to work with the Library by being compiled or
linked with it, is called a "work that uses the Library". Such a
work, in isolation, is not a derivative work of the Library, and
therefore falls outside the scope of this License.
However, linking a "work that uses the Library" with the Library
creates an executable that is a derivative of the Library (because it
contains portions of the Library), rather than a "work that uses the
library". The executable is therefore covered by this License.
Section 6 states terms for distribution of such executables.
When a "work that uses the Library" uses material from a header file
that is part of the Library, the object code for the work may be a
derivative work of the Library even though the source code is not.
Whether this is true is especially significant if the work can be
linked without the Library, or if the work is itself a library. The
threshold for this to be true is not precisely defined by law.
If such an object file uses only numerical parameters, data
structure layouts and accessors, and small macros and small inline
functions (ten lines or less in length), then the use of the object
file is unrestricted, regardless of whether it is legally a derivative
work. (Executables containing this object code plus portions of the
Library will still fall under Section 6.)
Otherwise, if the work is a derivative of the Library, you may
distribute the object code for the work under the terms of Section 6.
Any executables containing that work also fall under Section 6,
whether or not they are linked directly with the Library itself.
6. As an exception to the Sections above, you may also combine or
link a "work that uses the Library" with the Library to produce a
work containing portions of the Library, and distribute that work
under terms of your choice, provided that the terms permit
modification of the work for the customer's own use and reverse
engineering for debugging such modifications.
You must give prominent notice with each copy of the work that the
Library is used in it and that the Library and its use are covered by
this License. You must supply a copy of this License. If the work
during execution displays copyright notices, you must include the
copyright notice for the Library among them, as well as a reference
directing the user to the copy of this License. Also, you must do one
of these things:
a) Accompany the work with the complete corresponding
machine-readable source code for the Library including whatever
changes were used in the work (which must be distributed under
Sections 1 and 2 above); and, if the work is an executable linked
with the Library, with the complete machine-readable "work that
uses the Library", as object code and/or source code, so that the
user can modify the Library and then relink to produce a modified
executable containing the modified Library. (It is understood
that the user who changes the contents of definitions files in the
Library will not necessarily be able to recompile the application
to use the modified definitions.)
b) Use a suitable shared library mechanism for linking with the
Library. A suitable mechanism is one that (1) uses at run time a
copy of the library already present on the user's computer system,
55
JBoss Enterprise D ata Services 5 D ata Services クライアント開発者ガイド
rather than copying library functions into the executable, and (2)
will operate properly with a modified version of the library, if
the user installs one, as long as the modified version is
interface-compatible with the version that the work was made with.
c) Accompany the work with a written offer, valid for at
least three years, to give the same user the materials
specified in Subsection 6a, above, for a charge no more
than the cost of performing this distribution.
d) If distribution of the work is made by offering access to copy
from a designated place, offer equivalent access to copy the above
specified materials from the same place.
e) Verify that the user has already received a copy of these
materials or that you have already sent this user a copy.
For an executable, the required form of the "work that uses the
Library" must include any data and utility programs needed for
reproducing the executable from it. However, as a special exception,
the materials to be distributed need not include anything that is
normally distributed (in either source or binary form) with the major
components (compiler, kernel, and so on) of the operating system on
which the executable runs, unless that component itself accompanies
the executable.
It may happen that this requirement contradicts the license
restrictions of other proprietary libraries that do not normally
accompany the operating system. Such a contradiction means you cannot
use both them and the Library together in an executable that you
distribute.
7. You may place library facilities that are a work based on the
Library side-by-side in a single library together with other library
facilities not covered by this License, and distribute such a combined
library, provided that the separate distribution of the work based on
the Library and of the other library facilities is otherwise
permitted, and provided that you do these two things:
a) Accompany the combined library with a copy of the same work
based on the Library, uncombined with any other library
facilities. This must be distributed under the terms of the
Sections above.
b) Give prominent notice with the combined library of the fact
that part of it is a work based on the Library, and explaining
where to find the accompanying uncombined form of the same work.
8. You may not copy, modify, sublicense, link with, or distribute
the Library except as expressly provided under this License. Any
attempt otherwise to copy, modify, sublicense, link with, or
distribute the Library is void, and will automatically terminate your
rights under this License. However, parties who have received copies,
or rights, from you under this License will not have their licenses
terminated so long as such parties remain in full compliance.
9. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Library or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
56
GNU Lesser General Public License 2.1
modifying or distributing the Library (or any work based on the
Library), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Library or works based on it.
10. Each time you redistribute the Library (or any work based on the
Library), the recipient automatically receives a license from the
original licensor to copy, distribute, link with or modify the Library
subject to these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties with
this License.
11. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Library at all. For example, if a patent
license would not permit royalty-free redistribution of the Library by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Library.
If any portion of this section is held invalid or unenforceable under any
particular circumstance, the balance of the section is intended to apply,
and the section as a whole is intended to apply in other circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
12. If the distribution and/or use of the Library is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Library under this License may add
an explicit geographical distribution limitation excluding those countries,
so that distribution is permitted only in or among countries not thus
excluded. In such case, this License incorporates the limitation as if
written in the body of this License.
13. The Free Software Foundation may publish revised and/or new
versions of the Lesser General Public License from time to time.
Such new versions will be similar in spirit to the present version,
but may differ in detail to address new problems or concerns.
Each version is given a distinguishing version number. If the Library
specifies a version number of this License which applies to it and
"any later version", you have the option of following the terms and
57
JBoss Enterprise D ata Services 5 D ata Services クライアント開発者ガイド
conditions either of that version or of any later version published by
the Free Software Foundation. If the Library does not specify a
license version number, you may choose any version ever published by
the Free Software Foundation.
14. If you wish to incorporate parts of the Library into other free
programs whose distribution conditions are incompatible with these,
write to the author to ask for permission. For software which is
copyrighted by the Free Software Foundation, write to the Free
Software Foundation; we sometimes make exceptions for this. Our
decision will be guided by the two goals of preserving the free status
of all derivatives of our free software and of promoting the sharing
and reuse of software generally.
NO WARRANTY
15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Libraries
If you develop a new library, and you want it to be of the greatest
possible use to the public, we recommend making it free software that
everyone can redistribute and change. You can do so by permitting
redistribution under these terms (or, alternatively, under the terms of the
ordinary General Public License).
To apply these terms, attach the following notices to the library. It is
safest to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least the
"copyright" line and a pointer to where the full notice is found.
<one line to give the library's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
58
GNU Lesser General Public License 2.1
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
USA
Also add information on how to contact you by electronic and paper mail.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the library, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the
library `Frob' (a library for tweaking knobs) written by James Random Hacker.
<signature of Ty Coon>, 1 April 1990
Ty Coon, President of Vice
That's all there is to it!
59
JBoss Enterprise D ata Services 5 D ata Services クライアント開発者ガイド
改訂履歴
改訂 5.2.0-2.4 00
2013-10-31
Landmann Rüdiger [FAMILY
Given]
2012-07-18
T owns Anthony [FAMILY
Given]
Rebuild with publican 4.0.0
改訂 5.2.0-2
Rebuild for Publican 3.0
改訂 5.2.0-0
Mon Jun 27 2011
JBoss Enterprise SOA Platform 5.2 向けに更新
Le Sage David [FAMILY Given]
改訂 5.1.0-1
Mon May 23 2011
ODBC ドライバーの説明を更新
Le Sage David [FAMILY Given]
改訂 5.1.0-0
Fri Feb 18 2011
T eiid クライアント開発者ガイドより作成
Mison Darrin [FAMILY Given]
60