मैंने अपने ग्रहण 4 आरसीपी अनुप्रयोग में इसका उपयोग करने के लिए ओएसजीआई बंडल लिखा है। यदि मैं निर्भरता जोड़ता हूं, तो सेवा का उपयोग ठीक काम करता है, इन सेवाओं को मेरे एक्टिवेटर में पंजीकृत करें और इसे मेरी कक्षा में इंजेक्ट करें।ग्रहण आरसीपी 4 घोषणात्मक सेवा के माध्यम से बंडल का उपयोग
मेरी कक्षा में उत्प्रेरक
IUserService service = new TestUserService();
context.registerService(IUserService.class.getName(), service, null);
में
@Inject
IUserService service;
service.getSth();
मैंने पढ़ा है कि कथात्मक सेवाओं के माध्यम से बंडलों का उपयोग कर बेहतर तरीका होना चाहिए। तो मेरा कार्यान्वयन बदल गया। मैं अपने सेवा प्रदान करने के लिए अपने बंडल में एक घटक परिभाषा बनाया:
<?xml version="1.0" encoding="UTF-8"?>
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="usermanagement.test">
<implementation class="usermanagement.test.TestUserService"/>
<service>
<provide interface="usermanagement.IUserService"/>
</service>
</scr:component>
तब मैं अपने उत्प्रेरक से सेवा पंजीकरण हटा दिया और एक सेवा उपभोक्ता श्रेणी का निर्माण:
public class UserServiceConsumer {
private IUserService service;
public synchronized void setQuote(IUserService service) {
this.service = service;
}
public synchronized void unsetQuote(IUserService service) {
if (this.service == service) {
this.service = null;
}
}
}
और एक अन्य घटक परिभाषा:
<?xml version="1.0" encoding="UTF-8"?>
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="UserServiceConsumer">
<implementation class="services.UserServiceConsumer"/>
<reference bind="setService" cardinality="1..1" interface="usermanagement.IUserService" name="IUserService" policy="static" unbind="unsetService"/>
</scr:component>
इन संशोधनों के बाद मेरे serivce का इंजेक्शन अब और काम नहीं करता है। समस्या यह है कि इंजेक्शन सेवा संदर्भ हर बार न्यूल होता है।
क्या किसी को पता है क्यों? क्या मैं कुछ भूल गया था?
बहुत बहुत धन्यवाद!
आप कैसे अनुमान लगाते हैं कि ओपी यूआई कक्षा में सेवा का उपभोग करना चाहता है? – tkotisis
मैं कक्षा के निर्माता पर @ क्रिएटिव एनोटेशन का उपयोग कर अपनी कक्षा का एक उदाहरण बनाने के लिए DI का उपयोग करता हूं। – roschulze
@tkotsis यदि आप एक्लिप्स आरसीपी का उपयोग करते हैं तो आम तौर पर एक जीयूआई –