2011-12-21 43 views
6

我試圖讓我的頭腦圍繞CDI和EJB以及實體邊界控制(ECB)模式。我對歐洲央行模式的理解是,邊界是交易邊界的開始和結束。除此之外,CDI不像EJB那樣提供事務支持。EJB vs CDI和「實體邊界控制」模式

所以,如果我想成功實施ECB模式,那麼以下是真實的;

  1. 我可以用EJB(即@stateless,@stateful,@singleton)和CDI或EJB的控制層實現邊界部分。
  2. 我可以實現與CDI邊界及控制部,但在邊界類似實現事務支持(http://smokeandice.blogspot.com/2009/12/cdi-and-declarative-transactions.html)
  3. 我不能用CDI實現邊界,然後在Control層開始使用EJB。

感謝

+1

那麼問題是什麼呢? – 2011-12-21 09:46:40

+0

我只是想檢查我的想法,我提到的3點是正確的?或者如果我的想法是錯誤的。 – vcetinick 2011-12-21 22:59:29

回答

12

我成功地使用EJB的專爲界限,CDI的控制器實現的JavaEE 6 ECB模式。在我的建築典型的堆棧使用

  • 無狀態EJB與JAX-RS註解來實現REST服務爲邊界
  • CDI管理業務邏輯豆在@Dependent範圍爲控制器註釋
  • CDI管理的bean在數據訪問對象的範圍@Dependent它們使用JPA的EntityManager的與數據庫進行交互
  • JPA實體bean

無狀態EJB的形成的Bounda ry總是用默認的@TransactionAttribute(REQUIRED)註解。我不使用其他事務屬性。這樣做,您可以確保每次與邊界的交互都發生在一次交易中。

通過僅爲CDI託管的Bean使用@Dependent範圍,可以確保每個線程都有自己的那個bean實例。所以,你永遠不會有多個線程同時訪問一個CDI託管bean。這樣做可以防止出現典型的併發問題。

結合使用更重的權重,邊界的EJB集合和適用於其餘應用程序的輕量級CDI託管bean對我來說表現非常好。