2017-06-30 32 views
0

我有一個ServiceReference,我想檢查實現是否有註釋。所以我需要獲得實施課程。獲取ServiceReference的實現

我想通了,如何讓接口的服務實現:

ServiceReference<T> reference = // 
String[] interfaces = (String[]) reference.getProperty(org.osgi.framework.Constants.OBJECTCLASS); 

不過,即使有JavaDoc的,我不能弄清楚如何得到實現(無明顯從上下文獲取服務,因爲這可能是一個重量級的操作,我只需要這個班級)。

如何從ServiceReference獲得執行結果?

回答

1

所以你想獲得服務對象而不需要獲得服務對象?我想你是在要求一些不可能的事情。您需要獲取服務對象來反省其註釋的實現類。沒有其他辦法。確保在完成時取消服務對象。

+0

記住,即使OSGi服務註冊表不知道實現類的服務對象,直到服務是從註冊表中取出。這是因爲提供者可能通過註冊ServiceFactory來實例化服務對象。 –

0

您必須使用service = context.getService(reference)獲得服務。這不是一個重量級的操作。

您可能也會從使用ServiceTracker獲益。 除此之外,我很好奇你想達到什麼..也許有更好的方法。

+0

它不應該是一個重量級的操作,但我們正在努力創造一個注入'EntityManager'到我們業務的小容器,所以我不知道這是怎麼回事真正下週。這就是爲什麼我喜歡不只是因爲我想看看如果服務有一個註釋標記爲「請注入我」在OSGi上下文的延遲加載干擾。 –

+0

現在已有用於注入EntityManager的解決方案。見Apache的白羊座JPA例子https://github.com/apache/aries-jpa/tree/master/examples –

+0

JEP,我們試圖白羊座和雙子座廣泛,都不會與Hibernate一起工作。由於我們只是真的需要'EntityManager',所以我們決定自己做。 –