Liberty でのリレーショナル・データベース接続の構成

データベース接続用にデータ・ソースと JDBC プロバイダーを構成できます。 JDBC プロバイダーは、特定のベンダー・データベースとの JDBC 接続に必要なドライバー実装クラスを提供します。

このタスクについて

データ・ソースの Kerberos 認証は、 DB2®、 Oracle Database、 Microsoft SQL Server、および PostgreSQLでサポートされます。

Open Liberty JDBC データ・ソース用の Kerberos 認証に関する資料は、 Open Liberty Web サイトで入手できます。

問題の回避:

バージョン 20.0.0.11より前では、データ・ソースに対する Kerberos 認証は、 Libertyの JDBC ドライバーまたはデータベースではサポートされません。

Oracle JDBC シン・ドライバー、バージョン 21c 以前は、 Oracle JDK または OpenJDK Kerberos 実装のみをサポートします。 したがって、これらのバージョンは IBM SDK, Java Technology Edition バージョン 8では使用できません。 IBM Java™ 8 を使用するデータ・ソースの Kerberos 認証をサポートするために、バージョン 21c 以降の Oracle JDBC シン・ドライバーに更新します。

アプリケーションからデータベースにアクセスするには、アプリケーション・コードで javax.sql.DataSource インターフェースを使用する必要があります。 アプリケーション・サーバーは、この javax.sql.DataSource インターフェースの管理対象実装を提供します。この実装は、 JDBC ドライバーが提供するさまざまなデータ・ソース実装またはドライバー実装のいずれかによって支えられています。 これらのデータ・ソースまたはドライバー実装には、以下の種類があります。

  • javax.sql.DataSource

    このタイプのデータ・ソースは基本形式です。 接続プーリングを強化するインターオペラビリティーを提供せず、また複数のリソースを必要とするトランザクションで 2 フェーズ対応リソースとして参加できません。

  • javax.sql.ConnectionPoolDataSource

    このタイプのデータ・ソースでは、接続プーリングが使用可能です。 複数のリソースを必要とするトランザクションで 2 フェーズ対応リソースとして参加できません。

  • javax.sql.XADataSource

    このタイプのデータ・ソースでは、接続プーリングが使用可能であり、複数のリソースを必要とするトランザクションで 2 フェーズ対応リソースとしても参加できます。

  • java.sql.Driver

    これは、URL を必要とする基本的な接続方法で、通常は Java SE で使用されます。 javax.sql.DataSource 同様、接続プーリングを強化するインターオペラビリティーを提供せず、また複数のリソースを必要とするトランザクションに 2 フェーズ対応リソースとして参加できません。

Libertyで使用できるようにするには、 JDBC ドライバーがこれらのタイプのデータ・ソースの少なくとも 1 つを提供するか、 java.sql.DriverServiceLoader 機能を提供する必要があります。 一般的に使用される JDBC ドライバーの場合、 Liberty は、さまざまなデータ・ソース・タイプの実装クラス名を既に認識しています。 Liberty は、 ServiceLoader 機能を使用して、指定された URL の JDBC ドライバー実装をディスカバーします。 Liberty は、多くの場合、 JDBC ドライバー実装クラスに基づいて、対応するデータ・ソース実装クラス名を推測できます。 ほとんどの場合、 Liberty に指示する必要があるのは、 JDBC ドライバーの場所のみです。

