Eclipse是一個非常優秀的集成開發環境,這個在IBM支持下的開放源碼項目經過一段時期的發展完善,已經為廣大Java開發者所熟悉。Eclipse的出現,為Java開發者提供了免費使用強大的Java IDE的機會,通過集成大量的plugin,Eclipse的功能可以不斷擴展,以支持各種不同的應用。

Lomboz是一個免費的Eclipse plugin,它將很多Java應用服務器、J2EE組件和Web應用開發集成到Eclipse中,可以幫助Java開發者使用Eclipse建立、測試、部署J2EE應用。

JBoss是一個開放源碼、功能強大的Java應用服務器,也是目前最受Java開發者歡迎的Java應用服務器,被Java World的編輯們評為2002年的最佳應用服務器。2003年到目前為止的下載量已經超過了一百五十萬次。

一、下載、安裝和配置

1. Eclipse的下載和安裝

首先需要安裝JDK,可以到Sun的網站上去下載最新版本并安裝。

然后到www.eclipse.org去下載Eclipse的最新版本,目前的最新版本是2.1。下載以后解壓到自己想要的目錄中,比如D:\Eclipse,直接運行eclipse.exe,第一次運行的時候會自動尋找JDK并完成相應的配置,然后就進入了Eclipse的主界面。關于Eclipse的基本使用方法,developerWorks,Eclipse的網站以及Eclipse的隨機文檔上都有詳細地介紹,這里不詳細描述了。

2. Jboss的下載、安裝

JBoss目前的最新版本是3.2.1,不過我覺得這個版本有一些問題,啟動服務器的時候會有一些jar包找不到,導致WARN和ERROR的發生。所以我推薦下載3.0.7,也可以下載集成了Tomcat 4.1.24的JBoss 3.0.7版本。

下載后解壓,我們假設JBOSS_HOME為JBoss的主目錄,執行JBOSS_HOME/bin/run.bat,就啟動了JBoss服務器。一般會在1分鐘左右啟動完畢。

3. Lomboz的下載、安裝和配置

Lomboz目前的最新版本是2.1,我們假設Eclipse的主目錄為ECLIPSE_HOME,下載以后將其解壓到ECLIPSE_HOME/plugins文件夾下面,這樣在這個文件夾下面就多了一個com.objectlearn.jdt.j2ee文件夾。

然后啟動Eclipse, 會自動出現Customize Perspective的對話框,如果沒有出現的話,也可以通過菜單"Window->Customize Perspective"來顯示這個對話框,如下圖所示:


展開File->New,選擇所有與Lomboz相關的選項;

展開Window->Show View,選擇Lomboz J2EE View;

展開Other,選擇Lomboz Actions。

確認OK。

下面要進行Lomboz的配置:

首先,打開屬性對話框,確保Java->New Project中的設置:


接著在Lomboz屬性中,確保如下設置:


最后,設置服務器屬性。

Lomboz預先定義了一些常用的Java服務器的設置,這些配置文件放在ECLIPSE_HOME/plugins/com.objectlearn.jdt.j2ee/servers 文件夾下面,你可以用文本編輯器手工修改(除非你所用的服務器不在Lomboz默認的服務器中,否則我不推薦你這么做),也可以在Eclipse的屬性對話框中設置,設置的過程非常簡單,如下圖所示:


記得每次修改以后,都要點擊Apply。

上圖是Properties標簽下的設置,Classpath標簽下一般不需要做任何改動(注意:如果你沒有聽我文章開始部分的勸告,使用了JBoss3.2.0以上的版本,可能需要手工加入多了個jar包,這是體力活,有些麻煩。我不知道這是不是JBoss的問題,具體操作我在下面會提一下)。

通過以上三個步驟,就完成了Lomboz對J2EE開發的支持和JBoss的配置。你可以進入文章的第二部分"使用Eclipse開發Web應用"了。

注意事項:

a.如果服務器不在默認服務器之列;

在ECLIPSE_HOME/plugins/com.objectlearn.jdt.j2ee/servers 文件夾下新建一個后綴名為server的文件,然后根據已有的server文件為模版,用文本編輯器編輯server文件。建立了一個新的server文件以后,也可以在Lomboz的屬性頁中進行相應的設置。

b. 如果使用了JBoss3.2.0版本。

打開Window>Preferences>Lomboz>ServerDefinitions,選擇你的服務器,然后選擇classpath標簽,將如下的jar包加入到server library中:

JBOSS_HOME\lib\concurrent.jar 
JBOSS_HOME \lib\boss-system.jar
JBOSS_HOME \server\default\lib\jboss.jar 
JBOSS_HOME \server\default\lib\jpl-pattern.jar 
JBOSS_HOME \server\default\lib\jpl-util.jar 
JBOSS_HOME \server\default\lib\jnpserver.jar 
JBOSS_HOME \server\default\lib\jboss-transaction.jar

我的JBoss320.server文件中的全部內容在本文的最后部分呈現。

二、使用Eclipse開發Web應用

首先,打開File->New->Lomboz J2EE Project,創建一個名為TestJ2EE的J2EE Project。

點擊Next,默認各種設置,點擊Next,進入下一個對話框,在Targeted Server中加入已經配置好的服務器,如下圖:


在Web Modules和EJB Modules中分別新建Web模塊和EJB模塊,在本例中,我們分別命名為MyWeb和MyEJB,然后點擊Finish。這樣,一個J2EE項目的框架就自動生成了。

在MyWeb模塊下面,自動生成了兩個jsp文件:index.jsp和error.jsp,以及WEB-INF文件下面的配置文件。我們可以在此基礎上面添加自己的jsp文件和servlet,然后build project。

在Eclipse的工具欄上點擊Lomboz J2EE project outliner的按鈕:


這樣,在Eclipse上就出現了Lomboz J2EE View,如下圖所示:


由于我事先已經部署了另一個Web服務器:Tomcat,所以在MyWeb這個模塊上面出現了它所綁定的這兩個服務器,JBoss 3.0 All 旁邊的紅色標記表示它是默認的服務器??梢酝ㄟ^右擊Web模塊選擇更改默認的服務器,如下圖:


選擇好服務器以后,在Lomboz J2EE View中右鍵單擊服務器,選擇運行服務器,等服務器啟動好以后,右鍵單擊Web模塊,選擇Deploy Module,這樣就完成了Web模塊在服務器上的部署。打開IE瀏覽器,鍵入http://127.0.0.1:8080/MyWeb,就可以看到自己開發的Web應用了。

這里有一點需要說明,如果采用Tomcat作為Web服務器的話,如果Web模塊需要重新部署,則須重新啟動Tomcat服務器,JBoss則不需要這么做。

注意事項:

如果從Eclipse中啟動JBoss服務器的時候,遇到了這個問題:


Error occurred during initialization of VM 
java/lang/NoClassDefFoundError: java/lang/Object

一般遇到這個問題,可能是由于JRE沒有設置好,請在Eclipse中的Preference對話框中,展開Java->Installed JREs,查看JRE是否設置好了;然后打開所開發的項目屬性對話框,查看Java Build Path的library中是否有JRE System Library,沒有的話,點擊Add Library,添加JRE System Library。


三、使用Eclipse開發EJB

在第二部分"使用Eclipse開發Web應用"中,我們已經在TestJ2EE這個J2EE項目中添加了一個名為MyEJB的EJB模塊。下面我們通過Lomboz EJB Creation Wizard向MyEJB模塊中添加一個Session Bean。

點擊File->New->Lomboz EJB Creation Wizard,或者右擊MyEJB模塊,選擇New->Lomboz EJB Creation Wizard,顯示出如下對話框:


在com.dino.testj2ee.myejb這個包下面創建一個名為MyEJB的Stateless Session Bean。完成以后,在TestJ2EE項目的src文件夾下面,出現了一個名為MyEJBBean.java的文件,右擊這個文件,選擇New->Lomboz EJB Method Wizard,可以給這個EJB添加各種方法。我添加了一個helloWorld方法,返回一個String類型。如下圖所示:


