2016-03-01 77 views
1

僅問題關於CDI bean,而不是EJB。從父模塊到子模塊的CDI注入bean

是不是很好的做法來開發你需要從父模塊向子模塊注入bean的體系結構?

比如我有三個模塊:

  1. 共同 - 在這裏,我需要使用一些環境設置,但共同不知道在哪個環境下它會被執行,客戶端或服務器(在我的情況下,它被封裝在一個ear/lib目錄中,並分別由java se客戶端測試);
  2. 客戶 - 在這裏我可以提供設置從屬性文件,例如(用於測試目的,它不是在耳包裝)
  3. 服務器 - 在這裏我可以提供從EJB的配置文件設置(它是一個EJB模塊與普通耳朵相同)。

所以客戶取決於共同服務器上取決於共同(它們從共同延伸,並且使用類),但注射進去方向相反。所以@Inject注入點存在於常見的模塊中,但生產者方法在客戶端服務器

除了哲學方面,我有一個真正的問題。我可以進一步將bean從ejb.jar注入到ear/lib/*。jar中,否則類路徑問題將不可能發生?

問候

+0

介意用[mcve](http://stackoverflow.com/help/mcve)更新您的文章? – aribeiro

+0

它是最小和完整的問題 – lexluthor

+0

事實上,只是關於「...注入反向...」。你是否從服務器/客戶端共同注入組件?這就是這個例子的必要性。 – aribeiro

回答

0

你沒有提到你的安裝部署,所以我只能猜測,在客戶端和服務器共同不在同一EAR單獨包裝? 另外我不明白你的意思是父母和孩子,除非你直接將公共內容複製到你的模塊中,或者你的模塊擴展了公共類。
擁有循環依賴不是一個好習慣,它使測試變得困難並且緊密地耦合你的代碼。 Common不應該依賴另一個模塊中的bean來運行。

您可以注入accross模塊,但必須在meta-inf中定義自己的beans.xml。

+0

client.jar僅用於測試目的,而且根本沒有打包。 common.jar是ear/lib目錄下的一個lib,server.jar是一個ejb模塊。我對跨平臺解決方案感興趣,所以我沒有提到具體的應用服務器。 – lexluthor

+0

無論如何,你的回答是非常有幫助的 – lexluthor

+0

雖然EAR/lib目錄中的jar被認爲是用於類加載目的的單個「模塊」,但其他模塊(web,EJB等)中的類通常無法訪問。只有反面是真的。即。其他EAR模塊中的類可以看到EAR/lib目錄中的類。 –