[英]Are there any disadvantages in WAR packaging over EAR packaging?
我對Java EE應用程序中EAR打包的優缺點有一個一般性的架構問題。 我在多個服務器環境中部署了Java EE業務應用程序。 該應用程序包含以下主要模塊:
在不考慮當前不同模塊的更多細節的情況下,我將這些模塊打包到EAR中,以部署在GlassFish或WildFly等應用服務器上:
my.ear
/
+- META-INF/
| |- application.xml
|- my_ejb_module.jar
|- my_web_module.war
|- my_restservice.war
如今,隨着WebService和Microservice體系結構的討論越來越頻繁,我想知道這種包裝是否有點過時了?
當我開始該項目幾年時,這種包裝似乎是最好的解決方案,因為包含業務邏輯的EJB模塊在兩個Web模塊之間共享。
但是,當我今天看獨立的微服務時,我想知道將應用程序拆分為兩個可部署的Web模塊(其中每個包含EJB模塊)是否更好:
web-ui.war
/
+- WEB-INF/lib
| |- my_ejb_module.jar
|- my_web_module.war
restservice.war
/
+- WEB-INF/lib
| |- my_ejb_module.jar
|- my_restservice.war
在此設置中,我將能夠在單獨的計算機上部署REST API。 因此,看來該方法對EAR包裝沒有不利之處。
這是真的嗎? 我的問題向交易方向發展。 如果兩個Web模塊在EAR包裝中共享同一個EJB模塊,會有什么好處? 還是兩個Web模塊都包含相同EJB模塊的第二種方法是否提供了有關事務處理和並發性的相同功能? 尤其是當兩個Web模塊都部署在同一應用程序服務器上時。
到目前為止,我唯一看到的缺點是,我的EJB模塊不能包含Java EE TimerServices或MessageDriven EJB,因為在war模塊中部署時不支持這些類型的EJB。 但這對於我來說是可以接受的。
我嘗試自己回答一個問題:在進行了一些測試部署后,我得出了結論,就我而言,不可能拆分。 原因是,我的ejb模塊包含JPA實體bean。 如果我部署兩個包含相同實體bean的Web模塊,這將破壞任何JPA緩存概念。 僅當兩個Web模塊都使用相同的REST服務訪問JPA實體Bean時,才有可能實現分隔。
所以我的示例部署應如下所示
web-ui.war
/
|- my_web_module.war
restservice.war
/
+- WEB-INF/lib
| |- my_ejb_module.jar
|- my_restservice.war
其中restservice.war是主要模塊,包含業務邏輯和數據庫層(JPA實體Bean),還發布了開放的REST API。 web-ui.war僅包含一個Web應用程序,該Web應用程序通過restservice.war中的REST API進行交互。 但是將ejb模塊捆綁在兩個Web模塊中是一種不好的做法。 如果將所有模塊捆綁在一起,則EAR打包是有意義的,並提供了所有客戶端模塊(war模塊)可以透明且以事務保存方式訪問同一EJB模塊的優點。
因此,包含JPA實體Bean的EJB模塊僅應部署一次,而不應捆綁到多個部署單元中。
我在耳朵包裝中看到的唯一缺點是,有時耳朵是某種整體。 為了簡化您的體系結構,您可以擺脫耳朵的包裝並分解這些整體,如果您使用的是完整配置文件的應用服務器,則可以將ejb-jar單獨部署為jar文件,並從Web模塊中調用EJB。
您可以使用JNDI查找創建松散耦合的體系結構:
ExampleEJB exampleEJB;
...
private ExampleEJB getExampleEJB() {
if (this.exampleEJB == null) {
InitialContext ic = new InitialContext();
this.exampleEJB = (ExampleEJB)ic.lookup("ExampleEJB#com.example.ExampleEJB");
}
return this.exampleEJB
}
或者通過注釋使用CDI緊密耦合:
...
@EJB(mappedName="ExampleEJB")
ExampleEJB exampleEJB;
...
JNDI查找沒有限制,您可以在任何類中使用它。 在javaee 6中,注釋僅在容器管理的組件(用@ WebService,@ Stateless,@ Statefull等注釋的類)中起作用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.