然后,需要把MyEJB這個Session Bean添加到MyEJB這個模塊上面:右擊MyEJB.java,選擇Lomboz J2EE…->Add EJB to Module,選擇MyEJB,OK。

右擊MyEJB模塊,選擇LombozJ2EE…->Generate EJB Classes,這樣就在ejbsrc目錄下面自動生成了下面幾個文件:

MyEJBHome.java
MyEJBRome.java
MyEJBLocalHome.java
MyEJBLocal.java
MyEJBSession.java (MyEJBSession extends MyEJBBean)
MyEJBUtil.java

Build project以后,自動將模塊打包完畢。接著就可以按照部署Web模塊的步驟來部署EJB模塊了。

最后,我們建立一個應用程序來測試EJB。

通過File->New->Lomboz EJB Test Client Wizard打開一個對話框,按下圖填寫:


完成以后,在src目錄下面生成了TestMyEJB.java,在其中的testBean方法中加入測試代碼:


System.out.println(myBean.helloWorld());

如果目前JBoss服務器已經啟動,而且MyEJB模塊已經部署的話,執行TestMyEJB,就會在Console窗口上顯示出:


hehe, I can deploy EJB by Eclipse!

四、總結

通過以上的介紹,我們了解到,Lomboz使Eclipse開發J2EE應用變得非常簡便,而且Eclipse, Lomboz, JBoss這些工具都是免費和開放源碼的項目,所以這樣的組合對Java開發者來說更有吸引力。

對于開發復雜的J2EE應用來說,上面的介紹可能還不夠全面,希望大家在做項目的過程中體會,再將總結出來的經驗放到developerWorks上來分享。

參考資料:

  • www.eclipse.org Eclipse的官方網站;
  • www.jboss.org JBoss的官方網站;
  • www.objectlearn.com Lomboz的網站,上面有關于Lomboz的教程。
  • Eclipse in Action: A Guide for Web Developers, by David Gallardo, Ed Burnette and Robert McGovern, Manning Publications. 一本介紹使用Eclipse開發的好書。
  • JBoss 3.0: Quick Start Guide, by JBoss Group. 一本關于JBoss入門的好書。

關于作者

姜巍巍,是聯想集團軟件設計中心的開發工程師,熱衷于J2EE和Web服務技術。閑暇時,喜歡閱讀計算機書籍,并頻繁光顧各個Java論壇;周末的晚上,一般會乖乖的在電視機前面觀看意甲直播。地址:北京市上地信息產業基地開拓路7號先鋒大廈 郵編:100085 。您可以通過E-mail: jiangww@lenovo.com 與他取得聯系。

附錄:JBoss320.server


<serverDefinition name="JBOSS 3.2" 
	ejbModules="true" webModules="true" earModules="true"> 
<property id="serverRootDirectory" label="Application Server Directory:" 
	type="directory" default="D:/jboss-3.2.0" /> 
<property id="serverAddress" label="Address:" 
	type="string" default="127.0.0.1" /> 
<property id="serverPort" label="Port:" 
	type="string" default="8080" /> 
<property id="classPathVariableName" label="Classpath Variable Name:" 
	type="string" default="JBOSS32" /> 
<property id="classPath" label="Classpath Variable:" 
	type="directory" default="D:/jboss-3.2.0" /> 
	
<serverHome>${serverRootDirectory}</serverHome> 
<webModulesDeployDirectory>${serverRootDirectory}/server/all/deploy</webModulesDeployDirectory> 
<ejbModulesDeployDirectory>${serverRootDirectory}/server/all/deploy</ejbModulesDeployDirectory> 
<earModulesDeployDirectory>${serverRootDirectory}/server/all/deploy</earModulesDeployDirectory> 
<jndiInitialContextFactory>org.jnp.interfaces.NamingContextFactory</jndiInitialContextFactory> 
<jndiProviderUrl>jnp://${serverAddress}:1099</jndiProviderUrl> 
<startClass>org.jboss.Main</startClass> 
<startWorkingDirectory>${serverRootDirectory}/bin</startWorkingDirectory> 
<startVmParameters></startVmParameters> 
<startProgramArguments>-c all</startProgramArguments> 
<stopClass>org.jboss.Shutdown</stopClass> 
<stopWorkingDirectory>${serverRootDirectory}/bin</stopWorkingDirectory> 
<stopVmParameters></stopVmParameters> 
<stopProgramArguments>${serverAddress} ${serverPort}</stopProgramArguments> 
<serverClassPath> 
<jar type="variable">JDK_TOOLS</jar> 
<jar type="variable">${classPathVariableName}/bin/run.jar</jar> 
<jar type="variable">${classPathVariableName}/bin/shutdown.jar</jar> 
<jar type="variable">${classPathVariableName}/client/jboss-j2ee.jar</jar> 
<jar type="variable">${classPathVariableName}/server/all/lib/javax.servlet.jar</jar> 
<jar type="variable">${classPathVariableName}/lib/commons-httpclient.jar</jar> 
<jar type="variable">${classPathVariableName}/lib/concurrent.jar</jar> 
<jar type="variable">${classPathVariableName}/lib/getopt.jar</jar> 
<jar type="variable">${classPathVariableName}/lib/jboss-boot.jar</jar> 
<jar type="variable">${classPathVariableName}/lib/jboss-common.jar</jar> 
<jar type="variable">${classPathVariableName}/lib/jboss-jmx.jar</jar> 
<jar type="variable">${classPathVariableName}/lib/jboss-system.jar</jar> 
<jar type="variable">${classPathVariableName}/lib/jdom.jar</jar> 
<jar type="variable">${classPathVariableName}/lib/log4j-boot.jar</jar> 
<jar type="variable">${classPathVariableName}/lib/webdavlib.jar</jar> 
<jar type="variable">${classPathVariableName}/lib/xercesImpl.jar</jar> 
<jar type="variable">${classPathVariableName}/lib/xml-apis.jar</jar> 
<jar type="variable">${classPathVariableName}/server/all/lib/jnet.jar</jar> 
<jar type="variable">${classPathVariableName}/lib/gnu-regexp.jar</jar> 
<jar type="variable">${classPathVariableName}/server/all/lib/jboss.jar</jar> 
<jar type="variable">${classPathVariableName}/server/all/lib/jnpserver.jar</jar> 
<jar type="variable">${classPathVariableName}/server/all/lib/jpl-util.jar</jar> 
<jar type="variable">${classPathVariableName}/server/all/lib/jpl-pattern.jar</jar> 
<jar type="variable">${classPathVariableName}/server/all/lib/jsse.jar</jar> 
<jar type="variable">${classPathVariableName}/server/all/lib/jbossha.jar</jar> 
<jar type="variable">${classPathVariableName}/server/all/lib/jboss-jaas.jar</jar> 
<jar type="variable">${classPathVariableName}/server/all/lib/jts.jar</jar> 
<jar type="variable">${classPathVariableName}/server/all/lib/jboss-transaction.jar</jar> 
<jar type="variable">${classPathVariableName}/server/all/lib/javagroups-2.0.jar</jar> 
<jar type="variable">${classPathVariableName}/server/all/lib/jmxri.jar</jar> 
<jar type="variable">${classPathVariableName}/server/all/lib/jmxtools.jar</jar> 
<jar type="variable">${classPathVariableName}/server/all/lib/jbossmx.jar</jar> 
</serverClassPath> 
<clientClassPath> 
<jar type="variable">${classPathVariableName}/client/jboss-j2ee.jar</jar> 
<jar type="variable">${classPathVariableName}/client/jnp-client.jar</jar> 
<jar type="variable">${classPathVariableName}/client/jboss-client.jar</jar> 
<jar type="variable">${classPathVariableName}/client/jboss-common-client.jar</jar> 
<jar type="variable">${classPathVariableName}/client/jbosssx-client.jar</jar> 
<jar type="variable">${classPathVariableName}/client/log4j.jar</jar> 
<jar type="variable">${classPathVariableName}/client/jnet.jar</jar> 
<jar type="variable">${classPathVariableName}/client/jaas.jar</jar> 
</clientClassPath> 
</serverDefinition>