2012-03-09 104 views
0

我一直試圖弄清楚這一點,現在決定問你的意見。EAR與多個戰爭或與遠程EJB的戰爭

我正在構建幾個共享一組通用數據和操作的應用程序。每個應用程序都有特定的數據添加,但需要對特定應用程序以「基礎」或「固定」網絡應用程序形式提供的共享數據進行「鳥瞰」。特定應用程序的數量(可能)爲20+,其中一些只是暫時的(例如4-6個月)。

當我剛開始使用這個項目(並在Java EE中)時,我創建了一個EAR,將共享的JPA實體和EJB放入EJB項目中,並在我添加時添加了WAR。我使用繼承來爲每個應用程序添加特定的數據。我很快就遇到了麻煩,因爲我無法繼承實體以處理不同的EJB項目,所以我最終得到了一個包含所有實體的大型EJB項目和一個帶有表名前綴以標識應用程序的字符串的數據庫:a我不喜歡的情況。此外,項目變得越大,錯誤消息在開發過程中變得越來越重要,必須刪除所有構建和遠程設備,並且從頭開始重新構建所有內容變得令人厭煩(NetBeans 7)。

因此,隨着時間的推移,我決定放棄EAR和繼承,並切換到單獨的WAR並使用遠程EJB來管理共享數據。通過本地EJB調用遠程EJB並將共享數據添加到本地定義的實體,從而實現所有意圖和目的,它看起來像共享數據是本地實體的一部分,實現了耦合web-app - >鳥瞰圖。我對此並不滿意,因爲它似乎由於某種原因過於鬆散地定義,並且存在對性能增加懲罰的問題(目前這不算太壞,但可能會及時)。

我可以去兩者的組合(回到EAR並將遠程EJB切換到本地,但繼承),但它回到了一個不穩定的開發環境。此外,其中一個應用程序的一個小變化意味着必須部署所有東西。不知何故,我認爲這會在某一天導致麻煩(例如,當時打破1但20+應用程序..)

你會怎麼做,爲什麼?任何人對於規模相當的項目都有經驗,並且在開發過程中是如何進行的(即隨着項目的發展,遇到任何問題)?

謝謝!

+0

您應該能夠獲得實體的繼承以在不同的實體EJB項目上工作。不明白你遇到了什麼麻煩? – basav 2012-03-12 06:48:09

+0

我遇到了與[this]相同的問題(http:// stackoverflow。com/questions/8372175/how-to-use-entity-attribute-when-inheritance-is-across-separate-jar)post – 2012-03-12 09:15:57

回答

0

思考大聲..

不要拋棄繼承。使用它,而不是實體EJBs,只有 與POJOs打包在一個單獨的jar文件中。將所有EJB 部署在單獨的(大型)EJB項目中。
讓這些EJB公開RESTFul WS。

Webapps使REST調用EJB項目。 EJB 實體拉取數據,填充POJO並將其轉換爲JSON(或XML) 並將其發送到WebApp。

WebApp使用 序列化的JSON對象重新創建POJO,並在WebApp中使用它。這些POJO是數據傳輸對象的種類 ..

+0

謝謝你的回答。我一直在考慮使用WS或RS,但是決定使用遠程EJB來完成本質上相同的操作,而且開銷較小,而且更加「自然」的編程方案。你的意思是在同一個EJB項目中定義應用程序特定的實體(使用繼承)嗎? – 2012-03-15 08:44:56