Ignite 在客户端节点上使用CacheLoaderFactory创建缓存时出现异常
我有一个远程服务器节点,从本地客户端节点我发现那个服务器节点。现在,我想从客户机节点创建缓存 p、 两种配置都启用了s.peerClassLoading 我的代码如下Ignite 在客户端节点上使用CacheLoaderFactory创建缓存时出现异常,ignite,Ignite,我有一个远程服务器节点,从本地客户端节点我发现那个服务器节点。现在,我想从客户机节点创建缓存 p、 两种配置都启用了s.peerClassLoading 我的代码如下 private final CacheConfiguration<> cacheConfiguration = SpringContextHolder.applicationContext .getBean("cacheConfiguration", Ca
private final CacheConfiguration<> cacheConfiguration = SpringContextHolder.applicationContext
.getBean("cacheConfiguration", CacheConfiguration.class);
ignite.createCache((CacheConfiguration<>)new CacheConfiguration<>(cacheConfiguration).setName(CACHE_NAME)
.setReadThrough(true)
.setCacheLoaderFactory(new LoaderFactory())
.setExpiryPolicyFactory(EternalExpiryPolicy.factoryOf())))
public class LoaderFactory
implements Factory<Loader> {
public Loader create() {
return new Loader();
}
}
public class Loader implements CacheLoader<x,y> {
public Loader(){
}
....................................
}
during creating cache ,on remote node brings exception
class org.apache.ignite.IgniteCheckedException: Failed to find class with given class loader for unmarshalling (make sure same versions of all classes are available on all nodes or enable peer-class-loading): java.net.URLClassLoader@738defde at org.apache.ignite.marshaller.jdk.JdkMarshaller.unmarshal(JdkMarshaller.java:108)
at org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryCustomEventMessage.message(TcpDiscoveryCustomEventMessage.java:80)
at org.apache.ignite.spi.discovery.tcp.ServerImpl$RingMessageWorker.notifyDiscoveryListener(ServerImpl.java:4894) at org.apache.ignite.spi.discovery.tcp.ServerImpl$RingMessageWorker.processCustomMessage(ServerImpl.java:4750)
at org.apache.ignite.spi.discovery.tcp.ServerImpl$RingMessageWorker.processMessage(ServerImpl.java:2121)
at org.apache.ignite.spi.discovery.tcp.ServerImpl$RingMessageWorker.body(ServerImpl.java:2208)07)
at org.apache.ignite.spi.IgniteSpiThread.run(IgniteSpiThread.java:62)
Caused by: java.lang.ClassNotFoundException: com.synisys.idm.apollo.internal.service.caching.loaders.LoaderFactory at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.security.AccessController.doPrivileged(Native Method)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425):354)
at java.lang.Class.forName0(Native Method)ader.java:358)
at org.apache.ignite.internal.util.IgniteUtils.forName(IgniteUtils.java:8250)
at org.apache.ignite.marshaller.jdk.JdkMarshallerObjectInputStream.resolveClass(JdkMarshallerObjectInputStream.java:54)
private final CacheConfiguration CacheConfiguration=SpringContextHolder.applicationContext
.getBean(“cacheConfiguration”,cacheConfiguration.class);
ignite.createCache((CacheConfiguration)new CacheConfiguration(CacheConfiguration).setName(CACHE\u NAME)
.setReadThrough(真)
.setCacheLoaderFactory(新LoaderFactory())
.setExpiryPolicyFactory(ternalExpiryPolicy.factoryOf()))
公共类装入器工厂
实现工厂{
公共加载程序create(){
返回新的加载器();
}
}
公共类加载器实现CacheLoader{
公共加载程序(){
}
....................................
}
在创建缓存过程中,远程节点上出现异常
class org.apache.ignite.IgniteCheckedException:未能找到具有给定类装入器的类以进行解组(确保所有节点上都有相同版本的所有类,或启用对等类装入):java.net。URLClassLoader@738defde位于org.apache.ignite.marshaller.jdk.JdkMarshaller.unmarshal(JdkMarshaller.java:108)
位于org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryCustomEventMessage.message(TcpDiscoveryCustomEventMessage.java:80)
org.apache.ignite.spi.discovery.tcp.ServerImpl$RingMessageWorker.notifyDiscoveryListener(ServerImpl.java:4894)org.apache.ignite.spi.discovery.tcp.ServerImpl$RingMessageWorker.processCustomMessage(ServerImpl.java:4750)
位于org.apache.ignite.spi.discovery.tcp.ServerImpl$RingMessageWorker.processMessage(ServerImpl.java:2121)
位于org.apache.ignite.spi.discovery.tcp.ServerImpl$RingMessageWorker.body(ServerImpl.java:2208)07)
在org.apache.ignite.spi.IgniteSpiThread.run上(IgniteSpiThread.java:62)
由以下原因引起:java.lang.ClassNotFoundException:com.synisys.idm.apollo.internal.service.caching.loaders.LoaderFactory位于java.net.URLClassLoader$1.run(URLClassLoader.java:366)
位于java.security.AccessController.doPrivileged(本机方法)
位于java.lang.ClassLoader.loadClass(ClassLoader.java:425):354)
位于java.lang.Class.forName0(本机方法)ader.java:358)
位于org.apache.ignite.internal.util.IgniteUtils.forName(IgniteUtils.java:8250)
位于org.apache.ignite.marshaller.jdk.JdkMarshallerObjectInputStream.resolveClass(JdkMarshallerObjectInputStream.java:54)
如何解决这个问题?由Denis Magda@Magda回答 嗨 您还必须将装入器工厂的类放置在客户机的节点类路径中。这样做的主要原因是,当事务从客户机节点启动时(这是很常见的情况),客户机首先将数据提交到存储器,然后再提交到内存中 有关存储的案例,请参阅本博客文章: - 丹尼斯·马格达