應用程式定義的資料來源
您可以依照 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 這兩者,因為應用程式隱含定義的資料來源,即隱含定義了連線管理程式和 JDBC 驅動程式。當您將應用程式定義的資料來源用於兩段式確定時,您可以指定 recoveryAuthDataRef 內容來選取用於回復交易的鑑別資料。不過,請務必記住,應用程式必須在執行中,交易才有可能回復。
您可以在應用程式定義的資料來源中,使用各種變數、已編碼的密碼,以及期間語法。
註: 期間語法不適用於註釋中所明確定義的內容,例如 loginTimeout 或 maxIdleTime。
以下是兩個資料來源的範例,其中使用連線管理程式內容、變數、已編碼的密碼,及期間語法。
@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"
)
})