EJB3.0開發環境的搭建

原文地址:http://blog.csdn.net/xyls_2009/article/details/4818823

EJB Container的介紹
SUN公司正式推出了EJB的規範之後,在衆多的公司和開發人員中引起了很大的反響。標誌着用Java開發企業級應用系統將變的非常簡單。許多公司都已經推出了或正打算EJB的產品。

SUN公司對EJB的定義是:EJB是用於開發和部署多層結構的、分佈式的、面向對象的Java 應用系統的跨平臺的構件體系結構。採用EJB可以使開發商業應用系統變得容易,應用系統可以在一個支持EJB的環境中開發,開發完之後部署在其他的環境中,隨着需求的改變,應用系統可以不加修改地遷移到其他功能更強、更復雜的服務器上。

在EJB的規範中,提到了6中角色,包括 Bean提供者,應用程序裝配者,EJB容器,EJB配置工具,EJB服務提供者,系統管理員。這裏面,EJB容器是EJB之所以能夠運行的核心。EJB 容器管理着EJB的創建,撤消,激活,去活,與數據庫的連接等等重要的核心工作。

EJB規範的出現對電子商務發展起了很大的推動作用。現在大型的電子商務網站,都是採用EJB技術的應用服務器來構建的。現在應用比較廣泛的,支持EJB的應用服務器中,已經產品化了的最主要的是: IBM的WebSphere,BEA的WebLogic另外,還有開源的如JBoss。

IBM WebSphere應用服務器是一個完善的,開放的Web應用服務器。它是IBM e-business應用架構的核心。WebSphere 應用服務器 提供三個等級的版本,他們是:標準版(Standard Edition),高級版(Advanced Edition),企業版(Enterprise Edition)。其中,在高級版中開始支持EJB的編程模型。在企業版中提供一個高可靠的解決方案,使其能夠移植到關鍵性的企業環境。EJB是WebSphere最核心的對象技術之一,它提供了具有交易功能的服務器端的Java 組件,同時又是一種新型的對象分佈技術編程模型。使用EJB組件完成的應用,會支持更高級的基於數據庫的交易處理功能,如多個數據庫之間的更新,兩階段提交等。WebSphere是IBM整個一套開發,應用服務器的套件。他把EJB和IBM其它的優秀的產品(TXSerise 和Component Broker)結合在了一起。在具體的應用中,基於安全的考慮,性能考慮和系統管理考慮,還可以增加Firewall,WebShpere Performance Pack 和 Tivoli。所以,可能IBM的EJB Container不一定是最好的,但是,WebSphere中的EJB和IBM其他產品的結合卻是做的最好的。然後,我們再來看看BEA的WebLogic: BEA公司宣佈:該公司率先實現了對Enterprise JavaBeans(EJB)2.0標準的支持。憑藉BEA WebLogic Server對EJB的支持,BEA可幫助開發人員更快地推出電子商務應用系統,從而讓開發人員極大地受益於這一業內最新標準。作爲服務器端商務邏輯的行業標準和Java2平臺的基石,Enterprirse JavaBeans是BEA WebLogic應用服務器的主要技術。Enterprise JavaBeans使得開發人員能夠專心地開發其應用系統和電子商務設想的商務邏輯,而不必爲基礎結構的構築而分心。

雖然EJB3.0剛剛發佈,但已經有很多EJB服務器支持EJB3.0了,這其中跟得最緊的是JBoss,其次WebLogic、WebSphere等也隨之跟進。因此,各大廠商還是對EJB3.0非常看好的。

EJ3.0的開發工具
1>下載安裝JDK5.0 http://java.sun.com/j2se/1.5.0/download.jsp

2>下載安裝開發工具JBossIDE(內含Eclipse 3.2),直接解壓縮即可完成安裝。

http://prdownloads.sourceforge.net/jboss/JBossIDE-2.0.0.Beta2-Bundle-win32.zip?download想使用中文的朋友可以下載中文語言包NLpack1-eclipse-SDK-3.2-win32.zip

下載路徑:

http://www.eclipse.org/downloads/download.php?file=/eclipse/downloads/drops/L-3.2_Language_Packs-200607121700/NLpack1-eclipse-SDK-3.2-win32.zip

解壓語言包,把features及plugins文件夾拷貝覆蓋JBossIDE安裝目錄下的features及plugins文件夾。如果漢化失敗,可能是你安裝語言包之前運行過eclipse,解決辦法是:把eclipse安裝目錄下的configuration文件夾刪除,從JBossIDE安裝包中解壓出configuration文件夾,把configuration文件夾拷貝到JBossIDE安裝目錄下。

3>下載和安裝JBOSS-4.0.5.GA服務器

http://prdownloads.sourceforge.net/jboss/jems-installer-1.2.0.CR1.jar?download文件下載,這裏要注意:最好不要用下載工具下載,直接通過”目標另存爲”下載。

安裝方法:

雙擊jems-installer-1.2.0.CR1.jar文件,或者在DOS命令下執行:

java -jar G:/soft/jems-installer-1.2.0.CR1.jar,G:/soft爲Jboss安裝文件所在目錄

安裝界面如下:


圖4-1安裝初始界面

這一步是讓你選擇安裝語言,以後點“Next”並同意許可協議,直到選擇安裝目錄(如下圖)。 

圖4-2選擇安裝目錄界面

建議不要安裝在Program Files目錄,否則一些應用會導致莫名的錯誤。

圖4-3安裝提示界面

跟着選擇一個安裝類型,本文選擇帶集羣功能的安裝選項“ejb3-clustered”,如下圖

圖4-4選擇ejb3-clustered界面

點下一步,選擇advance

圖4-5選擇Advance界面

在Name輸入欄中輸入 all

圖4-6輸入all界面

點下一步,直到出現下圖:

圖4-7輸入密碼界面

四個選框都選上。點下一步就開始安裝了。

安裝完後請在“系統變量”裏添加JBOSS_HOME 變量,值爲Jboss的安裝路徑。如下圖

圖4-8設置系統變量界面

現在驗證安裝是否成功。在Dos命令窗口下執行:

C:/javaserver/jboss-4.0.5.GA/bin run -c all

這個命令用作啓動jboss

觀察控制檯有沒有Java的例外拋出。如果沒有例外並看到下圖,恭喜你,安裝成功了。

圖4-9正常啓動界面

你可以輸入http://localhost:8080來到Jboss的歡迎主頁。在JBoss Management 欄中點擊”JMX Console”進入Jboss的管理界面,這裏需要你輸入用戶名及密碼,如果你在安裝的時候按照教程設置了Jboss管理臺用戶名及密碼,那麼用戶名及密碼都是admin。

如果啓動jboss出現例外,先看看jboss所用端口有沒有被佔(如1099,1098 ,8080, 8083等端口)。可以下載端口查看器(Active Ports)進行檢查,如果端口被佔用就關閉此進程。確定不是端口被佔用,那很大可能是你的JDK安裝不正確。

圖4-10JBOSS控制檯界面

輸入用戶名和密碼

這樣服務器就安裝成功了。

圖4-11 JBOSS控制檯界面

4.3JOBSS服務器
4.3.1JOBSS安裝目錄
表4-1JBOSS安裝目錄

JBoss中的部署
JBoss中的部署過程非常的簡單、直接。在每一個配置中,JBoss不斷的掃描一個特殊目錄的變化:

[jboss安裝目錄]/server/config-name/deploy

此目錄一般被稱爲“部署目錄”。

你可以把下列文件拷貝到此目錄下:

* 任何jar庫(其中的類將被自動添加到JBoss的classpath中)

* EJB JAR

* WAR (Web Appliction aRrchive)

* EAR (Enterprise Application aRchive)

* 包含JBoss MBean定義的XML文件

* 一個包含EJB JAR、WAR或者EAR的解壓縮內容,並以.jar、.war或者.ear結尾的目錄。要重新部署任何上述文件(JAR、WAR、EAR、XML等),用新版本的文件覆蓋以前的就可以了。JBoss會根據比較文件的時間發現改變,然後部署新的文件。要重新部署一個目錄,更新他的修改時間即可。

