Java 理论与实践:让 J2EE 脱离容器
生活随笔
收集整理的這篇文章主要介紹了
Java 理论与实践:让 J2EE 脱离容器
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
| 大多數項目不是屬于 J 可以存在于 J2EE 容器之外 Goetz 分析如何在 J2SE 應 他讀者分享您關于本文的心 | 2EE 應用程序就是屬于 J2SE 應 ,并且有些 J2SE 應用程序可以 用程序中使用某些 J2EE 服務。 得。(您也可以單擊文章頂部或 | 用程序。不過,有一些 J2EE 技術 對它們加以利用。本月,Brian? 請在附帶的討論論壇上與作者和其 底部的討論來訪問論壇。) |
| 在大多數情況下,Java 在這一點上是涇渭分明的。 J2EE API,包括 Enterpris 計為協同工作;畢竟,J2EE 需求。像所有框架一樣,J2 | 應用程序要么是 J2EE 應用程 J2EE 應用程序需要 J2EE 容器 e JavaBean (EJB)、JTA、JNDI 設計是從多年來數百人開發企 EE API 的主要目的是“不重新 | 序、要么是 J2SE 應用程序,并且 的服務,容器要實現一長串的? 、JMS、JCA 和 JMX。J2EE API 設 業應用程序的經驗中提取出的公共 發明輪子”。 |
| 有一些 API 屬于 J2EE JDBC、JSP 和 servlet, —大多數 J2EE API 需要全 用程序而非 J2EE 應用程序 新發明輪子呢?J2EE 中是 呢?什么組件可以同時用于 | 規范的一部分,但是可以很容 但是對于大多數 J2EE API,J2E 功能的 J2EE 容器。不過,有一 ,這通常都有很好的理由。為什 否有部分內容可以容易地被 J2S J2EE 和 J2SE 應用程序的組件 | 易地在 J2SE 應用程序中使用,如 E 是一個要么是要么不是的命題— 些服務器應用程序開發為 J2SE 應 么這些應用程序的開發人員必須重 E 應用程序借用來提供同樣的優點 呢?? |
| 松散耦合 |
| J2EE 的一個主要設計原理是 J2EE? 者部署應用程序時而不是在組件開發時定 JNDI 相互查找和查找所需要的資源,如? 允許靈活地為工作流程建模、容易分配處 程序也可以從這些技術和原理中受益。 | 應用程序可以松散地耦合——用組件組裝,在組裝或 義或者改變這些組件的相互連接。J2EE 組件使用? JDBC 和 JMS 連接。JMS 這樣的技術鼓勵松散耦合, 理任務、可伸縮性和容錯性。很多 J2SE 服務器應用 |
| 像 JDBC、JMS 和 JNDI 這樣的 API? 服務提供者之間的統一接口。幾乎每一個 據庫服務器,所以幾乎每一個希望利用數 過,對于 JMS 就不是這樣了。消息隊列 。但是有大量的應用程序可以通過使用消 | 基本上是“中間件”——它們作為應用程序與不同的 數據庫服務器都有 JDBC 驅動程序,有大量的免費數 據庫的 Java 應用程序都可以容易地做到這一點。不 服務器遠沒有數據庫這樣常見,特別是在小型商店中 息隊列而極大地受益。 |
| Somnifugi JMS |
| 消息隊列是一個功能強 用程序。有一些商業消息隊 SpiritWave。就像 JDBC 對 統一的接口訪問不同的消息 樣的抽象。 | 大的范例,它用于構建健壯的、 列產品,如 WebSphere MQ、Son 于數據庫一樣,JMS 是消息的中 隊列產品,這個接口提供了像 C | 靈活的、松散耦合的、可伸縮的應 ic、Fiorano、JBossMQ 和? 間件——它使得應用程序可以通過 onnection、Topic 和Message 這 |
| 許多 J2SE 應用程序使用某種形式的 作隊列、任務管理器等。AWT 和 Swing? JavaBean 組件利用監聽器支持一種基于 它固有的松散耦合有利于采用靈活的、基 的天然抽象邊界。一個附帶的好處是,MQ 容易了,因為消息生產者和使用者不一定 的本性是允許并發處理的。 | 消息隊列,但是不使用 JMS——而是使用線程池、工 框架使用消息(事件)在模型與視圖層之間通信, 主題的消息。消息隊列提供了很多結構上的優點—— 于組件的方法,并提供了有助于簡化設計和減少互連 范例使得分布式的、可伸縮的和容錯的設計變得更 需要運行在同一 JVM 中,大多數生產者/使用者任務 |
| J2SE 服務器應用程序 util.concurrent 這樣的庫 | 的開發人員經常開發他們自己的 為基礎構建。通常這么做的理由 | 消息層,或者從零開始,或者以? 是: |
| MQ 服務器是昂貴的和 樣更重量級的功能,構建自 | 重量級的,并且由于我們不需要 己內存中的消息層,只提供所需 | 像持久性、分布式、事務和驗證這 要的功能會更容易。 |
| 雖然這在一般情況下是 要的一些消息功能在以后可 | 正確的,但是應用程序需求通常 能會變得更重要了。 | 會隨著時間而增加,在開始時不需 |
| 面向消息的應用程序的開發人員在開 產品,或者構建自己的更便宜的、更輕量 ——一個基于高性能的 util.concurrent API 的接口。與傳統 JMS 提供者相比較 能上。它只限于在一個 JVM 中使用(盡 功能。另一方面,它特別快——它比傳統 法使用消息的地方使用它。為了表明 Som 用 JMS 主題取代 Swing/JavaBean 事件 | 發過程的初期就必須做出選擇——選擇一個商業消息 級的解決方案。Somnifugi JMS 包結合了這兩種方式 庫的非持久內存中消息隊列服務,和一個符合 JMS? ,Somnifugi 是相當輕量級的,不管是功能上還是性 管可以取消這種限制),并缺少持久性、事務和驗證 JMS 實現快得多,以至于可以在因性能原因可能無 nifugi 到底有多輕量級,在它的分發中包含了幾個 框架的例子。 |
| 增加的靈活性 |
| Somnifugi 還提供了另一項重要的優 署應用程序時決定是使用更快的、內存中 的提供者,如 WebSphere MQ。可以將這 需求可能會在項目的開發過程中變化時— 來說這是不太可能做到的。 | 點:現在可以開發使用 JMS 接口的組件,然后在部 的 Somnifugi 提供者還是更重量級的、但是更可靠 種選擇推遲到部署時的好處非常巨大——特別是因為 —并提供了代碼重用的機會,對于自已開發的消息層 |
| 在 J2SE 中使用 JNDI |
| 像 JDBC 和 JMS 一樣 JNDI 不像使用 JDBC 那么 放源代碼數據庫服務器。雖 J2EE 容器的 JNDI,數量 而且還意味著 J2SE 開發人 | ,JNDI 是一種中間件。像 JMS? 容易。JDBC 提供者無處不在— 然所有 J2EE 容器都必須包括一 相對就少了。這不僅使在 J2SE? 員不太可能接觸到 JNDI 并認識 | 一樣,在 J2SE 應用程序中使用? —有數十種兼容 JDBC 的商業和開 個 JNDI 提供者,但是對于不屬于 應用程序中使用 JNDI 更困難了, 它的優勢。 |
| 根據所使用的 JNDI 提 Java 對象(有一些限制: 存儲靜態配置數據(整型和 對象,以及無狀態的對象( DataSource 對象,而不只 為像授權憑證這樣的敏感信 | 供者和應用程序配置,JNDI 可 有些 JNDI 提供者限制存儲的對 字符串型)、JDBC DataSource? 包括工廠對象)。完整地存儲已 是配置數據,比如 JDBC URL, 息不能被應用程序直接使用。 | 能在 JNDI 名稱空間中存儲任意的 象是可序列化的)。一般用 JNDI? 對象、JMS Connection 和 Topic? 配置對象,比如 JDBC? 還可以增強應用程序的安全性,因 |
| J2EE 應用程序使用 JNDI 作為連接 JNDI 尋找其他想要使用的組件,如 EJB? 組件之間的互連是在組件的部署描述符中 的特定位置,并保證在部署組件之前組件 | 松散耦合組件之間的“開關板”——J2EE 組件使用? 組件,并尋找 JDBC 和 JMS 連接這樣的資源。J2EE? 聲明式地定義的,容器自動將對象綁定到名稱空間中 之間的所有資源依賴關系都得到滿足。 |
| J2SE 應用程序可以以 填充名稱空間的工作。但是 發現。 | 類似于 J2EE 應用程序的方式使 好處是相同的——應用程序可以 | 用 JNDI,只是它們必須多做一些 更松散地耦合,組件在運行時彼此 |
| 免費 JNDI 提供者 |
| 雖然 JNDI 參考實現不 File System (FSContext 訪問并存儲文件中的可序列 FSContext JNDI 提供者主 以使用它作為序列化對象的 獲得其配置的組件進行單元 | 包括一般性的 JDNI 提供者,但 )。這是一個示例 JNDI 提供者 化對象,還使名稱空間的內容可 要是做為編寫 JNDI 提供者的一 持久性數據存儲,或者是作為“ 測試。 | 是可以下載 Sun 網站提供的? ,它是以源代碼的方式提供的,它 以保證跨程序調用的一致性。雖然 個示例,但是簡單的應用程序也可 存根” JNDI 提供者,對從 JNDI? |
| JBoss 開放源代碼 J2EE 容器還包括 易地作為單獨的 JNDI 提供者運行,不需 JNP,而在本地 JVM 中不會產生 RMI 開 中。? | 一個更一般性的 JNDI 提供者 JNPServer,它可以容 要 JBoss 容器。可以通過 RMI 從遠程 JVM 訪問? 銷。它在內部將對象存儲到內存中的一個 HashMap? |
| 在 JBoss 發行版的 jn log4j 日志引擎。要使用 清單 1),并安排通過調用 點來啟動服務器。訪問 JND 件中。 | pserver.jar JAR 文件中可以找 它,必須配置 log4j,創建相應 同一 JVM 或者另一個 JVM 中的 I 名稱空間的類文件在 JBoss? | 到 JNP JNDI 服務器,它還依賴于 的 jndi.properties 文件(參見 org.jnp.server.Main 的主入口 發行版的 jnpclient.jar JAR 文 |
| 清單 1. JNPServer 的 jndi.properties???????????? |
| java.naming.factory.initial=org. | jnp.interfaces.NamingContextFactory |
| java.naming.factory. | url.pkgs=org.jboss.naming:or | g.jnp.interfaces |
| # Uncomment this lin | e only if the JNDI server is | to run in another JVM; |
| # otherwise, local JNDI requests | will go over RMI |
| #java.naming.provider.url=localhost???????? |
| Java 管理擴展(JMX) |
| Java 管理擴展(Java? 的機制。JBoss 大量使用 J 很容易配置一個只包括所需 托管的 bean)對象,它包 setter。清單 2 顯示了描 | Management Extensions,JMX) MX——JBoss 中的幾乎所有組件 服務的應用程序。對于每一個組 含生命周期方法(start() 和 s 述一個簡單 Web 容器服務的 MB | 是一種管理組件和服務的生命周期 都作為 JMX 服務提供。結果就是 件服務,創建一個名為 MBean ( top())和公開屬性的 getter 和? ean 接口: |
| 清單 2. 簡單 Web 容器服務的 MBean 接口???????????????????????? |
| public interface WebServerMBean {???????????? |
| // Lifecycle methods?????????????????????????????????? |
| void create() throws Exception;???????????? |
| void start() throws Exception;?????????????? |
| void stop();?????????????????????????????????????????????????? |
| void destroy();???????????????????????????????????????????? |
| // Getter and setter for list | ener-port property |
| int getPort();?????????????????????????????????????????????? |
| void setPort(int port);???????????????????????????? |
| // Get the names of loaded We | b applications |
| String[] getWebApplications();?????????????? |
| }???????????????????????????????????????????????????????????????????????????? |
| JBoss 還包括一個 Web 器中的 MBeans、檢查它們 還包括一個名為 HtmlAdapt | 應用程序(jmx-console),它 當前的狀態、并用瀏覽器讀取和 er 的 Web 應用程序。) | 可以查看當前裝載到 JBoss 服務 寫入它們的屬性。(JMX 參考實現 |
| 雖然 JMX 是為 J2EE? 個免費的 JMX 實現,Sun? 件是相當簡單的——通常所 組 MBean 并啟動它們的 JM JMS 的好處,比如遠程屬性 編寫可以輕易地同時運行在 | 提供的,但是也可以在 J2SE 應 的參考實現和開放源代碼 MX4J 要做的就是實現 start() 和sto S “容器”只需約 40 行代碼。 檢查和操縱(這對于調試及管理 J2SE 和 J2EE 環境中的組件。 | 用程序中容易地使用它。至少有兩 。編寫一個 MBean 以描述一個組 p() 方法。編寫一個簡單的裝載一 遵循 JMX 標準,不但得到使用? 都有好處),而且還可以更容易地 |
| 結束語 |
| 雖然 J2EE 和 J2SE 是用于不同工作 種框架服務的“輕量級”和“重量級”實 的較輕量級的實現,如 Somnifugi JMS, 同時又具有在將來需要時,可以容易地遷 | 的不同工具,但是許多開發人員發現自己必須決定各 現,比如消息、配置或者管理。通過使用 J2EE 接口 開發人員可以在短期內得到性能和易于使用的好處, 移到更重量級的解決方案的靈活性。 |
轉載于:https://www.cnblogs.com/lsun/archive/2011/01/13/1934650.html
總結
以上是生活随笔為你收集整理的Java 理论与实践:让 J2EE 脱离容器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小巧单据打印管理软件
- 下一篇: oneno浏览器插件_Send to O