2012-06-29 69 views
0

我有一堆依賴寫成快速二進制web服務(又名Ejb3.1)。下面是服務delcaration:CDI是否爲默認製作者提供api?

@Remote 
public interface MyService {...} 

你會注入一個EJB成servlet或託管bean的語法如下:

@EJB 
MyService myService; 

我不想然而使用@EJB注射。我想用普通的香草CDI:

@Inject 
MyService myService; 

一種方式來實現,這將是爲每個EJB創建@Produces方法:

@Produces MyService produceMyService(InjectionPoint ijp){ 
//jndi lookup for MyService interface 
} 

然而,InjectionPoint能夠給你所有您需要的信息,例如目標類名稱(本例中爲MyService)。

在CDI有沒有辦法做這樣的事情?如果所需的注入點不能以其他任何方式完成,我想最後調用這個生產者。

@Produces Object produce(InjectionPoint ijp){ 
Class ejbInterface = ijp.getType(); 
//jndi lookup for ejbInterface 
} 

這是一個令人困惑的帖子,所以請澄清問題。萬分感謝!

+0

是的,確實很令人困惑:)我的理解正確,你正在尋找一種方式來解決依賴的一種「本地第一,遠程只有當本地失敗「-辦法? –

+0

是的,那太棒了。基本上是一個「全部捕獲」的依賴關係,不能以任何其他方式注入。 –

回答

3

假設我理解你的問題(請參閱評論):不,沒有API。

好消息是,有一種方法可以實現這一點 - 但是您可能不希望在運行時執行此操作,這相當於應用程序啓動的任務。

CDI extension mechanism爲您提供了一些定義良好的掛鉤到豆處理容器啓動。這是決定啓用/禁用某些託管bean(可能基於靜態類路徑信息)的邏輯的理想場所。

看看Seam Solder的功能和實現@Requires。這應該是非常接近你的使用情況...

相關問題