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