簡體   English   中英

Java EE / Glassfish應用程序邏輯

[英]Java EE/Glassfish Application Logic

我試圖了解我的Java EE應用程序應該放在哪些應用程序邏輯中。 我是Java EE的新手,我正在考慮從遺留數據庫加載大量非結構化數據,並構建一個干凈的對象模型供我的應用程序使用。 根據我的調查,我看到Java EE應用程序有兩個組件,Enterprise Bean和Web Application組件。 我的應用程序的這一部分將負責加載數據,構建對象模型以及根據數據的當前狀態通過JMS向感興趣的各方發送消息。 數據將通過與數據庫同步以及通過JMS從遠程Java應用程序接收的消息進行更新。

EJB是否是這種功能的正確位置? 如何開始我的對象模型的初始化(主要方法Java App等價物)? 創建定時事件以查看對象模型並通過JMS發送消息的最佳實踐是什么?

我已經閱讀了很多關於Java EE,Glassfish,EJB的文章......但仍然覺得我沒有清楚地了解我應該在哪里編寫這個功能。 我見過的EJB的任何例子都傾向於圍繞來自客戶端應用程序的bean的直接方法調用。

目前我覺得Java應用程序可以完成這項工作,但我們正在考慮將來使用RMI和Web客戶端。

Java EE傳統上用於客戶端/服務器架構風格。 業務邏輯在EJB會話bean中實現,通常通過Web請求,JMS消息或RMI-IIOP遠程調用來調用。

EJB是否是這種功能的正確位置?

邏輯進入EJB。 但是有不同類型的EJB。

如何開始我的對象模型的初始化(主要方法Java App等價物)?

沒有main方法這樣的東西。 但仍有一些方法可以執行與應用程序部署和/或取消部署相對應的某些處理。 您可以查看ServletContextListenerGlassfish生命周期模塊(非標准)或者新引入的Singleton bean和@Startup注釋。

創建定時事件以查看對象模型並通過JMS發送消息的最佳實踐是什么?

您可以創建將定期調用的EJB計時器 如果你需要在內存中加載一次模型,我建議你也看一下Singleton bean。 對於EJB 3.0,問題是如何自動啟動計時器 ,但我認為它們在EJB 3.1中得到了改進,並且當使用@Scheduled注釋部署應用程序時,應用程序服務器可以自動啟動計時器。 因此,它可能會以某種方式為您提供您在上一個問題中提出的所需起點。

您可以從任何bean發送JMS消息。 JMS就像數據庫一樣是一個外部系統。 使用稱為消息驅動bean(MDB)的特殊EJB接收JMS消息。

您的應用程序將不是傳統的Web-EJB數據庫客戶端 - 服務器應用程序,但它應該是可行的Java EE,它絕對是一個非常靈活的模型。

正如您所說,這些示例往往涉及直接調用。 根據我的經驗,這不僅僅是例子。 我見過的Java EE * 1應用程序都沒有使用像您描述的長生活對象圖,相反,它們通常在單個記錄(+子/相關)上運行以響應Web請求,Web服務調用或JMS消息。

您的要求打破了這種模式,Java EE可能不是最合適的。 從表面上看,您描述的代碼類型屬於EJB容器,但該容器缺少一個良好的長期生成環境來錨定您的對象圖。 Web容器具有這樣的上下文,但缺少定時器和消息處理等設施。 放棄J2EE和使用普通Java應用程序的代價當然是丟失應用程序服務器的管理,部署和監視工具。

一個很好的選擇可能是回到使Spring框架變得更大的原因 我不知道你是否熟悉J2EE的歷史,但Spring Framework和Hibernate的突然大量流行本質上是針對EJB容器的版本1.x / 2.x的社區反叛。 Spring WebApplicationContext為您提供的是Web應用程序的強大,事務性后端,利用MDB和JTA,同時忽略盡可能多的EJB容器* 2(並大大簡化了流程中的單元測試)。 您可以采用這種方法並將您的應用程序構建為單個WAR文件,並使用Spring啟動后端服務。

一個有趣的替代方案是完全拋棄Java EE應用程序服務器並在OSGi框架之上構建應用程序。 這是“普通的Java應用程序”方法,OSGi運行時為您提供管理控制台和熱部署功能,否則您必須使用它們。 基礎設施的缺失部分是計時器(使用Quartz )和Message-Driven Beans(直接使用JMS API)。 OSGi應用程序最終感覺有點像Linux內核和啟動過程,並根據運行級別部署和啟動服務。 抓住Apache Felix並看一看。

你沒有提到規模。 如果對象圖很大 ,請查看GigaSpaces或Coherence等技術。

** 1)隨着EJB3 *的推出,Sun將首字母縮寫為'2'

** 2)實體EJB 2.x是最糟糕的部分。 EJB 3可以被視為主要是“如果你不能打敗他們,加入他們”的努力來標准化Hibernate。*

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM