1. 程式人生 > >Java EE架構概述

Java EE架構概述

主要內容

  • 分散式多層應用
  • Java EE容器
  • Web Service支援
  • 打包應用
  • 開發角色
  • Java EE APIs

引子

  • Java Platform, Enterprise Edition(Java EE)為設計、開發、裝配和部署企業應用程式提供了一個基於元件的方法
  • Java EE平臺提供了:
    • 一個多層分散式應用模型
    • 可複用元件模型
    • 一個統一的安全模型
    • 靈活的事務控制
    • Web Services
  • 通過Java EE平臺,可以
    • 更快地構建創新的商業解決方案
    • 基於Java EE元件的平臺獨立性,使開發的應用不依賴於特定廠商的產品和API
    • 軟體廠商和客戶都能自由地選擇符合其需求的產品和元件

分散式多層應用

  • 應用邏輯按照功能分成若干元件,組成Java EE應用的各種應用元件按照多層Java EE環境中的層次結構,安裝在不同的機器上。
  • 安全
    • 在每個應用中使用平臺無關的安全策略
    • 允許在部署時定義安全約束
    • 應用程式能夠在多種安全實現上移植
    • 對應用開發者遮蔽實現安全特性的複雜性
    • Java EE平臺提供了標準的宣告式訪問控制規則,可由開發者定義並在應用部署到伺服器時解釋
    • Java EE提供了標準的登入機制,開發者可以不用重複開發
  • Java EE元件
    • A Java EE component is a self-contained functional software unit that is assembled into a Java EE application with its related classes and files and that communicates with other components.
    • Java EE規範定義瞭如下元件:
      • 應用客戶端(application clients)和Applets是客戶端執行的元件
      • Servlet和JSP元件是伺服器上執行的web元件
      • Enterprise JavaBeans (EJB)元件是伺服器上執行的業務元件
  • Java EE客戶端
    • Web客戶端 → thin client
      • 動態Web頁面:由Web層執行的web元件生成
      • Web瀏覽器:顯示頁面
    • Applet
    • 應用客戶端 → richer user interface
      • 直接訪問企業Beans
      • 開啟HTTP連線,與Web層的servlet通訊
    • JavaBeans元件
    • 瘦客戶端可提升應用的可分佈性、可部署性和可管理性,而富客戶端可獲得良好的使用者體驗。
  • 伺服器通訊
  • Web元件
    • Servlet
      • Servlets are Java programming language classes that
        dynamically process requests and construct responses.
    • JSP
      • JSP pages are text-based documents that execute as servlets but allow a more natural approach to creating static content.
    • JavaBeans (optional)
  • 業務元件
    • Session beans
      • A session bean represents a transient conversation with a client. When the client finishes executing, the session bean and its data are gone.
    • Entity beans
      • An entity bean represents persistent data stored in one row of a database table. If the client terminates or if the server shuts down, the underlying services ensure that the entity bean data is saved.
    • Message-driven beans
      • A message-driven bean combines features of a session bean and a Java Message Service (JMS) message listener, allowing a business component to receive JMS messages asynchronously.
  • EIS (Enterprise Information System) 層
    • ERP
    • 資料庫系統
    • 遺產系統
    • ……

Java EE容器

  • 為什麼需要容器?
    • 瘦客戶端多層應用程式開發面臨的難題
      • 事務管理
      • 狀態管理
      • 多執行緒
      • 資源池
      • 其它複雜的底層細節
    • Java EE伺服器對所有型別的元件,以容器的形式提供了一組底層服務。開發者不需重複開發,而只需關注業務問題
  • 容器服務
    • 容器是一個元件和支援元件的底層平臺特定功能之間的介面
    • Web元件、企業Bean、應用客戶端元件必須組裝成Java EE模組並部署於容器中才能執行
    • 組裝過程包括
      • 為Java EE應用中每個元件定義容器方面的設定
      • 為Java EE應用本身定義設定項
  • 容器管理的服務有
    • 可配置的服務
      同一Java EE應用中的應用元件依照部署方式不同而表現出不同的行為
      • 安全服務
      • 事務服務
      • JNDI查詢服務
      • Java EE遠端連線服務
      • ……
    • 不可配置的服務
      • 企業Bean和Servlet壽命週期
      • 資料庫連線資源池
      • 資料持久化
      • 訪問其它Java EE平臺API
  • Java EE伺服器和容器

對Web services的支援

  • Web services是基於Web的企業應用,它使用開放的、基於XML的標準和傳輸協議與呼叫它的客戶端進行資料交換
  • XML: 跨平臺、可擴充套件、基於文字的描述資料的標準。
    • 自定義標籤(tag)
    • 用schema定義其格式
    • 用XSL定義處理和展現資料的方式
  • SOAP: 客戶請求和web服務響應描述成SOAP訊息
    • 信封: 訊息中有什麼?如何處理訊息?
    • 編碼規則: 表示訊息中的特定格式的資料例項
    • 訊息約定: 描述請求和響應的格式
  • WSDL: 用XML格式描述網路服務
    • 服務名
    • 服務位置
    • 與服務通訊的方式
  • UDDI和ebXML: 在Internet上釋出web服務資訊的標準

