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