首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 理論與實踐:讓 J2EE 組件脫離容器輕量級運行

     編輯:Java 相關知識

動機:J2EE 全棧太重,J2SE 也想用企業級服務

傳統觀點:J2EE = 全功能容器(EJB、JTA、JNDI、JMS、JCA、JMX)。但許多服務器應用(如輕量級 Web 容器、消息網關)僅需部分服務,強行上全棧容器資源浪費大、部署複雜。能否在 J2SE 中「按需引用」J2EE 標準介面的輕量級實現?

松耦合:J2EE 核心價值可復用

J2EE 組件通過 JNDI 查找 而非硬編碼依賴,JMS 提供異步解耦。這兩大思想同樣適用於 J2SE 應用,關鍵在於擁有標準介面的輕量級實現。

Somnifugi JMS:純內存、高性能、JMS 1.1 兼容

  • 基於 util.concurrent 實現,單 JVM 內運作
  • 無持久化、無事務、無認證 —— 輕量至極致
  • 性能比傳統 JMS 提供者高數量級,可用於高頻內部事件總線
  • 部署時可無縫切換到 WebSphere MQ 等重量級產品,代碼零修改
  • 甚至可替換 Swing/JavaBean 事件模型

JNDI 在 J2SE 中的落地

免費提供者

  • FSContext (Sun):文件系統存儲可序列化對象,適合單元測試存根
  • JNPServer (JBoss):獨立運行,HashMap 內存存儲,支援 RMI 遠程訪問,本地調用無 RMI 開銷

JNPServer 啟動步驟

  1. 配置 log4j
  2. 編寫 jndi.properties(見文中清單 1)
  3. 啟動 org.jnp.server.Main
  4. 客戶端引用 jnpclient.jar

應用可像 J2EE 一樣用 JNDI 做「開關板」:DataSource、ConnectionFactory、工廠對象統一綁定/查找,組件鬆耦合裝配。

JMX:輕量級生命週期管理總線

  • 每個組件暴露 MBean(start/stop、屬性 getter/setter)
  • 簡單容器 ~40 行代碼即可裝載/啟動一組 MBean
  • 免費實現:Sun RI、MX4J
  • 收益:遠程屬性檢視/動態調整(JMX Console)、組件在 J2SE/J2EE 間無縫遷移
public interface WebServerMBean {
    void create(); void start(); void stop(); void destroy();
    int getPort(); void setPort(int port);
    String[] getWebApplications();
}

總結

通過 Somnifugi JMS + JNPServer/JMX,J2SE 應用可低成本擁有「消息、命名、管理」三大企業級能力,並在未來平滑遷移至重量級產品。這正是「面向介面編程、部署時綁定實現」的最佳實踐。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved