Ignite 在客户端节点上使用CacheLoaderFactory创建缓存时出现异常

Ignite 在客户端节点上使用CacheLoaderFactory创建缓存时出现异常,ignite,Ignite,我有一个远程服务器节点,从本地客户端节点我发现那个服务器节点。现在,我想从客户机节点创建缓存 p、 两种配置都启用了s.peerClassLoading 我的代码如下 private final CacheConfiguration<> cacheConfiguration = SpringContextHolder.applicationContext .getBean("cacheConfiguration", Ca

我有一个远程服务器节点,从本地客户端节点我发现那个服务器节点。现在,我想从客户机节点创建缓存 p、 两种配置都启用了s.peerClassLoading 我的代码如下

   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回答 嗨

您还必须将装入器工厂的类放置在客户机的节点类路径中。这样做的主要原因是,当事务从客户机节点启动时(这是很常见的情况),客户机首先将数据提交到存储器,然后再提交到内存中

有关存储的案例,请参阅本博客文章:

- 丹尼斯·马格达