2016-12-07 72 views
0

一個Java EE服務器都有不同的容器,如EJB或Web容器: enter image description hereCDI容器如何適合Java EE服務器的EJB/Web容器?

我發現了CDI組件如何集成但是不同的信息。在文檔some中提到CDI容器(「CDI容器自動爲您管理範圍內的所有bean」),但其他人將其定義爲Java EE容器提供的上下文服務。這裏在stackoverflow甚至有一個名爲「國際奧委會容器」的標籤。那麼如果它是一個容器是容器部分/在EJB/Web容器內?

因此,如果我用它的組件和容器繪製Java EE服務器的圖片(如上圖),那麼CDI如何適用?它是否有自己的容器「矩形」,還是它是某個EJB/Web容器的一部分?你如何在建築設計中繪製它,你會如何解釋/描述它?

+0

CDI有一個單獨的容器 –

+0

您可以在org.apache.openejb.cdi.OpenEJBLifecycle中看到OpenEJB如何與OpenWebBEans集成。基本上這個過程是特定於實現的 –

回答

2

CDI有一個單獨的容器。在你的圖片中,它很可能是EE服務器端的另一個單獨的矩形。在談論EE環境時,CDI由EE容器(通常是RI-Weld)提供,因此容器將在第一次應用程序部署時爲您啓動。

這就是說,CDI容器是一個EE服務器。即使你部署了幾個使用CDI的WAR應用程序,仍然會有一個CDI容器。請注意,在SE環境中(Weld SE允許您在SE env中使用CDI),如果您願意,可以有多個這樣的容器。

至於與其他EE的東西,如EJB和JSF的集成。例如,它們允許您使用基於CDI的功能@Stateless@ViewScoped。所以他們必須「以某種方式」與CDI進行整合。現在這個魔術是在EE容器內完成的,通常通過提供商的(焊接)SPI。例如,容器負責處理EJB bean,然後將它們交給(通過SPI)Weld,然後可以將它們作爲CDI bean接受,從而允許您將@Inject轉換爲@Stateless beans。顯然,以上是對實際發生的事情的簡化。