| Oracle® Fusion Middleware Oracle WebLogic Server JDBCのプログラミング 11g リリース1 (10.3.6) B60995-05 |
|
![]() 前 |
![]() 次 |
この章では、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モジュールからのデータベース接続の取得に関する項を参照してください。