用EJB開發(fā)在線課堂_第1頁(yè)
用EJB開發(fā)在線課堂_第2頁(yè)
用EJB開發(fā)在線課堂_第3頁(yè)
用EJB開發(fā)在線課堂_第4頁(yè)
用EJB開發(fā)在線課堂_第5頁(yè)
已閱讀5頁(yè),還剩17頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、.Java 學(xué)習(xí)資料 制作 : 劉晏2022-3-27導(dǎo)讀在項(xiàng)目開發(fā)中如何進(jìn)行需求分析,如何規(guī)劃數(shù)據(jù)庫(kù)、數(shù)據(jù)庫(kù)建模以及怎樣將模式設(shè)計(jì)應(yīng)用于具體的項(xiàng)目困擾了開發(fā)人員。本文以一個(gè)在線課程項(xiàng)目為線索全景展現(xiàn)軟件開發(fā)的各個(gè)步驟。閱讀導(dǎo)航 導(dǎo)航簡(jiǎn)介CoursesOnline簡(jiǎn)介簡(jiǎn)要介紹CoursesOnline系統(tǒng)的設(shè)計(jì)目的開發(fā)環(huán)境介紹開發(fā)工具需求分析CoursesOnline系統(tǒng)開發(fā)初期的需求調(diào)研,數(shù)據(jù)庫(kù)建模、數(shù)據(jù)字典、數(shù)據(jù)表的規(guī)劃CoursesOnline系統(tǒng)設(shè)計(jì)在系統(tǒng)設(shè)計(jì)中引入設(shè)計(jì)模式,如何選擇設(shè)計(jì)模式創(chuàng)建數(shù)據(jù)庫(kù)在Oracle9i中創(chuàng)建數(shù)據(jù)庫(kù)CoursesOnline的具體實(shí)現(xiàn)用JBuilder9

2、開發(fā)CoursesOnline系統(tǒng)步驟部分代碼部分步驟代碼附錄Jbuilder9、Oracle9i、Weblogic7的安裝配置;數(shù)據(jù)表SQL腳本 一、CoursesOnline簡(jiǎn)介CoursesOnline是一個(gè)實(shí)驗(yàn)性質(zhì)的系統(tǒng),CoursesOnline是"在線課程"的意思,在這個(gè)CoursesOnline系統(tǒng)里,學(xué)生選擇課程,老師可以開設(shè)課程,系統(tǒng)管理員則對(duì)學(xué)生、老師以及課程進(jìn)行管理。CoursesOnline使用J2EE來(lái)實(shí)現(xiàn),目的是為其它EJB系統(tǒng)的開發(fā)提供一些參考。二、開發(fā)環(huán)境CoursesOnline使用Jbuilder9 + Oracle9i + WebLog

3、ic7的開發(fā)環(huán)境。因?yàn)镴2EE是一種行業(yè)標(biāo)準(zhǔn),所以采用哪種開發(fā)環(huán)境的搭配并不是最重要的。目前其它常見開發(fā)環(huán)境的搭配還有Eclipse + MySQL + Jboss(都是OpenSource),VJA + DB2 + WebSphere,等等。Jbuilder9 + Oracle9i + WebLogic 7開發(fā)環(huán)境的配置請(qǐng)參考附錄A。三、CoursesOnline需求分析 3.1 CoursesOnline用例上圖是CourcesOnline的Use Case Diagram。顯而易見,系統(tǒng)中有學(xué)生、老師和系統(tǒng)管理員三種Actor。學(xué)生需要注冊(cè)成系統(tǒng)用戶后才能瀏覽課程和選課。3.2 數(shù)據(jù)庫(kù)建

4、模(ER圖)及數(shù)據(jù)字典上圖是CoursesOnline的數(shù)據(jù)庫(kù)ER圖,建模工具是ERWin。順便提一下,ERWin的正向工程支持ER圖直接生成數(shù)據(jù)庫(kù)表結(jié)構(gòu),逆向工程支持?jǐn)?shù)據(jù)庫(kù)表結(jié)構(gòu)生成ER圖。CoursesOnline使用到的表有5個(gè),數(shù)據(jù)字典如下:3.2.1 Actor登錄信息表(Actor)序號(hào)字段名數(shù)據(jù)類型約束備注1 ActorID SmallIntPK Actor標(biāo)識(shí)符2 UserNameVarchar(20) Actor登錄帳號(hào)3 PasswordChar(8)  Actor登錄口令4 ActorTypeSmallInt  Actor類型,0:系統(tǒng)管理員