打包應用

  • Java EE應用打包成EAR檔案(Enterprise Archive),包括
    • Java EE模組
    • 部署描述符: 描述應用、模組或元件的部署設定
      • Java EE部署描述符
      • 執行時部署描述符
        ——應用伺服器特定
  • Java EE模組: 一個Java EE模組包括一或多個具有相同容器型別的Java EE元件,以及一個元件部署描述符
    • EJB模組
      • 企業bean (class) + EJB部署描述符 → .jar
    • Web模組
      • Servlet (class) + JSP + 其它Class + HTML + 圖片 + Web部署描述符 → .war
    • 應用客戶端模組
      • Java class + 應用客戶端部署描述符 → .jar
    • 資源介面卡模組
      • Java interface, class, native libraries, and other documentation + 資源介面卡部署描述符 → .rar

開發角色

  • Java EE規範定義瞭如下角色
    • Java EE Product Provider
      • 實現Java EE產品,提供容器、實現API及其它Java EE特性
    • Tool Provider
      • 提供元件開發、組裝和打包工具
    • Application Component Provider
      • 構建Java EE應用中使用的Web元件、企業Bean、Applets,或應用客戶端
    • Application Assembler
      • 將應用模組組裝成Java EE應用的EAR檔案
    • Application Deployer and Administrator
      • 配置和部署Java EE應用程式、管理計算和網路架構、監控執行環境

Java EE APIs (1)

  • Enterprise JavaBeans
    • 執行業務邏輯
    • 三種企業bean
      • Session beans
      • Entity beans (在Java EE 5中被Java persistence API entities取代)
      • Message-driven beans
  • Java Servlet
  • JavaServer Pages
  • JavaServer Pages Standard Tag Library (JSTL, new in Java EE 5)
    • 封裝了對許多JSP應用來說通用的核心功能。
    • JSTL有迭代和條件Tag,可以處理流程控制;有處理XML文件的Tag;有用於國際化的Tag;有使用SQL訪問資料庫的Tag;及一些經常使用的功能。

Java EE APIs (2)

  • JavaServer Face (JSF, new in Java EE 5)
    • 是一個建立Web應用的使用者介面框架
    • 主要元件包括
      • 一個GUI元件框架
      • 用於在不同的HTML或各種標記語言和技術下渲染元件的柔性模型
      • 一個用於生成HTML/4.01標記的標準RenderKit
  • Java Message Service (JMS)
    • Java EE應用元件建立、傳送、接收和讀取訊息的訊息通訊標準
    • 支援分散式通訊,具有鬆散耦合、可靠、非同步的特徵
  • Java Transaction API (JTA)
    • JTA提供了劃分事務的標準介面,UserTransaction介面是核心
    • 大多數情況下使用容器管理的事務,而不是JTA
  • JavaMail API
    • 傳送email通知的API
    • 包括:一個應用級的介面;和一個服務提供者介面

Java EE APIs (3)

  • JavaBeans Activation Framework (JAF)
    • JavaMail使用它,如處理MIME編碼的郵件附件;
    • 確定任意資料片斷的型別;
    • 封裝對其訪問;
    • 發現其可用操作;
    • 建立可以執行這些操作的合適的JavaBean元件。
  • Java API for XML Processing (JAXP)
    • 支援使用DOM、SAX和XSLT處理XML文件
    • 支援使用任何XML相容的解析器和XSL處理器
    • 支援W3C XML Schema
  • Java API for XML-Based RPC (JAX_RPC)
    • 使用SOAP標準和HTTP,可以在Internet上實現基於XML的遠端過程呼叫
    • 支援WSDL,可以輸出和輸入WSDL文件
    • 可與執行在Java和非Java平臺上的web服務客戶端和伺服器端實現互操作

Java EE APIs (4)

  • Java API for XML Web Services (JAX_WS, new in Java EE 5)
    • 是JAX-RPC的升級
    • 使用JAXB API繫結XML資料到Java物件
    • 引入了面向訊息的功能,支援非同步程式設計模型
    • 支援SOAP1.2
    • 可直接使用 XML/HTTP 繫結
  • SOAP with Attachments API for Java (SAAJ)
    • 是一個底層API
    • 允許生成和使用符合SOAP1.1和SOAP附件規範的訊息
    • 一般不會直接被使用,而是使用JAX-RPC、JAX-WS

Java EE APIs (5)

  • Java API for XML Registries (JAXR)
    • 支援ebXML註冊和儲存標準
    • 支援UDDI規範
  • Java EE Connector Architecture (JCA)
    • 用於開發資源介面卡
    • 基於Java EE的Web服務與已有EIS間同步或非同步整合,這種整合是面向效能的、安全的、可擴充套件的、基於訊息的、和事務的
  • JDBC API
    • 用Java程式語言的方法呼叫SQL命令
    • 分成兩部分
      • 應用級介面 → 應用元件訪問資料庫
      • 服務提供者介面 → 將JDBC驅動程式綁縛到Java EE平臺上

Java EE APIs (6)

  • Java Naming and Directory Interface (JNDI)
    • 提供目錄和命名功能
    • 允許Java EE應用程式發現和獲得任意型別的物件
    • 與實現無關,可以訪問多種已有的命名和目錄服務
    • 使用javax.naming.InitialContext物件在java:comp/env名字下查詢物件
  • Java Authentication and Authorization Service (JAAS)
    • 鑑別和授權特定使用者或使用者組執行Java EE應用

Java EE APIs Example