Я пытаюсь вызвать метод пакета OSGi из веб-приложения Java. Оба должны работать на Tomcat 7.
Я уже написал нормальное Java-приложение, которое вызывает методы из пакета OSGi, как описано на этом сайте: http://drupal.osgibook.org/node/37.
Чтобы получить контекст среды Equinox, я начал ее с приложения и установил пакеты изнутри. Кроме того, контекст использовался для извлечения справочной информации о запущенном комплекте и получения его обслуживания.
Метод runEquinox класса EquinoxRunner:
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:
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;
}
Теперь, на Tomcat, используя мост затмения, я не знаю, как получить правильный контекст среды Equinox, Когда я пытаюсь запустить его на Tomcat с Equinox, я получаю исключения NoClassDefFound. Я был бы признателен за любые советы о том, как решить эту проблему.
Большое спасибо. Cheers, Nic