程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 基於NetBeans比較Java EE 5和J2EE 1.4平台

基於NetBeans比較Java EE 5和J2EE 1.4平台

編輯:關於JAVA
本文對JavaTM Platform Enterprise Edition 5(“Java EE 5”)與Java 2 Platform Enterprise Edition 1.4(“J2EE 1.4”)二者的開發過程進行了比較,並演示了Java EE 5技術是如何簡化Java應用程序的開發。為了顯示新的開發模型比舊的模型更為簡單,我們將使用NetBeans IDE 5.5創建一個應用程序,該應用程序與在使用NetBeans IDE 5.0開發J2EE應用程序的快速入門指南中創建的應用程序相同。

先決條件

本文假定您已具備了以下技術的一些基本知識或編程經驗:

◆Java編程

◆NetBeans IDE

本教程所需的軟件

在學習之前,您需要在計算機中安裝以下軟件:

◆NetBeans IDE 5.5(下載) 

◆Java Standard Development Kit (JDK) 版本 5.0 或版本 6.0(下載)

◆Sun Java System Application Server Platform Edition 9(下載)

教程練習

為IDE配置應用服務器  

建立Web應用程序項目  

對Web應用程序進行編碼  

運行項目

為IDE配置應用服務器

在學習本教程之前,必須在IDE中注冊SunJava System Application Server Platform Edition 9的實例。在本練習中,我們將在IDE中注冊Sun Java System Application Server。

1、從主菜單中,選擇“工具”>“服務器管理器”。

2、單擊“添加服務器”。選擇“Sun Java System Application Server”,並為此實例指定一個名稱,然後,單擊“下一步”。 

3、指定應用服務器的安裝目錄(例如,C:SunAPPServer)。 

4、將“注冊本地缺省域”單選按鈕保留為選中狀態,然後選擇一個域。

5、(可選)單擊“下一步”,輸入管理員用戶名和口令。如果不希望在IDE用戶目錄中存儲用戶名和口令,可以將這些字段保留為空。IDE將在每次需要此信息時提示您輸入。

注意:缺省管理員口令是adminadmin。

6、單擊“完成”。IDE將注冊該服務器,並在“運行環境”窗口的“服務器”節點下面列出該服務器。

建立Web應用程序項目

在NetBeans IDE 5.0快速入門中,我們創建了一個具有EJB模塊和Web模塊的完整企業應用程序。之所以這樣做是因為:在J2EE 1.4平台中進行開發時,必須將實體Bean和會話Bean放置在EJB模塊中。要從Web模塊訪問實體Bean,我們必須添加查詢代碼。

而在Java EE 5平台上開發的示例中,不需要開發完整的企業應用程序,因為我們不需要EJB模塊或會話Bean。只需創建一個簡單的Web應用程序,然後將實體類直接放置在該Web應用程序中即可。

◆選擇“文件”>“新建項目”(Ctrl-Shift-N)。從“Web”類別中,選擇“Web應用程序”。

◆將項目命名為CustomerBook,將服務器設置為Sun Java System Application Server,將Java EE版本設置為Java EE 5,然後單擊“完成”。

小結

在本練習中,我們創建了一個包含實體類的Java EE 5 Web應用程序。 

對Web應用程序進行編碼

與在J2EE 1.4平台中創建Web應用程序相比,在Java EE 5平台中進行Web應用程序編碼要更快、更容易。但是我們仍然需要進行一些基本的設置,如建立數據庫連接,但是在創建連接池和數據源後,開發工作會變得更容易,這是因為在JavaEE 5平台中進行開發時,容器可以完成更多的工作。

由於容器具有持久性管理功能,因此,我們不需要編輯用來配置CMP映射或指定finder方法的部署描述符。實際上,我們在本示例中根本不需要任何部署描述符。在Java EE 5平台中,持久性不再局限於EJB組件。Java EE 5引入了Java持久性API,非EJB組件(如Web應用程序)也可以使用它。

此外,使用Java EE 5技術時,您不再需要J2EE 1.4開發中所需的許多樣板代碼。由於簡化了EJB開發,因此只需很少的接口,查詢也變得更為簡單了,並且通過標注方式,組件定義和資源注入變得簡單而清晰。

管理持久性

在NetBeans IDE 5.0快速入門中,我們創建了CMP實體Bean並在ejb-jar.XML中定義了部署描述符,用來管理持久性和對象關系映射。在Java EE 5平台中進行開發時,我們不再需要使用部署描述符為容器提供管理持久性的信息,只需創建持久性單元,指定要使用的數據源和實體管理器,然後讓容器完成管理實體和持久性的工作即可。容器會在運行時發現實體Bean。