5、;1:老師;2:學(xué)生3.2.2 Actor基本信息表(ActorInfo)序號(hào)字段名數(shù)據(jù)類型約束 備注1 ActorIDSmallInt FK(Actor)Actor標(biāo)識(shí)符2 ActorNameVarchar(20) Actor姓名3 Phone Varchar(16) 電話4 EmailVarchar(50) Email3.2.3 課程信息表(Courses)序號(hào)字段名數(shù)據(jù)類型約束備注1 CoursesIDSmallIntPK 課程標(biāo)識(shí)符2 CoursesNameVarchar(20) 課程名稱3 StartDate Date  課程開始時(shí)間

6、4 EndDate Date  課程結(jié)束5 ActorID SmallIntFK(Actor)  6 RoomIDSmallIntFK(Room)教室標(biāo)識(shí)符3.2.4 學(xué)生選課表(Appointment)序號(hào) 字段名數(shù)據(jù)類型 約束 備注1 ActorID SmallInt FK(Actor) Actor標(biāo)識(shí)符(學(xué)生,ActorType=2)2 CoursesIDSmallInt FK(Courses) 課程標(biāo)識(shí)符3.2.5 教室信息表(Room)序號(hào)字段名數(shù)據(jù)類型 約束備注1 RoomIDSmallIntPK 教室標(biāo)識(shí)符2 RoomNameVarchar(30) 

7、教室名稱四、CoursesOnline系統(tǒng)設(shè)計(jì)4.1 Design Pattern的選擇和思考在系統(tǒng)設(shè)計(jì)上,Design Pattern的選擇是很重要的。因?yàn)檎_的Design Pattern不僅在開發(fā)階段可以讓開發(fā)人員思路清晰得心應(yīng)手,而且在維護(hù)階段也不至于讓維護(hù)人員抓狂。除此之外,對(duì)于系統(tǒng)的健壯和運(yùn)行效率而言也起著舉足輕重的作用。如果采用了錯(cuò)誤的Design Pattern,那么對(duì)于系統(tǒng)來(lái)說(shuō)就像是在錯(cuò)誤的時(shí)間錯(cuò)誤的地點(diǎn)與錯(cuò)誤的敵人打了一場(chǎng)錯(cuò)誤的戰(zhàn)爭(zhēng)。下面以CoursesOnline系統(tǒng)學(xué)生注冊(cè)時(shí)采用的兩種不同的處理方法為例來(lái)簡(jiǎn)單說(shuō)明選擇Design Pattern的重要性。學(xué)生在Clien

8、t提交注冊(cè)信息,包括登錄帳號(hào),登錄口令,姓名,電話和Email五項(xiàng)內(nèi)容。從數(shù)據(jù)庫(kù)ER圖中我們可以看到學(xué)生信息被分散在兩張表里,也就是說(shuō)服務(wù)器端有兩個(gè)Entity Bean來(lái)存取學(xué)生的注冊(cè)信息,一個(gè)為Actor,另一個(gè)為ActorInfo。方法一:客戶端直接與Entity Bean溝通以完成工作方法二:客戶端與Session Bean交互,由Session Bean與Entity Bean溝通以完成工作方法一的設(shè)計(jì)雖然也能完成對(duì)學(xué)生注冊(cè)的處理,但是客戶端必須寫所有的業(yè)務(wù)邏輯代碼,而且由于客戶端直接訪問Entity Bean,不但造成了多次的網(wǎng)絡(luò)roundtrip,使執(zhí)行效率大幅下降,也使客戶端與

