许多Java EE 6的新功能之一,就是为DataSourceDefinition的注释提供支持。
该DataSourceDefinition注释提供了一种方法来定义一个DataSource和它的JNDI注册。注释提供了常用的DataSource属性的注释内容。更多的标准和供应商特定的属性也是可以指定的。
先看看下面的例子:
@DataSourceDefinition(name = "java:global/MyApp/myDS",
className = "org.apache.derby.jdbc.ClientDataSource",
portNumber = 1527,
serverName = "localhost",
databaseName = "testDB",
user = "lance",
password = "secret",
properties = {"createDatabase=create"}) )
数据源将被注册使用name元素指定的值,这可以在任何有效的Java EE的名称空间中定义,这将决定从什么组件的数据源获取。
对于properties属性用于指定较少用的DataSource属性的标准,以及供应商指定的属性使用格式:
{"property1=value", "property2=value" ...}
使用数据源:
@Resource(lookup = "java:global/MyApp/myDS")
private DataSource ds;
你还可以定义使用DataSourceDefinitions注释多个数据源:
@DataSourceDefinitions({
@DataSourceDefinition(name = "java:global/MyApp/myDS",
className = "org.apache.derby.jdbc.ClientDataSource",
portNumber = 1527,
serverName = "localhost",
databaseName = "testDB21",
user = "lance",
password = "secret",
properties = {"createDatabase=create"}),
@DataSourceDefinition(name = "java:global/MyApp/myDS2",
className = "com.mysql.jdbc.jdbc2.optional.MysqlDataSource",
portNumber = 3306,
serverName = "localhost",
databaseName = "dogDB",
user = "luckyDog",
password = "shhh",
properties = {"pedantic=true"})
})
在web项目中,你还可以通过在web.xml中添加设置覆盖你原来指定的DataSourceDefinition数据源注释。例如你把原来使用的Java数据库改为MySQL数据库,你可以在web.xml中添加如下属性:
<data-source>
<description>DataSource for MySQL</description>
<name>java:global/MyApp/myDS</name>
<class-name>com.mysql.jdbc.jdbc2.optional.MysqlDataSource</class-name>
<server-name>localhost</server-name>
<port-number>3306</port-number>
<database-name>testDB</database-name>
<user>lance</user>
<password>secret</password>
<property>
<name>x</name>
<value>y</value>
</property>
<property>
<name>y</name>
<value>x</value>
</property>
<login-timeout>500</login-timeout>
<transactional>false</transactional>
<isolation-level>TRANSACTION_READ_COMMITTED</isolation-level>
<initial-pool-size>2</initial-pool-size>
<max-pool-size>5</max-pool-size>
<min-pool-size>1</min-pool-size>
<max-idle-time>500</max-idle-time>
<max-statements>100</max-statements>
</data-source>