3
我正試圖找到一種方法來在運行時注入幾個EJB之間進行選擇。如何選擇要在運行時注入的bean
這種情況是這樣的: 有2個bean(ejbA,ejbB),它們都實現了相同的接口(ejbInterface)。在幾個注入點(其他託管bean,即ejbCaller bean)中,我想注入一個ejbInterface的實現。我會知道我在運行時需要哪一個(即基於某個DB值)。
我知道這樣做的一種工作方式是通過@Alternative註釋和部署描述符在部署中進行選擇,但我寧願在運行時進行選擇。
我已經嘗試過@Producer方法,但這種方式我只能注入非託管對象(我在生產者中實例化的對象,並且不是容器管理的或者可以是它們自己的注入點)。我已經發現兩種解決方法/生產的漏洞:
- 生產的未管理的對象,並且經由在ejbInterface一個
setup
方法傳遞任何被管理對象(即其他豆類,實體管理器)(ejbCaller將不得不通過這些) - 使用JNDI查找在生產者和返回管理對象
兩個解決方法是容易出錯和不優雅。有更好的解決方案嗎?
我肯定會與第二選擇的餘地。在這裏看看類似的情況:http://stackoverflow.com/questions/12512571/jpa-inheritance-and-ejb-polymorphism – perissf
非常感謝你的指針!我同意第一種方法更危險。我將研究JNDI查找並瞭解它的發展情況。 – Cascader
沒有從CDI看過Instance? – LightGuard