![【J2EE OA】 項(xiàng)目開發(fā)日記_第1頁](http://file4.renrendoc.com/view/186b880d8a38e26f16df066f94d9fa02/186b880d8a38e26f16df066f94d9fa021.gif)
![【J2EE OA】 項(xiàng)目開發(fā)日記_第2頁](http://file4.renrendoc.com/view/186b880d8a38e26f16df066f94d9fa02/186b880d8a38e26f16df066f94d9fa022.gif)
![【J2EE OA】 項(xiàng)目開發(fā)日記_第3頁](http://file4.renrendoc.com/view/186b880d8a38e26f16df066f94d9fa02/186b880d8a38e26f16df066f94d9fa023.gif)
![【J2EE OA】 項(xiàng)目開發(fā)日記_第4頁](http://file4.renrendoc.com/view/186b880d8a38e26f16df066f94d9fa02/186b880d8a38e26f16df066f94d9fa024.gif)
![【J2EE OA】 項(xiàng)目開發(fā)日記_第5頁](http://file4.renrendoc.com/view/186b880d8a38e26f16df066f94d9fa02/186b880d8a38e26f16df066f94d9fa025.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、我現(xiàn)在正在做一個(gè)J2EE的OA項(xiàng)目,基于安全保密考慮,項(xiàng)目名稱以下稱為J2EEOA?,F(xiàn)在,項(xiàng)目的系統(tǒng)需求和設(shè)計(jì)階段都已做完,正處在編碼階段。在這個(gè)過程中有很多開發(fā)心得和體會,不吐不快。在這里,整理出來與大家一同分享。 文章中應(yīng)用大量專業(yè)術(shù)語,所以在閱讀前,您應(yīng)有一定的基礎(chǔ)知識,如java language、jsp、servlet、j2ee、ejb、ejb-ql、structs(MVC)、jboss、ant等。為了幫助大家更好的閱讀,把相關(guān)知識鏈接列在下面。 1JBoss Application Server : HYPERLINK / t _blank / 或者 HYPERLINK /proj
2、ects/jboss/%20 t _blank /projects/jboss/ 2Java Language Specification HYPERLINK /docs/books/jls/ t _blank /docs/books/jls/ 或者 HYPERLINK /products/javahelp/whitepaper.html t _blank /products/javahelp/whitepaper.html 3JDK HYPERLINK /j2se t _blank /j2se 4J2EE HYPERLINK /j2ee t _blank /j2ee 5ANT HYPERLI
3、NK /ant/index.html t _blank /ant/index.html 6Structs HYPERLINK /struts/ t _blank /struts/ 7JSP HYPERLINK /products/jsp/ t _blank /products/jsp/ 8Servlet HYPERLINK /products/servlet/ t _blank /products/servlet/ 9EJB HYPERLINK /products/ejb/ t _blank /products/ejb/ 10EJB-QL HYPERLINK /j2ee/tutorial/1_
4、3-fcs/doc/EJBQL.html t _blank /j2ee/tutorial/1_3-fcs/doc/EJBQL.html安裝和配置JBoss Application Server今天的工作主要是安裝JBoss。下面在介紹JBoss之后重點(diǎn)講解配置JBoss Application Server后我總結(jié)出的經(jīng)驗(yàn)。 為什么要選擇JBoss作應(yīng)用服務(wù)器?JBoss是一個(gè)符合標(biāo)準(zhǔn)的開放源碼的J2EE應(yīng)用服務(wù)器套件的名稱,當(dāng)前最新版本為3.0。JAS套件包括JBossServer EJB v2.0 Container 和server, JBossMQ JMS 1.0 implemetati
5、on, JBossNS JNDI implemetation,JBossCMP advanced O/R mapper和JDBC data object storage implemetation以及JAAS-based JBossSX security frameeork。所有的JBoss應(yīng)用程序都是100%純java應(yīng)用程序。 JBoss 3.0包括最新的微型JMX內(nèi)核、完整的HTTP Server(Jetty或Tomcat)、JCA、EJB2.0,是一個(gè)完整的、豐富的基于J2EE規(guī)范的應(yīng)用服務(wù)器。 JBoss3.0遵循EJB1.1規(guī)范和部分EJB2.0規(guī)范。在這方面,它類似Suns J2
6、SDK Enterprise Edition (J2EE),但JBoss服務(wù)器內(nèi)核僅支持EJB服務(wù)器。JBoss內(nèi)核不包括支持Severlet/JSP的WEB包容器,盡管它捆扎了Tomcat或Jetty。最小內(nèi)核需要是指JBoss要求的最小內(nèi)存和磁盤空間。JBoss可以運(yùn)行在內(nèi)存為64MRAM的機(jī)器上,要求很少的磁盤空間(包括源代碼)。Suns J2EE要求最少128MRAM、31M磁盤空間。由于要求較小內(nèi)存方面的原因,JBoss啟動(dòng)比Sun J2EE快10倍并自帶了一個(gè)數(shù)據(jù)庫服務(wù)器(Hypersonic SQL Server),在JBoss啟動(dòng)時(shí)數(shù)據(jù)庫服務(wù)器自動(dòng)啟動(dòng)(Suns J2EE也自帶
7、了一個(gè)CloudScape SQL server,但CloudScape SQL server必須同Suns J2EE分開啟動(dòng))。 JBoss完美的功能之一是它支持“熱”部署。這個(gè)意思是部署一個(gè)Bean就是拷貝JAR文件到部署目錄那么簡單。如果你正在Bean已經(jīng)部署的情況下進(jìn)行這個(gè)操作,JBoss自動(dòng)卸載Bean,再部署新版本的Bean。JBoss是基于LGPL的分發(fā),也就是說它是完全免費(fèi)的。 (編譯自:) 安裝JAS3.0首先在Windows下安裝JAS,安裝成功后,再將JAS移植到Linux服務(wù)器上。 安裝JDK1.3,在安裝JAS之前,必須在JAS服務(wù)器上安裝JDK。 下載JAS3.0的
8、安裝程序 首先去JBoss站點(diǎn)下載JAS3.0的安裝程序,文件名jboss-3.0.0_tomcat-4.0.31.zip 下載地址1: HYPERLINK /downloads.jsp t _blank /downloads.jsp 下載地址2: HYPERLINK /projects/jboss/ t _blank /projects/jboss/ 釋放安裝程序 下載后,使用壓縮工具WinRAR,把jboss-3.0.0_tomcat-4.0.31.zip釋放到c:,釋放之后,在c:下出現(xiàn)jboss-3.0.0_tomcat-4.0.3目錄,它就是JAS的主目錄。 運(yùn)行JAS JAS的主目
9、錄下有一個(gè)bin目錄,它是JAS的運(yùn)行入口,run.bat是JAS的windows版運(yùn)行程序,ruh.sh是JAS的unix版(包括linux、solaris等操作系統(tǒng))運(yùn)行程序。雙擊run.bat文件,彈出運(yùn)行窗口。 圖片1 剛開始運(yùn)行JAS的窗口圖片2 運(yùn)行中的JAS窗口JAS運(yùn)行成功后,8080端口被Tomcat的Servlet引擎占用,8082端口被JBoss的代理管理占用。Tomcat占用的8080端口可以被修改的,下面將會介紹到。 JAS的目錄及其描述 約定說明:在下面,我將JAS中的一些目錄進(jìn)行說明和描述。 JAS的主目錄描述為$jboss.home JAS的bin目錄名稱為bi
10、n,描述為$jboss.bin,它用來存放JAS的啟動(dòng)程序和運(yùn)行時(shí)的包,在Windows下JAS的啟動(dòng)程序?yàn)閞un.bat,在Unix下JAS的啟動(dòng)程序?yàn)閞un.sh。 JAS的client目錄名稱為client,描述為$jboss.client,它用來存放JAS所用的一些包。 J2EE Application 所在目錄名稱描述為$jboss.configuration,JAS在缺省狀態(tài)下的名稱為default,可以通過在運(yùn)行啟動(dòng)程序時(shí)加上參數(shù)“-c”來指定名稱。例如: run.bat -c J2EEOAJAS的庫目錄描述為$jboss.home/server/$jboss.configura
11、tion/lib,在JAS啟動(dòng)時(shí),JAS會自動(dòng)加載此目錄下所有的庫文件(擴(kuò)展名為JAR的壓縮文件)。 JAS的部署目錄描述為$jboss.home/server/$jboss.configuration/deploy,此目錄存放J2EE Application、EJB和一些配置文件,如mysql-service.xml、mail-service.xml、tomcat4-service.xml、jms-service.xml等。 JAS的配置目錄描述為$jboss.home/server/$jboss.configuration/conf,此目錄存放JAS的配置文件,如jboss-service
12、.xml、log4j.xml、standardjaws.xml、standardjboss.xml、standardjbosscmp-jdbc.xml等。 JAS日志目錄描述為$jboss.home/server/$jboss.configuration/log,JAS在缺省狀態(tài)下的日志文件名為server.log。,可以通過在修改log4j.xml來指定日志文件名,如下所示: 圖片3 修改log4j.xml指定日志文件JAS的Tomcat目錄描述為$jboss.home/catalina,它用來提供Servlet/JSP引擎。 下面是一個(gè)簡單的JBoss目錄結(jié)構(gòu)圖: |-bin|-clien
13、t|-server |-$jboss.configuration|-conf|-deploy|-log讓JBoss和自帶的Tomcat同時(shí)運(yùn)行 JAS3.0自帶了一個(gè)Tomcat Web包容器,但初裝時(shí),Tomcat是不能單獨(dú)啟動(dòng)的,必須在JAS內(nèi)運(yùn)行。通過如下配置可以讓Tomcat單獨(dú)運(yùn)行。 修改JAS下的tomcat4-service.xml文件,將Tomcat的Http端口設(shè)為9090,下面是tomcat4-service.xml的部分代碼: 圖片4 修改Tomcat的Http端口 拷貝$jboss.home/lib目錄下的兩個(gè)JAR文件jaxp.jar、crimson.jar到$jbo
14、ss.home/catalina/common/lib目錄。 分別啟動(dòng)Tomcat和JBoss。在$jboss.home/catalina/bin目錄下輸入startup.bat。tomcat運(yùn)行了,它占用了8080端口。在$jboss.home/bin目錄下輸入run.bat,JBoss也運(yùn)行了,它的HTTP 引擎占用了9090端口。 到此JAS已經(jīng)可以用了,下面來配置JAS連接數(shù)據(jù)庫。 連接數(shù)據(jù)庫說明:項(xiàng)目要求的數(shù)據(jù)庫為Mysql數(shù)據(jù)庫,故必須將JAS和mysql數(shù)據(jù)庫服務(wù)器連接起來。 下載mysql的jdbc驅(qū)動(dòng)程序 由于用jdbc連接mysql要使用org.gjt.mm.mysql.D
15、river驅(qū)動(dòng)程序,故先下載mysql的jdbc驅(qū)動(dòng)程序,按下面的地址將文件mm.mysql-2.0.13-you-must-unjar-me.jar下載下來。 下載地址: HYPERLINK /projects/mmmysql/ t _blank /projects/mmmysql/ 釋放驅(qū)動(dòng)程序 上面下載的驅(qū)動(dòng)程序包括了mm.mysql-2.0.13-bin.jar、開放的源代碼和一個(gè)LICENSE,用WinRAR釋放壓縮文件,其中mm.mysql-2.0.13-bin.jar就是mysql的jdbc驅(qū)動(dòng)程序,驅(qū)動(dòng)程序文件名中的2.0.13是驅(qū)動(dòng)程序的版本號。 配置驅(qū)動(dòng)程序 方法一:(推薦
16、使用此方法) 將mm.mysql-2.0.13-bin.jar拷貝到JAS的庫目錄即$jboss.home/server/$jboss.configuration/lib 方法二: 在系統(tǒng)變量中加入JBOSS_CLASSPATH,值為mm.mysql-2.0.13-bin.jar的位置: 例如: 在Windows操作系統(tǒng)下set JBOSS_CLASSPATH= c:J2EEjdbcmm.mysql-2.0.13mm.mysql-2.0.13-bin.jar圖片5 設(shè)置系統(tǒng)變量JBOSS_CLASSPATH在Unix操作系統(tǒng)下setenv JBOSS_CLASSPATH /usr/local/
17、jdbc/mm.mysql-2.0.13-bin.jar在Linux操作系統(tǒng)下JBOSS_CLASSPATH=/usr/local/jdbc/mm.mysql-2.0.13-bin.jarexport JBOSS_CLASSPATH安裝Mysql服務(wù) $jboss.homedocsexamplesjca目錄存放著JAS提供的數(shù)據(jù)庫映射服務(wù)配置文件,包括Oracle、DB2、Informix、MsSQL、Mysql、Hypersonic SQL、Postgres SQL等很多期望的數(shù)據(jù)庫。將mysql-service.xml文件拷貝到$jboss.home/server/$jboss.confi
18、guration/deploy目錄。 配置mysql-service.xml 在mysql-service.xml中修改以下幾項(xiàng)的值,其它項(xiàng)是否要改根據(jù)情況而定。 JndiName ConnectionURL DriverClass UserName Password myProjectDS jdbc:mysql:/myProject org.gjt.mm.mysql.Driver test test jboss.jca:service=RARDeployment,name=JBoss LocalTransaction JDBC Wrapper 源代碼: HYPERLINK /pub/html
19、/developer/file/j2eediary/files/1_mysql-service.xml t _blank 立即下載 到此,所有的準(zhǔn)備工作都做好了,現(xiàn)在只需運(yùn)行JAS,看一看這臺連接Mysql數(shù)據(jù)庫的JAS是否配好了。 如果JAS在Windows下運(yùn)行正常,就把JAS移植到Linux服務(wù)器上。在Linux 服務(wù)器上運(yùn)行JAS要用run.sh來啟動(dòng)。開發(fā)前的約定(1)今天進(jìn)入可開發(fā)前的準(zhǔn)備階段。在開發(fā)項(xiàng)目前,要求每位開發(fā)小組成員都必須先閱讀以下約定,嚴(yán)格按以下約定來進(jìn)行開發(fā)。 系統(tǒng)框架系統(tǒng)總框架采用SUN J2EE框架,使用JAVA/XML技術(shù)和組件技術(shù), 基于Applicatio
20、n server開發(fā)。 項(xiàng)目中的程序必須嚴(yán)格按J2EE1.3規(guī)范來編碼,EJB建議采用2.0規(guī)范編碼,盡可能多使用EJB 模式設(shè)計(jì),參考技術(shù)文檔如下: 1. HYPERLINK /j2ee/tutorial/download.html t _blank J2EE Tutorial HYPERLINK /j2ee/tutorial/index.html t _blank j2ee-1_3-doc-tutorial-draft5.pdf 2. HYPERLINK /developers/guides/quickstart.jsp t _blank JBoss 3.0Quick Start Guid
21、e 3. HYPERLINK /books/ejbdesignpatterns.pdf t _blank EJB Design Patterns 開發(fā)環(huán)境測試用Application server采用JAS,JAS 配置于Linux OS下,IP地址:。登錄用戶名:J2EEOA,密碼:J2EEOA。登錄ftp工具建議使用SSH Secure Shell或LeapFTP,ftp地址為:22。 項(xiàng)目開發(fā)源碼目錄為/home/local/jboss/applications/J2EEOA/src,項(xiàng)目開發(fā)文檔目錄為/home/product/J2EEOA/。 數(shù)據(jù)庫服務(wù)器IP為22,數(shù)據(jù)庫采用Mys
22、ql,管理工具為phpadmin,登錄數(shù)據(jù)庫的用戶名為test,密碼為test。 源代碼目錄規(guī)范每位開發(fā)小組成員一定要絕對遵守以下創(chuàng)建源代碼目錄的規(guī)范。 項(xiàng)目開發(fā)目錄結(jié)構(gòu)簡圖: |-apps |-J2EEOA |-admin|-components |-a component|-modules |-a module|-lib |-ant|-perties圖片6 項(xiàng)目開發(fā)目錄結(jié)構(gòu)圖項(xiàng)目開發(fā)目錄結(jié)構(gòu)說明: (說明:根目錄)|-apps (說明:此目錄下放應(yīng)用程序的代碼) |-J2EEOA (說明:此目錄為放J2EEOA應(yīng)用程序的代碼) |-admin (說明:此目錄為放項(xiàng)目的admin應(yīng)用程序的代
23、碼)|-components (說明:此目錄下放應(yīng)用程序組件的代碼) |-a component (說明:此目錄為放一個(gè)組件的代碼)|-modules (說明:此目錄下放應(yīng)用程序模塊的代碼) |-a module (說明:此目錄為放一個(gè)模塊的代碼)|-lib (說明:此目錄下放項(xiàng)目開發(fā)工具) |-ant (說明:Ant工具,包括bin和lin目錄)|-perties (說明:此文件定義項(xiàng)目開發(fā)共用的環(huán)境變量,如jboss.home、jboss.configuration、servlet-lib.path等)模塊、組件開發(fā)目錄結(jié)構(gòu)簡圖: |-build|-etc |-multi-langs|-l
24、ib |-docs |-ejb |- META-INF |-j2ee |-META-INF |-web |-WEB-INF|-src |-ejb |-javabean |-servlet |-web|-build.bat|-build.sh|-build.xml圖片7 模塊、組件目錄結(jié)構(gòu)圖說明:src、etc目錄和build.bat、build.sh、build.xml為開發(fā)人員建立的目錄,build和lib目錄為由ant工具生成的目錄。 模塊、組件開發(fā)目錄結(jié)構(gòu)說明 (說明:一個(gè)模塊或一個(gè)組件的根目錄)|-build (說明:保存由ant工具生成的擴(kuò)展名為jar、war、ear等文件)|-et
25、c (說明:存放部署文件,如web.xml、ejb-jar.xml、application.xml、jaws.xml、jbosscmp-jdbc.xml等) |-multi-langs (說明:存放多語言資源文件,擴(kuò)展名為properties,)|-lib (說明:保存由ant工具生成的API文件、class文件等) |-docs |-api |-ejb |- META-INF |-j2ee |-META-INF |-web |-WEB-INF|-src (說明:存放源代碼,包括java和jsp代碼,下面有四個(gè)目錄。) |-ejb (說明:采用EJB進(jìn)行開發(fā),存放EJB和Helper Clas
26、ses源代碼。) |-javabean (說明:采用Javabean進(jìn)行開發(fā),存放Javabean和Helper Classes源代碼。) |-servlet (說明:存放Servlet源代碼。) |-web (說明:存放JSP源代碼。)|-build.bat (說明:在Window OS下,進(jìn)行build的文件。)|-build.sh (說明:在Unix OS下,進(jìn)行build的文件。)|-build.xml (說明:Ant工具要build的目標(biāo)文件。)應(yīng)用程序開發(fā)目錄結(jié)構(gòu)簡圖: |-build|-etc|-lib |-docs |-ejb |- META-INF |-j2ee |-META
27、-INF |-web |-WEB-INF|-team |-a member|-ejb|-javabean|-web|-build.bat|-build.sh|-build.xml|-perties圖片8 應(yīng)用程序目錄結(jié)構(gòu)圖應(yīng)用程序開發(fā)目錄結(jié)構(gòu) 1. 由于項(xiàng)目由多個(gè)程序員一起來進(jìn)行編碼,所以應(yīng)用程序開發(fā)目錄結(jié)構(gòu)和模塊、組件開發(fā)目錄結(jié)構(gòu)的不一樣。 2. 應(yīng)用程序開發(fā)目錄結(jié)構(gòu)沒有src目錄,但多了一個(gè)team目錄,此目錄存放所有程序員的classes和Jsp代碼。 3. 應(yīng)用程序開發(fā)目錄結(jié)構(gòu)下build.xml和模塊、組件開發(fā)目錄結(jié)構(gòu)下的build.xml有很大不同。 4. 由項(xiàng)目組長負(fù)責(zé)管理etc
28、目錄、build.xml、build.bat、build.sh、perties,程序員分別管理team目錄下的屬于自己的目錄,如程序員tom管理team/tom目錄。開發(fā)前的約定(2)build.xml編碼規(guī)范 應(yīng)用程序目錄下的build.xml 源代碼: HYPERLINK /pub/html/developer/file/j2eediary/files/2_build_for_application_templet.xml t _blank 應(yīng)用程序目錄下的build.xml規(guī)范模板 說明:在建立build.xml時(shí),組長只需修改創(chuàng)建的時(shí)間和變量ProjectName等。 模塊、組件目錄下
29、的build.xml 源代碼: HYPERLINK /pub/html/developer/file/j2eediary/files/3_build_for_components_templet.xml t _blank 模塊、組件目錄下的build.xml規(guī)范模板 說明:在建立build.xml時(shí),開發(fā)人員只需修改創(chuàng)建的時(shí)間和和變量ProjectName、componentName等。 編碼規(guī)范 項(xiàng)目中的JAVA源代碼必須按JAVA開發(fā)規(guī)范。 項(xiàng)目中的JSP代碼必須按JSP開發(fā)規(guī)范。 每位開發(fā)小組成員在開發(fā)項(xiàng)目時(shí)都嚴(yán)格按此規(guī)范來進(jìn)行編寫程序,讓項(xiàng)目中所有的文檔都看起來像一個(gè)人寫的,增加可讀性
30、,減少項(xiàng)目組中因?yàn)閾Q人而帶來的損失。 每位開發(fā)小組成員一定要絕對遵守這個(gè)規(guī)范。當(dāng)實(shí)際應(yīng)用與下面的規(guī)范相抵觸時(shí),記錄下原因、潛在后果,以及符合規(guī)范需要的條件,但必須是在讓程序有良好的可讀性的前提下。 功能模塊在做業(yè)務(wù)邏輯模塊前,先把一些準(zhǔn)備工作做出來: 建立一些公用的bean(項(xiàng)目中稱為系統(tǒng)控制器controller),包名為com.cwap.oa.controller.*,提供給系統(tǒng)各模塊使用。包括對時(shí)間、字符的操作,調(diào)試器,軟件國際化,多語言版本,系統(tǒng)的WEB外殼,MVC模式的Servlet和Action,對WEB頁面顯示的控制如樹結(jié)構(gòu)、路徑結(jié)構(gòu);等等。 建立一個(gè)序列發(fā)生器,包名為com.c
31、wap.oa.sequencegenerator.*,提供給bean使用,它用來產(chǎn)生一個(gè)唯一的ID,而且也可用來計(jì)數(shù),也就是把它當(dāng)成計(jì)數(shù)器使用。介紹如何取id的方法的文字要寫在bean的代碼內(nèi),以便生成API后供其它開發(fā)人員參閱。 建立一個(gè)ServerFacade,它為EJB Home提供統(tǒng)一的接口。ServerFacade為程序要用到的所有EJB的home handle提供緩存,提高訪問效率。以后查找JNDI Name的方法都應(yīng)寫在接口里,調(diào)用時(shí)直接從接口調(diào)用。 建立一個(gè)翻頁控制器,包名為com.cwap.oa.controller.web.page*,用來進(jìn)行分頁顯示的管理,以后頁面中的分
32、頁都由翻頁控制器管理。 異常處理和日志 程序中所有的異常處理使用統(tǒng)一的調(diào)試器,bean的名稱為com.cwap.oa.controller.util.Debug,用法見項(xiàng)目API。 程序中所有的日志使用Jakarta-log4j管理,包的名稱為log4j-1.2.5.jar 官方URL:/log4j/docs/index.html Session 放在session中的變量統(tǒng)一放在一個(gè)bean里存儲,不直接把session變量名稱放在JSP、Servlet或Bean內(nèi),存儲session變量名稱的bean為com.cwap.oa.controller.web.util.WebKeys,取ses
33、sion變量名的方法為getXX()。 取session變量的值的方法統(tǒng)一放在一個(gè)bean里,bean的名稱為com.cwap.oa.controller.web.util.JSPUtil,取session變量值的方法為getXX(),之后要取session變量值就調(diào)用JSPUtil中對應(yīng)的方法。 當(dāng)前系統(tǒng)中已知的session變量名有userid、userName、locale、skin等,userid為用戶標(biāo)識,userName為用戶名稱,locale為用戶選擇的地域,skin為用戶選擇的界面風(fēng)格。 DAO使用DAO封裝SQL語言對數(shù)據(jù)庫的直接操作,DAO采用Factory模式編寫。 組件
34、所有的業(yè)務(wù)邏輯使用組件技術(shù)。每個(gè)組件內(nèi)同時(shí)提供EJB版本和DAO版本兩種的方法,不推薦直接使用EJB版本和DAO版本的方法。 多語言版本 Bean、Servlet、JSP中的多語言文字采用分離技術(shù),將多語言文字放在資源文件中,保存目錄為/WEB-INF/classes/multi-langs或其它目錄。 當(dāng)前支持的語言有三種:簡體中文(zh_CN)、繁體中文(zh_HK)、英文(en_US)。 多語言管理器的名稱為com.cwap.oa.controller.util.MultiLangsString,使用方法見本項(xiàng)目API。 WEB外殼 JSP頁面中的圖片、CSS、JS等文件都應(yīng)放在統(tǒng)一目錄
35、,目錄為/skin/skinName/skinLanguage,其中skinName為外殼名稱,skinLanguage為外殼語言版本,例如/skin/green/zh_CN 圖片放在images目錄里,CSS文件放在css目錄里,JS腳本放在js目錄里,其它資源(如聲音、視頻、Flash文件等)存放方法見項(xiàng)目API。 外殼管理器為com.cwap.oa.controller.web.skin.WebSkin,調(diào)用方法統(tǒng)一接口為com.cwap.oa.controller.web.util.JSPUtil。 在線幫助 在線幫助管理器為com.cwap.oa.help.*,調(diào)用方法統(tǒng)一接口為co
36、m.cwap.oa.help.client.HelpClientHelper。 每一個(gè)JSP頁面中提供一個(gè)在線幫助鏈接,用戶點(diǎn)擊它直接進(jìn)入到在線幫助中心。 用戶管理 建立一個(gè)取用戶名稱的頁面,功能包括只取一個(gè)用戶和取多個(gè)用戶。 打開取用戶名稱頁面的方法,使用頁面腳本,javascript:return openWinToGetEmployee(frame,id,name,num),當(dāng)num為0,代表可以取多個(gè)用戶,否則,只能取1個(gè)用戶。 權(quán)限管理 調(diào)用方法統(tǒng)一接口為com.cwap.oa.controller.web.util.JSPUtil,檢查用戶是否有權(quán)限的方法為JSPUtil.isPe
37、rmission(userid, permissions) JSP中檢驗(yàn)用戶身份采用include方式,include的文件為checkUser.jsp 檢驗(yàn)用戶身份是否是一般用戶,調(diào)用方法為 檢驗(yàn)用戶身份是否是管理員,調(diào)用方法為 檢驗(yàn)用戶身份是否是超級管理員,調(diào)用方法為 如何完成多語言和多界面風(fēng)格今天在開發(fā)過程中遇到了些小麻煩:在需求分析中,有這樣一個(gè)功能“網(wǎng)頁風(fēng)格個(gè)性化功能:用戶可以選擇網(wǎng)頁的風(fēng)格、顏色等”。為了實(shí)現(xiàn)此功能,系統(tǒng)中設(shè)計(jì)了一個(gè)外殼管理器。用戶選擇外殼和語言后,把參數(shù)保存在session中,外殼管理器定位JSP頁面中圖片等資源的路徑。美工在設(shè)計(jì)Demo時(shí),將頁面設(shè)計(jì)成若干界面風(fēng)
38、格,如包括天藍(lán)色、銀白色、翡翠綠、粉紅色、紫羅蘭、金屬、古典、現(xiàn)代等。 系統(tǒng)如何支持多語言版本呢?多語言資源包括文字、標(biāo)點(diǎn)符號、日期、貨幣符號、包含文字的圖片、聲音、視頻、圖形等。 1.文字、標(biāo)點(diǎn)符號、日期、貨幣符號等資源放入資源文件中,由多語言管理器進(jìn)行統(tǒng)一管理。 2.包含文字的圖片、聲音、視頻、圖形等資源放在WEB外殼中,由外殼管理器進(jìn)行管理。 由外殼管理的資源也可采用多語言管理器來管理。這里采用外殼管理器管理的原因,主要是考慮到WEB頁面風(fēng)格的因素以及WEB的易維護(hù)性。 這里以顯示多語言文字做一個(gè)簡單的示例: import com.cwap.oa.controller.util.Mult
39、iLangsString; import com.cwap.oa.controller.util.MultiLangsUtil; public class MultiLangsDemo public static void main(String argv) MultiLangsString multiLangs; if(argv.length0)multiLangs = new MultiLangsString(main,argv0);elsemultiLangs = new MultiLangsString(main,en_US);if(multiLangs != null)System.
40、out.println(multiLangs.getStringWithConvert(MAIN_SYSTEM_BUSILY); 運(yùn)行結(jié)果畫面: 顯示多語言文字的Demo程序源代碼: HYPERLINK /pub/html/developer/file/j2eediary/files/4_MultiLangsDemo.java t _blank 立即下載 這里以在JSP文件中顯示多語言圖片做一個(gè)簡單的示例: %WebSkin webSkin = new WebSkin(a,zh_CN);if( webSkin != null ) out.print(簡體版本:);WebSkin webSkin
41、_en_US =new WebSkin(a,en_US);if( webSkin_en_US != null ) out.print(英文版本:);WebSkin webSkin_zh_HK = new WebSkin(a,zh_HK);if( webSkin_zh_HK != null ) out.print(繁體版本:);%運(yùn)行結(jié)果畫面: 顯示多語言圖片的例子源代碼: HYPERLINK /pub/html/developer/file/j2eediary/files/5_testskin.jsp t _blank 立即下載 下面是將用戶喜愛的外殼放在session中,JSP文件中動(dòng)態(tài)顯示
42、多語言圖片: %String skin = (String) session.getAttribute(SKIN);/取用戶自定義的外殼if( skin = null ) skin = a_zh_CN;WebSkin webSkin = WebSkinUtil.getWebSkinFromString(skin);if( webSkin != null ) out.print();%一個(gè)CMP型EJB的例子在我接手的這個(gè)項(xiàng)目中有大量的實(shí)體Bean,大部分都采用CMP2.X規(guī)范來寫的,寫多后覺得有總結(jié)一下的必要。 下面我就以一個(gè)CMP2.X版本的序列發(fā)生器的為例,詳細(xì)講解編寫實(shí)體Bean。序列發(fā)
43、生器用來提供一個(gè)唯一的ID,也可做為一個(gè)計(jì)數(shù)器來使用。 序列發(fā)生器實(shí)體的分析實(shí)體描述 實(shí)體描述SequenceGenerator序列發(fā)生器用來提供一個(gè)唯一的ID,也可做為一個(gè)計(jì)數(shù)器來使用。屬性描述 屬性名稱屬性描述數(shù)據(jù)類型SPM(bytes)|-name名稱序列發(fā)生器的名稱字符串25|-count序列值序列發(fā)生器中當(dāng)前的序列值正整數(shù)21序列發(fā)生器的設(shè)計(jì)下面分別創(chuàng)建序列發(fā)生器的一個(gè)Bean實(shí)體、一個(gè)Home接口、一個(gè)遠(yuǎn)程接口、一個(gè)Helper類。 Bean實(shí)體(the bean implementation) 類 類SequenceGeneratorEJB聲明public abstract cl
44、ass描述序列發(fā)生器用來提供一個(gè)唯一的ID,也可做為一個(gè)計(jì)數(shù)器來使用。實(shí)體如果有自動(dòng)增加的主鍵,可通過此類獲得唯一的ID。調(diào)用時(shí)要借助一個(gè)Helper類,通過SequenceGeneratorClientHelper.getNextID()方法。超類javax.ejb.EntityBean執(zhí)行構(gòu)造器 構(gòu)造器構(gòu)造器描述SequenceGeneratorEJB|-SequenceGeneratorEJB()初始化一個(gè)序列發(fā)生器實(shí)體方法 方法方法描述返回值SequenceGeneratorEJB|-getName()獲得序列發(fā)生器的名稱public abstract String|-setName(
45、String name)設(shè)置序列發(fā)生器的名稱|-getCount()獲得序列發(fā)生器的序列值public abstract long|-setCount(long count)獲得序列發(fā)生器的序列值public abstract void|-ejbCreate(String name)創(chuàng)建一個(gè)序列發(fā)生器,創(chuàng)建時(shí)的序列值為0public String下面是必須定義的方法 |-ejbLoad()|-ejbStore()|-ejbActivate()|-ejbPassivate()|-ejbRemove()|-setEntityContext(EntityContext context)|-unset
46、EntityContext()Home接口(the home interface) 接口 接口:SequenceGeneratorHome 聲明:public interface 描述:這是SequenceGeneratorEJB的Home接口。 超類:javax.ejb.EJBHome 執(zhí)行 方法 方法方法描述返回值SequenceGeneratorHome|-create(String name)創(chuàng)建一個(gè)序列發(fā)生器public abstract SequenceGenerator|- findByPrimaryKey(String name)通過主鍵查找一個(gè)Remote接口public a
47、bstract SequenceGenerator遠(yuǎn)程接口(the remote interface) 接口 接口SequenceGenerator聲明public interface描述這是SequenceGeneratorEJB的Remote接口超類javax/ejb.EJBObiect執(zhí)行方法 方法方法描述返回值SequenceGenerator|-getName()獲得序列發(fā)生器的名稱public abstract String|-getCount()獲得序列發(fā)生器的序列值public abstract long|-setCount(long count)設(shè)置序列發(fā)生器的序列值publ
48、ic abstract voidHelper類 Helper類可以用Session Bean實(shí)現(xiàn),也可以用JavaBean實(shí)現(xiàn),這里使用JavaBean來實(shí)現(xiàn)。 類 類SequenceGeneratorClientHelper聲明public class描述通過SequenceGeneratorClientHelper.getNextID(String name)方法可以獲得一個(gè)唯一的ID。超類執(zhí)行java.io.Serializable構(gòu)造器 構(gòu)造器構(gòu)造器描述SequenceGeneratorClientHelper|- SequenceGeneratorClientHelper ()初始化
49、Bean,獲得Home接口。方法 方法方法描述返回值SequenceGeneratorClientHelper|-getSequenceGeneratorHome獲得Home接口private static SequenceGeneratorHome|-getSequenceGenerator (String name)獲得Remote接口private static SequenceGenerator|-getNextID(String name)獲得一個(gè)唯一的IDpublic static long序列發(fā)生器的編碼在編碼過程中為序列發(fā)生器定義了其它輔助類,如JNDINames.java用來
50、保存序列發(fā)生器的Home對象的JNDI名稱、SequenceGeneratorClientException.java用來捕捉SequenceGeneratorClientHelper.getNextID(String name)的異常。 寫完EJB后,必須為EJB建立部署文件,ejb-jar.xml,關(guān)于ejb-jar.xml的編寫規(guī)范請參照文件/dtd/ejb-jar_2_0.dtd 在JAS中部署,必須建立如下部署文件,jboss.xml和jaws.xml或jbosscmp-jdbc.xml, ,關(guān)于jboss.xml、jaws.xml和jbosscmp-jdbc.xml的編寫規(guī)范請分別
51、參照文件/j2ee/dtd/jboss.dtd、/j2ee/dtd/jaws_3_0.dtd和/j2ee/dtd/jbosscmp-jdbc_3_0.dtd。 序列發(fā)生器組件的源代碼SequenceGeneratorEJB.java SequenceGeneratorHome.java SequenceGenerator.java SequenceGeneratorClientHelper.java SequenceGeneratorClientException.java JNDINames.java ejb-jar.xml jboss.xml jasw.xml 源代碼: HYPERLINK
52、 /pub/html/developer/file/j2eediary/packages/1_sequencegenerator.rar t _blank 序列發(fā)生器的源代碼 序列發(fā)生器的調(diào)用下面是一個(gè)序列發(fā)生器的源代碼在Servlet中調(diào)用的示例,只列出部分代碼: /導(dǎo)入類SequenceGeneratorClientHelperimport com.cwap.oa.sequencegenerator.client.SequenceGeneratorClientHelper; public void doCreateProcess(HttpServletRequest request, Ht
53、tpServletResponse response)throws IOException, ServletException /獲得一個(gè)唯一的ID,第一次調(diào)用的值為1,之后自動(dòng)加1Long lonTmp = new Long(SequenceGeneratorClientHelper.getNextID(meeting);meetingModel.setId(lonTmp.toString();提高EJB性能的十大技巧項(xiàng)目進(jìn)行到這里,開始出現(xiàn)新的問題。EJB調(diào)用是耗時(shí)、費(fèi)力的。怎么提高EJB的性能?我們?yōu)榻鉀Q這一問題,開始邊寫邊討論。等到完成了,我才發(fā)現(xiàn),我們所應(yīng)用的技巧總結(jié)一下,竟有十條。
54、把提高EJB性能的這些技巧總結(jié)一下,為以后的項(xiàng)目做參考。 1.用一個(gè)Session Bean封裝多個(gè)Entity Bean,將原來的多個(gè)Entity Bean的Remote調(diào)用和Local調(diào)用封裝在一個(gè)Session Bean中。所以建立一個(gè)ServerFacade,它為多個(gè)對象提供統(tǒng)一獲取EJB Home和獲取對象的接口。ServerFacade為程序要用到的所有EJB的home handle提供緩存,提高訪問JNDI Name的時(shí)間,達(dá)到提高訪問效率的目的。以后查找JNDI Name的方法都應(yīng)寫在接口里,調(diào)用時(shí)直接從接口調(diào)用。 2.在EJB的Remote接口中使用粗粒度的方法,不推薦使用細(xì)
55、粒度方法。 3.如果EJB的Remote接口獲取成功,應(yīng)不再使用Remote接口,而是將Remote接口構(gòu)造成一個(gè)一般的JAVA對象,通過調(diào)用一般的JAVA對象的方法來達(dá)到減少對網(wǎng)絡(luò)的訪問。 4.如果你部署EJB客戶端和EJB在相同的JVM上,建設(shè)使用EJB2.0規(guī)范的Local接口代替Remote接口。 5.用transient關(guān)鍵字聲明不必要的數(shù)據(jù)變量,替代以前的public、private等,避免不必要的數(shù)據(jù)變量占用網(wǎng)絡(luò)資源。示例: public class DemoCMP implements EntityBean transient EntityContext entCtx; tra
56、nsient InitialContext initCtx; public String id; public String description;6.在ejb-jar.xml部署文件中,對Session Bean中非事務(wù)的方法,將trans-attribute屬性賦為NotSupported或Never abookesessionBean * NotSupported 7. 設(shè)置事務(wù)的超時(shí)時(shí)間,在JBoss中,要修改$jboss.home/server/$jboss.configuration/conf/jboss-service.xml ,如下所示: 300 8.當(dāng)事務(wù)鎖定數(shù)據(jù)庫的行記錄
57、時(shí),事務(wù)應(yīng)跨越可能的最小的時(shí)間。 9.調(diào)整EJB 服務(wù)器的各種參數(shù),如線程數(shù)、EJB池大小、連接池參數(shù)等。以在JBoss修改連接池參數(shù)為示例,進(jìn)行說明。如果JBoss和Mysql相連,配置$jboss.home/server/$jboss.configuration/deploy/mysql-service.xml,來修改連接池參數(shù),包括MinSize、MaxSize、BlockingTimeoutMillis、IdleTimeoutMinutes、Criteria等,各參數(shù)的含義如下所示: i.MinSize :連接池保持的最小連接數(shù)。 ii. MaxSize :連接池保持的最大連接數(shù)。 i
58、ii. BlockingTimeoutMillis :拋出異常前最大的等待連接時(shí)間。 iv. IdleTimeoutMinutes :關(guān)閉連接前連接空閑的最大時(shí)間。 v. Criteria :有ByContainerAndApplication、ByContainer、ByApplication和ByNothing等值。 下面是一個(gè)例子: 0 50 5000 15 ByContainer 10.對于數(shù)據(jù)庫事務(wù),應(yīng)選擇較低成本的事務(wù)等級,避免造成壞數(shù)據(jù)。遞增成本的事務(wù)等級包括: TRANSACTION_READ_UNCOMMITED, TRANSACTION_READ_COMMITED, TRA
59、NSACTION_REPEATABLE_READ, TRANSACTION_SERIALIZABLE如何解決EJB-QL的功能不足我們在這個(gè)項(xiàng)目中使用了EJB-QL。在使用中,發(fā)現(xiàn)它有很多SQL語法不能用,例如執(zhí)行一個(gè)計(jì)數(shù)運(yùn)算,如下面這段示例: 1.這是我在CMP型ABook EJB的部署文件ejb-jar.xml中的一段EJB-QL,它已經(jīng)被我注釋掉了。 !-This has been deprecated. findCountByBookId java.lang.String select count(*) from ABook a where a.bookId = ?1 -2.這是我在C
60、MP型ABook EJB的Home接口中的一段,也被我注釋掉了。 /* * Note : This method has been deprecated. * Reason : The EJB-QL isnt support the following syntax * select count(*) from ABook a where a.bookId = ?1 public int findCountByBookId(String bookId) throws RemoteException,FinderException; */由于EJB-QL語法不是很豐富,像上面簡單的的計(jì)數(shù)計(jì)算都不
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度項(xiàng)目策劃實(shí)施與管理協(xié)議書樣本
- 2025年個(gè)人勞動(dòng)合同簡易版版式
- 2025年古建筑保護(hù)策劃合作協(xié)議書范本
- 2025年公立學(xué)校教師合同模板
- 2025年個(gè)人用車租賃協(xié)議示范
- 新一線城市二手房購買協(xié)議指南2025
- 2025年辦公樓裝修設(shè)計(jì)合同模板
- 2025年加盟中介公司合同范本
- 2025年制定汽車租賃合同標(biāo)準(zhǔn)格式
- 2025年婚宴場所預(yù)訂合同模板
- 術(shù)語翻譯與本地化
- 機(jī)動(dòng)車商業(yè)保險(xiǎn)條款(2020版)
- 2024-2025學(xué)年福建省龍巖市五縣第一次中考科目教學(xué)質(zhì)量檢測試題化學(xué)試題含解析
- 高職院校高水平現(xiàn)代物流管理專業(yè)群建設(shè)方案(現(xiàn)代物流管理專業(yè)群)
- 《大小比較》(說課課件)二年級下冊數(shù)學(xué)西師大版
- AQ/T 1089-2020 煤礦加固煤巖體用高分子材料(正式版)
- 張五常子女和婚姻合約中的產(chǎn)權(quán)執(zhí)行問題
- 醫(yī)院多重耐藥菌感染管理規(guī)范
- 2024專升本英語答題卡浙江省
- 中英對照版-中文版-The-Dead-By-James-Joyces死者-詹姆斯-喬伊斯
- 2024年廣東深圳高三二模英語讀后續(xù)寫試題講評課件
評論
0/150
提交評論