9、Entity Bean形成強(qiáng)耦合,日后不管修改客戶端還是Entity Bean,都會(huì)牽一發(fā)而動(dòng)全身,對(duì)系統(tǒng)的改造簡(jiǎn)直就是一場(chǎng)災(zāi)難。方法二不但大幅降低了網(wǎng)絡(luò)的roundtrip,而且Session Facade分隔了客戶端和Entity Bean,Entity Bean對(duì)于客戶端來(lái)說(shuō)是透明的,客戶端需要關(guān)心的只是Session Facade提供的接口。這樣一來(lái)系統(tǒng)的可擴(kuò)展性就得到了質(zhì)的提升。4.2 CoursesOnline系統(tǒng)示意圖五、創(chuàng)建數(shù)據(jù)庫(kù)先有雞再有蛋?還是先有蛋再有雞?先有數(shù)據(jù)庫(kù)表再有Entity Bean?還是先有Entity Bean再有數(shù)據(jù)庫(kù)表?這兩個(gè)問題有異曲同工之妙。雞與蛋的

10、問題已經(jīng)討論幾千年了,哲學(xué)的Big Fans可能會(huì)爭(zhēng)的臉紅耳赤唾沫橫飛;偶們只是普通的程序員,誰(shuí)先誰(shuí)后的問題還留給理論學(xué)家吧。可能會(huì)有人先設(shè)計(jì)Entity Bean再建數(shù)據(jù)庫(kù)表,也有可能反其道而行。在CoursesOnline這個(gè)實(shí)驗(yàn)性質(zhì)系統(tǒng)的開發(fā)過程中,是先建數(shù)據(jù)庫(kù)表然后才有Entity Bean。5.1 新建一個(gè)數(shù)據(jù)庫(kù)Oracle可以在命令行模式下敲入dbca,或者直接在開始菜單里找到并運(yùn)行Database Configuration Assistant,然后根據(jù)向?qū)У奶崾拘陆ㄒ粋€(gè)名為CoursesDB的數(shù)據(jù)庫(kù)。Oracle 9i新建數(shù)據(jù)庫(kù)的詳細(xì)過程請(qǐng)參考Oracle的相關(guān)文檔。5.2 為

11、數(shù)據(jù)庫(kù)創(chuàng)建一個(gè)用戶在命令行下敲入oemapp console,或者直接在開始菜單里找到EnterPrise Manager Console打開Oracle管理控制中心,以SYSDBA的身份進(jìn)入CoursesDB數(shù)據(jù)庫(kù)后,在安全性-用戶中新增一個(gè)用戶,如chenxc,口令chenxc,并賦予dba的角色。這些設(shè)置在接下來(lái)的CourseseOnline系統(tǒng)具體開發(fā)中會(huì)用到。Oracle 9i新建用戶的具體操作請(qǐng)參考Oracle的相關(guān)文檔。5.3 建表及表的初始化5.3.1 建表建表的方法有N種:1)用sqlplus連上CoursesDB數(shù)據(jù)庫(kù)后,用sql語(yǔ)句把數(shù)據(jù)字典中列出來(lái)的表結(jié)構(gòu)敲進(jìn)去;2)把

12、數(shù)據(jù)字典中表結(jié)構(gòu)寫成sql腳本文件,然后用sqlplus連上CoursesDB,執(zhí)行SQL c:CoursesDB.sql;3)使用一種支持正向工程的數(shù)據(jù)庫(kù)建模工具直接把ER圖轉(zhuǎn)換成數(shù)據(jù)庫(kù)表結(jié)構(gòu),如ERWin;4)使用可視化工具建表,如PLSQL Developer。其它的我知道的還有我還不知道的數(shù)據(jù)庫(kù)的建表方法,在這里就不一一列舉了,有興趣的請(qǐng)自行研究,然后把經(jīng)驗(yàn)告訴大家。附錄C提供了CoursesOnline建表及表的初始化的sql腳本。5.3.2 表的初始化從CoursesOnline用例圖中可以看出,系統(tǒng)沒有提供系統(tǒng)管理員、老師以及教室的管理的接口,系統(tǒng)管理員、老師和教室的信息在數(shù)據(jù)庫(kù)

