J2EE中間件
中間件層主要是網客通平臺使用的J2EE中間件,包括平臺使用到的應用服務器和中間件技術。一、應用服務器
應用服務器為網客通提供的整個J2EE平臺實現,EMALL基礎服務層和應用層、業務層都是建立在應用服務器之上。
網客通設計上遵循SUN公司提出的J2EE規范,這樣能夠盡可能的保證在不同的J2EE應用服務器中進行移植。
經過測試、網客通平臺支持Tomcat、WebLogic、JBoss這幾種J2EE應用服務器。
二、中間件技術
本著重用的設計原則,網客通在一些功能中采用了已有的成熟技術,這些都是經過實踐考驗的中間件。主要以java標準包和開源項目為主,大部分都針對系統作了相應調整,以便適合系統的需要。
1. Apache commons:
著名的開源組織Apache的一個java工具包,提供很多實用的功能。
1) commons-beanutils:
提供對Java反射和自省API的包裝。
在平臺中用于通用的接口設計。
2) commons-codec:
包含一些通用的編碼解碼算法。Hex,Base64, 以及URL encoder。
平臺中主要用來做消息摘要,實現數據加密等功能。
3) commons-collections:
提供一個類包來擴展和增加標準的Java Collection框架。提供了比j2sdk更全面的數據結構,平臺中繼承并實現了一些特殊的數據結構。
4) commons-pool:
提供了通用對象池接口,一個用于創建模塊化對象池的工具包,以及通常的對象池。
我們在原有的基礎上進行了優化,在性能和使用性方面有所提高。
5) commons-dbcp:
這是一個基于apache的對象池(apache commons pool)實現的數據庫連接池。
我們在原有的基礎上進行了優化,對數據庫連接進行了特別的處理,防止數據庫連接泄漏的問題,并提供了監控的功能。
6) commons-discovery:
供工具來定位資源(包括類) ,通過使用各種模式來映射服務/引用名稱和資源名稱。
7) commons-el:
提供在JSP2.0規范中定義的EL表達式的解釋器。
對平臺中的JSP提供EL表達式支持。
8) commons-fileupload:
強大和高性能的文件上傳功能。
平臺中被用于上傳各種圖片、Flash、文檔等資源,我們在原有的基礎上進行了優化。
9) commons-logging:
提供通用的日志操作接口。
主要用于程序調試和服務器日常的日志輸出。
10) commons-validator:
提供了一個簡單的,可擴展的框架來在一個XML文件中定義校驗器(校驗方法)和校驗規則。支持校驗規則的和錯誤消息的國際化。
平臺中用來校驗各種xml數據。
2. Cewolf / JFreeChart:
Cewolf 是一個用于生成各種圖表的標簽庫。它支持在JSP中嵌入圖表圖片。運行servlet 容器的任意的Web應用程序服務器都可以使用它。因為Cewolf 是一個功能完整的標簽庫,所以不需要使用Javascript。
JFreeChart是開放源代碼站點SourceForge.net上的一個JAVA項目,它主要用來各種各樣的圖表,這些圖表包括:餅圖、柱狀圖(普通柱狀圖以及堆棧柱狀圖)、線圖、區域圖、分布圖、混合圖、甘特圖以及一些儀表盤等等。這些不同式樣的圖表基本上可以滿足目前的要求。主要用于生成統計圖表。
這兩個技術一起提供了網客通平臺的統計分析圖表,JFreeChart主要用于輸出圖表,Cewolf對其進行了封裝。
3. Dom4j:
Dom4j是一個易用的、開源的庫,用于XML,XPath和XSLT。它應用于Java平臺,采用了Java集合框架并完全支持DOM,SAX和JAXP。
主要用來處理XML數據。
XML在網客通有廣泛的應用,主要是作為配置文件使用。由于XML嚴格的格式要求和層次結構,也有用來作為參數在HTML表單中傳遞。如組合商品功能,因為組合商品中的商品是由管理員挑選的,參數數量并不確定,如果每從組合商品中添加/刪除一個商品都直接更新到數據庫話,會對系統造成負荷。所以,在組合商品的管理中,將操作的數據類轉換成XML傳遞,就可以一次進行修改。
4. Hibernate:
Hibernate是一個開放源代碼的對象關系映射框架,它對JDBC進行了非常輕量級的對象封裝,使得Java程序員可以隨心所欲的使用對象編程思維來操縱數據庫。Hibernate可以應用在任何使用JDBC的場合,既可以在Java的客戶端程序實用,也可以在Servlet/JSP的Web應用中使用,最具革命意義的是,Hibernate可以在應用EJB的J2EE架構中取代CMP,完成數據持久化的重任。
在平臺中,我們采用Hibernate進行數據庫操作,只有在一些對數據庫性能有特別要求的模塊,才直接使用jdbc進行連接。
5. Ehcache:
Ehcache出自Hibernate,在Hibernate中使用它作為數據緩存的解決方案。這是Hibernate必須的包。
6. JCrontab:
它是由Java語言編寫的日程處理程序,它目的是提供強大的定時處理功能,讓我們的應用程序可以按照提供的時間表來執行不同的應用。
我們主要用Jcrontab管理以下一些定時任務:
1) 年排行榜后臺更新進程:自動計算年排行榜。
2) 月排行榜后臺更新進程:自動計算月排行榜。
3) 周排行榜后臺更新進程:自動計算周排行榜。
4) 日排行榜后臺更新進程:自動計算日排行榜。
5) 更新對象緩存:實現對象緩存的更新,處理那些長期沒被再一次訪問的對象緩存。
6) 清頁面緩存:當管理員使用的手工刷新頁面緩存的功能時,系統會將這些需要刷新的緩存加到一個隊列中,由本進程負責刷新。
7) 相關產品自動實現間隔:相關產品的計算對系統消耗比較大,所以系統不會對所有幾十萬個商品進行計算,只有在用戶查看單個商品時算出這個商品的相關產品并進行緩存。那么當用戶下一次訪問這個商品的相關產品時就直接從緩存中讀取出來。而這個進程就是為了定時更新這個緩存。
8) 自動推薦后臺更新進程:進程根據商品推薦規則進行自動推薦。
9) 新聞推薦后臺更新進程:進程根據新聞推薦規則進行自動推薦。
10) 關鍵字后臺進程:當用戶在前臺搜索欄中輸入一個查詢值時,系統并不馬上將其統計到關鍵字,而是放到內存中,由此進程定時統計。
11) 保存訪問量信息進程:用戶每訪問一次系統,系統并不馬上統計,而是放到內存中,由此進程定時保存到數據庫,供統計進程進行統計。
12) 年訪問量排行計算:計算年訪問量排行榜。
13) 月訪問量排行計算:計算月訪問量排行榜。
14) 周訪問量排行計算:計算周訪問量排行榜。
15) 日訪問量排行計算:計算日訪問量排行榜。
16) 年降價排行計算:計算年降價排行榜。
17) 月降價排行計算:計算月降價排行榜。
18) 周降價排行計算:計算周降價排行榜。
19) 日降價排行計算:計算日降價排行榜。
20) 統計計算:每天對訪問量進行統計。
21) 生成訂閱郵件列表進程:根據用戶的訂閱設置,生成需要發送的郵件隊列。
22) 發送訂閱郵件進程:根據要發送的郵件隊列發送郵件。
23) 拍賣自動出價進程:實現拍賣模塊中的自動出價功能。
7. JCS:
JCS是Jakarta的項目Turbine的子項目。它是一個復合式的緩沖工具。可以將對象緩沖到內存、硬盤。具有緩沖對象時間過期設定。還可以通過JCS構建具有緩沖的分布式構架,以實現高性能的應用。
對于一些需要頻繁訪問而每訪問一次都非常消耗資源的對象,可以臨時存放在緩沖區中,這樣可以提高服務的性能。而JCS正是一個很好的緩沖工具。緩沖工具對于讀操作遠遠多于寫操作的應用性能提高非常顯著。
網客通平臺中使用jCS提供緩存功能,主要是頁面緩存和對象緩存,通過JCS,系統將用戶訪問過的頁面和對象緩存到內存中,對于訪問量巨大,內存緩存已經不能負荷的情況下,我們還可以將緩存設置到硬盤中保存。
使用緩存的話,能將系統可負載和性能大幅度的提升。當沒有使用集群環境的情況下,緩存是一種必不可少的技術。
8. JSF / MyFaces:
JavaServer Faces (JSF) 是一種用于構建 Web 應用程序的新標準 Java 框架。它提供了一種以組件為中心來開發 Java Web 用戶界面的方法,從而簡化了開發。
JSF 的主要優勢之一就是它既是 Java Web 用戶界面標準又是嚴格遵循模型-視圖-控制器 (MVC) 設計模式的框架。用戶界面代碼(視圖)與應用程序數據和邏輯(模型)的清晰分離使 JSF 應用程序更易于管理。為了準備提供頁面對應用程序數據訪問的 JSF 上下文和防止對頁面未授權或不正確的訪問,所有與應用程序的用戶交互均由一個前端“Faces”servlet(控制器)來處理。
MyFaces是JavaServer Faces(JSF) Web框架 (JSR 127)的一個實現。提供了很多常用控件。
我們平臺中采用一些基于JSF框架的MyFaces控件。這樣使程序結構十分清晰。
9. Log4j:
Log4j是Apache的一個開放源代碼項目,通過使用Log4j,我們可以控制日志信息輸送的目的地是控制臺、文件、GUI組件、甚至是套接口服務器、NT的事件記錄器、UNIX Syslog守護進程等;我們也可以控制每一條日志的輸出格式;通過定義每一條日志信息的級別,我們能夠更加細致地控制日志的生成過程。最令人感興趣的就是,這些可以通過一個配置文件來靈活地進行配置,而不需要修改應用的代碼。
這是一個可選包,如果不使用Log4j的話,commons-logging會自動使用SUN J2SDK的日志包,不過我們還是推薦使用Log4j,它的功能非常強大。
10. Lucene:
Lucene是一個開放源程序的搜尋器引擎,利用它可以輕易地為Java軟件加入全文搜尋功能。Lucene的最主要工作是替文件的每一個字作索引,索引讓搜尋的效率比傳統的逐字比較大大提高,Lucen提供一組解讀,過濾,分析文件,編排和使用索引的API,它的強大之處除了高效和簡單外,是最重要的是使使用者可以隨時應自已需要自訂其功能。
我們使用Lucene建立索引,并在這基礎上實現了全文搜索功能。
11. Ant:
Ant是一個基于Java的自動化腳本引擎,腳本格式為XML。
我們除了用Ant做Java編譯相關任務外,還通過插件實現很多應用的調用。包括程序編譯、打包、Hibernate配置文件自動生成、部署、以及單元測試等操作。
當一個代碼項目大了以后,每次重新編譯,打包,測試等都會變得非常復雜而且重復,因此c語言中有make腳本來幫助這些工作的批量完成。在Java中應用是平臺無關性的,當然不會用平臺相關的make腳本來完成這些批處理任務了,Ant本身就是這樣一個流程腳本引擎,用于自動化調用程序完成項目的編譯,打包,測試等。除了基于JAVA是平臺無關的外,腳本的格式是基于XML的,比make腳本來說還要好維護一些。
12. Axis:
Axis是一個SOAP引擎,提供創建服務器端、客戶端和網關SOAP操作的基本框架。SOAP是被廣泛作為新一代跨平臺、跨語言分布計算Web Services的重要部分。
網客通平臺使用Axis提供WebService支持,廣泛應用于通用數據接口,對外系統提供服務等功能。
如:
1) 商品查詢服務:提供接口讓外接系統可以查到平臺中的商品信息。
2) 新聞發布服務:提供接口讓外接系統可以取到各類新聞。
3) 訂單服務:提供接口讓外接系統可以在平臺中生成訂單,并獲取各種訂單信息。
注:上述服務都有嚴格的權限控制。
13. JavaMail:
JavaMail是Sun發布的用來處理email的API。它可以方便地執行一些常用的郵件傳輸。
我們使用JavaMail實現了平臺中郵件發送、群發等相關功能,供業務系統使用。
14. XDoclet:
XDoclet是一個開源項目,可以通過在java源代碼中的一些特殊的注釋信息,自動生成配置文件、源代碼等等。例如web、ejb的部署描述文件等。
我們用XDoclet來生成Hibernate的hbm配置文件。
15. JSTL:
JSP 標準標記庫(JSP Standard Tag Library,JSTL)是一個實現 Web 應用程序中常見的通用功能的定制標記庫集,這些功能包括迭代和條件判斷、數據管理格式化、XML 操作以及數據庫訪問。
我們使用JSTL封裝各種業務邏輯。
16. Jakarta ORO:
Jakarta ORO Java 類是一套文本處理Java類,提供了與Perl5 兼容的規則表達式,類AWK規則表達式,glob 表達式,以及用于執行替換、分割、過濾文件名等的工具。這個包是OROMatcher, AwkTools, PerlTools, and TextTools libraries originally from ORO, Inc的后續產品。
網客通平臺使用ORO處理正則表達式,廣泛應用于各種文本處理中。
17. SwarmCache / JGroups:
SwarmCache是一個簡單且有效的分布式緩存,它使用IP multicast與同一個局域網的其他主機進行通訊,是特別為集群和數據驅動web應用程序而設計的。SwarmCache能夠讓典型的讀操作大大超過寫操作的這類應用提供更好的性能支持。SwarmCache使用JavaGroups來管理從屬關系和分布式緩存的通訊。
JGroups是一個開源的純java編寫的可靠的群組通訊工具。其工作模式基于IP多播,但可以在可靠性和群組成員管理上進行擴展。其結構上設計靈活,提供了一種靈活兼容多種協議的協議棧,對于每個產品都有不同的可靠性需求。這種協議棧可以讓用戶定義的自己可靠性指標和性能指標。
當使用集群環境時,系統存在著緩存同步的問題,需要對集群中每一臺服務器的緩存進行同步,這樣就必須要有一個緩存同步的機制,SwarmCache和JGroups就是為了解決這個問題而被加到網客通中。
18. JUnit:
JUnit是由 Erich Gamma 和 Kent Beck 編寫的一個回歸測試框架(regression testing framework)。Junit測試是程序員測試,即所謂白盒測試,因為程序員知道被測試的軟件如何(How)完成功能和完成什么樣(What)的功能。
我們主要用JUnit來進行單元測試。
posted on 2009-10-25 22:37 大魚 閱讀(912) 評論(0) 編輯 收藏 所屬分類: j2ee