如何通过动态捆绑安装在 Equinox 中运行子进程?

问题描述 投票:0回答:2

我有一个在 OSGi/Equinox 中运行的 Java 应用程序。从这个应用程序中,我需要生成也在 OSGi/Equinox 中运行的 Java 子进程(例如通过

ProcessBuilder.start()
),以便正确处理类加载。子流程将需要多个捆绑包,因此我理想地希望采用一些相当动态的方式在子流程的 Equinox 容器中安装这些捆绑包,例如通过读取 feature.xml 文件。

我已经阅读了程序启动这里,但我不明白 Equinox 如何融入其中。我也考虑过做像this这样的事情,但它不会非常动态,特别是当子流程的入口点包需要多个其他包时,这需要更多的包等。

那么,如何生成一个子进程以在 OSGi/Equinox 中运行,并以相当动态的方式将包加载到容器中?

注意:我需要使用单独的进程。子进程将使用使用全局变量的 JNA 本机库进行数据处理(并且我无法修改本机库)。因此,为了能够同时处理不同的数据,数据处理需要在单独的进程中运行。

java osgi eclipse-rcp processbuilder equinox
2个回答
0
投票

您可以使用 Equinox Launcher API。 以下示例说明了如何使用 Equinox Launcher api 来启动带有一组捆绑包的新 Equinox 实例: `

EquinoxLauncher launcher = new EquinoxLauncher();
String equinoxHome = "/path/to/equinox/home"; 
String[] bundlePaths = { "/path/to/bundle1.jar", "/path/to/bundle2.jar" }; 

EquinoxRunConfiguration runConfig = launcher.newConfiguration();
runConfig.setWorkingDir(new File(equinoxHome));
runConfig.setFramework(new File(equinoxHome, "plugins/org.eclipse.osgi.jar"));
runConfig.addProgramArg("-console");
runConfig.addProgramArg("-noExit");
for (String bundlePath : bundlePaths) {
    runConfig.addBundle(new File(bundlePath).toURI());
}

EquinoxRunMonitor monitor = launcher.launch(runConfig);

`


0
投票

Equinox 是 Eclipse 中使用的 OSGi(开放服务网关计划)框架实现。通过动态捆绑包安装在 Equinox 中运行子流程涉及与 Equinox OSGi 框架交互以动态安装和启动捆绑包。

© www.soinside.com 2019 - 2024. All rights reserved.