ナビゲーションをスキップ

WebLogic JDBC プログラマーズ ガイド

  前 次 前/次ボタンと目次ボタンとの区切り線 目次  

WebLogic ラッパー ドライバの使い方

新しいアプリケーションでは、DataSource オブジェクトを使ってデータベース接続を取得することをお勧めします。DataSource オブジェクトを JNDI ツリーと組み合わせると、データベースへの接続を提供する接続プールにアクセスできます。JDBC 1.x API を使用した既存のアプリケーション、またはレガシー アプリケーションの場合は、WebLogic ラッパー ドライバを使用して、データベース接続を取得できます。

次の節では、WebLogic Server での WebLogic ラッパー ドライバの使い方を説明します。

 


WebLogic RMI ドライバの使い方

RMI ドライバ クライアントは、DataSource オブジェクトをルックアップすることで、DBMS への接続を確立します。このルックアップは、Java Naming and Directory Interface (JNDI) ルックアップを使うか、またはクライアントに代わって JNDI ルックアップを実行する WebLogic Server を直接呼び出すことにより実行されます。

RMI ドライバは、WebLogic t3 ドライバ (このリリースでは非推奨) と Pool ドライバの機能に取って代わるもので、独自の t3 プロトコルではなく Java 標準の Remote Method Invocation (RMI) を使用して WebLogic Server に接続します。

RMI 実装の詳細はドライバによって自動的に処理されるため、WebLogic JDBC/RMI ドライバを使用するために RMI の知識は必要ではありません。

WebLogic RMI ドライバを使用するための WebLogic Server の設定

RMI ドライバには、DataSource オブジェクトを通してだけアクセスできます。DataSource オブジェクトは、Administration Console で作成します。アプリケーションで RMI ドライバを使用するには、まず WebLogic Server コンフィグレーションに DataSource オブジェクトを作成します。DataSource の作成手順については、「Administration Console オンライン ヘルプ」を参照してください。

RMI ドライバを使用するサンプル クライアント コード

RMI ドライバを使用して、WebLogic Server 接続プールからデータベース接続を取得し、使用する方法を以下のコード サンプルで示します。

必要なパッケージをインポートする

RMI ドライバを使用して、データベース接続を取得/使用する前に、次のパッケージをインポートします。

javax.sql.DataSource 
java.sql.*
java.util.*
javax.naming.*

データベース接続を取得する

WebLogic JDBC/RMI クライアントは、Administration Console で定義された DataSource から DBMS への接続を取得します。クライアントは、以下の 2 通りの方法で DataSource オブジェクトを取得できます。

JNDI を使用して接続を取得する

JNDI を使用して WebLogic RMI ドライバにアクセスするには、DataSource オブジェクトの名前をルックアップすることで、JNDI ツリーから Context オブジェクトを取得します。たとえば、Administration Console で定義された「myDataSource」という DataSource にアクセスするには、以下のようにします。

Context ctx = null;
Hashtable ht = new Hashtable();
ht.put(Context.INITIAL_CONTEXT_FACTORY,
"weblogic.jndi.WLInitialContextFactory");
ht.put(Context.PROVIDER_URL,
"t3://hostname:port");
  try {
ctx = new InitialContext(ht);
javax.sql.DataSource ds
= (javax.sql.DataSource) ctx.lookup ("myDataSource");
java.sql.Connection conn = ds.getConnection();
   // これで conn オブジェクトを使用して
// Statement オブジェクトを作成して
// SQL 文を実行し、結果セットを処理できる
Statement stmt = conn.createStatement();
stmt.execute("select * from someTable");
ResultSet rs = stmt.getResultSet();
   // 完了したら、文オブジェクトと
// 接続オブジェクトを忘れずに閉じること
}
catch (Exception e) {
// エラー発生
log message;
}
} finally {
try {
ctx.close();
} catch (Exception e) {
log message; }
try {
if (rs != null) rs.close();
} catch (Exception e) {
log message; }
try {
if (stmt != null) stmt.close();
} catch (Exception e) {
log message; }
try {
if (conn != null) conn.close();
} catch (Exception e) {
log message; }
}

(hostname は WebLogic Server が稼働するマシンのホスト名、port は WebLogic Server が接続リクエストをリスンするポートの番号です。)

この例では、Hashtable オブジェクトを使って、JNDI ルックアップに必要なパラメータを渡しています。JNDI ルックアップを実行する方法は他にもあります。詳細については、『WebLogic JNDI プログラマーズ ガイド』を参照してください。

ルックアップの失敗を捕捉するために JNDI ルックアップが try/catch ブロックで包まれている点に注意してください。また、コンテキストが finally ブロックの中でクローズされている点にも注意してください。

WebLogic RMI ドライバだけを使用して接続を取得する

DataSource オブジェクトをルックアップしてデータベース接続を取得する代わりに、Driver.connect() メソッドを使用して WebLogic Server にアクセスできます。この場合は、JDBC/RMI ドライバが JNDI ルックアップを実行します。WebLogic Server にアクセスするには、WebLogic Server の URL と、DataSource オブジェクトの名前を定義するパラメータを Driver.connect() メソッドに渡します。たとえば、Administration Console で定義された「myDataSource」という DataSource にアクセスするには、以下のようにします。

java.sql.Driver myDriver = (java.sql.Driver)
Class.forName("weblogic.jdbc.rmi.Driver").newInstance();
String url =	"jdbc:weblogic:rmi";
java.util.Properties props = new java.util.Properties();
props.put("weblogic.server.url", "t3://hostname:port");
props.put("weblogic.jdbc.datasource", "myDataSource");
java.sql.Connection conn = myDriver.connect(url, props);

(hostname は WebLogic Server が稼働するマシンのホスト名、port は WebLogic Server が接続リクエストをリスンするポートの番号です。)

また、JNDI ユーザ情報を設定するために使用する以下のプロパティも定義できます。

WebLogic RMI ドライバによる行キャッシング

行キャッシングは、アプリケーションのパフォーマンスを向上するための WebLogic Server JDBC 機能です。通常、クライアントが ResultSet.next() を呼び出すと、WebLogic は DBMS から単一行を取得し、これをクライアント JVM に転送します。行キャッシングが有効になっていると、ResultSet.next() を 1 回呼び出すだけで複数の DBMS 行が取得され、これらがクライアント メモリにキャッシュされます。行キャッシングを行うと、データ取得のための通信の回数が減ることでパフォーマンスが向上します。

注意 : クライアントと WebLogic Server が同じ JVM にある場合、行キャッシングは実行されません。

行キャッシングは、データ ソース属性 [行のプリフェッチを有効化] で有効にしたり無効にしたりできます。また、ResultSet.next() の呼び出しごとに取得される行の数は、データ ソース属性 [プリフェッチする行サイズ] で設定します。データ ソース属性は、Administration Console で設定します。行キャッシングを有効にして、DataSource または TxDataSource に行のプリフェッチ サイズ属性を設定するには、次の手順に従います。

  1. Administration Console の左ペインで、[サービス|JDBC|データ ソース (またはトランザクション データ ソース)] を選択し、行キャッシングを有効にする DataSource、または TxDataSource を選択します。
  2. Administration Console の右ペインで、[コンフィグレーション] タブを選択 (まだ選択されていない場合) します。
  3. [行のプリフェッチを有効化] チェック ボックスを選択します。
  4. [プリフェッチする行サイズ] で、ResultSet.next() の呼び出しごとにキャッシングする行の数を指定します。

WebLogic RMI ドライバによる行キャッシングの重要な制限事項

RMI ドライバを使用して行キャッシングを実装する場合は、以下の制限事項があることに注意してください。

 


WebLogic JTS ドライバの使い方

JTS (Java Transaction Services) ドライバは、WebLogic Server 内で実行中のアプリケーションから接続プールやグローバル トランザクションへのアクセスを提供する、サーバ サイド Java JDBC (Java Database Connectivity) ドライバです。データベースへの接続は接続プールから行われ、アプリケーションに代わってデータベース管理システム (DBMS) に接続するために WebLogic Server 内で実行される 2 層 JDBC ドライバを使用します。アプリケーションは、JTS ドライバを使用して接続プールからの接続にアクセスします。

WebLogic Server はまた、XA 非対応の JDBC ドライバを使用する接続プールからの接続がグローバル トランザクションに参加する場合に、JTS ドライバを内部で使用します。この動作により、XA 非対応のリソースが XA をエミュレートし、2 フェーズ コミット トランザクションに参加できるようになります。Administration Console オンライン ヘルプの「分散トランザクション用非 XA JDBC ドライバのコンフィグレーション」を参照してください。

トランザクションが開始されると、同じ接続プールから接続を取得する実行スレッドのすべてのデータベース操作は、そのプールの同じ接続を共有することになっています。これらの操作は、エンタープライズ JavaBean (EJB) や Java Messaging Service (JMS) のようなサービスを通じて、または標準 JDBC 呼び出しを使用して直接 SQL を送信することにより行うことができます。デフォルトでは、これらすべての操作は同じ接続を共有し、同じトランザクションに参加します。トランザクションがコミットまたはロールバックされると、接続はプールに戻されます。

