Oracle® Fusion Middleware Oracle WebLogic Server JDBCのプログラミング 12c リリース1 (12.1.1) B65895-02 |
|
前 |
次 |
この章では、WebLogic Server管理コンソールを使用して、JDBCデータ・ソース、マルチ・データ・ソースなどのWebLogic Serverの機能を有効化したり、構成やモニターを行ったりする方法を説明します。また、JMX APIとWebLogic Scripting Tool (WLST)を使用して、同じタスクをプログラム的に実行することもできます。構成後のJDBC接続コンポーネントは、アプリケーション内で使用できます。
以下の節では、アプリケーションでのJDBC接続の使用方法について説明します。
JDBCデータ・ソースおよびマルチ・データ・ソースの構成の詳細は、『Oracle WebLogic Server JDBCデータ・ソースの構成と管理』を参照してください。
以下の節では、データ・ソース、マルチ・データ・ソースのそれぞれについて、DataSourceオブジェクトからデータベース接続を取得するように要求する方法を詳しく説明します。
アプリケーションでDataSourceオブジェクトを使用するには、以下のクラスをクライアント・コードにインポートします。
import java.sql.*; import java.util.*; import javax.naming.*;
JDBCクライアント用に接続を取得するには、以下のコードに示すように、Java Naming and Directory Interface (JNDI)ルックアップを使用してDataSourceオブジェクトを見つけます。
注意: クライアント側アプリケーションでJDBC接続を使用する際、サーバーとクライアントの両方の |
Context ctx = null; Hashtable ht = new Hashtable(); ht.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory"); ht.put(Context.PROVIDER_URL, "t3://hostname:port"); Connection conn = null; Statement stmt = null; ResultSet rs = null; try { ctx = new InitialContext(ht); javax.sql.DataSource ds = (javax.sql.DataSource) ctx.lookup ("myDataSource"); conn = ds.getConnection(); // You can now use the conn object to create // Statements and retrieve result sets: stmt = conn.createStatement(); stmt.execute("select * from someTable"); rs = stmt.getResultSet(); ... //Close JDBC objects as soon as possible stmt.close(); stmt=null; conn.close(); conn=null; } catch (Exception e) { // a failure occurred 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; } }
(使用するWebLogic Serverに合わせて適切なhostnameとport番号に置き換えます)。
注意: 前述のコードでは、JNDIコンテキストを取得するために、使用可能な数件のプロシージャの1つが使用されています。JNDIの詳細は、『Oracle WebLogic Server JNDIのプログラミング』を参照してください。 |
weblogic.jdbc.extensionsパッケージには、アプリケーション・リクエストの失敗時にスローされ得る以下の例外が含まれています。各例外は、java.sql.SQLException
の拡張です。
ConnectionDeadSQLException
- 予約された接続に対する接続テストに失敗したことが原因で、接続を取得するアプリケーション・リクエストが失敗すると生成されます。通常は、データベース・サーバーが利用できない場合に生じます。
ConnectionUnavailableSQLException
- 割り当てられるべきプール内に現在利用できる接続がなかったことが原因で、接続を取得するアプリケーション・リクエストが失敗すると生成されます。これは一時的なエラーであって、プール内の接続がすべて使用中の場合に生成されます。また、接続がテスト中であるために使用できない場合にもスローされることがあります。
PoolDisabledSQLException
- JDBCデータ・ソースが管理者によって無効にされたことが原因で、接続を取得するアプリケーション・リクエストが失敗すると生成されます。
PoolLimitSQLException
- HighestNumWaiters
、ConnectionReserveTimeoutSeconds
などのデータ・ソースについて構成されたしきい値が原因で、接続を取得するアプリケーション・リクエストが失敗すると生成されます。
PoolPermissionsSQLException
- 接続を取得するアプリケーション・リクエストで、(セキュリティ)認証または認可チェックが失敗すると生成されます。
注意: 特定のOracle JDBC拡張機能または、他のドライバで使用可能な標準以外の方法により、接続の動作が永続的に変更され、プールされた接続の将来のユーザーがそれを継承することがあります。WebLogic Serverは、可能な場合には、このような種類の呼出しから接続を保護しようとします。 |
データ・ソース内のプールされた接続を使用している場合に、DBMS固有のSQLコードが実行されることがあります。これはデータベース接続のプロパティを変更するものであり、WebLogic ServerおよびJDBCドライバからは認識されません。接続がデータ・ソースに返されたときに、その接続の特性の設定が有効な状態に戻らないことがあります。たとえばSybase DBMSで、「set rowcount 3 select * from y」
などの文を使用すると、接続に対する後続の問合せでは最大で3行までしか返されません。接続がデータ・ソースに返されてから再利用された場合、選択対象の表に500の行があっても、接続の次のユーザーには引続き3行のみが返されます。
ほとんどの場合、同じ結果をもたらすことができる標準のJDBCコードが存在します。この例では、set rowcount
の代わりにsetMaxRows()
を使用できます。DBMS固有のSQLコードの代わりに標準のJDBCコードを使用することをお薦めします。標準のJDBC呼出しを使用して接続を変更すると、接続がデータ・ソースに返された時点で接続が標準の状態に戻ります。
接続を変更するDBMS固有のSQLコードを使用する場合は、接続をデータ・ソースに返す前に、その設定を受け入れ可能な状態に戻す必要があります。
アプリケーション・スコープのデータ・ソースから接続を取得するには、『Oracle WebLogic Server JDBCデータ・ベースの構成および管理』のパッケージ化されたJDBCモジュールからのデータベース接続の取得に関する項を参照してください。