手順

  1. server.xml ファイルで、 JDBC ドライバーの JAR ファイルまたは圧縮ファイルの場所を指す共有ライブラリーを定義します。
    例:
    <library id="DB2JCCLib">
        <fileset dir="C:/DB2/java" includes="db2jccx.jar db2jcc_license_cisuz.jar"/>
    </library>
  2. JDBC ドライバーを使用する 1 つ以上のデータ・ソースを定義します。 データ・ソースのタイプまたは URL を指定しない場合、 Liberty は、使用可能なデータ・ソース・タイプに応じて自動的にデータ・ソース・タイプを選択します。
    データ・ソース・タイプについてデフォルトを受け入れる例を以下に示します。
    
    <dataSource id="db2" jndiName="jdbc/db2">
        <jdbcDriver libraryRef="DB2JCCLib"/>
        <properties.db2.jcc databaseName="SAMPLEDB" serverName="localhost" portNumber="50000"/>
    </dataSource>
    javax.sql.XADataSource タイプを使用する例を以下に示します。
    
    <dataSource id="db2xa" jndiName="jdbc/db2xa" type="javax.sql.XADataSource">
        <jdbcDriver libraryRef="DB2JCCLib"/>
        <properties.db2.jcc databaseName="SAMPLEDB" serverName="localhost" portNumber="50000"/>
    </dataSource>

    少なくとも 1 つの Java EE 7 以降のフィーチャーが有効にされている場合、デフォルトのデータ・ソースが使用可能です。 このデータ・ソースは java:comp/DefaultDataSource として使用可能です。 これのために jndiName を指定する必要はありません。 デフォルト・データ・ソースを構成するには、 idDefaultDataSource に設定してデータ・ソースを指定します。 以下の例は、DB2 データベースを指すデフォルト・データ・ソースを構成します。

    <dataSource id="DefaultDataSource">
    	<jdbcDriver libraryRef="DB2JCCLib"/>
    	<properties.db2.jcc databaseName="SAMPLEDB" serverName="localhost" portNumber="50000"/>
    </dataSource>
    データ・ソース・タイプを省略すると、 jdbc-4.3 以上の機能を使用している場合、またはデフォルトのデータ・ソースである場合、 Liberty は、使用可能なデータ・ソース・タイプに応じて以下の順序でデータ・ソース・タイプを選択します。
    • javax.sql.XADataSource
    • javax.sql.ConnectionPoolDataSource
    • javax.sql.DataSource
    jdbc-4.2 フィーチャー、 jdbc-4.1 フィーチャー、または jdbc-4.0 フィーチャーを使用していて、それがデフォルトのデータ・ソースではない場合、 Liberty は、使用可能なデータ・ソース・タイプに応じて以下の順序でデータ・ソース・タイプを選択します。
    • javax.sql.ConnectionPoolDataSource
    • javax.sql.DataSource
    • javax.sql.XADataSource

    一部の JDBC ベンダーでは、動作に微妙な違いがあったり、JDBC 仕様に定義されていない各種データ・ソース・タイプ間で異なる制限を導入していたりすることがありますが、XADataSource によって提供される機能は、通常、他のデータ・ソース・タイプによって提供される機能のスーパーセットになっていることに注意してください。

  3. オプション: JDBC ベンダー・プロパティーや接続プーリング・プロパティーなど、データ・ソースの属性を構成します。
    例:
    <dataSource id="DefaultDataSource" jndiName="jdbc/db2" connectionSharing="MatchCurrentState" 
                isolationLevel="TRANSACTION_READ_COMMITTED" statementCacheSize="20">
        <connectionManager maxPoolSize="20" minPoolSize="5" 
                           connectionTimeout="10s" agedTimeout="30m"/>
        <jdbcDriver libraryRef="DB2JCCLib"/>
        <properties.db2.jcc databaseName="SAMPLEDB" serverName="localhost" portNumber="50000" 
                            currentLockTimeout="30s" user="user1" password="pwd1"/>
    </dataSource>
    dataSource エレメント、 connectionManager エレメント、およびいくつかの一般的に使用される JDBC ベンダーの構成属性の完全なリストについては、 データ・ソース (dataSource)を参照してください。
  4. オプション: 以下の例に従って、一般的に使用されるデータベースのデータ・ソースを構成します。
    DB2 用
    <dataSource id="DefaultDataSource" jndiName="jdbc/db2">
        <jdbcDriver libraryRef="DB2JCCLib"/>
        <properties.db2.jcc databaseName="SAMPLEDB" serverName="localhost" portNumber="50000"/>
    </dataSource>
    
    <library id="DB2JCCLib">
        <fileset dir="C:/DB2/java" includes="db2jccx.jar db2jcc_license_cisuz.jar"/>
    </library>
    DB2 on iSeries (ネイティブ) の場合
    <dataSource id="DefaultDataSource" jndiName="jdbc/db2iNative">
        <jdbcDriver libraryRef="DB2iNativeLib"/>
        <properties.db2.i.native databaseName="*LOCAL"/>
    </dataSource>
    
    <library id="DB2iNativeLib">
        <fileset dir="/QIBM/Proddata/OS400/Java400/ext" includes="db2_classesxx.jar"/>
    </library>
    DB2 on iSeries (ツールボックス)
    <dataSource id="DefaultDataSource" jndiName="jdbc/db2iToolbox">
        <jdbcDriver libraryRef="DB2iToolboxLib"/>
        <properties.db2.i.toolbox databaseName="SAMPLEDB" serverName="localhost"/>
    </dataSource>
    
    <library id="DB2iToolboxLib">
        <fileset dir="/QIBM/ProdData/Http/Public/jt400/lib" includes="jt400.jar"/>
    </library>
    Derby Embedded の場合
    <dataSource id="DefaultDataSource" jndiName="jdbc/derbyEmbedded">
        <jdbcDriver libraryRef="DerbyLib"/>
        <properties.derby.embedded databaseName="C:/databases/SAMPLEDB" createDatabase="create"/>
    </dataSource>
    
    <library id="DerbyLib">
        <fileset dir="C:/db-derby-x.x.x.x-bin/lib"/>
    </library>
    Derby Network Client の場合
    <dataSource id="DefaultDataSource" jndiName="jdbc/derbyClient">
        <jdbcDriver libraryRef="DerbyLib"/>
        <properties.derby.client databaseName="C:/databases/SAMPLEDB" createDatabase="create" 
                                 serverName="localhost" portNumber="1527"/>
    </dataSource>
    
    <library id="DerbyLib">
        <fileset dir="C:/db-derby-x.x.x.x-bin/lib"/>
    </library>
    Informix® JCC の場合
    <dataSource id="DefaultDataSource" jndiName="jdbc/informixjcc">
        <jdbcDriver libraryRef="DB2JCCLib"/>
        <properties.informix.jcc databaseName="SAMPLEDB" serverName="localhost" portNumber="1526"/>
    </dataSource>
    
    <library id="DB2JCCLib">
        <fileset dir="C:/Drivers/jcc/x.x" includes="db2jccx.jar db2jcc_license_cisuz.jar"/>
    </library>
    Informix JDBC の場合
    <dataSource id="DefaultDataSource" jndiName="jdbc/informix">
        <jdbcDriver libraryRef="InformixLib"/>
        <properties.informix databaseName="SAMPLEDB" ifxIFXHOST="localhost" 
                             serverName="ol_machinename" portNumber="1526"/>
    </dataSource>
    
    <library id="InformixLib">
        <fileset dir="C:/Drivers/informix" includes="ifxjdbc.jar ifxjdbcx.jar"/>
    </library>
    Microsoft SQL Server (Microsoft JDBC ドライバー) の場合
    <dataSource id="DefaultDataSource" jndiName="jdbc/mssqlserver">
        <jdbcDriver libraryRef="MSJDBCLib"/>
        <properties.microsoft.sqlserver databaseName="SAMPLEDB" 
                                        serverName="localhost" portNumber="1433"/>
    </dataSource>
    
    <library id="MSJDBCLib">
        <file name="C:/sqljdbc_x.x/enu/sqljdbcxx.jar"/>
    </library>
    Microsoft SQL Server (DataDirect Connect for JDBC ドライバー) の場合
    <dataSource id="DefaultDataSource" jndiName="jdbc/ddsqlserver">
        <jdbcDriver libraryRef="DataDirectLib"/>
        <properties.datadirect.sqlserver databaseName="SAMPLEDB" 
                                         serverName="localhost" portNumber="1433"/>
    </dataSource>
    
    <library id="DataDirectLib">
        <file name="C:/DataDirect/Connect-x.x/lib/sqlserver.jar"/>
    </library>
    MySQL の場合
    <dataSource id="DefaultDataSource" jndiName="jdbc/mySQL">
        <jdbcDriver libraryRef="MySQLLib"/>
        <properties databaseName="SAMPLEDB" serverName="localhost" portNumber="3306"/>
    </dataSource>
    
    <library id="MySQLLib">
        <file name="C:/mysql-connector-java-x.x.xx/mysql-connector-java-x.x.xx.jar"/>
    </library>
    PostgreSQL の場合
    <dataSource id="DefaultDataSource" jndiName="jdbc/postgres">
        <jdbcDriver libraryRef="PostgresLib"/>
        <properties.postgresql databaseName="SAMPLEDB" serverName="localhost" portNumber="5432"/>
    </dataSource>
    
    <library id="PostgresLib">
        <file name="C:/postgresql-x.x.xx/postgresql-x.x.xx.jar"/>
    </library>
    Oracle の場合
    <dataSource id="DefaultDataSource" jndiName="jdbc/oracle">
        <jdbcDriver libraryRef="OracleLib"/>
        <properties.oracle URL="jdbc:oracle:thin:@//localhost:1521/SAMPLEDB"/>
    </dataSource>
    
    <library id="OracleLib">
        <file name="C:/Oracle/lib/ojdbcx.jar"/>
    </library>
    Oracle Call Interface (OCI) の場合
    <dataSource id="DefaultDataSource" jndiName="jdbc/oracleOCI">
      <jdbcDriver libraryRef="OracleOciLib"/>
      <properties.oracle URL="jdbc:oracle:oci:@//localhost:1521/SAMPLEDB"/>                     
    </dataSource>
    
    <library id="OracleOciLib">
      <fileset dir="C:/Oracle/OCI/instantclient"/>
    </library>
    ご使用のオペレーティング・システムの path 環境変数で Liberty server.env ファイル内のライブラリーへのパスを設定することにより、OCI ネイティブ・クライアント・ライブラリーを認識するように Liberty 環境を構成します。
    • z/OS プラットフォームの場合AIX プラットフォームの場合LIBPATH
    • HP UNIX プラットフォームの場合SHLIBPATH
    • LINUX プラットフォームの場合Solaris プラットフォームの場合LD_LIBRARY_PATH
    • Windows プラットフォームの場合PATH
    また、 Liberty jvm.options ファイルにライブラリー・パスを設定します。
    -Djava.library.path=C:\\Oracle\\OCI\\instantclient

    server.env および jvm.options 構成ファイルの使用について詳しくは、 Liberty 環境のカスタマイズを参照してください。

    Oracle Universal Connection Pool (UCP) の場合
    <dataSource id="DefaultDataSource" jndiName="jdbc/oracleUCP">
        <jdbcDriver libraryRef="OracleUCPLib" />
        <properties.oracle.ucp URL="jdbc:oracle:thin:@//localhost:1521/SAMPLEDB"/>
    </dataSource>
    
    <library id="OracleUCPLib">
        <fileset dir="C:/Oracle/Drivers" includes="ojdbcx.jar ucp.jar"/>
    </library>

    Oracle UCP を使用している場合、データ・ソース・プロパティー statementCacheSize および validationTimeout は無視されます。 接続マネージャー・プロパティー agedTimeoutconnectionTimeout, maxIdleTimemaxPoolSize, minPoolSizepurgePolicyreapTimemaxConnectionsPerThread、および maxConnectionsPerThreadLocalも無視されます。 同等の Oracle UCP 機能を使用してください。

    Sybase の場合
    <dataSource id="DefaultDataSource" jndiName="jdbc/sybase">
        <jdbcDriver libraryRef="SybaseLib"/>
        <properties.sybase databaseName="SAMPLEDB" serverName="localhost" portNumber="5000"/>
    </dataSource>
    
    <library id="SybaseLib">
        <file name="C:/Drivers/sybase/jconnx.jar"/>
    </library>
    solidDB の場合
    <dataSource id="DefaultDataSource" jndiName="jdbc/solidDB">
        <jdbcDriver libraryRef="solidLib"/>
        <properties databaseName="SAMPLEDB" URL="jdbc:solid://localhost:2315/"/>
    </dataSource>
    
    <library id="solidLib">
        <file name="C:/Drivers/solidDB/SolidDriverx.x.jar"/>
    </library>
    Liberty に認識されていない JDBC ドライバーの場合
    <dataSource id="DefaultDataSource" jndiName="jdbc/sample" type="javax.sql.XADataSource">
        <jdbcDriver libraryRef="SampleJDBCLib" 
                    javax.sql.XADataSource="com.ibm.sample.SampleXADataSource"/>
        <properties databaseName="SAMPLEDB" hostName="localhost" port="12345"/>
    </dataSource>
    
    <library id="SampleJDBCLib">
        <file name="C:/Drivers/SampleJDBC/sampleDriver.jar"/>
    </library>
    この例で、JDBC ドライバーは C:/Drivers/SampleJDBC/sampleDriver.jar にあり、com.ibm.sample.SampleXADataSource という名前の javax.sql.XADataSource の実装を提供しています。 JDBC ドライバーは、ベンダー固有のデータ・ソース・プロパティー (databaseNamehostNameport など) も提供しています。