我试图在Websphere 6.1服务器上嵌入Equinox框架,但是尝试了几乎所有内容之后,我认为我需要一些帮助。
主要问题似乎是我无法导入项目中想要的任何框架(较新的Equinox,Apache Felix等)。当我这样做时,我会收到很多异常信息,它们告诉我所加载的类不是我想要的(ClassNotFoundException,MethodNotFoundException等)。
因此,我发现我需要使用Websphere随附的特定版本(org.eclipse.osgi_3.2.1.R32x_v20060919.jar)。问题:我不知道如何获取BundleContext。
我尝试过的事情:
使用ServiceLoader
类:
FrameworkFactory ff = ServiceLoader.load(FrameworkFactory.class);
结果:我需要使用没有ServiceLoader类的Java 1.5。
使用
EclipseStarter
类启动框架:BundleContext context = EclipseStarter.startup(new String[]{},null);
结果:引发异常,表明Eclipse已经在运行。
使用
EclipseStarter
获取系统包上下文:BundleContext context = EclipseStarter.getSystemBundleContext();
结果:该版本未实现该方法。
使用
EquinoxFactory
类:Framework fw = new EquinoxFactory().newFramework(...);
结果:我的Equinox版本没有EquinoxFactory类实现。
我不知道还能尝试什么。我找不到有关此版本的大量文档,几乎找不到与使用控制台有关的所有内容,而不是嵌入框架。
如果我做对了,我们将避免只为创建PDF而启动新的JVM(我们正在尝试使用多个版本的Apache FOP)
谢谢。
最佳答案
从6.1版开始,WebSphere本身在Equinox上运行。您对问题的描述表明您的代码实际上不是在尝试创建嵌入式Equinox容器,而是与WebSphere的Equinox容器进行交互。可能的原因是您的应用程序的类加载器正在使用默认的父优先委派模式。您需要做的第一件事是将它们配置为使用后代父模式,以使您的应用程序与WebSphere中的Equinox代码隔离。这还将消除对您可以使用的OSGi容器的类型和版本的限制。