2014-04-04 57 views
0

從WAR或EJB容器中定義/運行EJB時,EJB的功能是否存在差異?決定一種方法與其他方法相比,有哪些好處與缺點?從WAR運行EJB與獨立EJB容器之間的區別

從WAR中訪問時,我們失去了哪些功能?

在我們的案例中,開發人員想要使用EJB來創建/訪問REST Web服務。

我們的建築師之一在下面提到。由於這個原因,他希望有一個單獨的EJB,將它添加到EAR中,但也可以添加到WAR中作爲REST端點使用。我不希望把它在多個地方

I’d prefer our approach to put transaction/service based code in EJBs to 
leverage Container Managed Transactions, JPA, MDB and all the good stuff EJBs 
have to offer. 

從我所使用EJB作爲REST服務實現閱讀文檔,它說

Add the EJB class to the WEB-INF/classes directory of your WAR file or to a 
JAR that is located in your WEB-INF/lib directory. When a client makes a request 
to a JAX-RS annotated enterprise bean, the JAX-RS runtime environment looks up 
and uses an EJB instance of the class to invoke the resource method. 

所以,我想知道,如果我們將EJB放在WAR中 - 就像在WAR的源代碼中創建源代碼一樣,這樣當構建WAR時,該類將被添加到WEB-INF /類中,而不必將相同的ejb jar放在兩個不同的地方它用於什麼 - 作爲REST Web服務端點與其他功能的比較,它能滿足所有需求嗎?或者我將不得不將這個jar放在兩個地方?

我在EJB 3.1中使用Websphere 8.5,如果這會在答案中產生差異。

回答

1

有兩種主要的差異將在EJB 3.1規範的第15.4強調:

  1. 在WAR份額與WAR和所有其他EJB WAR中的所有的EJB組件命名空間(java:comp)。通常,每個EJB都有自己的組件名稱空間。這樣可以更容易地共享引用名稱和綁定(雖然這可以在EE 6中用java:modulejava:app明確地完成),但它會增加在大型WAR中發生衝突的可能性。
  2. EJB類由WAR類加載器加載。在實踐中,這並沒有多大關係,只是在遇到類加載問題時才需要注意。

如果您想將EJB用作REST服務,則必須將EJB打包到WAR中。如果您擔心在WAR內部「複製」EJB邏輯以及EJB模塊,則可以在EJB模塊中聲明基類,然後在WAR和EJB模塊中聲明擴展基類的子類並註釋@Stateless@Singleton

+0

我的問題更多的是 - 如果我的EJB是WAR,它是否仍然提供EJB設施,如事務,JPA功能等。我認爲它只是想要確認。 – adbdkb

+0

當然。所有相同的服務都可用於EJB-in-WAR。 –

0

關於EJB功能,在將WAR打包到WAR或EJB模塊中沒有區別。

在某些情況下,您必須在EJB中打包EJB,例如如果您有一個同時是EJB的REST端點。

大多數WARs封裝了前端功能。在這些情況下,僅從設計的角度來看,不建議將EJB放入WAR中。

相關問題