如何進行EJB打包
要發佈EJB時必須把她打成jar或ear包,打包的方式有很多,如:jar命令行、集成開發環境的打包嚮導和Ant

任務。下面介紹Elispse打包嚮導和Ant打包任務。

1. Elispse打包嚮導

在Elispse開發環境下,可以通過嚮導進行打包。右擊項目名稱,在跳出的菜單中選擇“導出”,在“導出”對話框選擇“Jar文件”,在“選擇要導出的資源”時,選擇源目錄和用到的資源。然後選擇一個存放目錄及文件名。點“完成”就結束了打包。

2. Ant打包任務

採用Ant進行打包是比較方便的,也是作者推薦的打包方式。下面我們看一個簡單的打包任務。

<?xml version="1.0"?>

<project name="jartest" default="jar" basedir=".">

<property name="build.dir" value="/build" />

<property name="build.classes.dir" value="/classes" />

<target name="jar" description="打包成Jar">

<jar jarfile="/ejbfile.jar">

<fileset dir="">

<include name="**/*.

</jar>

</target>

</project>

上面建立了一個名爲jartest的Ant項目,默認的任務爲default="jar",項目的路徑爲build.xml文件所在目錄

basedir="." 。應用編繹過後的class文件已經存在於應用的/build/classes/目錄下。Ant定義了一個屬性

“build.classes.dir”,他指向應用的/build/classes/目錄。

<target name="jar" description="打包成Jar">定義了一個名叫jar的任務,description是描述信息。任務中使用jar

命令把/build/classes/目錄下的所有class文件打包進jar文件,同時也把應用下的META-INF目錄下的所有文件打

包進jar文件的META-INF目錄。打包後的jar文件存放在應用目錄下。文件名爲:ejbfile.jar

 

4.3.4如何進行WEB應用打包
一個Web應用發佈到Jboss服務器時需要打成war包。本節將介紹jar命令行及Ant任務兩種war文件的打包方

式。

1.在命令行下用jar命令進行war文件打包

在打包前把文件存成以下結構:

WEB應用根目錄

| -- **/*. jsp

| -- WEB-INF

| -- web.xml

| -- lib

| -- *.*

| -- classes

| -- **/*.class

 

在Dos窗口中進入到WEB應用根目錄下,執行如下命令

jar cvf EJBTest.war *

此命令把WEB應用根目錄下的所有文件及文件夾打包成EJBTest.war文件

例如WEB應用根目錄在: D:/java/webapp/ ,命令輸入如下:

D:/java/webapp> jar cvf EJBTest.war *

2.在Ant任務中進行war文件打包

如果文件存放的結構如下面所示:

WEB應用根目錄

|-- build.xml

|--**/*.jsp

|-- WEB-INF

| -- web.xml

| -- lib

| -- *.*

| -- classes

| -- **/*.class

那麼Ant的war文件打包任務如下:

<?xml version="1.0"?>

<project name="wartest" default="war" basedir=".">

<target name="war" description="創建WEB發佈包">

<war warfile="/EJBTest.war" webxml="/WEB-INF/web.xml">

<fileset dir="">

<include name="**"/>

<exclude name="build.xml" />

<exclude name="/WEB-INF/web.xml" />

</fileset>

</war>

</target>

</project>

<target name="war" description="創建WEB發佈包"> 定義一個名叫war的任務。任務中執行war打包操作,把應用下除了build.xml, /WEB-INF/web.xml之外的所有文件夾及文件打進war包,同時把webxml="/WEB-INF/web.xml"作爲web應用的web.xml文件。

開發第一個HelloWorld EJB3.0程序
第一步:創建HelloWorld工程,在這裏我們選擇Java Project

圖4-12 選擇Java Project界面

在下面的窗口裏輸入工程名

圖4-13 輸入工程名界面

 

點擊next直到結束,併爲此工程添加ejb3.0jar包,如下圖所示: 這些類包都可以在jboss安裝目錄的client,/server/all/deploy/jboss-aop-jdk50.deployer,/server/all/deploy/ejb3.deployer,/lib/endorsed等文件夾下找到,或者在本書附帶的光盤源代碼的Lib文件夾下得到。

圖4-14 添加EJB3.0jar包界面

 

第二步:要定義一個會話Bean,首先需要定義一個包含他所有業務方法的接口。這個接口不需要任何註釋,就像普通的java接口那樣定義。調用EJB的客戶端通過使用這個接口引用從EJB容器得到的會話Bean對象stub。接口的定義如下:

IHelloWorld.java:

package lesson2;

public interface IHelloWorld {

String sayHello(String name);

}

第三步:實現上面的接口並加入兩個註釋@Stateless , @Remote,第一個註釋定義這是一個無狀態會話Bean,第二個註釋指明這個無狀態Bean的remote接口。

經過上面的步驟一個只存在Remote接口的無狀態會話Bean就開發完成。無狀態會話Bean是一個簡單的POJO(純粹的面向對象思想的java對象),EJB3.0容器自動地實例化及管理這個Bean。下面是HelloWorld會話Bean的實現代碼:

HelloWorldBean.java 。實現類的命名規則是:接口+Bean ,如: HelloWorldBean

package lesson2;

 

import javax.ejb.Remote;

import javax.ejb.Stateless;

@Stateless

@Remote ({IHelloWorld.class})

public class HelloWorldBean implements IHelloWorld {

public String sayHello(String name) {

return name+"hello ,this is my first EJB";

}

}

HelloWorld會話Bean開發完了,現在我們把她她打成Jar包或EAR包發佈到Jboss中。

鼠標右鍵點擊工程,在彈出的菜單中選擇Export,彈出的窗口如下:選擇Jar file。

圖4-15 打成jar包界面

點擊next在下面的窗口中選擇jar文件的存放路徑。

圖4-16 選擇部署路徑界面

打完包後,啓動Jboss,把發佈包拷貝到[jboss安裝目錄]/server/all/deploy/目錄下。觀察Jboss控制檯輸出,如果沒有拋出例外並看到下面的輸出界面,發佈就算成功了。

圖4-17 部署成功界面

一旦發佈成功,你就可以在jboss 的管理平臺查看她們的JNDI名,輸入下面URL

http://localhost:8080/jmx-console/點擊service=JNDIView,查看EJB的JNDI名稱。(如下圖)

圖4-18 選擇JNDIView界面

在出現的頁面中,找到“List of MBean operations:”欄。點擊”Invoke”按鈕

圖4-19 點擊Invoke界面

出現如下界面:

圖4-20 查找JNDI Name界面

在上圖中可以看見HelloWorld會話Bean的JNDI名,JNDI名的組成規則是“上層名稱/下層名稱“,每層之間以”/”分隔。HelloWorld會話Bean的JNDI名是:HelloWorldBean/remote 。

HelloWorld會話Bean發佈成功後,接下來介紹客戶端如何訪問她。

當一個無狀態會話Bean發佈到EJB容器時,容器就會爲她創建一個對象stub,並把她註冊進容器的JNDI目錄,客戶端代碼使用她的JNDI名從容器獲得他的stub。通過這個stub,客戶端可以調用她的業務方法。

新建一個web 工程,命名爲:EJBTest


圖4-21 選擇 Web Project界面

工程創建完畢後,創建一個jsp例子代碼如下:

Test.jsp:

<%@ page contentType="text/html; charset=GBK"%>

<%@ page import="lesson2.IHelloWorld, javax.naming.*, java.util.Properties"%>

<%

Properties props = new Properties();

props.setProperty("java.naming.factory.initial",

"org.jnp.interfaces.NamingContextFactory");

props.setProperty("java.naming.provider.url", "localhost:1099");

props.setProperty("java.naming.factory.url.pkgs", "org.jboss.naming");

InitialContext ctx;

try {

ctx = new InitialContext(props);

IHelloWorld helloworld =

(IHelloWorld) ctx.lookup("HelloWorldBean/remote");

out.println(helloworld.sayHello("lxl"));

} catch (NamingException e) {

out.println(e.getMessage());

}

%>

把上面的客戶端應用打成war文件。

圖4-22 選擇部署路徑界面

