JDBC 接続プールサービスの設定

JDBC ドライバーを使用してデータソースオブジェクトを作成する JDBC Connections Pool サービスの設定を追加します。アプリケーションコードではこのサービスを使用してデータソースオブジェクトを取得し、データベースに接続します。

JDBC 接続プール(com.day.commons.datasource.jdbcpool.JdbcPoolService)はファクトリサービスです。異なるプロパティ(読み取り専用アクセスと読み取り/書き込みアクセスなど)を使用する接続が必要な場合は、複数の設定を作成します。

CQ で作業する場合は、いくつかの方法でこのようなサービスの設定を管理できます。詳しくは、OSGi の設定を参照してください。

プールに入れられた接続サービスを設定するには、次のプロパティを使用できます。プロパティ名は、web コンソールに表示されるとおりに表示されます。sling:OsgiConfig ノードに対応する名前を括弧内に示しています。エイリアスが mydb である HSQLDB サーバーおよびデータベースの値の例を示しています。

  • JDBC ドライバークラス(jdbc.driver.class):java.sql.Driver インターフェイスを実装するために使用する Java™ クラス。例:org.hsqldb.jdbc.JDBCDriver。データタイプは String です。

  • JDBC 接続 URI(jdbc.connection.uri):接続の作成に使用するデータベースの URL。例:jdbc:hsqldb:hsql//10.36.79.223:9001/mydb。URL の形式は、java.sql.DriverManager クラスの getConnection メソッドで使用する場合に有効である必要があります。データタイプは String です。

  • ユーザー名(jdbc.username):データベースサーバーでの認証に使用するユーザー名。データタイプは String です。

  • Password(jdbc.password):ユーザーの認証に使用するパスワード。データタイプは String です。

  • 検証クエリ(jdbc.validation.query):接続が成功したことを検証するために使用する SQL 文(例:select 1 from INFORMATION_SCHEMA.SYSTEM_USERS)。データタイプは String です。

  • デフォルトで読み取り専用(default.readonly):この接続を読み取り専用アクセスにする場合に、このオプションを選択します。データタイプは Boolean です。

  • デフォルトで自動コミット(default.autocommit):データベースに送信される SQL コマンドごとに個別のトランザクションを作成し、各トランザクションを自動的にコミットする場合は、このオプションを選択します。コード内でトランザクションを明示的にコミットする場合は、このオプションを選択しないでください。データタイプは Boolean です。

  • プールサイズ(pool.size):データベースに対して使用可能にする同時接続の数です。データタイプは Long です。

  • プール待機時間(pool.max.wait.msec):接続リクエストがタイムアウトするまでの時間です。データタイプは Long です。

  • データソース名(datasource.name):このデータソースの名前です。データタイプは String です。

  • 追加のサービスプロパティ(datasource.svc.properties):接続 URL に追加する名前と値のペアのセットです。データタイプは String[] です。

JDBC 接続プールサービスはファクトリです。そのため、sling:OsgiConfig ノードを使用して接続サービスを設定する場合、ノード名には、ファクトリサービス PID に -alias が続く名前を含める必要があります。使用するエイリアスは、その PID のすべての設定ノードで一意である必要があります。ノード名は、例えば com.day.commons.datasource.jdbcpool.JdbcPoolService-myhsqldbpool のような形式になります。

chlimage_1-7

データベースへの接続

Java™ コードでは、DataSourcePool サービスを使用して、作成した設定に対応する javax.sql.DataSource オブジェクトを取得する必要があります。DataSourcePool サービスには getDataSource メソッドがあり、このメソッドは指定したデータソース名の DataSource オブジェクトを返します。メソッド引数として、JDBC 接続プール設定で指定した データソース名(または datasource.name)プロパティの値を使用します。

次の JSP コードの例では、hsqldbds データソースのインスタンスを取得し、単純な SQL クエリを実行し、返される結果の数を表示します。

データベースルックアップを実行する JSP

<%@include file="/libs/foundation/global.jsp"%><%
%><%@page session="false"%><%
%><%@ page import="com.day.commons.datasource.poolservice.DataSourcePool" %><%
%><%@ page import="javax.sql.DataSource" %><%
%><%@ page import="java.sql.Connection" %><%
%><%@ page import="java.sql.SQLException" %><%
%><%@ page import="java.sql.Statement" %><%
%><%@ page import="java.sql.ResultSet"%><%
%><html>
<cq:include script="head.jsp"/>
<body>
<%DataSourcePool dspService = sling.getService(DataSourcePool.class);
  try {
     DataSource ds = (DataSource) dspService.getDataSource("hsqldbds");
     if(ds != null) {
         %><p>Obtained the datasource!</p><%
         %><%final Connection connection = ds.getConnection();
          final Statement statement = connection.createStatement();
          final ResultSet resultSet = statement.executeQuery("SELECT * from INFORMATION_SCHEMA.SYSTEM_USERS");
          int r=0;
          while(resultSet.next()){
             r=r+1;
          }
          resultSet.close();
          %><p>Number of results: <%=r%></p><%
      }
   }catch (Exception e) {
        %><p>error! <%=e.getMessage()%></p><%
    }
%></body>
</html>
メモ
データソースが見つからないため、getDataSource メソッドが例外を発生する場合は、Connections Pool サービスの設定が正しいことを確認してください。プロパティ名、値およびデータタイプを確認します。

Experience Manager