2014-10-08 23 views
2

我想使用sling taglib在我的jsp中實例化服務對象。在正常情況下,其中服務類是由只有1級,它很簡單實現: -使用SlingScriptHelper過濾OSGi服務#getService()方法

RegistrationService registrationService = sling.getService(RegistrationService.class); 

但如果服務類已超過1個實現類,那麼如何才能確保實例化對象的特別的類。

我的Java類是這樣的: -
1.接口:RegistrationService
2.執行第1類: -

@Properties({@Property(name = "datasource", value = "SBWS"}) 
    @Service 
    public class RegistrationServiceImpl implements RegistrationService{ 
    } 


3.執行2級: -

@Properties({@Property(name = "datasource", value = "SOLR"}) 
    @Service 
    public class RegistrationServiceImpl implements RegistrationService{ 
    } 

我如何確保使用

RegistrationService registrationService = sling.getService(RegistrationService.class); 
在JSP將實例化服務爲讓

說實現類1

+0

不知道是否有一個乾淨的方式,但如何有兩個不同的接口,只是擴展RegistrationService接口?您仍然可以在@Services註釋中定義多個接口,但在jsp中,您可以通過特定接口選擇您需要的接口。 – Thomas 2014-10-08 10:49:20

回答

5

使用SlingScriptHelper#getServices(...)方法,它允許指定一個過濾器:

RegistrationService[] services = sling.getService(RegistrationService.class, "(datasource=SBWS)"); 
if (services.length > 0) { 
    // services[0] contains your service 
} 

獲取OSGi服務,並通過屬性過濾還是比較低的水平可以考慮將它從JSP轉移到Java類。

+0

解決方案@Tomek的Thanx。這對我有效 – paras2682 2014-10-08 11:14:19