2011-03-03 72 views
2

剛剛啓動了一個涉及在Netbeans平臺(NBP)中實現的胖客戶端的項目,Spring框架被選擇用於實現業務邏輯和數據訪問。由於我來自Web應用程序開發背景,因此我有一些問題並且還想提出一些建議。多層企業應用程序中的NBP富客戶端?

  1. 富客戶端與Spring集成有哪些選擇?
  2. 有關多層Java EE環境中的胖客戶端的最佳實踐/書籍/文檔?
  3. 任何需要特別關注的東西?

回答

1

我們最近在我工作的公司經歷過類似的經歷。可悲的是,我們找不到任何明確的指南。我們發現的是部分指南在這裏和那裏。我不確定其他人是如何處理這個問題的,我非常希望看到是否有其他解決方案發布在此處。但是,我可以告訴你我們如何處理它,並希望你能從我們的經驗中學習。

從一開始,我們就知道我們希望能夠控制我們將使用的Spring版本(以及我們的例子中的Hibernate)。自然,內置於NetBeans IDE中的版本有點過時,我們希望在開發服務器代碼時擁有先進的功能。

我們最終做的是創建兩個獨立的項目:一個用於我們的服務器代碼(我們的服務,DAO和域實體),另一個用於我們的客戶端應用程序。然後,我們監聽服務器代碼,將jar及其依賴項複製到客戶端項目中,並將這些jar作爲依賴項列在客戶端代碼中。我們在NetBeans項目中創建了一個名爲SpringHibernate的模塊,該模塊容納了那些罐子,幾乎所有其他模塊都依賴於這些模塊。

我會建議創建一個ant任務,在將它們添加到NetBeans項目之前,將它們的版本號去除。這使您可以無縫地更新服務器代碼中的jar,而無需客戶端代碼知道其差異。 (當你開始移除和重新添加罐子時,NetBeans可能會有點挑剔)

然後,第一個主要任務是創建一個Util類,它可以加載你的applicationContext.xml並從上下文返回bean。該流程概述爲here

我們遇到的主要障礙之一是創建Sessions(或JPA條款中的EntityManagers)。 NetBeans平臺是一個高度線程化的環境,而EntityManagers僅用於單線程。爲了解決這個問題,我們使用Open Session In View路由*。我們創建了一個類,可以將相同的EntityManager加載到請求它的任何線程中。然後,我們創建了我們的服務的客戶端代理,在調用實際的Spring託管服務之前,它會將EntityManager加載到其線程中。創建客戶端代理服務的額外好處是可以通過@ServiceProvider註釋找到Lookup.getDefault().lookup(Service.class)

然後您應該create a custom LifeCycleManager可以在應用程序關閉時拆除並關閉您的EntityManager和EntityManagerFactory。

我希望這有助於!我知道視圖中的Open Session已經作爲AntiPattern的labeled,但只要你瞭解與之相關的問題,你就可以緩解這些問題(通過緩存不可能隨時間改變的事物對象,使得智能數據庫調用等)。另外,我記得在我們的研究中,我們發現Gavin King發表的一篇論壇帖子指出,Open View In View是客戶端應用程序的推薦路線。當然,我現在找不到這個帖子,但它在某個地方。