java - 将 Equinox 3.2.1 嵌入到 WebSphere 中

标签 java websphere osgi equinox

我正在尝试在 Websphere 6.1 服务器上嵌入 Equinox 框架,但在尝试了几乎所有方法之后,我认为我需要一些帮助。

主要问题似乎是我无法在项目中导入任何我想要的框架(较新的 Equinox、Apache Felix 等)。当我这样做时,我收到很多异常,告诉我加载的类不是我想要的类(ClassNotFoundException、MethodNotFoundException 等)。

所以我发现我需要使用Websphere附带的某个版本(org.eclipse.osgi_3.2.1.R32x_v20060919.jar)。问题:我不知道如何获取 BundleContext

我尝试过的事情:

  1. 使用ServiceLoader类:

    FrameworkFactory ff = ServiceLoader.load(FrameworkFactory.class);
    

    结果:我需要使用没有 ServiceLoader 类的 Java 1.5。

  2. 使用EclipseStarter类启动框架:

    BundleContext context = EclipseStarter.startup(new String[]{},null);
    

    结果:抛出异常,告知 Eclipse 已在运行。

  3. 使用 EclipseStarter 获取系统包上下文:

    BundleContext context = EclipseStarter.getSystemBundleContext();
    

    结果:该方法未在此版本上实现。

  4. 使用EquinoxFactory类:

    Framework fw = new EquinoxFactory().newFramework(...);
    

    结果:我的 Equinox 版本没有 EquinoxFactory 类实现。

我不知道还能尝试什么。我找不到关于这个版本的太多文档,我找到的几乎所有内容都是关于使用控制台,而不是嵌入框架。

如果我做对了,我们将避免仅仅为了创建 PDF 而启动新的 JVM(我们正在尝试使用 Apache FOP 的多个版本)

谢谢。

最佳答案

从版本 6.1 开始,WebSphere 本身在 Equinox 上运行。您对问题的描述表明您的代码实际上并不是在尝试创建嵌入式 Equinox 容器,而是与 WebSphere 的 Equinox 容器进行交互。可能的原因是应用程序的类加载器正在使用默认的父级优先委派模式。您需要做的第一件事是将它们配置为使用parent-last 模式,以便您的应用程序与WebSphere 中的Equinox 代码隔离。这还将消除对您可以使用的 OSGi 容器的类型和版本的限制。

关于java - 将 Equinox 3.2.1 嵌入到 WebSphere 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17473791/

相关文章:

java - WebSphere为两个服务器节点创建一个bean

apache-camel - 添加到 pom 文件后,组件camel-jsonpath 出现错误

Java 1.6 夏令时

java - 这里调用父类(super class)构造函数的是什么?

java - JPA 存储库 - 改进 findAll() 性能

java - Websphere Application Server 7 和 Eclipse

JavaEE 5、WAS 6.0 JSP 的奇怪问题包括

java - 在 Swing 中使用 sleep()

eclipse - 即使 Hamcrest 是依赖项,Mockito bundle 也找不到 org.hamcrest 包

java - 如何将 OSGI 包添加到 Eclipse RCP 项目