13、建完后就應(yīng)該初始化了。也就是說(shuō),這些信息是已經(jīng)存在的,除非直接操作數(shù)據(jù)庫(kù),否則無(wú)法改變系統(tǒng)管理員、老師和教室的信息。建完表后,我們?yōu)镃oursesOnline系統(tǒng)初始化了一位系統(tǒng)管理員,名為sysadmin;三位老師,分別為任我行、東方不敗和岳不群;除此之外還初始化了三間教室,分別為黑木崖教室1、黑木崖教室2和華山教室3。附錄C提供了CoursesOnline建表及表的初始化的sql腳本。六、CoursesOnline的具體實(shí)現(xiàn)6.1 在Jbuilder 9中新建一個(gè)工程啟動(dòng)Jbuilder 9,F(xiàn)ile-New Project,項(xiàng)目名為CoursesOnline,選擇路徑后,點(diǎn)擊finish

14、因?yàn)镃oursesOnline項(xiàng)目使用Oracle 9i數(shù)據(jù)庫(kù),所以還需要把Oracle的驅(qū)動(dòng)加載進(jìn)來(lái),Project - Project Properties - Path - Required libraries,點(diǎn)擊add,在Select One Or More Libraries窗口中選擇OracleJDBCLibOracleJDBCLib的配置請(qǐng)參考附錄A.5.3 配置數(shù)據(jù)庫(kù)驅(qū)動(dòng)6.2 創(chuàng)建Entity Bean(CMP)6.2.1 新建一個(gè)EJB ModuleFile - New - Enterprise -EJB Module點(diǎn)擊ok,并在接下來(lái)的窗口中為EJB Module命名

15、為Courses,結(jié)果如下圖6.2.2 Import Schema From Database在上圖中的DataSources上點(diǎn)擊右鍵,或者在Courses設(shè)計(jì)面板上點(diǎn)擊右鍵,然后點(diǎn)擊Import Schema From Database,在彈出的窗口中輸入Driver,URL等參數(shù),如下圖所示點(diǎn)擊ok,這時(shí)數(shù)據(jù)庫(kù)中的5個(gè)表在DataSources面板中顯示出來(lái),如下圖所示6.2.3 創(chuàng)建Entity Bean在上圖中DataSources面板中右鍵Actor,在彈出菜單中選擇Create CMP 2.0 Entity Bean,結(jié)果如下圖左鍵點(diǎn)擊Entity Bean Actor可以在彈出

16、的窗口中編輯它的屬性,在這里我們暫時(shí)使用默認(rèn)值。接下來(lái)用同樣的方法為其它四個(gè)表創(chuàng)建CMP 2.0 Entity Bean,結(jié)果如下圖從左邊的Project下拉菜單中可以看到,每個(gè)Entity Bean都有三個(gè)(或四個(gè))Java程序與之相對(duì)應(yīng),例如Actor.java、ActorBean.java和ActorHome.java。為了便于管理,以及避免和后面的程序胡攪蠻纏搞得眼睛高度緊張,我把Entity Bean對(duì)應(yīng)的java程序都放在com.chenxc.coursesOnline.ejb20下。點(diǎn)擊Entity Bean的名稱,在Bean Properties窗口中點(diǎn)擊Classes And

17、 Packages按鈕,然后為每個(gè)類指定路徑。6.2.4 階段總結(jié)這一節(jié)中創(chuàng)建了五個(gè)CMP 2.0 Entity Bean,是CMP而不是BMP,是2.0而不是1.x,是local接口而不是remote接口,而且還沒有動(dòng)手寫過任何代碼。本文并不打算深入探討EJB的內(nèi)部機(jī)制,而僅僅是舉例子來(lái)說(shuō)明使用EJB實(shí)現(xiàn)分層思想及分布式計(jì)算的方法。如果要研究EJB的細(xì)節(jié),請(qǐng)參考附錄B 參考資料列舉的書籍或文章。當(dāng)前階段的五個(gè)Entity Bean只能算是半成品,要完成業(yè)務(wù)邏輯還需要進(jìn)一步加工,這些在接下來(lái)開發(fā)Session Bean的過程中會(huì)提到。欲知后事如何,請(qǐng)聽下回分解。6.3 創(chuàng)建Session Be

