程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA編程入門知識 >> J2EE開發n層應用

J2EE開發n層應用

編輯:JAVA編程入門知識
  摘要:在這篇文章中,我們將介紹13種J2EE(Java 2平台企業版)的核心技術:JDBC,JNDI,EJBs,RMI,jsp,Java servlets,XML,JMS,Java IDL,JTS,JTA,JavaMail和JAF。為了更好地說明這些技術在實際中的應用,本文將通過BEA System的WebLogic Server來介紹。
  Java起初是運用在浏覽器和客戶計算機上的,當時,很多人都懷疑它是否適合用作服務端的開發。現今,隨著越來越多的第三方對Java 2平台企業版(J2EE)的支持,Java已經被廣泛用來開發企業級的服務器端應用。
  J2EE平台包含有一整套的服務、應用編程接口(API)和協議,可用於開發多層的基於Web的應用。
  在這篇文章中,我們將討論構成J2EE的13種核心技術:JDBC, JNDI, EJBs, RMI, JSP, Java servlets, XML, JMS, Java IDL, JTS, JTA, JavaMail和JAF。我們將介紹每種技術適合用在哪裡;我們還將介紹每種不同的技術之間是如何通信的。
  為了更好地說明J2EE在現實中的應用,我們將通過WebLogic Server來介紹其中主要的技術,WebLogic Server來自BEA Syetem,它是一個廣泛使用的J2EE工具。要注重的是,這篇介紹性文章的閱讀對象是對WebLogic Server和J2EE不熟悉的開發者、以及對J2EE感愛好的項目經理和商業分析者。
  分布式體系和J2EE
  以前,兩層的應用--也稱為客戶/服務器應用是很常見的。圖1表示的就是一個典型的兩層體系。在一些情況下,服務器提供的唯一服務就是數據庫服務。在這種情形下,客戶端負責數據訪問、應用商業邏輯、將結果轉換為一個格式以便顯示,為用戶顯示內部的接口,以及接受用戶的輸入。客戶/服務器的體系在開始的時候很輕易配置,不過難於升級或者擴展,而且通常基於私有的協議--典型的是私有的數據庫協議。商業和表現邏輯的重新使用也很難。在Web領域中,可能最重要的就是擴展,而兩層的應用不便於升級擴展,因此不適合用在Internet。
   
  **圖1***************
  (兩層的應用體系)
  為了解決這個兩層體系的不足,Sun設計了J2EE。J2EE定義了一套標准,可輕松地開發n層的企業應用。它定義了一套標准化、模塊化的組件;並為這些組件提供了一整套完整的服務;以及自動處理應用行為的許多細節---例如安全和多線程。
  使用J2EE來開發n層的應用,要將原來的2層體系細分為多個不同的層。一個n層的應用能夠為以下的每個服務提供獨立的層:
  表現:在一個典型的Web應用中,運行在客戶機器上的浏覽器負責處理表現
  動態產生表現:雖然浏覽器可以處理一些動態產生的表現,不過為了支持多種不同的浏覽器,大部分的動態產生都應該在Web服務器進行,通過使用JSP,servlet或者XML(Extensible Markup Language,擴展標記語言)和XSL(Extensible Stylesheet Language,擴展樣式表語言)。
  商業邏輯:實現商業邏輯的最佳方法是通過Session EJB(下文將會提及)。
  數據訪問:實現數據訪問的最佳方法是在Entity EJB(下文將會提及),以及使用JDBC。
  Backend系統集成:可使用各種不同的技術來與backend系統集成。最佳的選擇在於backend系統的確切種類。
  你也許會問:為什麼要這麼多層呢?這是由於分層的方法可得到一個更便於擴展的企業應用。它可讓每個層集中在一個特定的角色上--例如,讓一個Web服務器提供網頁服務,一個應用服務器來提供給用服務,以及一個數據庫服務器來提供數據庫服務。
  由於J2EE構建在Java 2平台標准版本上(J2SE),因此它可提供與J2SE一樣的所有優點和特色。包括有“寫一次,到處運行”的便利、用作數據庫訪問的JDBC,與現有企業資源交互的CORBA技術,以及一個經過驗證的安全模型。在這個基礎上,J2EE還加入了對企業JavaBean(EJB)組件、Java servlets, JavaServer Pages (JSPs)和XML技術的支持。
  WebLogic Server的分布式體系
  J2EE提供了一個框架--一個標准的API--用作開發分布式的體系。實現這個框架的引擎工具留給第三方廠商完成。一些廠商將著重於實現J2EE體系中的某些組件。例如,Apache的Tomcat為JSP和servlet提供支持。BEA System通過它的WebLogic Server產品實現了J2EE的全部特性。
  通過提供J2EE規范的一個完整實現,WebLogic Server可用來建立及配置易於擴展和分布式的應用。WebLogic Server和J2EE為你處理一些常見的編程任務。包括有提供事務服務,安全領域、認證信息、命名和目錄服務、數據庫訪問和連接池、線程池、負載均衡和容錯。
  通過以一種易於使用和標准的方式提供這些常見的服務,類似WebLogic Server的產品可提供更富擴展性和便於維護的應用。結果是可為大量的用戶提供可用性更強的應用。
  J2EE技術
  在以下的部分中,我們將討論構成J2EE的每一種技術,並且看看WebLogic Server如何在一個分布式的應用中支持它們。最常用的J2EE技術可能是:JDBC, JNDI, EJB, JSPs和servlets,因此我們也著重討論這些方面。
  圖2表示了在一個分布式的應用中,每項J2EE技術最常用在哪裡。
  ****圖2************
  (n層應用體系的一個例子)
  Java數據庫連接(JDBC)
  JDBC API以一個統一的方式訪問各種數據庫。與ODBC類似,JDBC將開發者和私有數據庫之間的問題隔離開來。由於它建立在Java上,因此JDBC可以提供平台無關的數據庫訪問。
  JDBC定義了4種不同的驅動,具體來說,包括有:
  類型1:JDBC-ODBC橋
  在JDBC剛產生時,JDBC-ODBC橋是非常有用的。通過它,開發者可以使用JDBC來訪問一個ODBC數據源。缺點是,它需要在客戶機器上安裝有一個ODBC驅動,該機器通常是應該運行微軟Windows系統的。使用這一類的驅動器,你就會失去JDBC平台無關的好處。此外,ODBV驅動器需要客戶端的治理。
  類型2:JDBC-native驅動橋
  JDBC-native驅動橋提供了一個建築在本地數據庫驅動上的JDBC接口--沒有使用ODBC。JDBC驅動將標准的JDBC調用轉變為對數據庫API的本地調用。使用類型2的驅動也會失去JDBC平台無關性的好處,並且需要安裝客戶端的本地代碼。
  類型3:JDBC-network橋
  JDBC-network橋不需要客戶端的數據庫驅動。它們使用網絡-服務器中層來訪問一個數據庫。這會引出諸如負載均衡、連接池等技術,數據緩沖也是可能的。由於類型3的驅動通常可帶來相對小的下載時間,它是平台無關的,並且不需要客戶端的安裝和治理,因此很適合用作Internet的應用。
  類型4:純Java驅動
  類型4使用純Java數據庫驅動來提供直接的數據庫訪問。由於類型4驅動運行在客戶端,並且直接訪問數據庫,因此運行在這個模式暗示要使用一個兩層的體系。要在一個n層的體系中使用類型4的驅動,可以通過一個包含有數據訪問代碼的EJB,並且讓該EJB為它的客戶提供一個數據庫無關的服務。
  WebLogic Server為一些很常用的數據庫提供了JDBC驅動器,包括有Oracle、Sybase、Microsoft SQL Server, 和Informix。它還帶有一個Cloudscape的JDBC驅動,這是一個純Java DBMS,不過WebLogic Server自帶的是一個評估版本。
  接著我們來看一個例子。
  JDBC例子
  在例子中,我們假設你已經在Cloudscape中設置了一個PhoneBook數據庫,該數據庫包含有一個CONTACT_TABLE表,裡面有NAME和PHONE字段。我們首先載入Cloudscape的JDBC驅動,接著向driver manager請求獲得一個到PhoneBook Cloudscape數據庫的一個連接。使用這個連接,我們建立了一個Statement對象,並且使用它來執行一個簡單的SQL查詢。最後,循環得到結果集的所有項目,將NAME和PHONE字段的內容寫入到標准的輸出中。
  import java.sql.*;
  
  public class JDBCExample
  {
  public static void main( String args[] )
  {
  try
  {
  Class.forName("COM.cloudscape.core.JDBCDriver");
  Connection conn = DriverManager.getConnection("jdbc:cloudscape:PhoneBook");
  Statement stmt = conn.createStatement();
  String sql = "SELECT name, phone FROM CONTACT_TABLE ORDER BY name";
  ResultSet resultSet = stmt.executeQuery( sql );
  
  String name;
  String phone;
  while ( resultSet.next() )
  {
  name = resultSet.getString(1).trim();
  phone = resultSet.getString(2).trim();
  System.out.println( name + ", " + phone );
  }
  }
  catch ( Exception e )
  {
  // Handle exception here
  e.printStackTrace();
  }
  }
  }
  接著,我們將介紹JDBC在企業應用中的使用。
  企業應用中的JDBC
  上面的例子是很簡單的。它使用的仍然是一個兩層的體系。在一個n層的企業應用中,客戶將與一個EJB通信,並且會進行數據庫的連接。為了提高擴展性和性能,WebLogic Server提供連接池(connection pools)的支持。
  通過在服務器啟動的時候建立一個數據庫的連接池,連接池可減少建立和中斷數據庫連接時的系統開銷。假如有數據庫連接的需求,WebLogic Server可從池中選擇一個,而不是創建一個。WebLogic Server的連接池在weblogic.properties中定義(具體可參考你的weblogic.properties中的例子和Weblogic Server中的文檔)。
  另一個企業應用中經常用到的數據庫特性是支持事務。事務是一組語句,不過為了保持數據的完整性,這組語句都被看成是一個單一的語句。默認的情況下,JDBC工作在自動提交(auto-commit)的事務模式。你可以使用Connection類的setAutoCommit()方法來覆蓋它。
  現在我們對JDBC已經有一個了解了。接著我們將介紹JNDI。
  Java命名和目錄接口(Java Naming and Directory Interface,JNDI)
  JN
 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved