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上來分享。
附錄: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>