18、an(Stateless)6.3.1 SessionFacade - 連接Struts與Entity Bean的橋梁新建一個(gè)名為SessionFacade的Session Bean。SessionFacade負(fù)責(zé)與Entity Bean溝通,并為Struts提供接口。這個(gè)Session Bean扮演一個(gè)中間人的角色,就像是北京西客站的售票廳,旅客可以買T97的火車票去往廣州,也可以買T31的火車票去往上海。在CoursesOnline系統(tǒng)中,Struts跟購(gòu)買火車票的旅客一樣,通過SessionFacade提供的接口完成系統(tǒng)登錄、學(xué)生注冊(cè)、學(xué)生選課等操作。下面以Actor登錄為例來(lái)說(shuō)明Sess

19、ionFacade是怎樣扮演中間人的角色,如下圖:在SessionFacade中新增一個(gè)名為actorLogin的方法,返回值boolean,輸入?yún)?shù)用戶名,口令和用戶類型(學(xué)生、老師或系統(tǒng)管理員),接口remote。方法actorLogin提供給遠(yuǎn)程的Struts調(diào)用。登錄處理流程如下:1、用戶在頁(yè)面上輸入用戶名、口令和用戶類型并提交;2、JavaBean存儲(chǔ)用戶在頁(yè)面提交上來(lái)的用戶名、口令和用戶類型;3、Struts讀取JavaBean的用戶名、口令和用戶類型;4、Struts通過遠(yuǎn)程接口調(diào)用SessionFacade的actorLogin(String username,String P

20、assword,int actortype)方法;5、SessionFacade通過本地接口調(diào)用Entity Bean(Actor)的findByName(String username,int actortype)方法;6、SessionFacade獲取Entity Bean(Actor)的findByName(String username,int actortype)方法的返回值;7、SessionFacade在actorLogin(String username,String Password,int actortype)方法中比較Entity Bean(Actor)的findByNa

21、me(String username,int actortype)得到的password的值;8、如果兩個(gè)password的值相等,則actorLogin(String username,String Password,int actortype)返回true,否則返回false;9、Struts根據(jù)SessionFacade的actorLogin(String username,String Password,int actortype)的返回值(true or false)判斷登錄是否成功,并導(dǎo)航到對(duì)應(yīng)的頁(yè)面。6.3.2 登錄流程的代碼/*-*/1、用戶登錄界面 - login.jsp!-

22、 部分HTML代碼此處省略 - form name="teaForm" method="post" action="%=contextPath%/login.do"table border="0" cellspacing="0" cellpadding="0"trtd width="60"font size="2"用戶類型/font/tdtdinput type="radio" value="0"

23、 name="actortype" checkedfont size="2"系統(tǒng)管理員 /fontinput type="radio" value="1" name="actortype"font size="2"學(xué)生 /fontinput type="radio" value="2" name="actortype"font size="2"老師 /font/td/trtrtd width=&q

24、uot;60"font size="2"用戶名/font/tdtdinput name="username" value="" size="12" */td/trtrtd width="60"font size="2"口令/font/tdtdinput type="password" name="password" value="" size="8" maxlength="8&

25、quot; */td/tr/tablebrtable border="0" cellspacing="0" cellpadding="0"trtd width="50" /tdtdinput type="submit" value="登 錄"/td/tr/table/form/*-*/2、Struts程序 /2.1 LoginForm.java(存儲(chǔ)用戶在頁(yè)面上提交的用戶名、口令和用戶類型)package com.chenxc.coursesonline.s

26、truts;/* Title: LoginForm* Description: 存儲(chǔ)登錄信息* Time: 2004-3-20* Company: * Author: chenxc* version 1.0*/import java.util.*;public class LoginForm extends org.apache.struts.action.ActionFormprivate String username; /用戶名private String password; /口令private int actortype; /用戶類型/用戶名public void setUserna

27、me(String username) this.username = username;public String getUsername() return username;/口令public void setPassword(String password) this.password = password;public String getPassword() return password;/用戶類型public void setActortype(int actortype)this.actortype = actortype;public int getActortype()re

28、turn actortype;/2.2 LoginAction.java(控制登錄流程的走向)package com.chenxc.coursesonline.struts;/* Title: LoginAction* Description: 登錄驗(yàn)證* Time: 2004-3-20* Company: * Author: chenxc* version 1.0*/import java.io.*;import javax.servlet.*;import javax.servlet.http.*;import java.util.*;import org.apache.struts.ac

