ORACLE JAPAN Server Release 6.1

 

  |  

  WebLogic Server ホーム   |     JDBC プログラミング ガイド   |   前へ   |   次へ   |   目次   |   索引   |   PDF 版

WebLogic 多層 JDBC ドライバの使い方

 

以下の節では、WebLogic Server で多層 JDBC ドライバを使用する方法について説明します。

 


WebLogic 多層ドライバの概要

多層ドライバには次のようにアクセスできます。

 


WebLogic RMI ドライバの使い方

WebLogic RMI ドライバは WebLogic Server 内で動作する多層 Type 3 JDBC ドライバで、以下のドライバと一緒に使用されます。

BEA WebLogic RMI ドライバは、WebLogic Server と連携して動作します。DBMS 接続は、WebLogic Server、DataSource オブジェクト、および WebLogic Server 内で動作する接続プールを使って行われます。

DataSource オブジェクトは、RMI ドライバ接続へのアクセスを提供します。接続パラメータは、Administration Console で設定します。次に、DBMS への 2 層 JDBC によるアクセス用に、この接続プールのコンフィグレーションを行います。

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 RMI ドライバを使用するための WebLogic Server の設定

RMI ドライバには、DataSource オブジェクトを通してだけアクセスできます。DataSource オブジェクトは、Administration Console で作成します。

WebLogic Server を使用するためのクライアントの設定

以下のコード例では、接続を取得して使用するための方法を説明します。

以下のパッケージをインポートする

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();

// 完了したら、文オブジェクトと
// 接続オブジェクトを忘れずにクローズすること

stmt.close();
conn.close();
}
catch (NamingException e) {
// エラー発生
}
finally {
try {ctx.close();}
catch (Exception e) {
// エラー発生
}
}

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

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

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

WebLogic RMI ドライバだけを使用した接続の取得

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() の呼び出しごとに取得される行の数は、データ ソース属性 [Row Prefetch サイズ] で設定します。データ ソース属性は、Administration Console で設定します。

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

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

 


WebLogic JTS ドライバの使い方

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

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

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

XA 非対応の JDBC ドライバを備えたトランザクション データ ソースに対して [2 フェーズ コミットを有効化] (enableTwoPhaseCommit = true) を選択すると、WebLogic Server では内部で JTS ドライバを使用して、XA 非対応のリソースが 2 フェーズ コミット (2PC) をエミュレートしてグローバル トランザクションに参加できるようにします。XA 非対応のリソースをグローバル トランザクションに参加させることができる仕組みと JTS ドライバの使い方の詳細については、『WebLogic Server 管理者ガイド』 の「分散トランザクション用の XA 非対応 JDBC ドライバのコンフィグレーション」を参照してください。

JTS ドライバを使用した実装

JTS ドライバを使用するには、まず Administration Console を使用して WebLogic Server に接続プールを作成しなければなりません。詳細については、『管理者ガイド』の「JDBC 接続の管理」の「接続プール」を参照してください。

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

  1. 以下のクラスをインポートします。

    import javax.transaction.UserTransaction;
    import java.sql.*;
    import javax.naming.*;
    import java.util.*;
    import weblogic.jndi.*;

  2. UserTransaction クラスを使用してトランザクションを確立します。このクラスは、Java Naming and Directory Service (JNDI)でルックアップされます。UserTransaction クラスは、現在の実行スレッド上のトランザクションを制御します。このクラスはトランザクション自身を表さないことに注意してください。このトランザクションの実際のコンテキストは、現在の実行スレッドに関連付けられています。

    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");

  3. 現在のスレッドのトランザクションを開始します。

    tx.begin();

  4. JTS ドライバをロードします。

    Driver myDriver = (Driver)
    Class.forName("weblogic.jdbc.jts.Driver").newInstance();

  5. 接続プールから接続を取得します。

    Properties props = new Properties();
    props.put("connectionPoolID", "myConnectionPool");

    conn = myDriver.connect("jdbc:weblogic:jts", props);

  6. データベース操作を実行します。これらの操作は、データベース接続を使用する任意のサービスによって行うことができます。こうしたサービスには、EJB、JMS、標準 JDBC 文が含まれます。これらの操作が手順 3 で開始したトランザクションと同じ接続プールにアクセスするために JTS ドライバを使用する場合、それらはそのトランザクションに参加することになります。

    JTS ドライバを使用した追加データベース操作が、手順 5 で指定した接続プールとは違う接続プールを使用する場合、そのトランザクションをコミットまたはロールバックしようとすると例外が発生します。

  7. 接続オブジェクトをクローズします。接続をクローズしても、それでトランザクションがコミットされるわけでも、その接続がプールに戻されるわけでもないことに注意してください。

    conn.close();

  8. 他のデータベース操作を実行します。これらの操作が同じ接続プールへの接続によって行われるのであれば、それらの操作はプールから同じ接続を使用し、このスレッド内の他のすべての操作と同じ UserTransaction の一部となります。

  9. そのトランザクションをコミットまたはロールバックすることにより、トランザクションを完了します。JTS ドライバは、現在のスレッドに存在するすべての接続オブジェクトのすべてのトランザクションをコミットし、接続をプールに返します。

    tx.commit();

    // または

    tx.rollback();

 


WebLogic Pool ドライバの使い方

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

 

back to top previous page next page