EJB3.0开发环境的搭建
EJB Container的介紹
SUN公司正式推出了EJB的規范之后,在眾多的公司和開發者中引起了非常大的反響。標志著用Java開發企業級應用系統將變的非常easy。很多公司都已經推出了或正打算EJB的產品。
SUN公司對EJB的定義是:EJB是用于開發和部署多層結構的、分布式的、面向對象的Java 應用系統的跨平臺的構件體系結構。採用EJB能夠使開發商業應用系統變得easy,應用系統能夠在一個支持EJB的環境中開發,開發完之后部署在其它的環境中,隨著需求的改變,應用系統能夠不加改動地遷移到其它功能更強、更復雜的server上。
在EJB的規范中,提到了6中角色,包含 Bean提供者,應用程序裝配者,EJB容器,EJB配置工具,EJB服務提供者,系統管理員。這里面,EJB容器是EJB之所以可以執行的核心。EJB 容器管理著EJB的創建,撤消,激活,去活,與數據庫的連接等等重要的核心工作。
EJB規范的出現對電子商務發展起了非常大的推動作用。如今大型的電子商務站點,都是採用EJB技術的應用server來構建的。如今應用比較廣泛的,支持EJB的應用server中,已經產品化了的最基本的是: IBM的WebSphere,BEA的WebLogic另外,還有開源的如JBoss。
IBM WebSphere應用server是一個完好的,開放的Web應用server。它是IBM e-business應用架構的核心。WebSphere 應用server 提供三個等級的版本號,他們是:標準版(Standard Edition),高級版(Advanced Edition),企業版(Enterprise Edition)。當中,在高級版中開始支持EJB的編程模型。在企業版中提供一個高可靠的解決方式,使其可以移植到關鍵性的企業環境。EJB是WebSphere最核心的對象技術之中的一個,它提供了具有交易功能的server端的Java 組件,同一時候又是一種新型的對象分布技術編程模型。使用EJB組件完畢的應用,會支持更高級的基于數據庫的交易處理功能,如多個數據庫之間的更新,兩階段提交等。WebSphere是IBM整個一套開發,應用server的套件。他把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可幫助開發者更快地推出電子商務應用系統,從而讓開發者極大地受益于這一業內最新標準。作為server端商務邏輯的行業標準和Java2平臺的基石,Enterprirse JavaBeans是BEA WebLogic應用server的主要技術。Enterprise JavaBeans使得開發者可以專心地開發其應用系統和電子商務設想的商務邏輯,而不必為基礎結構的構筑而分心。
盡管EJB3.0剛剛公布,但已經有非常多EJBserver支持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.GAserver
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輸入password界面
四個選框都選上。點下一步就開始安裝了。
安裝完后請在“系統變量”里加入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的管理界面,這里須要你輸入username及password,假設你在安裝的時候依照教程設置了Jboss管理臺username及password,那么username及password都是admin。
假設啟動jboss出現例外,先看看jboss所用port有沒有被占(如1099,1098 ,8080, 8083等port)。能夠下載port查看器(Active Ports)進行檢查,假設port被占用就關閉此進程。確定不是port被占用,那非常大可能是你的安裝JDK不對。
圖4-10JBOSS控制臺界面
輸入username和password
這樣server就成功安裝了。
圖4-11 JBOSS控制臺界面
4.3JOBSSserver
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應用公布到Jbossserver時須要打成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程序
第一步:創建HelloWorldproject,在這里我們選擇Java Project
圖4-12 選擇Java Project界面
在以下的窗體里輸入project名
圖4-13 輸入project名界面
?
點擊next直到結束,并為此project加入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的client通過使用這個接口引用從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中。
鼠標右鍵點擊project,在彈出的菜單中選擇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”button
圖4-19 點擊Invoke界面
出現例如以下界面:
圖4-20 查找JNDI Name界面
在上圖中能夠看見HelloWorld會話Bean的JNDI名,JNDI名的組成規則是“上層名稱/下層名稱“,每層之間以”/”分隔。HelloWorld會話Bean的JNDI名是:HelloWorldBean/remote 。
HelloWorld會話Bean公布成功后,接下來介紹client怎樣訪問她。
當一個無狀態會話Bean公布到EJB容器時,容器就會為她創建一個對象stub,并把她注冊進容器的JNDI文件夾,client代碼使用她的JNDI名從容器獲得他的stub。通過這個stub,client能夠調用她的業務方法。
新建一個web project,命名為:EJBTest
圖4-21 選擇 Web Project界面
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());
}
%>
把上面的client應用打成war文件。
圖4-22 選擇部署路徑界面
然后把她復制到“[jboss安裝文件夾]/server/all/deploy”文件夾下。假設war文件的文件名稱為 EJBTest.war ,我們能夠通過http://localhost:8080/EJBTest/Test.jsp訪問client。執行結果例如以下圖:
圖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的client所在的server都為獨立的Tomcat或Resin 。以下介紹怎樣在
獨立的Tomcatserver中調用Jboss中的EJB。在獨立的Tomcatserver中調用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應用的server上,假設安裝的是Tomcatserver,它的安裝路徑不能出現空格,如: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組件部署在一臺機器的Jobssserver上,把server啟動起來,在部署web應用的機器上依照上述的兩個步驟把相關jar文件和用到的接口類拷到對應的文件夾下,把Test.jsp:文件里的
props.setProperty("java.naming.provider.url", "localhost:1099");這行的localhost改為EJB組件部署機器的IP,把web應用的project部署到Tomcat下,啟動Tomcat,就能夠看到執行的結果了。
4.6小結
本章主要介紹了EJB3.0開發環境的搭建。首先給讀者介紹了EJB的幾種基本的容器及EJB3.0的開發工具。本章以JBOSS為例具體介紹了開發環境的搭建過程。并給讀者介紹了第一個HelloWorld的EJB3.0開發部署和執行的具體過程,最后給讀者介紹了EJB3.0的遠程調用,相信通過本章的學習讀者已經掌握了EJB3.0開發的基本知識。為后面其它內容的學習打下了良好的基礎。
轉載于:https://www.cnblogs.com/zfyouxi/p/4345514.html
總結
以上是生活随笔為你收集整理的EJB3.0开发环境的搭建的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一艘轮船在水速为3千米&#47;
- 下一篇: 新车一年以后用去电子检吗?