Я пытаюсь ссылаться на метод пакета 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, используя eclipse bridge, я не знаю, как получить правильный контекст среды Equinox. Когда я пытаюсь запустить его на Tomcat с помощью эквинокса, я получаю NoClassDefFound Exceptions. Я был бы признателен за любой совет, как решить эту проблему.
Заранее спасибо. Ваше здоровье, Ник