使用Forte for Java開發EJB
本文描述了Forte for Java企業版3.0和java 2.0 平臺、以及與J2EE兼容的服務器和容器一起,為開發者提供了一個建造端對端(end-to-end)Java應用程序的強大的環境。在本文中,我們將集中介紹使用Forte for Java企業版開發企業JavaBean(Enterprise JavaBeans簡稱EJB)應用程序。簡介Sun ONE(Sun Open Net Evironment)開放網絡環境作為Sun公司發布的網絡服務戰略,為企業提供創建、裝配和配置Web的服務。Sun ONE框架包括很多工具和技術,例如Forte for Java和Forte ESP,創建(create)、裝配(assemble)、集成(integrate)和分發(distribute)這些Web服務給最終用戶。Forte for Java基于開放式架構,設計成輕易和其他工具集成,諸如Macromedia Dreamweaver與Adobe Golive等網頁設計工具和包括ISV等開發的應用服務器(Application Server)等軟件。Forte工具向導包括了許多向導和特性,為開發者自動完成了許多細節性工作。本文著重介紹了Forte for Java企業版在EJB開發方面的特性,以及如何有效的利用這些特性。利用Forte for Java 企業版工具向導可以開發、配置和測試符合EJB 1.1規范的EJB(注:Forte for Java企業版將在下一個版本中支持EJB 2.0規范)。簡言之,Forte for Java 企業版提供的EJB開發主要包括了以下的特性和優點:提供開發會話bean(session bean)(有狀態的或無狀態的皆可)和實體bean(entity bean)的模板。 包括 bean治理存儲(bean-managed persistence簡稱BMP)和容器治理存儲 (container-managed persistence簡稱CMP)。 生成需要的界面和類---bean的本地接口(home interface),遠程接口(remote interface)和實現類(implementation class)。 通過"logical" bean來協調與簡化bean的開發。 可以用來檢查bean是否遵循EJB 1.1 規范。自動將這些bean打包在一個EJB的 JAR文件中。 通過標準的部署(deployment )API 實現應用服務器的集成,使bean的開發更快捷。通過采用工具向導并生成一個bean的jsp 測試客戶端,簡化了bean的測試過程。 Forte for Java 企業版的要害特性是它側重于EJB的開發、部署、測試周期。它關心的是bean開發過程中的大部分的'雜務活'以及其他的一些工作。例如:自動生成必要的界面。包含了必要的方法的實現。幫助建立EJB的字段。能提示或直接插入所有方法必要的參數、返回類型和異常。 編譯bean一步完成。對已編譯的bean進行應用服務器打包和部署的工作也是一步完成。同時FORTE FOR JAVA企業版能為bean創建測試客戶端。這個測試客戶端可以從瀏覽器一端調用以測試該bean的功能。開發EJBEJB是一種用于商務過程(business processes)和商務數據(business data)建模的強大的組件。EJB開發者,通常也就是個人或某公司商務系統的專家,他們更適合把精力集中在bean的商務邏輯的實現上,而讓EJB容器和J2EE平臺來處理企業運算當中的非商務邏輯的部分(如遠程訪問,事務處理,安全等)。盡管如此,開發EJB絕不僅僅是單純編寫商務方法這么簡單。 首先,開發EJB需要正確設置開發環境,才能把bean的組件部署到應用服務器上。其次,需要創建構成EJB的不同組件,并根據bean類型的不同,這些組件必須包含特定的方法。一旦開發了bean,就必須把這些bean部署到操作環境中。最后,應該通過客戶端或測試程序來對這些bean進行驗證。設置開發環境Forte for Java企業版為開發者提供了用于設置開發環境的工具和向導。開發EJB就意味著要與數據庫打交道,顯然相應地,就要能訪問J2EE應用服務器和數據庫服務器。Forte for Java 企業版使開發者們能在集成開發環境(IDE)里進行這項設置工作。在這里使用Forte for Java企業版命令,可以安裝數據庫驅動程序,建立與基礎數據庫的連接。該IDE 還能幫助開發者配置和運行應用服務器,運行必要的數據庫服務器等等。作為一個例子,圖1顯示了如何從FORTE FOR JAVA企業版瀏覽窗口中啟動J2EE 引用實現(Reference Implementation,簡稱RI)應用服務器的一個實例。圖片下方的輸出窗口則顯示了服務器的啟動信息。 圖1:啟動缺省的應用服務器假若您需要定義一個實體bean來建模一個已存在的數據庫,可以利用FORTE FOR JAVA企業版非常方便地將數據庫的表映像到這個新的bean中,一旦啟動了數據庫服務器并且已經建立了連接,你就可以在IDE 里顯示這個數據庫表,表中的列,定義視圖和過程。反過來你也可以在IDE 里將某實體bean及其字段映像到某數據庫表和表中的列。假如你選擇容器治理存儲的方式,你既可以用其中的屬性對話框窗口去映像bean的存儲字段,也可以手工定義這些字段。在項目中采用FORTE FOR JAVA企業版的工具并不會限制你只能在它的IDE 里開發該項目所有的EJB。FORTE FOR JAVA企業版答應將在其他地方開發的EJB也集成進來。使用項目治理的功能,我們可以引入已存在的個別bean乃至整個包。創建EJB組件開發EJB時必須遵守某些規定--- 不管是會話或實體bean,都是由三個接口和類組成的:一個本地接口,一個遠程接口,一個實現類。并且,這些接口與類必須包含需要的方法,方法要以特定的方式命名,有特定的返回類型,異常,諸如此類。FORTE FOR JAVA企業版在許多方面簡化了EJB的開發。由向導在開發過程中一步步的指引,向導不僅會顯示當前處于開發過程的那個階段,而且可以提示接下來的步驟。選擇的選項不同,接下來的步驟提示相應會改變。定義一個新的EJB假設需要為一個應用程序創建多個EJB,首先我們會為這個應用程序新建一個包,以便把所有的bean都集中到一起。接著,在瀏覽窗內用鼠標右擊包的名字,從彈出的上下文菜單(context menu)中選擇要放置在包中的組件的所屬類型的模板。例如,JSP, Java Servlet, JavaBeans, EJB 等。出于本文的需要,我們選擇EJB組件中的會話bean,而不是實體bean。選擇EJB組件后,不管是會話bean還是實體bean,模板向導都會一步步指引我們創建特定的組件。圖2顯示了創建有狀態會話bean時的向導屏幕。 圖2:有狀態會話bean的向導窗 在創建實體bean的向導中提供一個選項用于指定采取bean治理存儲還是容器治理存儲。一旦指定了實體bean的存儲治理方式,向導會自動依據選擇結果提示下一步的信息。bean治理存儲選項意味著開發者自行提供存儲代碼,這種情況下需要附加一步,也是唯一的一步就是指定bean的實現類與接口。若選擇容器治理存儲,向導會引導你完成附加的定義和映像存儲字段的工作。假如實體bean建模的是已存在的數據庫表,我們可以選擇這個表,將bean字段映像表的列。另外也可以手工指定存儲字段,或對于已存在的bean可以從它的主鍵Java類選擇。實現bean確定bean類型之后,IDE 會生成組件必須包含的本地接口,遠程接口和 bean的實現類。并且,這些接口與類又包含了所有需要的方法,(例如 ejbLoad, ejbStore, ejbActivate, ejbPassivate方法) 、上下文相關(context-related)的方法,以及create, find, and remove方法。這樣有助于開發者將精力集中于實現bean的商務邏輯上。為了進一步方便bean的開發過程,FORTE FOR JAVA企業版提供邏輯EJB(logical Enterprise JavaBeans).在瀏覽窗口中邏輯EJB用圖標 表示,它為所有bean提供一個完整協調的視圖,包括他們的接口,字段,方法等。由于bean的接口和實現緊密相連,使同一個方法在各處保持一致是很重要的。例如,假如在一個會話bean的home接口聲明create方法,那就必須在實現類中提供相應的ejbCreate方法。在bean的remote接口聲明的商務方法必須在bean的類中正確實現。EJB的邏輯視圖保證了FORTE FOR JAVA企業版自動保持bean的所有的相關組件之間的同步。FORTE FOR JAVA企業版很靈活,它不但可以直接加工單個的組件,例如實現類或遠程接口,也可以通過邏輯視圖(logical view)集體進行。兩種方式下,IDE 都能保證其中的協調性。舉例來說,FORTE FOR JAVA企業版可以保證一個新方法,不論是從bean的邏輯視圖還是它的遠程接口處定義的,都會在bean的類里正確地顯示出來。假如你想在bean的類里包含一個方法,卻不想讓此方法在遠程接口中顯示出來的話,務必直接將此方法添加到bean的實現類中。這樣處理的方法是不會自動加入遠程接口的。圖3展示了一個實體bean產品邏輯EJB,還有home接口、remote接口還有beans類。這里的邏輯EJB,即ProdUCt.entejb在瀏覽器窗口中展開了。由此可以看出,從邏輯EJB可以訪問bean類和它的兩個接口。也可以看見實體bean的create, find, 和 business 方法,以及它的容器治理存儲的字段。另外,鼠標右擊bean的邏輯名將彈出包含可執行操作的上下文菜單(如圖3所示)。菜單中可執行的命令例如:察看部署描述符(deployment descriptor),驗證(validate)和編譯bean的所有類與接口,創建新方法(包括create, find, and business方法),生成EJB模塊,創建測試程序。 圖 3: 使用一個邏輯 Enterprise Bean
在邏輯bean中鼠標右擊一個組件也會彈出上下文菜單,菜單中顯示可用于該組件的特定的子操作集。例如,本地接口的上下文菜單中只提供增加新的create和find方法的操作。而遠程接口的上下文菜單只提供創建新的business方法的操作。不使用邏輯bean也可以直接加工bean的接口與類。例如,在需要創建bean的類與接口的子類,或是將其映射到數據庫表時你可能希望直接去編輯它,或單獨對某個類或接口進行編譯。在定義bean的新的方法或字段的過程時,會有對話框引導你。這些對話框會提示輸入方法或字段的名稱,字段的類型,方法的返回類型,所有的方法參數及其類型,所有除了EJB必要的異常外的附加異常(必要的異常已經缺省添加了)。IDE 會在bean的類,遠程或本地接口處加入正確的方法簽名。圖4展示了創建一個新的商務方法時的對話框。
Figure 4: 創建一個商務方法如何編寫方法的實現:首先,在FORTE FOR Java企業版資源編輯器(Source Editor)窗口中打開bean的實現類,接著,找到方法聲明,敲入代碼。注重ForteJava企業版把Java保留字用蘭色顯示。另外,編譯bean時如有編譯錯誤將用紅色標出。 Bean的引用(reference),諸如EJB引用,環境表項(environment entries),資源構造引用(resource factory references),安全角色引用(security role references)等皆可以在屬性編輯器(Property Editor)中的References 標簽內指定。在這里可以添加,編輯和刪除這些引用和環境表項。References標簽如圖5所示。Figure 5: 屬性編輯器中的References 標簽驗證和編譯EJBForte for Java企業版包含一個驗證EJB(Validate EJB)命令和編譯所有EJB的類的命令。驗證類似于編譯。執行Validate EJB時,Forte for Java企業版會檢查bean的類是否正確遵守J2EE規范。源代碼中的錯誤被提亮顯示,必須予與更正。除了可以編譯或驗證單個的bean組件之外,也可以通過企業版的邏輯bean窗口,使用單條命令就編譯或驗證所有組件。瀏覽器窗口中標明了哪些bean需要編譯,哪些bean已經成功編譯了。其中bean的接口與類用一連串的點加以標記的表示需要編譯。如圖6中,名為ProdUCt 和MySession的bean它們的類、遠程接口與本地接口都需要進行編譯(注重邏輯bean旁沒有這些標記)。相比之下, bean CustomerTbl沒有這種標記,表示它已經成功編譯了。Figure 6: 瀏覽器窗口中bean的編譯標記 打包與部署編譯之后,EJB類就可以打包到需要的JAR文件、創建一個EJB模塊,然后部署到J2EE應用服務器。使用Forte for Java企業版,不僅可使打包與部署過程縮減到一步,而且IDE 還能生成測試程序---一個jsp客戶端,可以從瀏覽器調用它來測試bean。在打包EJB和創建EJB模塊之前,任何有bean的開發者指定的EJB引用都需要人工解析(resolve)。測試客戶端應用程序不能自動處理含有EJB引用的EJB模塊的打包。EJB引用使從特定的EJB模塊的屬性編輯器里解析的。在組裝(assembly)過程中,bean的開發者指定的引用和環境表項可以被EJB模塊上執行的操作覆蓋(overridden)。EJB模塊的部署描述符也可以人工編輯。假如覆蓋了表項或引用,新的值將只應用于引用此EJB的模塊。也就是說,并不會影響為EJB設置的初始值。假如同一個EJB也包含在另一個EJB模塊中,則后一個EJB模塊將引用bean的初始環境表項和引用值。一個EJB模塊的覆蓋過程如圖7所示。Figure 7: 覆蓋一個 EJB 引用EJB模塊通過在一系列被引用的java類上執行傳遞性關閉(transitive closure)來協助bean的打包。傳遞性關閉在編譯時會算出一個類中所有可識別的類引用。這樣做的目的是減輕組裝器維護所有被引用的類的負擔。結果,組裝器只需要維護被動態引用的類就行了。 解析bean的EJB引用之后,就可以鼠標右擊邏輯bean來完成它的打包和部署。然后從上下文菜單中選擇創建EJB測試程序的選項。IDE 將會提示你指定要部署應用的應用服務器。這個過程可以隨意分解成幾個步驟:例如,可以使用命令:New EJB Module(創建新的EJB模塊)將bean的類打包到一個EJB模塊中,接著在此模塊上調用部署的操作,然后再創建它的測試程序。為了使部署功能起作用,在此之前必須從IDE 的Server Registry(服務器注冊)里選擇缺省服務器。Server Registry列出你的系統上所有可用的服務器。同時還必須創建服務器的一個實例,啟動服務器進程。盡管J2EE應用服務器的部署過程一般是一致的,每一種應用服務器卻都有自己的部署方式。目前,J2EE平臺正在定義一個標準的服務器部署API。此API通過提供標準的在與J2EE相兼容的應用服務器上部署EJB的方法,將會增加EJB在J2EE應用服務器的可移植性。鑒于服務器API有望成為一種平臺標準,FORTE FOR JAVA企業版提供了一個可以插入應用服務器軟件的服務器API。該服務器API包含了整個部署過程,從而實現FORTE FOR JAVA企業版對部署過程的標準化。應用服務器廠商可以向該API提供他們自己的插件。基于特定的應用服務器,每個插件的兼容性有所不同。這些插件在FORTE FOR JAVA企業版開發環境和每個支持J2EE的服務器間運行。他們實現服務器API,將各個服務器的部署過程與FORTE FOR JAVA企業版集成在一起。圖8示描述了這個結構。Figure 8: 應用服務器部署插件指定了即將使用的應用服務器,FORTE FOR JAVA企業版就會自動插入相應的服務器API,好預備部署EJB。從開發者的角度看,不管使用哪一種服務器,開發過程都很簡單,直截了當。因為FORTE FOR JAVA企業版懂得不同的服務器之間部署上的差別,它可以自動處理好這些差別。測試 beanFigure 9: Generating a Test Application 在成功部署這些bean之后,FORTE FOR JAVA企業版會為bean創建一個EJB和一個Web模塊,以及bean的測試程序。其中EJB模塊包含已編譯的EJB類。Web模塊則包含測試客戶端的JSP(Java Server Pages)。要測試bean時,只需簡單地在瀏覽器內調用測試程序即可。例如,在部署會話bean MySession時,FORTE FOR JAVA企業版會創建EJB模塊:ySession_EJBModule, Web模塊:MySession_WebModule,和測試程序:MySession_TestApp。如圖9所示。在瀏覽器窗口內輸入URL來測試應用程序,如以下所示:http://server:8000/test application(其中server是我們的web服務器的名稱,test application則是開發環境中創建的測試程序的名稱。例如:MySession_TestApp)通過瀏覽器視圖可以訪問本地和遠程接口的實例,從本地接口開始。接口中的方法可以被調用。例如,用create方法來創建遠程接口的一個實例。方法需要的任何參數都可由瀏覽器中輸入,它則會顯示方法的返回值。這個視圖還會保留測試會話中創建的一系列對象。比如,圖10顯示的是運行MySession_TestApp時瀏覽器內顯示的測試頁面。Figure 10: 在瀏覽器中使用IDE 生成的測試程序結論這篇文章描述了如何使用FORTE FOR JAVA企業版產品來進行EJB的開發,部署與測試,使整個過程更輕易,以便我們把精力集中編寫在bean的商務邏輯,這也是作為bean開發者的正務。這個目標是能夠達成的,因為FORTE FOR JAVA企業版自動治理許多EJB的開發工作,例如保持本地與遠程接口和bean 實現類之間的同步,生成需要的方法,保證正確的方法返回類型,等等。開發完EJB后,FORTE FOR JAVA企業版可以一步完成組成bean的類與接口的編譯。接著對已編譯的bean打包和部署到符合J2EE規范的應用服務器上,最后,創建一個測試客戶端。這個測試客戶端可以從瀏覽器一端調用以測試該bean的邏輯。
resizeImage('http://images.wangchao.net.cn/images/upload/images/lsdn/1212201673486.jpg','image1')
resizeImage('http://images.wangchao.net.cn/images/upload/images/lsdn/1212201673627.jpg','image2')
resizeImage('http://images.wangchao.net.cn/images/upload/images/lsdn/1212201673845.jpg','image3')
resizeImage('http://images.wangchao.net.cn/images/upload/images/lsdn/1212201674002.jpg','image4')
resizeImage('http://images.wangchao.net.cn/images/upload/images/lsdn/1212201675720.jpg','image5')
resizeImage('http://images.wangchao.net.cn/images/upload/images/lsdn/1212201675939.gif','image6')resizeImage('http://images.wangchao.net.cn/images/upload/images/lsdn/1212201673267.jpg','image0')
相關文章: