将Equinox 3.2.1嵌入到WebSphere中

时间:2013-07-04 15:21:41

标签: 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类实现。

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

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

    感谢。

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

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