在 Tomcat 中使用 Java Web 应用程序中的 OSGi 捆绑包
我正在尝试从Java Web应用程序中调用OSGi捆绑包的方法。两者都应该在Tomcat 7上运行。
我已经编写了一个普通的Java应用程序,它从OSGi捆绑包调用方法,如此站点上所述:http://drupal.osgibook.org/node/37。
为了获取Equinox环境的上下文,我从应用程序中启动了它,并从内部安装了捆绑包。此外,上下文用于检索正在运行的捆绑包的服务引用并获取其服务。
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;
}
和 ServiceRunner 类的 invokeMethod:
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 Exceptions。如果有任何关于如何解决这个问题的建议,我将不胜感激。
提前非常感谢。干杯,尼克