JBoss Enterprise Data Services 5 Data Services クライアント開発者
by user
Comments
Transcript
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