2

我正在尝试在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)

谢谢。

4

3 回答 3

1

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

于 2013-07-04T18:40:58.953 回答
1

如果您可以升级到 WebSphere 7,您可以安装OSGi Applications Feature Pack。这将允许您利用 Enterprise OSGi 编程模型;例如,您可以使用 Blueprint 来注入捆绑上下文,或者您可以更进一步并使用 Blueprint 以声明方式执行您通常使用捆绑上下文所做的许多事情。如果您可以访问 WebSphere 8.5.5 Liberty Profile,您可以将任意捆绑包安装到服务器本身作为扩展(用户功能,以及安装 OSGi 应用程序)。但是,这两种解决方案都需要基础设施升级,这听起来并不就像你可以做的那样。

于 2013-07-05T11:38:51.640 回答
0

如果您不能使用 ServiceLoader,那么您可以直接实例化 Equinox 的实现FrameworkFactory,即org.eclipse.osgi.launch.EquinoxFactory(如阅读META-INF/servicesEquinox JAR 的条目所示)。

有关嵌入 OSGi 的更多信息,请参阅我不久前写的一篇博文:http: //njbartlett.name/2011/03/07/embedding-osgi.html

于 2013-07-04T17:18:10.007 回答