Liberty: アプリケーション定義のデータ・ソース
Java™ EE 仕様で定義されているように、アノテーションまたはデプロイメント記述子で、アプリケーション内にデータ・ソースを定義することができます。
注: commonLibraryRef クラス・ローダー属性は、アプリケーション定義のデータ・ソースに推奨されます。
privateLibraryRef 属性は
java:global 名前空間に使用できません。またその他のスコープにも推奨されません。
複数のアプリケーションが同じ java:global 名前空間を宣言してデータ・ソースを指定する場合、
これらのアプリケーションの server.xml ファイルはすべて、
同じ共有ライブラリーに対する commonLibraryRef 属性を指定する必要があります。
アプリケーションでデータ・ソースを定義する際には、 JDBC ドライバーをアプリケーションから使用できるようにする必要があります。 この定義を行うには、アプリケーションに対して server.xml で共有ライブラリーを構成します。
以下に例を示します。
<application id="myApp" name="myApp" location="myApp.war" type="war">
<classloader commonLibraryRef="DB2Lib"/>
</application>
<library id="DB2Lib">
<fileset dir="C:/DB2/java" includes="db2jcc4.jar db2jcc_license_cisuz.jar"/>
</library>
その後、アノテーションまたはデプロイメント記述子でアプリケーションにデータ・ソースを定義することができます。
- 次の例のようにアノテーションを使用します。
@DataSourceDefinition( name = "java:comp/env/jdbc/db2", className = "com.ibm.db2.jcc.DB2DataSource", databaseName = "SAMPLEDB", serverName = "localhost", portNumber = 50000, properties = { "driverType=4" }, user = "user1", password = "pwd1" ) public class MyServlet extends HttpServlet { @Resource(lookup="java:comp/env/jdbc/db2") DataSource ds;
- 例えば web.xml ファイルで次の例のようにデプロイメント記述子を使用します。
<data-source> <name>java:comp/env/jdbc/db2</name> <class-name>com.ibm.db2.jcc.DB2DataSource</class-name> <server-name>localhost</server-name> <port-number>50000</port-number> <database-name>SAMPLEDB</database-name> <user>user1</user> <password>pwd1</password> <property><name>driverType</name><value>4</value></property> </data-source>
一般的に、server.xml ファイルの dataSource または connectionManager
で定義できるプロパティーは、アプリケーション定義のデータ・ソースでも指定できます。
これに対する例外として、connectionManagerRef と jdbcDriverRef の 2 つがあります。
アプリケーション定義のデータ・ソースは、接続マネージャーおよび JDBC ドライバーを暗黙的に定義するため、これらを指定することはできません。
アプリケーション定義のデータ・ソースを 2 フェーズ・コミットに使用する場合は、recoveryAuthDataRef プロパティーを指定して、トランザクション・リカバリーに使用される認証データを選択することができます。ただし、トランザクションのリカバリーはアプリケーションの実行中にのみ可能であることをよく認識してください。
アプリケーション定義のデータ・ソースでは、変数、エンコードしたパスワード、および期間構文を使用できます。
注: loginTimeout や maxIdleTime
など、アノテーションで明示的に定義されたプロパティーに期間構文は適用されません。
以下は、 接続マネージャー・プロパティー、変数、エンコードしたパスワード、および期間構文を使用した 2 つのデータ・ソースの例です。
@DataSourceDefinitions(value = {
@DataSourceDefinition(
name = "java:comp/env/jdbc/derby",
className = "org.apache.derby.jdbc.EmbeddedDataSource40",
databaseName = "${shared.resource.dir}/data/SAMPLEDB",
minPoolSize = 1,
maxPoolSize = 10,
maxIdleTime = 180,
properties = { "agedTimeout=10m", "connectionTimeout=30s", "createDatabase=create" }
),
@DataSourceDefinition(
name = "java:comp/env/jdbc/oracle",
className = "oracle.jdbc.pool.OracleDataSource",
url = "jdbc:oracle:thin:@//localhost:1521/SAMPLEDB",
user = "user1",
password = "{xor}Oz0vKDtt"
)
})