持久性單元的創建可以通過在persistence.xml中定義來完成。如果項目或模塊中不存在persistence.xml,則需要創建該文件。可以通過“新建持久性單元”向導將持久性單元添加到項目中,該向導將有助於我們創建persistence.XML並定義持久性單元的屬性。注意:也可以在“新建-實體類”向導中創建持久性單元。創建實體類時,如果不存在持久性單元,該向導將提示我們進行創建。

1、選擇“新建文件”(Ctrl-N)打開“新建文件”向導。

2、從“持久性”類別中,選擇“持久性單元”,然後單擊“下一步”。

3、保留向導建議的持久性單元的缺省名稱。

4、使用“持久性提供程序”下拉列表中列出的TopLink(缺省)。

缺省提供程序是TopLink Essential.jar。TopLink Essential.jar包含了Java持久性的庫。並且實體管理器位於TopLink Essential.jar中。

5、使用“數據源”下拉列表中列出的缺省jdbc/sample數據源。

缺省數據源jdbc/sample用於連接到與Sun Java System Application Server捆綁在一起的Java DB數據庫。

6、單擊“完成”。

單擊“完成”後,將為項目創建persistence.xml,並在源代碼編輯器中將其打開。通過單擊源代碼編輯器工具欄中的“XML”,可以查看persistence.xml的XML視圖。此文件包含了Java EE 5容器管理應用程序的實體和持久性所需的所有信息。

創建實體類

在J2EE 1.4平台中進行開發時,創建實體Bean後會將它們放置在EJB模塊中,即使應用程序是簡單的Web應用程序也是如此。每個實體Bean需要若干個接口,而且您必須在ejb-jar.XML中配置部署描述符以定義實體Bean以及每個實體Bean的接口、持久性和finder查詢。

在Java EE 5中,我們可以使用簡單的實體類,而且可以將實體類放置在Java EE 5應用程序中的任意位置,而不是創建實體Bean並將它們放置在EJB模塊中。同時,為Java EE 5應用程序編寫類要比在J2EE 1.4平台中編寫類更容易,因為您可以使用標注來定義組件和注入資源。

現在我們將使用“新建-通過數據庫生成實體類”向導來基於關系數據庫創建實體類。

1、啟動Java DB數據庫,方法是:從主菜單中選擇“工具”>“Java DB數據庫”>“啟動Java DB服務器”。

2、選擇“新建文件”(Ctrl-N)打開“新建文件”向導。從“持久性”類別中,選擇“通過數據庫生成實體類”,然後單擊“下一步”。

3、在“新建-通過數據庫生成實體類”向導中,從“數據源”下拉列表中為數據庫選擇jdbc/sample數據源,並提供口令(如有必要),口令應為“app”。選擇數據源後,將在“可用表”窗格中顯示可用表的列表。

4、從“可用表”中選擇CUSTOMER表,然後單擊“添加”。

單擊“添加”後,還將添加與選定表關聯的任何表。此外,在本示例中,我們還需添加DISCOUNT_CODE表。DISCOUNT_CODE表以灰色顯示,這是因為CUSTOMER表引用了該表,而且必須生成它的實體類,這樣才能生成Customer實體類。通過在“選定的表”窗格中將鼠標懸停在表名上,可以查看灰色顯示的表是如何與選定表關聯的。

5、單擊“下一步”。

向導將顯示選定表及其任何關聯表,以及將基於選定表創建的實體類。如果要修改將生成的類的名稱,則可以在“類名”字段中鍵入名稱。

6、指定ejb,將其作為生成類的包,然後單擊“完成”。

圖1

單擊“完成”後,IDE將為CUSTOMER表和與CUSTOMER表關聯的表生成實體類。如果在“項目”窗口中展開ejb源包,則可以看到IDE在Web應用程序項目的ejb包中創建了Java類Customer.java和DiscountCode.Java。

您可以看到IDE只創建了兩個類(為每個數據庫表創建了一個類)。在“使用NetBeans IDE 5.0開發J2EE應用程序的快速入門指南”中使用“通過數據庫生成CMP實體Bean”時,IDE會為每個表創建四個類。

如果您在源代碼編輯器中查看Customer.Java,則會注意到已使用了@Entity標注將類聲明為實體類。其他標注還提供了附加信息,如實體類及其屬性映射的數據庫表和列。

您還會注意到,通常在實體Bean中找到的大部分樣板代碼都不見了。這是因為在Java EE 5中,實體類不再需要諸如ejbRemove、setMessage、setSessionContext、ejbActivate和ejbPassivate之類的方法。

對Servlet進行編碼

現在我們需要將Servlet添加到Web應用程序中。在Java EE 5中,我們不必將資源創建和查詢代碼添加到Servlet中,而是可以使用資源注入將這些工作交給容器來執行。可以使用標注將資源直接注入到Servlet中,並由容器來管理請求資源的創建和查詢。在這種情況下,我們希望使用在持久性單元中指定的實體管理器。

1、在“項目”窗口中右鍵單擊項目節點,然後選擇“新建”>“Servlet”。

2、在“新建Servlet”向導中,將Servlet命名為CustomerDetails,並將Servlet放入名為web的包中。單擊“完成”。單擊“完成”後,將在源代碼編輯器中打開CustomerDetails.Java。

3、在源代碼編輯器中打開的CustomerDetails.Java上,單擊鼠標右鍵,然後選擇“持久性”>“使用實體管理器”,將PersistenceContext注入類中。IDE將添加以下標注,該標注用於指定Servlet使用的持久性單元。請在類聲明之上添加此標注。

@PersistenceContext(name = "persistence/LogicalName", unitName = "CustomerBookPU")

IDE還將添加以下標注,用於注入管理事務邊界的資源:

@Resource

private UserTransaction utx;

IDE將在Servlet中添加以下缺省代碼:

public void persist(Object object) {

try {

Context ctx = (Context) new InitialContext().lookup("Java:comp/env");

EntityManager em = (EntityManager) ctx.lookup("persistence/LogicalName");

utx.begin();

// TODO:

// em.persist(object); utx.commit();

} catch(Exception e) {

Logger.getLogger(getClass().getName()).log(Level.SEVERE,"exception caught", e);

throw new RuntimeException(e);

}

}

此代碼用於查詢@PersistenceContext定義的持久性單元和實體管理器的實例。

4、在CustomerDetails.Java中,將上面所顯示的生成的查詢代碼修改為引用實體對象。完成後,經過修改的代碼應如下所示(以粗體顯示的代碼表示已更改的行):

public Customer findByID(Integer customerNr) {

Customer customer = null;


try {

Context ctx = (Context) new InitialContext().lookup("Java:comp/env");

EntityManager em = (EntityManager) ctx.lookup("persistence/LogicalName");

utx.begin();

customer = em.find(Customer.class, customerNr);

utx.commit();


} catch(Exception e) {

Logger.getLogger(getClass().getName()).log(Level.SEVERE,"exception caught", e);

throw new RuntimeException(e);

}

return customer;

}

5、取消注釋processRequest方法中的代碼並添加下面以粗體顯示的代碼:

    protected void processRequest(HttpServletRequest request, 
       HttpServletResponse response)

throws ServletException, IOException {

response.setContentType("text/Html;charset=UTF-8");

PrintWriter out = response.getWriter();

out.println("<Html>");

out.println("<head>");

out.println("<title>Servlet CustomerDetails</title>");

out.println("</head>");

out.println("<body>");

out.println("<h1>Search Customer Information</h1>");

String customerNr = request.getParameter("customer_nr");

if((customerNr != null) && !(customerNr.equals(""))) {
            Customer customer = findByID(new Integer(customerNr));

if(customer != null){

out.println("Customer's info for nr. " + customerNr + ": "
                     + customer.getName());

}else{

out.println("Customer not found.");

}

}

out.println("<form>");

out.println("Customer number: <input type='text' name='customer_nr' />");

out.println("<input type=submit value=Select />");

out.println("</form>");

out.println("</body>");

out.println("</Html>");

out.close();

}

6、按Alt-Shift-F組合鍵生成所有缺少的import語句。

運行項目

1、在“項目”窗口中,右鍵單擊“CustomerBook”項目節點,然後選擇“屬性”。在“項目屬性”對話框的“運行”窗格中,在“相對URL”字段中鍵入/CustomerDetails,然後單擊“確定”。

2、右鍵單擊項目節點,然後選擇“運行項目”。IDE將啟動應用服務器、生成項目,並在浏覽器中打開CustomerDetails頁。

3、在“客戶號碼”字段中輸入ID號(例如“1”),然後單擊“提交”。Servlet將顯示具有該ID號的客戶名稱。

圖2

小結

在本練習中,您使用了Java EE 5技術來生成CustomerBook應用程序,然後部署了該項目並對Web應用程序進行了測試。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved