第08章 EJB開發(fā)——DAO數(shù)據(jù)庫訪問_第1頁
第08章 EJB開發(fā)——DAO數(shù)據(jù)庫訪問_第2頁
第08章 EJB開發(fā)——DAO數(shù)據(jù)庫訪問_第3頁
第08章 EJB開發(fā)——DAO數(shù)據(jù)庫訪問_第4頁
第08章 EJB開發(fā)——DAO數(shù)據(jù)庫訪問_第5頁
已閱讀5頁,還剩77頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、SessionBean的DAO數(shù)據(jù)庫訪問內(nèi)容提要n數(shù)據(jù)庫連接池和數(shù)據(jù)源nJBoss中數(shù)據(jù)源的建立nLomboz建立DAO示例一、數(shù)據(jù)庫連接池和數(shù)據(jù)源1、通過JDBC直接連接數(shù)據(jù)庫nJava中訪問數(shù)據(jù)庫的常見方法是通過JDBC建立和數(shù)據(jù)庫之間的連接,然后通過在Java語言中使用SQL進(jìn)行對數(shù)據(jù)庫中的表進(jìn)行查詢、修改和插入加載JDBC驅(qū)動創(chuàng)建連接對象創(chuàng)建Statement對象執(zhí)行SQL獲取結(jié)果集2、通過數(shù)據(jù)源訪問數(shù)據(jù)庫n數(shù)據(jù)庫連接需要數(shù)據(jù)庫系統(tǒng)為此連接分配相應(yīng)的資源,是一個非常耗時的操作。為了減少創(chuàng)建連接的時間,可以利用Java服務(wù)器預(yù)先建好一定數(shù)量的JDBC連接,當(dāng)客戶程序需要連接數(shù)據(jù)庫時,直接

2、將分配好的連接取出使用,可以大大縮短連接時間。這種預(yù)先建立好的JDBC連接就稱為數(shù)據(jù)庫連接池n在Java服務(wù)器中,可以為數(shù)據(jù)庫連接池配置一個JNDI名稱,通過JNDI服務(wù)提供給使用者,這個JNDI名稱所代表的數(shù)據(jù)庫連接池就被稱為數(shù)據(jù)源3、DAO模式n可以通過建立一個接口(Interface)文件,用來抽象數(shù)據(jù)庫的訪問行為,如將查找、刪除、增加、修改等操作聲明成相應(yīng)的方法,然后用一個類實現(xiàn)該接口中定義的方法,通過數(shù)據(jù)源訪問相應(yīng)的數(shù)據(jù)庫。這種數(shù)據(jù)庫訪問模式稱為DAO模式nDAO模式分離了數(shù)據(jù)庫的具體訪問實現(xiàn)代碼和使用代碼,常用于EJB中會話Bean的數(shù)據(jù)庫訪問。通過DAO模式,數(shù)據(jù)庫訪問代碼和會話

3、Bean的Bean類代碼相分離,數(shù)據(jù)庫的具體訪問代碼不是在Bean類中,而是在DAO的實現(xiàn)類中編寫。這種方式有助于提高Bean類代碼的通用性,有利于會話Bean在使用不同的數(shù)據(jù)庫時的移植工作在Session Bean中使用DAO的圖示會話Bean實例DAO對象數(shù)據(jù)庫系統(tǒng)EJB容器二、JBoss中數(shù)據(jù)源的建立1、JDBC驅(qū)動程序庫的安裝n由于訪問特定的數(shù)據(jù)庫需要相應(yīng)的JDBC驅(qū)動程序,所以在建立數(shù)據(jù)源之前應(yīng)將相應(yīng)的JDBC驅(qū)動程序加入到Java服務(wù)器的classpath路徑中n在JBoss服務(wù)器中,只需要將相應(yīng)的類庫文件拷貝到JBoss安裝目錄的server/lib目錄中。如啟動配置文件采用默認(rèn)

4、的文件夾,則只需將相應(yīng)的JDBC驅(qū)動類庫文件(一般是jar文件)拷貝到JBoss安裝目錄的server/default/lib子文件夾中即可n如果通過jdbc-odbc橋連接數(shù)據(jù)庫,則無需拷貝相應(yīng)的JDBC驅(qū)動類庫2、數(shù)據(jù)源文件的建立n在JBoss中,數(shù)據(jù)源的建立需要在JBoss啟動配置文件夾的deploy目錄中建立以“-ds”為文件名后綴的xml文件。由于不同數(shù)據(jù)庫的連接建立的方式也不盡相同,JBoss服務(wù)器依靠這種xml文件才能知道如何連接相應(yīng)的數(shù)據(jù)庫2、數(shù)據(jù)源文件的建立n在JBoss安裝目錄的docs/examples/jca中,有許多常見數(shù)據(jù)庫的數(shù)據(jù)源文件(即上述的“-ds”為后綴的x

5、ml文件)示例文件,文件名和其代表的數(shù)據(jù)庫的名字是對應(yīng)的,如mssql-ds.xml代表是微軟的SQLServer數(shù)據(jù)庫的數(shù)據(jù)源示例配置文件,msaccess-ds.xml是Access數(shù)據(jù)庫的數(shù)據(jù)源配置文件。n建立自己的數(shù)據(jù)源文件時,可以直接將上述示例文件拷貝到JBoss啟動配置文件夾中的deploy文件夾中,然后對文件中的一些配置項目的值加以修改即可。文件的名稱也可以進(jìn)行修改,但一定要以“-ds”作為文件名的后綴,同時要注意不要修改擴(kuò)展名xmlnJBoss在啟動時將自動讀取這些以-ds為文件名后綴的xml文件,根據(jù)這些文件中的標(biāo)簽中指定的名稱建立數(shù)據(jù)源的JNDI名JBoss中自帶的各種數(shù)據(jù)

6、庫的數(shù)據(jù)源文件Oracle的數(shù)據(jù)源文件,帶“xa”的表示該jdbc驅(qū)動支持分布式事務(wù)處理JBoss安裝路徑下的docsexamplesjca文件夾將需要的數(shù)據(jù)源文件拷貝到JBoss安裝路徑的啟動配置文件夾中的deploy目錄,圖中為ecdemodeployJBoss預(yù)先已經(jīng)設(shè)置好了Hypersonic SQL的數(shù)據(jù)源文件,名為hssql-ds.xml,該文件設(shè)定Hypersonic的數(shù)據(jù)源的JNDI名稱為DefaultDS3、hsqldb-ds.xml數(shù)據(jù)源文件的內(nèi)容n該數(shù)據(jù)源文件是JBoss自帶的Hypersonic SQL的數(shù)據(jù)源配置文件,這里的文件內(nèi)容作了一些刪節(jié)。n該數(shù)據(jù)源文件的開頭指

7、定了其xml的版本號和編碼類型 DefaultDS jdbc:hsqldb:hsql:/localhost:1701 org.hsqldb.jdbcDriver sa 5 HsqlDbRealm 3、 hsqldb-ds.xml數(shù)據(jù)源文件的內(nèi)容n標(biāo)簽指定了該xml文件的性質(zhì)為數(shù)據(jù)源配置文件,指定了該數(shù)據(jù)源的名稱,可以將其改為其他名字,但不能和deploy文件夾中其他數(shù)據(jù)源文件中規(guī)定的JNDI名稱重名 DefaultDS jdbc:hsqldb:hsql:/localhost:1701 org.hsqldb.jdbcDriver sa 5 HsqlDbRealm DefaultDS jdbc:h

8、sqldb:hsql:/localhost:1701 org.hsqldb.jdbcDriver sa 5 HsqlDbRealm 3、 hsqldb-ds.xml數(shù)據(jù)源文件的內(nèi)容n和標(biāo)簽指定了該數(shù)據(jù)源連接數(shù)據(jù)庫的JDBC連接所需的url和JDBC驅(qū)動類的名稱,可根據(jù)數(shù)據(jù)庫的JDBC手冊察看這兩項的配置值3、 hsqldb-ds.xml數(shù)據(jù)源文件的內(nèi)容n標(biāo)簽和標(biāo)簽指定了連接數(shù)據(jù)庫所需的賬號和密碼n在Hypersonic SQL中,此項為可選項 DefaultDS jdbc:hsqldb:hsql:/localhost:1701 org.hsqldb.jdbcDriver sa 5 HsqlDb

9、Realm 3、 hsqldb-ds.xml數(shù)據(jù)源文件的內(nèi)容n標(biāo)簽指定了數(shù)據(jù)源為應(yīng)用程序建立的最小數(shù)據(jù)庫連接的數(shù)目n指定了數(shù)據(jù)庫安全驗證的方式 DefaultDS jdbc:hsqldb:hsql:/localhost:1701 org.hsqldb.jdbcDriver sa 5 HsqlDbRealm 4、幾點(diǎn)說明n不同數(shù)據(jù)庫的數(shù)據(jù)源文件內(nèi)容都有所不同,但都有JNDI名字的配置項。將相應(yīng)的配置文件拷貝到啟動配置文件夾的deploy子目錄后,要保證各文件中定義的JNDI數(shù)據(jù)源名字不能相同n數(shù)據(jù)源文件中以及的配置值一般情況下都要依據(jù)在數(shù)據(jù)庫建立的數(shù)據(jù)庫名和表的名稱加以修改n所有的修改必須要重新

10、啟動JBoss才能起作用n如果采用JBoss自帶的Hypersonic SQL數(shù)據(jù)庫,那么hssql-ds.xml文件的內(nèi)容無需修改,就可直接使用,此時數(shù)據(jù)源的JNDI名為DefaultDS三、利用Lomboz建立DAO1、Lomboz中的DAO功能支持nLomboz簡化J2EE開發(fā)的實質(zhì)是利用了XDoclet的功能,而XDoclet自動生成各種文件的原理是解析源代碼中的XDoclet注釋,依據(jù)這些注釋生成EJB所需的接口和部署描述文件。nXDoclet采用什么目錄存放生成的接口和部署描述符?XDoclet如何協(xié)助生成其他輔助的類文件(如DAO的接口和實現(xiàn)文件)?這些都要依靠Lomboz為我們

11、生成的XDoclet的配置文件,該文件名為xdoclet.xml,位于Lomboz工程中的EJB模塊所在的目錄的META-INF文件夾中(注意,該文件在Lomboz早期的版本中名為ejbgenerate.xml)Lomboz工程中的xdoclet.xml配置文件在xdoclet.xml文件中的DAO標(biāo)簽n在xdoclet.xml文件中加入標(biāo)簽,即可讓XDoclet在源文件中解析和dao相關(guān)的XDoclet注釋,自動生成DAO所需的接口文件和類文件n注意:新版的Lomboz(2.1.2以上版本)已經(jīng)會自動加入該標(biāo)記,所以如果使用Lomboz的新版無需此步驟2、DAO示例工程的主要內(nèi)容n本節(jié)將創(chuàng)建

12、一個名為ShopCart的有狀態(tài)會話Bean,用來表示網(wǎng)上商城中常見的購物車。該會話Bean用一個Vector類型的成員暫時存儲用戶購買的商品,當(dāng)用戶下訂單時,利用DAO對象將用戶購買的商品存入數(shù)據(jù)庫,并生成相應(yīng)的訂單。n本示例采用的數(shù)據(jù)庫為JBoss自帶的Hypersonic SQL,所以無需額外的數(shù)據(jù)庫軟件n該Bean類中共有三個商業(yè)方法,一個是addItem,用來記錄用戶購買的商品,另外兩個是placeOrder和getOrder,分別用來下訂單和獲得給定訂單號的訂貨清單,由于這兩個方法都要訪問數(shù)據(jù)庫,所以都放在DAO的實現(xiàn)類中進(jìn)行實現(xiàn),3、在Lomboz中建立DAO示例的步驟n建立一個

13、名為DAODEMO的Lomboz J2EE工程n在該工程中加入名為Business的EJB模塊n建立一個名為ShopCart的有狀態(tài)Session Bean,并將該Bean加入Business模塊n修改xdoclet.xml文件,加入標(biāo)簽n在ShopCartBean.java文件中加入addItem、placeOrder、getOrder商業(yè)方法的定義,并加入一個placeOrder的重載方法。在ShopCartBean中加入DAO的類級注釋,在getOrder和placeOrder重載方法上加入DAO方法級調(diào)用注釋,n建立DAO的實現(xiàn)類n生成所需的DAO接口和其他文件,并修改DAO實現(xiàn)類的定

14、義,實現(xiàn)placeOrder和getOrder等方法n為ShopCartBean加入所需的JDBC等資源注釋,再次生成接口及其它文件n修改JBoss的Statulful Bean相關(guān)的配置文件,啟動JBoss,啟動Hypersonic控制臺,創(chuàng)建所需的表和數(shù)據(jù)n部署ShopCartBeann編寫測試客戶端程序(1)創(chuàng)建J2EE工程,添加EJB模塊n按第七章-用Lomboz簡化EJB的開發(fā)中介紹的步驟,創(chuàng)建一個名為DAODEMO的Lomboz J2EE工程,并在工程中加入一個名為Business,以JBoss3.2.1為目標(biāo)服務(wù)器的EJB模塊,(2)添加Bean類n利用Lomboz EJB Cr

15、eate Wizard創(chuàng)建一個名為ShopCart的Stateful Session Bean,所在的包為edu.ec.session,注意按圖中所示填如相應(yīng)的名稱自動生成的ShopCartBean類代碼Lomboz自動生成的XDoclet注釋,注意type屬性的取值Lomboz自動為類加上了“Bean”后綴(3)將ShopCartBean類加入EJB模塊(4)在xdoclet.xml中添加dao標(biāo)簽如果使用Lomboz2.1.2以下的版本,請在圖中所示的位置中加入代碼,注意不要忘了最后的“/”號,Lomboz2.1.2以上版本無需此步驟(5)添加addItem商業(yè)方法naddItem方法負(fù)責(zé)

16、把客戶選購的商品按照其代碼存入一個Vector類型的變量中,形式參數(shù)itemId代表商品的庫存代碼(6)加入placeOrder和getOrder商業(yè)方法n參考圖示,用同樣的方法加入以下兩個商業(yè)方法nplaceOrder接受用戶名作為形式參數(shù),負(fù)責(zé)將用戶下的商品代碼存入order表中,返回值是該用戶的訂單號ngetOrder以訂單號為形式參數(shù),返回是該訂單所定的貨物清單列表(以字符串?dāng)?shù)據(jù)的形式)(7)利用類向?qū)?chuàng)建DAO實現(xiàn)類如圖中所示,在新建類向?qū)У膶υ捒蛑休斎隓AO的實現(xiàn)類的相關(guān)內(nèi)容,類所在的包為edu.ec.dao,類的名稱為OrderDAOImpl(8)在ShopCartBean類中加

17、入類級DAO注釋n按照圖示,在類級XDoclet注釋中加入DAO相關(guān)的注釋,ejb.dao后面的class屬性指定了DAO接口的名字,而imple-class指定了實現(xiàn)該接口的類名字,注意此處應(yīng)與上一步添加的類的名稱保持一致n在ShopCartBean中,還加入了一個Vector類型的私有變量goods,用來保存商品(9)在ShopCartBean類中加入方法級DAO注釋n在getOrder方法前的XDoclet注釋中加入圖示的方法級DAO注釋,代表此方法將在DAO實現(xiàn)類中具體實現(xiàn)(9)在ShopCartBean類中加入方法級DAO注釋n在ShopCartBean類中加入一個placeOrde

18、r的重載方法,在該方法的上面加入dao.call name=placeOrder注釋,該方法的具體實現(xiàn)將放在OrderDAOImpl類中實現(xiàn)(10)產(chǎn)生EJB Classes產(chǎn)生EJB Classes之后生成的ejbsrc目錄中的文件nXDoclet自動生成的OrderDAO接口文件nShopCartSession繼承了ShopCartBean類,并且在其中加入了DAO方法的調(diào)用自動產(chǎn)生的OrderDAO.java文件的內(nèi)容n在ShopCartBean類中加入的ejb.dao類級注釋生成了該文件,而在getOrder和placeOrder方法前加入的方法級注釋dao.call生成了OrderD

19、AO接口中這兩個方法的聲明自動產(chǎn)生的ShopCartSession.java文件DAO內(nèi)容ngetOrder方法首先調(diào)用了父類中的getOrder方法,然后調(diào)用了DAO實現(xiàn)類中的getOrder方法n靜態(tài)同步方法getDao可以保證OrderDAO實現(xiàn)類(此處為OrderDAOImpl類)的實例只有一個,且不被多個線程同時調(diào)用(11)修改OrderDAOImpl類的定義n在OrderDAOImpl中加入implements關(guān)鍵字實現(xiàn)OrderDAO接口,需要加入init和getOrder方法的實現(xiàn)n加入了一個名為jdbcFactory的成員,用來保存數(shù)據(jù)源對象nplaceOrder比ShopC

20、artBean中的placeOrde商業(yè)r方法多了一個goods形參,用來傳遞客戶定購的商品引入必要的包OrderDAOImpl類中方法功用概述ninit方法n用于OrderDAOImpl類的初始化工作,主要負(fù)責(zé)對私有成員jdbcFactory的賦值。init方法首先檢查jdbcFactory是否已經(jīng)賦值,如果沒有賦值,就調(diào)用.InitialContext類中的lookup方法在服務(wù)器的JDNI資源中查找數(shù)據(jù)源的名字,找到后賦給jdbcFactorynplaceOrder方法n用于將顧客購買的商品寫入Hypersonic的訂單表(orders)和訂單明細(xì)表(ordersde

21、tail)中,其中訂單表有三個字段,id為訂單編號,name為顧客的姓名,date為訂單生成的日期;訂單明細(xì)表中記錄了某個訂單的所定的具體商品,id和orders表中的id相對應(yīng),而itemname字段記錄了顧客購買的商品名稱ngetOrder方法n該方法負(fù)責(zé)在Hypersonic的ordersdetail檢索特定訂單號的定購的商品,并把結(jié)果放在字符串?dāng)?shù)組中返回實現(xiàn)init方法n按照圖中所示,加入init方法的具體實現(xiàn)代碼n本段代碼查找數(shù)據(jù)源的JNDI名字,并將找到的數(shù)據(jù)源對象保存在私有成員jdbcFactory中n在查找JNDI名字的時候,注意,按照J(rèn)NDI的系統(tǒng)名稱規(guī)范,應(yīng)在查找代碼中對J

22、NDI名字前加入“java:comp/env/”的前綴,代表是在JNDI環(huán)境中(env)中查找資源名稱,而數(shù)據(jù)源JNDI名字前面的jdbc前綴是在該會話Bean的部署描述符中規(guī)定的,用于告訴容器該JNDI名稱屬于JDBC數(shù)據(jù)源,由此可見,查找數(shù)據(jù)源的全名就是圖中紅框的“java:comp/env/jdbc/DefaultDS”實現(xiàn)placeOrder方法(主要代碼)njdbcFactory是一個數(shù)據(jù)源(DataSource)對象,調(diào)用其getConnection方法獲得對數(shù)據(jù)庫的一個實際的連接實現(xiàn)placeOrder方法(主要代碼)ngenerateGUID是一個在ShopCartUtil類中

23、(該類由XDoclet自動生成)定義的靜態(tài)方法,可為每張訂單生成一個唯一的標(biāo)識實現(xiàn)placeOrder方法(主要代碼)nprepareStatement是在java.sql.Connection類中定義的方法,可將其參數(shù)中的SQL語句發(fā)送到數(shù)據(jù)庫進(jìn)行預(yù)編譯,以提高效率實現(xiàn)placeOrder方法(主要代碼)nprepareStatement方法中的字符串類型的參數(shù)可以加入?來代表SQL語句中的參數(shù),這些參數(shù)可以通過PreparedStatement類中的setXxx(Xxx代表相應(yīng)的Java數(shù)據(jù)類型的名稱)進(jìn)行動態(tài)設(shè)置實現(xiàn)placeOrder方法(主要代碼)nsetString用來設(shè)置prep

