में जावा वेब एप्लिकेशन से ओएसजीआई बंडल का उपयोग करना मैं जावा वेब एप्लिकेशन से ओएसजीआई बंडल की एक विधि का आह्वान करने की कोशिश कर रहा हूं। दोनों को टॉमकैट 7 पर चलाना चाहिए।टॉमकैट
मैंने पहले से ही एक सामान्य जावा एप्लिकेशन लिखा है जो ओएसजीआई बंडल से विधियों को आमंत्रित करता है, जैसा कि इस साइट पर वर्णित है: http://drupal.osgibook.org/node/37।
विषुव पर्यावरण के संदर्भ को प्राप्त करने के लिए मैंने इसे एप्लिकेशन से शुरू किया और बंडलों को भीतर से स्थापित किया। इसके अलावा संदर्भ का उपयोग चल रहे बंडल के सेवा संदर्भ को पुनः प्राप्त करने और इसकी सेवा प्राप्त करने के लिए किया गया था।
EquinoxRunner वर्ग के runEquinox विधि:
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
public BundleContext runEquinox([...]) throws Exception {
[...]
BundleContext bundleContext = EclipseStarter.startup(new String[]{"-console"}, null);
bundleContext.installBundle("file:C:/.../plugins/myosgiclass.interface_1.0.0.201108301327.jar");
Bundle bundleTranslationImpl = bundleContext.installBundle("file:C:/.../plugins/myosgiclass.impl_1.0.0.201108301327.jar");
bundleTranslationImpl.start();
[...]
return bundleContext;
}
और invokeMethod ServiceRunner वर्ग की: eclipse bridge का उपयोग कर
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceReference;
[...]
public Object invokeMethod(BundleContext bundleContext, Object value, [...]){
ServiceReference serviceReference = bundleContext.getServiceReference(MyOSGiClass.class.getName());
Object result = null;
if (serviceReference != null) {
MyOSGiClass myOSGiClass = (MyOSGiClass) bundleContext.getService(serviceReference);
if (myOSGiClass != null) result = myOSGiClass.method(value);
bundleContext.ungetService(serviceReference);
}
return result;
}
अब, बिलाव पर, मैं कैसे पुनः प्राप्त करने के पता नहीं है विषुव पर्यावरण का सही संदर्भ। जब मैं इसे इक्विनोक्स के साथ टॉमकैट पर चलाने का प्रयास करता हूं तो मुझे NoClassDefFound अपवाद प्राप्त होते हैं। मैं इस समस्या को हल करने के तरीके पर किसी भी सलाह की सराहना करता हूं।
बहुत पहले से धन्यवाद। चीयर्स, निक
मुझे लगता है कि ओएसजीआई फ्रेमवर्क लॉन्च करने के नियंत्रण में कुंजी रखना है। मैं विषुव की सटीक कार्यप्रणाली से परिचित नहीं हूं, लेकिन मुझे यकीन है कि उनके पास फ़ेलिक्स के लिए वर्णित कुछ समान है: http://felix.apache.org/site/apache-felix-framework-launching-and -embedding.html –
आपकी टिप्पणी के लिए धन्यवाद। यह वह दृष्टिकोण था जिसकी मैंने कोशिश की थी। यद्यपि मुझे अपनी परियोजना को टॉमकैट सर्वर पर चलाने की ज़रूरत है, उपरोक्त वर्णित ब्रिज की आवश्यकता है - और यह मैन्युअल रूप से शुरू नहीं हो सकता है। या क्या इस पुल को बाईपास करने और मैन्युअल रूप से ओएसजीआई फ्रेमवर्क शुरू करने का कोई तरीका है? – Nicolas
मुझे नहीं लगता कि टॉमकैट का उपयोग करने से आप एक विशिष्ट सर्वलेट पुल कार्यान्वयन से कैसे जुड़ते हैं। आप 'org.eclipse.equinox.servletbridge' प्रोजेक्ट को कस्टमाइज़ करने के साथ क्यों शुरू नहीं करते? –