質問

マイ CQ5 アプリケーションは外部 RDBMS に接続する必要があります。JDBC データソースにはどのように設定して接続しますか?

回答、解決策

例えば、H2 データベースエンジンに接続するための JDBC データソースを作成します

データベース用の JDBC ドライバーをインストールします。

  • データベースベンダーが JDBC ドライバーの jar を OSGi バンドルとして提供している場合は、Felix コンソールに直接デプロイできます。
  • ドライバーで OSGi バンドルを使用できない場合は、例えば CQSE の下の crx-quickstart/server/lib/container であるアプリケーションサーバーの共有クラスパスに jar を追加し、拡張バンドルを作成することができます。
    • マニフェストファイルを作成します。この例については、h2ext.mf と呼んでいます。次のコードリストを参照してください。
      JAR のマニフェストファイルの最後に空白行が必要であることに注意してください。
    • 次のコマンドを使用して、上記のマニフェストを使用して jar ファイルを作成します。
      jar -cfm org.h2.jdbc.driver.extension-1.1.119.jar h2ext.mf 
    • Felix Console を使用して org.h2.jdbc.driver.extension-1.1.119.jar をインストールします。これを実行するには、システムバンドルの書き出しリストに org.h2 パッケージを追加する必要があります。
    • 拡張バンドルについての詳細は、OSGi Service Platform Core の「3.15、拡張バンドル」セクションを参照してください。
  • もう1つのオプションは、別の OSGi バンドルに jdbc ドライバを埋め込むことです。CRXDE を使用して OSGi バンドルを作成する場合は、ドライバー jar をバンドル lib ディレクトリに入れることができます。CRXDE が自動的に埋め込みます。
  • もう 1 つのオプションは、アプリケーションサーバーの共有クラスパスに jar を追加し、sling.propeties の org.osgi.framework.bootdelegation プロパティを使用して、ドライバークラスをロードする方法です。詳しくは、ここをクリックしてください。例えば、H2 データベースを使用している場合は、h2-1.1.119.jar を crx-quickstart/server/lib/container にコピーします。次に、行「sling.bootdelegation.class.org.h2.Driver=org.h2」を sling.properties に追加します。

h2ext.mf

Bundle-ManifestVersion: 2
Bundle-SymbolicName: org.h2.jdbc.driver.extension
Bundle-Version: 1.1.119
Fragment-Host: system.bundle; extension:=framework
Bundle-Name: H2 JDBC Driver Extension
Bundle-Description: Bundle exporting H2 JDBC Driver
Export-Package: org.h2

 

JDBC 接続プールの設定

Felix コンソール(http://localhost:4502/system/console/configMgr)の Configuration Manager に移動します。JDBC 接続プール設定ファクトリを使用して、新しい接続プールを作成します。例えば、次の設定があるとします。

JDBC driver class: org.h2.Driver
JDBC connection URI: jdbc:h2:~/test
Usename: sa
Password:
Validation query:
Pool size: 10
Pool wait (msec): 100
Datasource name: h2DataSource

データソースのインスタンスを取得します。

設定が完了すると、データソースプールサービス(com.day.commons.datasource.poolservice.DataSourcePool)の getDataSource(String datasourceName)メソッドを呼び出し、データソース名を渡すことにより、データソースインスタンスを所得します。

OSGi コンポーネントの例

この例では、データソースのインスタンスを取得するために使用できる単純な OSGi サービスを作成します。この例は、機能を追加することなく、基本的に com.day.commons.datasource.poolservice.DataSourcePool と同じ API を再作成しているため、実用的ではありません。しかし、データソースプールを独自のコードで使用する方法を示します。

最初にサービス用のインターフェイスを作成します。

package com.day.test.datasource;
import javax.sql.DataSource;

public interface DatasourceUtil {
    public DataSource getDataSource(String dataSourceName);
}

続いて実装します。見ての通り、DataSourceNotFoundException を非表示にすることを除いて、値を追加することはできません。

package com.day.test.datasource;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.sql.DataSource;

import com.day.commons.datasource.poolservice.DataSourceNotFoundException;
import com.day.commons.datasource.poolservice.DataSourcePool;

/**
 *
 * This class is an example if how DataSourcePool can be used to obtain the DataSource.
 *
 * @scr.component immediate="true" metatype="no"
 * @scr.service interface="DatasourceUtil"
 * @scr.property name="service.description" value="Data Source lookup example"
 * @scr.property name="service.vendor" value="Day Software"
 */

public class DatasourceUtilImpl implements DatasourceUtil {
    private static final Logger log = LoggerFactory.getLogger(
            DatasourceUtilImpl.class);

    /** @scr.reference policy="static" */
    private DataSourcePool dataSourceService;

    public DataSource getDataSource(String dataSourceName) {
        log.info("Using DataSourcePool service lookup " +
                "to get connection pool " + dataSourceName); 
        DataSource dataSource = null;
        try {
            dataSource = (DataSource) dataSourceService.getDataSource(
                    dataSourceName);
        } catch (DataSourceNotFoundException e) {
            log.error("Unable to find datasource {}.", dataSourceName, e);
        }
        return dataSource;
    }
}

このクラスは、DataSourcePool サービスのインスタンスを取得するために OSGi Declarative Services の仕様を利用し、DataSource を取得するために getDataSource(dataSourceName)を呼び出します。Maven SCR プラグインは、OSGi Declarative Services の XML 記述を生成するために scr java アノテーションを使います。添付された ZIP ファイルには、POM の例が含まれています。

詳細な例を次の場所からダウンロードできます:datasourceutil.zip。構築するために maven POM が含まれています。POM を使用してこのプロジェクトを構築する方法は、Maven リポジトリとして CQ5 を使う方法を参照してください。

JSP の例

これは、JSP の例が含まれている CRX パッケージです - datasource-example-jsp.zip。これは、段落システムと任意のページに追加できる CQ コンポーネントです。これを使用して、DataSource 接続をテストできます。

5.3 の注意

oracle driverinstall を含む CRXDE / CRXDE Lite でビルドするためのサンプルバンドルを追加すると、oracle_ example_ driver.zip を /apps/oracle で確認できます。Activator.java でドライバークラスが明示的に読み込まれます(今後のリリースでは必要が生じない可能性があります)。使用する前に最新の day.commons.datasource.jdbcpool(1.0.8)がインストールされているを確認してください。

適用対象

CQ5.2.1、CQ5.3

ダウンロード

本作品は Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License によってライセンス許可を受けています。  Twitter™ および Facebook の投稿には、Creative Commons の規約内容は適用されません。

法律上の注意   |   プライバシーポリシー