新聞中心
在JavaEE應(yīng)用程序中,數(shù)據(jù)源對(duì)象(DataSource objects)是通過(guò)JDBC API訪問(wèn)關(guān)系數(shù)據(jù)庫(kù)的途徑。每個(gè)DataSource對(duì)象都有一系列用來(lái)描述現(xiàn)實(shí)世界中數(shù)據(jù)源的屬性,通過(guò)這些屬性可以描述數(shù)據(jù)庫(kù)服務(wù)器所在的地址、數(shù)據(jù)庫(kù)名稱、網(wǎng)絡(luò)協(xié)議等信息。另外數(shù)據(jù)源對(duì)象還可以與JNDI配合使用,如果將一個(gè)數(shù)據(jù)源與一個(gè)注冊(cè)好的JNDI服務(wù)綁定后,在應(yīng)用程序中就可以通過(guò)訪問(wèn)JNDI API得到這個(gè)數(shù)據(jù)源對(duì)象,進(jìn)而取得和數(shù)據(jù)庫(kù)的鏈接以及進(jìn)行數(shù)據(jù)庫(kù)操作。

創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比左權(quán)網(wǎng)站開(kāi)發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式左權(quán)網(wǎng)站制作公司更省心,省錢(qián),快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋左權(quán)地區(qū)。費(fèi)用合理售后完善,10多年實(shí)體公司更值得信賴。
在JavaEE 6以前,數(shù)據(jù)源的定義和使用與Java應(yīng)用服務(wù)器廠家有很強(qiáng)的相關(guān)性,JavaEE 6則提供了更為靈活的數(shù)據(jù)源定義方式,可以定義在多個(gè)應(yīng)用服務(wù)器之間兼容的數(shù)據(jù)源。另外同時(shí)支持注釋、聲明、部署表述等多個(gè)定義方式。在本文中,將說(shuō)明如何使用注釋和或部署描述來(lái)定義數(shù)據(jù)源。
使用注釋定義數(shù)據(jù)源
在JavaEE 6中提供了兩個(gè)用來(lái)定義數(shù)據(jù)源的注釋標(biāo)記:@DataSourceDefinition 和@DataSourceDefinitions,這兩個(gè)標(biāo)記都位于javax.annotation.sql包中。通過(guò)@DataSourceDefinition可以定義單個(gè)數(shù)據(jù)源,通過(guò)@DataSourceDefinitions可以定義多個(gè)數(shù)據(jù)源。
@DataSourceDefinition注釋
@DataSourceDefinition注釋標(biāo)記可以應(yīng)用客戶端、Servlet、EJB等元件當(dāng)中定義數(shù)據(jù)源,通過(guò)該注釋標(biāo)記,可以定義數(shù)據(jù)源對(duì)象,并與JNDK綁定。該標(biāo)記的使用方式與設(shè)置數(shù)據(jù)源對(duì)象的屬性沒(méi)有什么區(qū)別,也可以設(shè)置附加信息以及特定信息。
例如,下面的注釋標(biāo)記創(chuàng)建了一個(gè)訪問(wèn)Derby數(shù)據(jù)庫(kù)的數(shù)據(jù)源。
- @DataSourceDefinition(name = "java:app/env/Servlet_DataSource",
- minPoolSize = 0,
- initialPoolSize = 0,
- className = "org.apache.derby.jdbc.ClientXADataSource",
- user = "APP",
- password = "APP",
- databaseName = "testdb",
- properties = {"connectionAttributes=;create=true"}
- )
數(shù)據(jù)源的name屬性值就是要綁定的的JNDI名稱,根據(jù)JNDI的特點(diǎn),該值應(yīng)該是唯一的。從上面的例子中可以注意到,屬性值的第一部分,也就是java:app是一個(gè)命名空間說(shuō)明。在JavaEE 6中引入了應(yīng)用元件命名空間,目前可以使用的命名空間如下:
java:comp,同一應(yīng)用同一容器中的元件可以訪問(wèn)。
java:module,與元件相同的一個(gè)模塊中可以訪問(wèn),比如定義在同一個(gè)ejb-jar.xml中的EJB元件。
java:app,可以在同一應(yīng)用中的所有元件和模塊中訪問(wèn),例如位于統(tǒng)一ear文件中的客戶端元件、WEB元件、EJB元件。
java:global,可以在服務(wù)器中所有的應(yīng)用程序之間共享。
name屬性所引用的命名空間范圍,也決定了數(shù)據(jù)源對(duì)象的訪問(wèn)范圍,也就是模塊、應(yīng)用或者同一服務(wù)中的所有用用。以下的定義方式分別表示:
java:comp/env/, 與數(shù)據(jù)源定義元件處于同一容器中的其他元件、如客戶端元件、WEB元件、EJB元件都可以訪問(wèn)這個(gè)數(shù)據(jù)源。
java:module/env/, 位于同一個(gè)ejb-jar.xml中的元件都可以訪問(wèn)這個(gè)數(shù)據(jù)源。
java:app/env/, 同一個(gè)應(yīng)用中的所有元件,如EJB, servlet以及客戶端元件都可以訪問(wèn)這個(gè)數(shù)據(jù)源。
@DataSourceDefinitions注釋
通過(guò)@DataSourceDefinitions可以在一個(gè)元件類中創(chuàng)建多個(gè)數(shù)據(jù)源,就如同定義一個(gè)數(shù)組一樣,每個(gè)數(shù)據(jù)源是數(shù)組的一個(gè)元素。下面是一個(gè)為EJB定義多個(gè)數(shù)據(jù)源的例子。
- @DataSourceDefinitions(
- value = {
- @DataSourceDefinition(name = "java:app/env/HelloStatefulEJB_DataSource",
- minPoolSize = 0,
- initialPoolSize = 0,
- className = "org.apache.derby.jdbc.ClientXADataSource",
- portNumber = 1527,
- serverName = "localhost",
- user = "APP",
- password = "APP",
- databaseName = "testdb",
- properties = {"connectionAttributes=;create=true"}
- ),
- @DataSourceDefinition(name = "java:comp/env/HelloStatefulEJB_DataSource",
- minPoolSize = 0,
- initialPoolSize = 0,
- className = "org.apache.derby.jdbc.ClientXADataSource",
- portNumber = 1527,
- serverName = "localhost",
- user = "APP",
- password = "APP",
- databaseName = "testdb",
- properties = {"connectionAttributes=;create=true"}
- )
- }
- )
- @Stateful
- public class HelloStatefulEJB implements HelloStateful {
- ...
- ...
- }
采用部署表述定義數(shù)據(jù)源
除了前面的方式以外,JavaEE 6還繼續(xù)支持使用部署描述的方式定義數(shù)據(jù)源,部署描述信息可以寫(xiě)在application.xml、application-client.xml、web.xml以及ejb-jar.xml當(dāng)中。下面的例子中定義的數(shù)據(jù)源與前面使用@DataSourceDefinition數(shù)據(jù)源含義相同。
java:app/env/Application_Level_DataSource org.apache.derby.jdbc.ClientXADataSource localhost 1527 testdb APP APP connectionAttributes ;create=true
如果在同一個(gè)應(yīng)用程序中,分別通過(guò)@DataSourceDefinition和部署描述信息定義了兩個(gè)數(shù)據(jù)源,但這這兩個(gè)數(shù)據(jù)源具有相同的name屬性。如果發(fā)證這樣的情況,采用部署描述定義的數(shù)據(jù)源優(yōu)先權(quán)高于采用注釋聲明定義的數(shù)據(jù)源。
【編輯推薦】
- Java EE 6增強(qiáng)的可擴(kuò)展性:Web分片和可插拔框架
- 簡(jiǎn)化Web應(yīng)用開(kāi)發(fā) Servlet 3.0特性詳解
- Apache對(duì)JavaEE 6說(shuō)“不”
- 可擴(kuò)展GlassFish v3的JavaEE 6平臺(tái)
- Java EE 6新特性之Servlet 3.0的異步處理
網(wǎng)站題目:JavaEE 6中新的定義數(shù)據(jù)源方法
路徑分享:http://m.fisionsoft.com.cn/article/dhjjisc.html


咨詢
建站咨詢
