使用 Eclipse 開發J2EE 應用程式

使用 Eclipse 開發J2EE 應用程式

使用 Eclipse 開發J2EE 應用程式

內文:
一、下載、安裝和配置
二、使用 Eclipse 開發 Web 應用
三、使用 Eclipse 開發 EJB
四、總結
參考資料
關於作者
附錄:JBoss320.server

薑巍巍 (jiangww@lenovo.com)
聯想集團軟體設計中心的開發工程師
2003 年 6 月

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 的網站上去下載最新版本並安裝。

然後到 http://www.eclipse.org/ 去下載 Eclipse 的最新版本,目前的最新版本是2.1。下載以後解壓 縮到自己想要的目錄中,例如 D:/Eclipse,直接執行 eclipse.exe,第一次執行的時候會自動尋找 JDK 並完成相關的設定,然後就進入了 Eclipse 的主介面。關於 Eclipse 的基本使用方法,developerWorksEclipse 的網站以及 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” 來顯示這個對話方塊,如下圖所示:

使用 Eclipse 開發J2EE 應用程式

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

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

展開 Other,選擇 Lomboz Actions。

確認 OK。

下面要進行 Lomboz 的配置:

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

使用 Eclipse 開發J2EE 應用程式

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

使用 Eclipse 開發J2EE 應用程式

最後,設定伺服器屬性。

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

使用 Eclipse 開發J2EE 應用程式

記得每次修改以後,都要點選 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 中加入已經配置好的伺服器,如下圖:

使用 Eclipse 開發J2EE 應用程式

在 Web Modules 和 EJB Modules 中分別新建 Web 模組和 EJB 模組,在本範例中,我們分別命名為 MyWeb 和 MyEJB,然後點選 Finish。這樣,一個J2EE專案的框架就自動產生了。

在 MyWeb 模組下,自動產生了兩個 jsp 檔:index.jsp 和 error.jsp,以及 WEB-INF 檔下面的設定檔。我們可以在此基礎上面添加自己的 jsp 檔和 servlet,然後建置專案。

在 Eclipse 的工具列上點選 Lomboz J2EE project outliner 的按鈕:

使用 Eclipse 開發J2EE 應用程式

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

使用 Eclipse 開發J2EE 應用程式

由於我事先已經部署了另一個 Web 伺服器:Tomcat,所以在 MyWeb 這個模組上面出現了它所綁定的這兩個伺服器,JBoss 3.0 All 旁邊的紅色標記表示它是預設的伺服器。可以透過按右鍵點選 Web 模組選擇更改預設的伺服器,如下圖:

使用 Eclipse 開發J2EE 應用程式

選擇好伺服器以後,在 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 開發J2EE 應用程式

三、使用 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,顯示出如下對話方塊:

使用 Eclipse 開發J2EE 應用程式

在 com.dino.testj2ee.myejb 這個套件下面建立一個名為 MyEJB 的 Stateless Session Bean。完成以後,在 TestJ2EE 專案的 src 目錄下面,出現了一個名為 MyEJBBean.java 的檔案,在這個檔案檔上按右鍵,選擇 New->Lomboz EJB Method Wizard,可以給這個 EJB 添加各種方法。我添加了一個  helloWorld  方法,返回一個 String 類型。如下圖所示:

使用 Eclipse 開發J2EE 應用程式

然後,需要把 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 打開一個對話方塊,按下圖填寫:

使用 Eclipse 開發J2EE 應用程式

完成以後,在 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 Services 技術。閒暇時,喜歡閱讀電腦書籍,並頻繁瀏覽各個 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>
上一篇:JS判断在线离线


下一篇:JDK10 EA版特性速览