OSGI 环境中的 Hazelcast 类加载器配置?
Hazelcast classloader configuration in OSGI environment?
我目前正在使用此配置在我的 hazelcast 实例中设置类加载器。
Config config = new XmlConfigBuilder(HAZELCAST_CONFIG).build();
config.setInstanceName(HAZELCAST_INSTANCE_NAME);
config.setClassLoader(MyClassA.class.getClassLoader());
这适用于具有 MyClassA 元素的地图。
如果只有一个 hazelcast 实例,是否可以配置类加载器以包含我项目的所有 类?
我在一个有多个包的 OSGI 环境中。
从多个包中查看 classes 的问题是不同的包可以包含名称匹配但实现不同的 classes。例如,bundle A
可能有 class org.example.Foo
版本 1.0,但 bundle B
可能有 class org.example.Foo
版本 2.0.
我建议创建一个包来准确定义哪些类型应该对 Hazelcast 可见。它只是通过导入具有受控版本范围的包来做到这一点。您现在可以将此捆绑包的类加载器与 Hazelcast 一起使用。
不幸的是,在 OSGi 中没有直接访问 bundle 的 ClassLoader 的标准方法。但是,您只需几行代码就可以编写一个 ClassLoader,该类加载器从其 loadClass
方法委托给 Bundle.loadClass
方法。
我目前正在使用此配置在我的 hazelcast 实例中设置类加载器。
Config config = new XmlConfigBuilder(HAZELCAST_CONFIG).build();
config.setInstanceName(HAZELCAST_INSTANCE_NAME);
config.setClassLoader(MyClassA.class.getClassLoader());
这适用于具有 MyClassA 元素的地图。
如果只有一个 hazelcast 实例,是否可以配置类加载器以包含我项目的所有 类?
我在一个有多个包的 OSGI 环境中。
从多个包中查看 classes 的问题是不同的包可以包含名称匹配但实现不同的 classes。例如,bundle A
可能有 class org.example.Foo
版本 1.0,但 bundle B
可能有 class org.example.Foo
版本 2.0.
我建议创建一个包来准确定义哪些类型应该对 Hazelcast 可见。它只是通过导入具有受控版本范围的包来做到这一点。您现在可以将此捆绑包的类加载器与 Hazelcast 一起使用。
不幸的是,在 OSGi 中没有直接访问 bundle 的 ClassLoader 的标准方法。但是,您只需几行代码就可以编写一个 ClassLoader,该类加载器从其 loadClass
方法委托给 Bundle.loadClass
方法。