版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、實(shí)體Bean教程教程實(shí)例環(huán)境nJbuilder 7 for WeicnBorland JDataStorenWeic7.01n一臺(tái)速度比較快的電腦512M內(nèi)存,賽羊1G)實(shí)體的作用n實(shí)體Bean是用來(lái)代表數(shù)據(jù)的。nSession Bean可以經(jīng)過(guò)JDBC直接存取數(shù)據(jù)庫(kù)。為什么還要多加一層實(shí)體bean呢?nJDBC直接存?。簄各種數(shù)據(jù)庫(kù)操作方法不同,不利移植n各種數(shù)據(jù)庫(kù)事務(wù)、平安方法不同n假設(shè)能一致處置事務(wù)、平安豈不更好?實(shí)體Bean的位置DatabaseEntity BeanSessionBeanOther Clients實(shí)體實(shí)體bean添加了一個(gè)添加了一個(gè)中間層??蛻舨恢苯又虚g層??蛻舨恢苯?/p>
2、存取數(shù)據(jù)庫(kù),而是由存取數(shù)據(jù)庫(kù),而是由容器存取,從而獲得容器存取,從而獲得容易運(yùn)用的平安和事務(wù)容易運(yùn)用的平安和事務(wù),并且跨平臺(tái)易移植。,并且跨平臺(tái)易移植。實(shí)體Bean和數(shù)據(jù)庫(kù)表的關(guān)系IdNamebalance0001ZengHai-3000000002TengGang-200000數(shù)據(jù)表id0001/0002Namebalance某個(gè)實(shí)體Bean實(shí)體Bean和數(shù)據(jù)庫(kù)之間的同步Entity beanDBloadstore數(shù)據(jù)庫(kù)和bean同步由容器自動(dòng)完成!容器容器ejbLoad(自動(dòng)調(diào)ejbStore(自動(dòng)調(diào))實(shí)體bean的生成流程HomeremoteEntity Bean Instancedat
3、abaseContainerclient1 create2 ejbCreate3 取數(shù)據(jù)4前往前往pk值值5 EJBObject6前往前往 EJBObject制造一個(gè)實(shí)踐的BMPn義務(wù):帳號(hào)管理,提款,存款,查余額第一部份: 遠(yuǎn)程接口第二部份:Home接口AccountHome.java用于創(chuàng)建對(duì)象用于創(chuàng)建對(duì)象Interface AccountHome extends EJBHomeAccount create(帳號(hào),用戶名帳號(hào),用戶名)Account findByPrimaryKey(AccountPK key)Collection findByOwnerName(用戶名用戶名)第三部份:主
4、鍵類n主鍵類提供某bean的獨(dú)一標(biāo)識(shí)nAccountPk.javanPublic class AccountPK implements .nString idn構(gòu)造方法+toString()+hashCode()+equals(Object ob)方法。第四部份:中心邏輯類nAccountBean.javan中心類分:n1 數(shù)據(jù)域部份n2 業(yè)務(wù)方法詳細(xì)實(shí)現(xiàn)(在remote里指明)n3 容器自動(dòng)調(diào)用方法實(shí)現(xiàn)n4 查找方法的實(shí)現(xiàn)(在Home里有的)4.1數(shù)據(jù)域部份nPublic EntityContext ctx;nPublic String id;nPublic string name;nPub
5、lic double balance;4.2業(yè)務(wù)方法部份nPublic void deposit(double amt)n balance+=amtnPublic void withdraw()nBalance-=amt;n大家看到,bean的業(yè)務(wù)方法不直接寫數(shù)據(jù)庫(kù),寫是由ejbLoad/Store自動(dòng)進(jìn)展的4.3容器自動(dòng)調(diào)用的方法。nejbLoad()nAccountPk pk= ctx.getPrimaryKey();n“Select id,name,balance from xxx where id = pk.getid();nId=rs.getString(“id)nName=rs.g
6、etString(“name);nBalance=rs.getDouble(“balance);4.3nejbLoad中用戶需求做以下事情:n運(yùn)用jdbc直接翻開數(shù)據(jù)表n用select語(yǔ)句取出所需求的記錄n將記錄裝入當(dāng)前bean。n封鎖數(shù)據(jù)庫(kù)銜接4.3nejbStoren“Update xxx set name=? Balance= ? Where id=?n其中的id當(dāng)然也是從pk中得到的。也就是把指定pk的記錄寫庫(kù)4.3nsetEntityContext(EntityContext ctx)nThis.ctx=ctx;n從容器獲得本bean的上下文,然后從外面調(diào)用內(nèi)部方法而獲得容器的平安性
7、4.3 nejbRemoven只需用delete 方法把主鍵相應(yīng)的記錄直接刪除就行了。用戶翻開銜接,執(zhí)行delete,然后前往4.3nejbCreate(id,name)nn銜接數(shù)據(jù)表,運(yùn)用insert語(yǔ)句插入數(shù)據(jù)庫(kù)一條記錄。n前往一個(gè)新的 pk值nnPublic AccountPk ejbFindByPrimaryKeyn直接運(yùn)用select 語(yǔ)句前往值。nPublic Collection ejbFindByOwnerName(name)n直接運(yùn)用vector前往pk的集合EJB字段:和數(shù)據(jù)庫(kù)中字段對(duì)應(yīng)業(yè)務(wù)方法deposit等,操作ejb字段,不直接存取DBejbRemove-用戶調(diào)用,實(shí)
8、踐上是delete數(shù)據(jù)ejbLoad容器調(diào)用,實(shí)踐上是select數(shù)據(jù)裝入beanejbStore容器調(diào)用,實(shí)踐上是update數(shù)據(jù)更新ejbCreate,用戶調(diào)用,向表中新插入數(shù)據(jù)insertejbFindBy方法,用戶調(diào)用,select前往pk客戶端nPublic class clientn Context ctx = new InitialContext(.)nObject obj=ctx.lookup(“AccountHome);nAccountHome home=(AccountHome) PortableRemoteObject.narrow(obj,AccountHome.cla
9、ss)nAccount= Home.create(“0001,zenghai);nAccount.getPrimarykeynAccount.getBalance,withdraw,remove部署客戶端n略,差不多的。n BEAN闡明是bmpn .AccountPkn falseBMP的特性:n在用戶和數(shù)據(jù)間加了一個(gè)中間層n用戶看到某個(gè)bean,操作這個(gè)bean等于操作數(shù)據(jù)庫(kù),且平安可靠。n這個(gè)bean就是一個(gè)bmp的bean。實(shí)踐的數(shù)據(jù)庫(kù)操作由用戶編寫,容器調(diào)用。特別是ejbCreate,ejbRemove,ejbLoad,ejbStore。n比較煩人啊。CMP更簡(jiǎn)單籠統(tǒng)的實(shí)體bean本節(jié)
10、操作義務(wù):n創(chuàng)建一個(gè)實(shí)體bean,它代表一個(gè)雇員數(shù)據(jù)表。n再創(chuàng)建一個(gè)會(huì)話bean,它調(diào)用這個(gè)實(shí)體bean,向?qū)嶓wbean要數(shù)據(jù)。n再創(chuàng)建一個(gè)客戶端,它調(diào)用這個(gè)會(huì)話bean,從而顯示雇員表中的某個(gè)數(shù)據(jù)。Step1預(yù)備任務(wù)nJbuilder7和weic預(yù)備好。Jbuider7必需曾經(jīng)裝好JDataStore。假設(shè)沒有就用access,比較費(fèi)事些。n啟動(dòng)jbuilder7,新建工程,比如叫eejb。然后在里面新建一個(gè)ejb模塊。比如叫testEntModStep2 從外部倒入數(shù)據(jù)庫(kù)n點(diǎn)擊左側(cè)窗口的testEntMod結(jié)點(diǎn),在右窗口下選擇ejbDesigner圖形化編緝器。n在空白處右擊,選擇impo
11、rt schema from databasenDriver在下拉中選擇com.borland.datastore.jdbc.DataStoreDrivernUrl選擇local的,全稱是jdbc:borland:dslocal:D:JBuilder7samplesJDataStoredatastoresemployee.jdsn用戶名密碼本人選,要記牢,等會(huì)用nJndi名字要記牢,等會(huì)用Step3 創(chuàng)建cmpn點(diǎn)擊確定,jbuilder左下角出現(xiàn)DataSource窗口,里面有一堆的數(shù)據(jù)表,如今點(diǎn)中Employee,然后右擊。n選擇create cmp entity bean 2.0n等一會(huì)
12、兒,右邊窗口出現(xiàn)圖形化的CMP,n創(chuàng)建勝利。請(qǐng)察看這個(gè)bean。Step4 建立相應(yīng)會(huì)話Beann在設(shè)計(jì)器上右鍵,選擇sessionBean,把這個(gè)sessionBean起名為EmployeeSes。n再加一個(gè)方法名字叫g(shù)etEmpName,前往String,帶個(gè)參數(shù)是Short empNo。Step5 參與代碼,在session中存取entity beannString empName = name not found;ntry njavax.naming.Context context = new javax.naming.InitialContext();nObject object =
13、 context.lookup(java:comp/env/ejb/Employee);nEmployeeHome empHome = (EmployeeHome) njavax.rmi.PortableRemoteObject.narrow(object,EmployeeHome.class);nEmployee emp = empHome.findByPrimaryKey(empNo);nempName = emp.getFirstName() + + emp.getLastName();nnreturn empName;Step6 在Sessionbean中參與對(duì)entitybean的援
14、用n雙擊左側(cè)的EmployeeSes這個(gè)bean,在右窗口下面選擇ejb Local Reference,選擇add,新加一個(gè)援用。援用的名字取成ejb/Employee。假設(shè)不這么寫,前面getEmpName方法就會(huì)出錯(cuò)。Step7 創(chuàng)建客戶端測(cè)試程序n為EmployeeSes建立一個(gè)客戶端。n建立后請(qǐng)先改動(dòng)Main方法為:nEmployeeSesTestClient client = new EmployeeSesTestClient();ntry nclient.create();nString empName = client.getEmpName(new Short(2);nSyst
15、em.out.println(Employee Name from the Test Client is = + empName);nncatch (Exception ex) nex.printStackTrace();nStep8啟動(dòng)相應(yīng)效力器n在工程運(yùn)轉(zhuǎn)屬性里加兩個(gè)配置nServer配置運(yùn)轉(zhuǎn)weicnClient配置運(yùn)轉(zhuǎn)客戶端程序TestClientn在jbuilder里啟動(dòng)weicStep9 配置數(shù)據(jù)源的緩沖池n進(jìn)7001/console的weic控制臺(tái)n選擇service的jdbc,配新的jdbc poolnUrl就是一開場(chǎng)的jdbc:borland:dslocal:D:JBuild
16、er7samplesJDataStoredatastoresemployee.jdsnDriver就是com.borland.datastore.jdbc.DataStoreDriverStep9 配置數(shù)據(jù)源的緩沖池n在properties里輸入nUser=testnPassword=test。n這段和您開場(chǎng)import時(shí)候的選擇對(duì)應(yīng)。n點(diǎn)擊applyStep 10調(diào)理緩沖性能n進(jìn)旁邊的connectionn初始設(shè)成2,最大設(shè)成5,添加設(shè)成1n啟動(dòng)jdatastore效力器n進(jìn)旁邊的targets,選擇myserver到右邊,點(diǎn)擊apply。Step11 應(yīng)對(duì)不測(cè)情況n上節(jié)apply必然失敗,
17、由于jdatastore沒有在weic里配置好?;氐絡(luò)builder。n在configserver里,在配置lib 里,weic啟動(dòng)時(shí)加上類庫(kù)nD:/JBuilder7/lib/jdsserver.jarn重新啟動(dòng)weic,可以配置pool勝利。Step 12配置支持事務(wù)的數(shù)據(jù)源n進(jìn)jdbc的txDataSourcen新建數(shù)據(jù)源,名字是demoDataSource。這個(gè)名字必需和import時(shí)起的jndiName一樣,否那么等著出錯(cuò)。nPool名就是他剛建的pool,比如demoPooln在target里把它運(yùn)用到效力器上。Step13測(cè)試數(shù)據(jù)源n回jbuilder,關(guān)掉weicn重新啟動(dòng)we
18、ic,控制臺(tái)上沒錯(cuò)的話n就okay。n有錯(cuò)就trouble shootingStep 14運(yùn)轉(zhuǎn)客戶端n天哪。終于運(yùn)轉(zhuǎn)出來(lái)了!n看看輸出的結(jié)果是什么?n想想調(diào)用的過(guò)程?CMPnBMP的特點(diǎn):n 雖然ejbLoad,ejbStore是由容器自動(dòng)調(diào)用的,但是一個(gè)實(shí)體bean怎樣和數(shù)據(jù)庫(kù)打交道還是需求“硬編碼。nSelect update insert delete實(shí)踐上都得寫上。nBMP的東西實(shí)踐上還是和詳細(xì)數(shù)據(jù)庫(kù)相關(guān)的。引入CMP的思索nBmp編碼中,邏輯和耐久化表示混合nCmp試圖分別邏輯和耐久化表示。n結(jié)論:n 在實(shí)體bean類中,不寫任何的jdbc詳細(xì)語(yǔ)句。詳細(xì)存取數(shù)據(jù)庫(kù)代碼由容器替您生成好
19、。CMP圖示實(shí)體bean超類,包含數(shù)據(jù)邏輯,本人寫一個(gè)子類,由容器生成,實(shí)現(xiàn)詳細(xì)的存取代碼CMP的bean不包含字段定義n沒有諸如String id,String Name之類的。這些東西在子類里由容器產(chǎn)生。n不包含字段的緣由是容器能夠會(huì)外加一些輔助的字段,您并不需求關(guān)懷這些。一個(gè)bmp的類能夠是這樣的nClass xxx n public String idn public String getId()n return idnn在cmp中,get/set代碼由容器生成。在父類里,不需求硬編碼,定義個(gè)abstract類就可以了。Abstract的父類public abstract class
20、CartBean implements EntityBean public abstract float getXXX(); public abstract float getXXXX(); public float getTotal() return this.getXXX()+this.getXXXX()/這里也可以有abstract的set方法。實(shí)踐代碼從何而來(lái)?n類里用abstract方法描畫set/getn實(shí)踐代碼由容器生成,容器怎樣生成?n由您用部署文件進(jìn)展描畫n2.xn AccountBeann Idn id 解釋部署文件n部署文件闡明了abstract的類和數(shù)據(jù)庫(kù)字段的對(duì)應(yīng)關(guān)系
21、。n每個(gè)cmp-field域就是耐久化域,每個(gè)域都要在子類中生成get/set方法,所以域名必需和get/set一致。nAbstract void setName()那么cmp-field就應(yīng)該是name。這樣容器就知道對(duì)應(yīng)關(guān)系了Cmp中,查詢?cè)鯓愚k?nSet/get方法由容器處置。自動(dòng)調(diào)select/update方法,我們看不到。n查找方法怎樣辦?比如bmp中的nfindBigAccounts()。容器不能夠知道bigAccounts的詳細(xì)邏輯。這樣您就不得不再寫詳細(xì)jdbc代碼,回到bmp的老路上。處理方法:參與中間言語(yǔ)。n運(yùn)用中間的,平臺(tái)無(wú)關(guān)的EJB-QL言語(yǔ),從而完成查詢的通用性。nS
22、elect OBJECT(a) from Account as a where a.Id IS NOT NULLnSELECT OBJECT(a) FROM Account AS a WHERE a.balance?1開發(fā)者要做些什么?n構(gòu)建CMP實(shí)體bean,設(shè)計(jì)abstract的耐久化模型,編寫EJB-QL語(yǔ)句。n部署者:n設(shè)計(jì)數(shù)據(jù)庫(kù)映射,運(yùn)用容器工具編程,生成子類及編碼。Cmp構(gòu)造實(shí)例n概述:n一個(gè)產(chǎn)品的實(shí)體bean,包括Name,description,basePrice productId等字段nCMP的實(shí)體beanCmp的遠(yuǎn)程接口ProductnPublic interface P
23、roduct extends EJBObjectnPublic String getName()/setName()/getDescription/set/getBasePrice()/set/getProductId()nn用戶看得到的一系列g(shù)et/set 方法。Home接口ProductHome.javanHome接口只讓遠(yuǎn)程客戶程序運(yùn)用接口只讓遠(yuǎn)程客戶程序運(yùn)用nPublic interface ProductHome extends EJBHomen Product create(String productID)nPublic findByPrimaryKey/findByName/findByDescription.n這些這些find方法可以用方法可以用EJB-QL實(shí)現(xiàn),或者由容實(shí)現(xiàn),或者由容器工具來(lái)實(shí)現(xiàn)器工具來(lái)實(shí)現(xiàn)主鍵類ProductPk.javan提供獨(dú)一的關(guān)鍵字nPublic class ProductPk implements java.io.Serializablen public String ID;nPublic ProductPK(St
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- DB51T 1586-2013 克氏螯蝦養(yǎng)殖技術(shù)規(guī)范 人工繁殖
- DB51T 1025-2010 溫、光敏型“兩系”雜交小麥種子生產(chǎn)田間檢驗(yàn)規(guī)程
- 新建鋁質(zhì)模具項(xiàng)目立項(xiàng)申請(qǐng)報(bào)告
- 2024年度武漢離婚協(xié)議明確財(cái)產(chǎn)分割及子女監(jiān)護(hù)責(zé)任3篇
- 2024年電力工程電氣設(shè)備調(diào)試設(shè)計(jì)咨詢合同2篇
- 松下plc課程設(shè)計(jì)
- 2024-2030年替普瑞酮公司技術(shù)改造及擴(kuò)產(chǎn)項(xiàng)目可行性研究報(bào)告
- 2024-2030年新版中國(guó)生物氣項(xiàng)目可行性研究報(bào)告
- 2024-2030年新版中國(guó)五全電鍍項(xiàng)目可行性研究報(bào)告
- 2024-2030年撰寫:中國(guó)紫丹活血片行業(yè)發(fā)展趨勢(shì)及競(jìng)爭(zhēng)調(diào)研分析報(bào)告
- 2025年蛇年春聯(lián)帶橫批-蛇年對(duì)聯(lián)大全新春對(duì)聯(lián)集錦
- 23秋國(guó)家開放大學(xué)《液壓氣動(dòng)技術(shù)》形考任務(wù)1-3參考答案
- 聚丙烯腈碳纖維ppt課件
- 年產(chǎn)4萬(wàn)噸鋁板生產(chǎn)項(xiàng)目建議書寫作模板-立項(xiàng)申批
- 《搬家擇日入宅擇日》書稿
- 銀行二月份事后監(jiān)督情況通報(bào)
- 學(xué)校護(hù)學(xué)崗工作應(yīng)急預(yù)案
- 李正中,固體理論,課后習(xí)題答案
- 生本課堂教學(xué)反思
- 留守兒童成長(zhǎng)檔案(精編版)
- 統(tǒng)計(jì)學(xué)導(dǎo)論曾五一課后習(xí)題答案(完整版)
評(píng)論
0/150
提交評(píng)論