然後把她拷貝到“[jboss安裝目錄]/server/all/deploy”目錄下。如果war文件的文件名爲 EJBTest.war ,我們可以通過http://localhost:8080/EJBTest/Test.jsp訪問客戶端。運行結果如下圖:

圖4-23運行結果界面

在這裏作者要重點說明一下EJB JNDI名稱默認的命名規則,命名規則如下:

1> 如果EJB打包進後綴爲*.ear的J2EE發佈文件,默認的JNDI 名稱是

訪問本地接口:EAR-FILE-BASE-NAME/EJB-CLASS-NAME/local

訪問遠程接口:EAR-FILE-BASE-NAME/EJB-CLASS-NAME/remote

例:EJB HelloWorld打包進名爲HelloWorld.ear的J2EE應用,訪問她遠程接口的JNDI 名是:

HelloWorld/HelloWorldBean/remote

2> 如果EJB應用打包成後綴爲*.jar的發佈文件, 默認的JNDI 名稱是

訪問本地接口:EJB-CLASS-NAME/local

訪問遠程接口:EJB-CLASS-NAME/remote

例: HelloWorld應用打包成HelloWorld.jar文件,訪問她遠程接口的JNDI名稱是:HelloWorldBean/remote

另外有一點要注意:EJB-CLASS-NAME 是不帶包名的,如com.foshanshop.ejb3.impl.HelloWorldBean只需取

HelloWorldBean。

EJB3.0遠程調用
在正式的生產環境下,大部分調用EJB的客戶端所在的服務器都爲獨立的Tomcat或Resin 。下面介紹如何在

獨立的Tomcat服務器中調用Jboss中的EJB。在獨立的Tomcat服務器中調用EJB需要有以下步驟:

1> 根據應用的需要,把調用EJB所依賴的Jar包拷貝到tomcat下的/shared/lib目錄或WEB應用的

WEB-INF/lib下,所依賴的Jar一般在jboss安裝目錄的client,/server/all/deploy/jboss-aop-jdk50.deployer,

/server/all/deploy/ejb3.deployer,/lib/endorsed等文件夾下。

下面的jar文件是必需的:

[jboss安裝目錄]/client/jbossall-client.jar

[jboss安裝目錄]/client/jboss-remoting.jar

[jboss安裝目錄]/client/jboss-aop-jdk50-client.jar

[jboss安裝目錄]/client/jboss-aspect-jdk50-client.jar

[jboss安裝目錄]/client/jboss-ejb3-client.jar

[jboss安裝目錄]/client/jboss-ejb3x.jar

[jboss安裝目錄]/client/jboss-annotations-ejb3.jar

2> 把調用的EJB接口拷貝到應用的/WEB-INF/classes/目錄下,如果有包名,需要把包和類一起拷過來。

注意,在部署web應用的服務器上,如果安裝的是Tomcat服務器,它的安裝路徑不能出現空格,如:D:/Tomcat5.0不能象D:/Tomcat 5.0這樣帶空格的安裝目錄,否則會出現下面的異常:java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: 
java.net.MalformedURLException: no protocol: 5.0/webapps/ROOT/WEB-INF/classes/]。現在把上述的HelloWorld EJB程序實現遠程調用:打包好的EJB組件部署在一臺機器的Jobss服務器上,把服務器啓動起來,在部署web應用的機器上按照上述的兩個步驟把相關jar文件和用到的接口類拷到相應的目錄下,把Test.jsp:文件中的

props.setProperty("java.naming.provider.url", "localhost:1099");這行的localhost改爲EJB組件部署機器的IP,把web應用的工程部署到Tomcat下,啓動Tomcat,就可以看到運行的結果了。

4.6小結
本章主要介紹了EJB3.0開發環境的搭建。首先給讀者介紹了EJB的幾種主要的容器及EJB3.0的開發工具。本章以JBOSS爲例詳細介紹了開發環境的搭建過程。並給讀者介紹了第一個HelloWorld的EJB3.0開發部署和運行的詳細過程,最後給讀者介紹了EJB3.0的遠程調用,相信通過本章的學習讀者已經掌握了EJB3.0開發的基本知識。爲後面其他內容的學習打下了良好的基礎。


發佈了43 篇原創文章 · 獲贊 12 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章