应用程序定义的数据源

可以通过注释或借助部署描述符,在应用程序中定义数据源,如 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 文件中的 dataSourceconnectionManager 上定义的属性也可以在应用程序定义的数据源上加以指定。但是,不能指定对其他元素进行引用的属性(例如 connectionManagerRefjdbcDriverRef),因为应用程序定义的数据源会隐式地定义连接管理器和 JDBC 驱动程序。将应用程序定义的数据源用于两阶段落实时,可以指定 recoveryAuthDataRef 属性以选择用于事务恢复的认证数据。但是,一定要知道事务恢复只能在应用程序处于运行状态时才能进行。可以在应用程序定义的数据源中使用变量、经过编码的密码以及持续时间语法。
注: 持续时间语法不适用于注释中显式定义的属性,例如 loginTimeoutmaxIdleTime

下面举例说明了两个使用连接管理器属性的数据源、变量、经过编码的密码以及持续时间语法的数据源。

@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"
        )
})

用于指示主题类型的图标 参考主题

信息中心的条款和条件 | 反馈


时间戳记图标 最近一次更新时间: Wednesday, 2 September 2015
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=phil&product=was-libcore-mp&topic=rwlp_ds_appdefined
文件名:rwlp_ds_appdefined.html