29、tion.*;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.ServletException;import com.chenxc.coursesonline.struts.*;public class LoginAction extends org.apache.struts.action.Actionpublic ActionForward execute(ActionMapping mapping,ActionFo

30、rm actionForm,HttpServletRequest request,HttpServletResponse response) throws ExceptionActionErrors errors = new ActionErrors();HttpSession session = request.getSession();ActionForward forward = null;LoginForm loginForm = (LoginForm)actionForm;FacadeBean facadeBean = new FacadeBean();if(facadeBean.a

31、ctorlogin(loginForm.getUsername(),loginForm.getPassword(),loginForm.getActortype()forward = mapping.findForward("success");return forward;return (new ActionForward(mapping.getInput();/2.3 FacadeBean.java(實(shí)現(xiàn)登錄驗(yàn)證)package com.chenxc.coursesonline.struts;/* Title: FacadeBean* Description: 負(fù)責(zé)與S

32、ession Bean溝通* Time: 2004-3-20* Company: * Author: chenxc* version 1.0*/import com.chenxc.coursesonline.ejb20.*;import javax.naming.*;import java.util.Properties;import javax.rmi.PortableRemoteObject;import javax.ejb.CreateException;import java.rmi.RemoteException;public class FacadeBeanextends Obje

33、ct private static final String ERROR_NULL_REMOTE = "Remote interface reference is null. It must be created by calling one of the Home interface methods first."private static final int MAX_OUTPUT_LINE_LENGTH = 100;private CoursesFacadeHome coursesFacadeHome = null;private CoursesFacade cour

34、sesFacade = null;/Construct the FacadeBeanpublic FacadeBean() initialize();public void initialize() try /get naming contextContext context = getInitialContext();/look up jndi nameObject ref = context.lookup("CoursesFacade");/look up jndi name and cast to Home interfacecoursesFacadeHome = (

35、CoursesFacadeHome) PortableRemoteObject.narrow(ref,CoursesFacadeHome.class);catch (Exception e) e.printStackTrace();private Context getInitialContext() throws Exception String url = "t3:/34:7001"String user = null;String password = null;Properties properties = null;try propert

36、ies = new Properties();properties.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");properties.put(Context.PROVIDER_URL, url);if (user != null) properties.put(Context.SECURITY_PRINCIPAL, user);properties.put(Context.SECURITY_CREDENTIALS,password = null ? "&

37、quot; : password);return new InitialContext(properties);catch (Exception e) throw e;/actorloginpublic boolean actorlogin(String username, String password, int actortype) try coursesFacade = coursesFacadeHome.create();if (coursesFacade.actorLogin(username, password, actortype) return true;elsereturn

38、false;catch (CreateException ex) ex.printStackTrace();catch (RemoteException ex) ex.printStackTrace();return false;/*-*/3、Session Bean程序 /3.1 SessionFacadeHome.javapackage com.chenxc.coursesonline.ejb20;import javax.ejb.*;import java.util.*;import java.rmi.*;public interface SessionFacadeHome extend

39、s javax.ejb.EJBHome public SessionFacade create() throws CreateException, RemoteException;/3.2 SessionFacade.javapackage com.chenxc.coursesonline.ejb20;import javax.ejb.*;import java.util.*;import java.rmi.*;public interface SessionFacade extends javax.ejb.EJBObject public boolean actorLogin(String

40、actor, String password, int actortype) throwsRemoteException;/3.2 SessionFacadeBean.javapackage com.chenxc.coursesonline.ejb20;import javax.ejb.*;import javax.naming.*;import java.rmi.RemoteException;public class SessionFacadeBean implements SessionBean SessionContext sessionContext;ActorHome actorH

41、ome;Actor actor;public void ejbCreate() throws CreateException tryContext ctx = new InitialContext();actorHome = (ActorHome)ctx.lookup("Actor");catch (Exception ex) throw new EJBException(ex);public void ejbRemove() /*todo Complete this method*/public void ejbActivate() /*todo Complete thi

42、s method*/public void ejbPassivate() /*todo Complete this method*/public void setSessionContext(SessionContext sessionContext) this.sessionContext = sessionContext;public boolean actorLogin(String username, String password, int actortype) tryactor = actorHome.findByName(username,actortype);if(actor.

43、getPassword().equals(password)System.out.println(username + " 登錄成功!");return true;catch(ObjectNotFoundException ex) catch(Exception ex) ex.printStackTrace();return false;/*-*/4、為Entity Bean(Actor)新增一個(gè)findByName的Finder,如下圖Finder名findByName,返回值A(chǔ)ctor,輸入?yún)?shù)用戶名,用戶類型,接口local home,EJB-QL: SELECT O

44、BJECT(a) FROM Actor AS a WHERE a.username = ?1 AND a.actortype = ?26.3.3 階段總結(jié)Client - Struts - Session Bean - Entity Bean,實(shí)現(xiàn)一個(gè)登錄流程用了十幾個(gè)java程序,真是累人的說(shuō)。一個(gè)JSP程序就可以實(shí)現(xiàn)的功能卻要大陣戰(zhàn)對(duì)待,殺雞用牛刀乎?答案是否定的,因?yàn)镋JB存在的意義在于分布式計(jì)算和分層的思想。6.4未完成的寫到這里,CoursesOnline系統(tǒng)只實(shí)現(xiàn)了系統(tǒng)登錄驗(yàn)證的功能,主要的業(yè)務(wù)邏輯基本上沒實(shí)現(xiàn),但MVC框架,F(xiàn)acade Design Pattern都或多或少有所

45、描述,繼續(xù)完成CoursesOnline系統(tǒng)應(yīng)該不會(huì)太困難。另外由于使用CMP查詢記錄集時(shí)處理起來(lái)比較麻煩,所以在瀏覽課程或?yàn)g覽學(xué)生等記錄集查詢時(shí)可以考慮用BMP來(lái)實(shí)現(xiàn),或者干脆在Session Bean實(shí)現(xiàn)。附錄A 開發(fā)環(huán)境的配置對(duì)于JBuilder、Oracle9i、WebLogic 7、WebLogic Domain的安裝配置除參考相關(guān)的安裝手冊(cè)外,可參考本欄目發(fā)表的Jbuilder9+Oracle9i+Weblogic8.1安裝配置A. 配置Jbuilder 9A.選擇Tools-Configure Servers配置Server信息Home Directory:選擇Weblogic安

46、裝目錄下的Server目錄,如:C:beaweblogic700serverMain Class,VM Parameters:系統(tǒng)會(huì)自動(dòng)獲得,不用修改Working Directory:創(chuàng)建的新Domain目錄 如:C:beauser_projectsmydomainClass 中:由于沒有Weblogic的SP包,刪除weblogic_sp.jar包,僅保留weblogic.jarJDK Install directory:選擇安裝Weblogic目錄下的JDK目錄 如:D:beajdk131_03BEA Home directory: 選擇安裝Weblogic目錄 如:C:beaUser

47、Name and Password:創(chuàng)建Domain時(shí)Administor的用戶名稱和密碼。Domain Name and Server Name:系統(tǒng)會(huì)自動(dòng)獲得配置缺省工程的Server信息(Project-Default Projects Properties)這樣一來(lái)新建的工程默認(rèn)情況下就使用這種Server配置配置數(shù)據(jù)庫(kù)驅(qū)動(dòng)點(diǎn)擊Add按鈕在本機(jī)Oracle的目錄下選擇Oracle JDBC lib的路徑,如D:OracleOra92jdbclibclasses12.jar配置數(shù)據(jù)庫(kù)驅(qū)動(dòng)后需重啟JB才能使設(shè)置生效附錄B 參考資料1)Mastering EJB 22)Enterprise

48、JavaBeans, 3rd Edition3)EJB Design Pattern4)5)附錄C 建表及表初始化的sql腳本C.1 建表CREATE TABLE Appointment (ActorID SMALLINT NOT NULL,CoursesID SMALLINT NOT NULL);ALTER TABLE Appointment ADD ( PRIMARY KEY (ActorID, CoursesID) ) ;CREATE TABLE Courses (CoursesID SMALLINT NOT NULL,CoursesName VARCHAR(30) NULL,StartDate DATE NULL,EndDate DATE NULL,RoomID SMALLINT NULL,ActorID SMALLINT NULL);ALTER TABLE Courses

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論