Java クライアントは JTS ドライバ自身を登録しない場合もありますが、Remote Method Invocation (RMI) を介してトランザクションに参加することができます。あるクライアントの 1 つのスレッド内でトランザクションを開始し、そのクライアントにリモート RMI オブジェクトを呼び出させることができます。リモート オブジェクトによって実行されるデータベース操作は、そのクライアント上で開始されたトランザクションの一部分になります。そのリモート オブジェクトがそれを呼び出したクライアントに戻されたら、そのトランザクションをコミットまたはロールバックできます。リモート オブジェクトによって実行されるデータベース操作は、すべて同一の接続プールを使用しなければならず、同一のトランザクションの一部にならなければなりません。

JTS ドライバおよびアプリケーションがグローバル トランザクションに参加するためには、アプリケーションはグローバル トランザクション内で conn = myDriver.connect("jdbc:weblogic:jts", props); を呼び出す必要があります。トランザクションが完了する (コミットまたはロールバックされる) と、WebLogic Server は接続を接続プールに返します。別のグローバル トランザクションで接続を使用したい場合、アプリケーションは新しいグローバル トランザクション内で再度 conn = myDriver.connect("jdbc:weblogic:jts", props); を呼び出す必要があります。

JTS ドライバを使用するサンプル クライアント コード

JTS ドライバを使用するには、まず Administration Console を使用して WebLogic Server に接続プールを作成しなければなりません。詳細については、「接続プールのコンフィグレーションと使い方」を参照してください。

次に、サーバサイド アプリケーションから JTS トランザクションを作成して使用する方法について説明します。ここでは、「myConnectionPool」という接続プールを使用します。

  1. 以下のクラスをインポートします。
  2. import javax.transaction.UserTransaction;
    import java.sql.*;
    import javax.naming.*;
    import java.util.*;
    import weblogic.jndi.*;
  3. UserTransaction クラスを使用してトランザクションを確立します。JNDI ツリー上でこのクラスをルックアップできます。UserTransaction クラスは、現在の実行スレッド上のトランザクションを制御します。このクラスはトランザクション自身を表さないことに注意してください。このトランザクションの実際のコンテキストは、現在の実行スレッドに関連付けられています。
  4. Context ctx = null;
    Hashtable env = new Hashtable();

    env.put(Context.INITIAL_CONTEXT_FACTORY,
    "weblogic.jndi.WLInitialContextFactory");

    // WebLogic Server のパラメータ
    // 環境に合わせて適切なホスト名、ポート番号、
    // ユーザ名、およびパスワードに置き換える
    env.put(Context.PROVIDER_URL, "t3://localhost:7001");
    env.put(Context.SECURITY_PRINCIPAL, "Fred");
    env.put(Context.SECURITY_CREDENTIALS, "secret");

    ctx = new InitialContext(env);

    UserTransaction tx = (UserTransaction)
    ctx.lookup("javax.transaction.UserTransaction");
  5. 現在のスレッドのトランザクションを開始します。
  6. // 接続を取得する前にグローバル トランザクションを開始する
    tx.begin();
  7. JTS ドライバをロードします。
  8. Driver myDriver = (Driver)
    Class.forName("weblogic.jdbc.jts.Driver").newInstance();
  9. 接続プールから接続を取得します。
  10. Properties props = new Properties();
    props.put("connectionPoolID", "myConnectionPool");

    conn = myDriver.connect("jdbc:weblogic:jts", props);
  11. データベース操作を実行します。これらの操作は、EJB、JMS、および標準 JDBC 文など、データベース接続を使用するどのサービスでも実行できます。これらの操作では、JTS ドライバを使用して、手順 3 で開始したトランザクションと同じ接続プールにアクセスすることにより、このトランザクションに参加する必要があります。
  12. JTS ドライバを使用した追加データベース操作が、手順 5 で指定した接続プールとは違う接続プールを使用する場合、そのトランザクションをコミットまたはロールバックしようとすると例外が発生します。

  13. 接続オブジェクトを閉じます。接続を閉じても、それでトランザクションがコミットされるわけでも、その接続がプールに戻されるわけでもないことに注意してください。
  14. conn.close();
  15. そのトランザクションをコミットまたはロールバックすることにより、トランザクションを完了します。JTS ドライバは、現在のスレッドに存在するすべての接続オブジェクトのすべてのトランザクションをコミットし、接続をプールに返します。
  16. tx.commit();

    // または

    tx.rollback();

 


WebLogic Pool ドライバの使い方

WebLogic Pool ドライバを使用すると、HTTP サーブレットや EJB などのサーバサイド アプリケーションから接続プールを利用できます。Pool ドライバの使い方については、『WebLogic HTTP サーブレット プログラマーズ ガイド』の「プログラミング タスク」の「データベースへのアクセス」を参照してください。

 

フッタのナビゲーションのスキップ  ページの先頭 前 次