java 如何在Equinox中使用动态捆绑包安装运行子流程?

7uzetpgm  于 2024-01-05  发布在  Java
关注(0)|答案(2)|浏览(132)

我有一个在OSGi/Equinox中运行的Java应用程序。从这个应用程序中,我需要生成在OSGi/Equinox中运行的Java子进程(例如通过ProcessBuilder.start()),以正确处理类加载。子进程将需要多个bundle,所以我希望在“子进程”Equinox容器中安装这些bundle的方法相当动态,例如通过阅读feature.xml文件。
我已经通读了启动here的程序,但我不知道Equinox如何适应它。我也考虑过做一些类似this的事情,但它不会是非常动态的,特别是当子流程的入口点包需要多个其他包时,这需要更多的包,等等。
那么,我怎样才能通过一种相当动态的方式将bundle加载到容器中来生成一个在OSGi/Equinox中运行的子流程呢?
注意事项:我需要使用单独的进程。子进程将使用使用全局变量的JNA本机库进行数据处理(我不能修改本机库)。因此,为了能够并发处理不同的数据,数据处理需要在单独的进程中运行。

xt0899hw

xt0899hw1#

您可以使用Equinox Launcher API。以下是如何使用Equinox Launcher API启动带有一组捆绑包的Equinox新示例的示例:`

  1. EquinoxLauncher launcher = new EquinoxLauncher();
  2. String equinoxHome = "/path/to/equinox/home";
  3. String[] bundlePaths = { "/path/to/bundle1.jar", "/path/to/bundle2.jar" };
  4. EquinoxRunConfiguration runConfig = launcher.newConfiguration();
  5. runConfig.setWorkingDir(new File(equinoxHome));
  6. runConfig.setFramework(new File(equinoxHome, "plugins/org.eclipse.osgi.jar"));
  7. runConfig.addProgramArg("-console");
  8. runConfig.addProgramArg("-noExit");
  9. for (String bundlePath : bundlePaths) {
  10. runConfig.addBundle(new File(bundlePath).toURI());
  11. }
  12. EquinoxRunMonitor monitor = launcher.launch(runConfig);

字符串
`

展开查看全部
hts6caw3

hts6caw32#

Equinox是Eclipse中使用的OSGi(Open Services Gateway Initiative)框架实现。在Equinox中运行带有动态捆绑包安装的子流程涉及与Equinox OSGi框架交互以动态安装和启动捆绑包。

相关问题