24、areStatement方法中的SQL語句中的類型為字符串的?參數(shù),setString的第一個參數(shù)用來指定設(shè)定第幾個“?”,第二個參數(shù)用來指定具體的數(shù)據(jù)實現(xiàn)placeOrder方法(主要代碼)nexecuteUpdate用來執(zhí)行preparedStatement中的SQL語句,專用于更新數(shù)據(jù)庫,該語句在orders表中插入一條記錄實現(xiàn)placeOrder方法(主要代碼)n在執(zhí)行完preparedStatement之后,一定要及時關(guān)閉和該語句相關(guān)聯(lián)的資源,否則將造成資源不能及時釋放,形成內(nèi)存泄露實現(xiàn)placeOrder方法(主要代碼)n該段代碼在訂單明細(xì)表(ordersdetail)中插入顧客購

25、買的商品,這些商品的名稱存放在goods變量中,而goods變量是placeOrder的形式參數(shù)之一實現(xiàn)placeOrder方法(主要代碼)n捕捉在try代碼段中執(zhí)行JDBC相關(guān)的語句時可能產(chǎn)生的SQLException異常。在異常出現(xiàn)后,在應(yīng)用程序服務(wù)器的控制臺輸出中打印異常出現(xiàn)的原因?qū)崿F(xiàn)placeOrder方法(主要代碼)nfinally代碼段確保任何情況下preparedStatement和數(shù)據(jù)源的連接都能夠得到關(guān)閉,以便釋放數(shù)據(jù)庫為連接和語句釋放的資源。沒有這塊語句有可能會引發(fā)內(nèi)存泄露。placeOrder方法全部源碼placeOrder方法源碼(全)n這段代碼用來獲取當(dāng)前的日期,并將

26、其存儲在today變量中,以便placeOrder將此時間寫入Hypersonic的orders表的date字段實現(xiàn)getOrder方法(主要代碼)ngetOrder方法側(cè)重于從數(shù)據(jù)庫表中查詢所需的數(shù)據(jù),這些數(shù)據(jù)存儲在訂單明細(xì)表orderstail中,該表只有兩個字段,一個為id,代表訂單的編號,itemname代表商品的名稱實現(xiàn)getOrder方法(主要代碼)nPreparedStatement類中的executeQuery方法專用于執(zhí)行查詢語句,并將查詢結(jié)果放入ResultSet類的一個實例中返回,這里這個變量為rs實現(xiàn)getOrder方法(主要代碼)n第一次調(diào)用rs變量的next方法時,

27、rs結(jié)果集的數(shù)據(jù)指針位于第一條記錄,而再次調(diào)用next方法時,如果還有記錄,則會返回true,并將數(shù)據(jù)指針放在下一條記錄上;如果已經(jīng)到達(dá)記錄尾,next方法將返回false實現(xiàn)getOrder方法(主要代碼)nfinally段中的代碼和placeOrder中的finally段中的代碼的功用是一致的,這里多了一條關(guān)閉結(jié)果集rs的語句getOrder方法的全部源代碼getOrder方法源碼(全)n用goods向量類變量存儲查詢結(jié)果,再將其中的數(shù)據(jù)轉(zhuǎn)化為字符串存入結(jié)果數(shù)組result中(12)修改ShopCartBean的placeOrder商業(yè)方法nplaceOrder商業(yè)方法中直接調(diào)用了Shop

28、CartSession類(該類是Lomboz自動生成的)的靜態(tài)方法getDao,用以獲取一個DAO對象,以便訪問在OrderDAOImpl類中實現(xiàn)的placeOrder方法。n注意此處代碼是寫在的placeOrder商業(yè)方法中,而不是寫在其重載的DAO方法中(13)修改ShopCartBean的addItem商業(yè)方法n在addItem中加入圖中所示代碼,這段代碼負(fù)責(zé)將私有g(shù)oods成員進(jìn)行初始化并將顧客購買的商品加入到goods中(14)為ShopCartBean加入ejbCreate方法n在ShopCartBean中加入一個私有成員name,用來記錄用戶的名稱,然后在添加兩個ejbCreat

