2011-09-13 70 views
4

我使用Eclipse 3.7和Eclipse Gemini JPA/DBAccess。我實現了一個引用EntityManagerBuilderFactory的聲明式ServiceComponent。綁定方法如下:OSGi聲明式服務 - 通過綁定方法獲取ServiceReference

public void bindEntityManagerFactoryBuilder(EntityManagerFactoryBuilder emfBuilder) { 
    emfFactoryBuilders.add(emfBuilder); 
} 

不過,我需要的服務引用,以獲得該服務的屬性,如:

ServiceReference ref = ... 
    String unitName = (String)ref.getProperty(EntityManagerFactoryBuilder.JPA_UNIT_NAME); 

我必須尋找這個服務引用的ServiceRegistry,或者是有一個更優雅的方法?

歡呼聲, 繆奇

回答

10

如果您使用的聲明式服務1.1(最新的規範版本),你可以改變你綁定的方法來簽名:

public void bindEntityManagerFactoryBuilder(EntityManagerFactoryBuilder emfBuilder, Map properties) 

的地圖將包含綁定服務的服務屬性。

1

如果你想訪問你可以用這種方式ServiceReference對象(它是由1.0和1.1 DS支持):

public void bindEntityManagerFactoryBuilder(ServiceReference reference)