【问题标题】:Hazelcast classloader configuration in OSGI environment?OSGI环境中的Hazelcast类加载器配置?
【发布时间】:2018-08-13 13:38:54
【问题描述】:

我目前正在使用此配置在我的 hazelcast 实例中设置类加载器。

 Config config = new XmlConfigBuilder(HAZELCAST_CONFIG).build();
 config.setInstanceName(HAZELCAST_INSTANCE_NAME);
 config.setClassLoader(MyClassA.class.getClassLoader());

这适用于具有 MyClassA 元素的地图。

是否可以在只有一个 hazelcast 实例的情况下配置类加载器以包含我项目的所有类?

我在一个有多个包的 OSGI 环境中。

【问题讨论】:

  • 所以你想要一个类加载器来查看所有包中的所有类?这种违反了模块化原则。如果在不同的 bundle 中有多个同名的类怎么办?
  • 实际上,我不想看到所有的类,而是希望能够在 hazelcast 中使用 B 类和 C 类。这个 B 和 C 可能在其他捆绑包中。我试图避免创建其他 hazelcast 实例。

标签: osgi classloader hazelcast


【解决方案1】:

对来自多个包的类具有可见性的问题是,不同的包可以包含名称匹配但实现不同的类。例如,bundle A 可能有类 org.example.Foo 1.0 版,但 bundle B 可能有类 org.example.Foo 2.0 版。

我建议创建一个包来准确定义 Hazelcast 应该看到哪些类型。它只是通过导入具有受控版本范围的包来做到这一点。您现在可以将此捆绑包的 ClassLoader 与 Hazelcast 一起使用。

不幸的是,在 OSGi 中没有直接访问 bundle 的 ClassLoader 的标准方法。但是,您只需几行代码就可以编写一个 ClassLoader,将其从 loadClass 方法委托给 Bundle.loadClass 方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-19
    • 1970-01-01
    • 2012-06-01
    • 1970-01-01
    • 2016-08-05
    • 2019-01-25
    • 2012-06-15
    • 2012-06-16
    相关资源
    最近更新 更多