29、e方法,一個用于匿名登錄的用戶,一個用于輸入用戶名的用戶。方法級注釋ejb.create-method可在Home和LocalHome接口中生成相應(yīng)的create方法的聲明(15)在ShopCartBean中加入資源注釋nEnterprise JavaBean所需的資源需要在部署描述符中加以定義,圖中所示的XDoclet注釋可以幫助生成部署描述符所需數(shù)據(jù)源的部署描述元素(16)在ShopCartBean中加入會話Bean的配置策略注釋njboss.container-configuration類級注釋向JBoss容器說明了采用什么樣的策略來管理有狀態(tài)SessionBean,name屬性的值必須

30、和JBoss啟動配置文件夾中conf目錄中的standardjboss.xml中的配置項目名稱相同,此處的值為“Standard Stateful SessionBean”。該值也是JBoss默認(rèn)的管理有狀態(tài)SessionBean的策略,所以該注釋可以省略不寫(17)修改JBoss中有關(guān)會話Bean的配置文件nstandardjboss.xml是JBoss服務(wù)器重要的配置文件,它位于啟動配置文件夾的conf子目錄中n在standardjboss.xml文件中,找到“Standard Stateful Session”配置項,如左圖所示,其中標(biāo)記規(guī)定了有狀態(tài)會話Bean不被調(diào)用時的最長存活周期,

31、標(biāo)記規(guī)定JBoss多長時間清除哪些已經(jīng)達(dá)到時間的有狀態(tài)的會話Bean。為了達(dá)到驗證效果,將這兩個值分別改為30秒和3秒 Standard Stateful SessionBean 30 3 (18)再次在Eclipse中生成EJB相關(guān)文件n再次執(zhí)行g(shù)enerate ejb classes指令后在ejb-jar.xml文件中生成的資源描述標(biāo)記njboss.xml中的資源標(biāo)記和JNDI名稱ejb-jar.xml文件中的資源定義jboss.xml文件中的資源定義(19)啟動JBoss服務(wù)器n在Eclipse中JBoss服務(wù)器的啟動也可以利用Lomboz的J2EE View,首先選中需啟動的服務(wù)器,在

32、Lomboz J2EE View內(nèi)點(diǎn)擊右鍵,選Run Server,即可啟動JBoss服務(wù)器(20)啟動Hypersonic控制臺點(diǎn)擊此按鈕啟動Hypersonic控制臺(21)創(chuàng)建所需的表n按圖中所示輸入所需的SQL語句,該語句創(chuàng)建了ORDERS和ORDERSDETAIL表,再按EXECUTE SQL STATEMENT按鈕n輸入框的下方提示了Hypersonic的相關(guān)語法n創(chuàng)建表之后,點(diǎn)擊view-Refresh Tree,就可以在左側(cè)的樹視圖中看到新建的表名n結(jié)果窗口中顯示執(zhí)行的SQL語句成功或錯誤信息(22)部署ShopCartBeann在Lomboz J2EE視圖中,選定Buines

33、s模塊,再點(diǎn)擊右鍵,選Deploy即可部署B(yǎng)usiness模塊。n部署完成后在Console視圖中切換到JBoss的輸出,可以看到JBoss輸出的部署成功信息(23)編寫測試客戶程序n按圖示輸入測試客戶端的相關(guān)信息在Pakage Explore中雙擊該方法名就可在DAOTest.java源文件中定位testBean方法修改客戶程序,在testBean方法中加入如下測試代碼調(diào)用getHome靜態(tài)方法,獲取Home接口對象之后調(diào)用Home接口的create方法,創(chuàng)建ShopCart遠(yuǎn)程接口對象,將該遠(yuǎn)程EJB對象賦給myBean變量。之后每次調(diào)用myBean中的對應(yīng)于ShopCart中商業(yè)方法,都會導(dǎo)致對JBoss服務(wù)器中的ShopCart實例的商業(yè)方法的調(diào)用。由于ShopCart是一個有狀態(tài)會話Bean,它會自動維護(hù)每個使用ShopCart的客戶程序的數(shù)據(jù)客戶程序解釋調(diào)用ShopCart的addItem商業(yè)方法,購買Bycle和Shoes。ShopCart實例將顧客購買的商品名稱存放在goods私有變量中,以供placeOrder方法寫入H

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論