Hi, You have to place the class of your loader factory in clients’ nodes classpath as well. The main reason for this is because when a transaction is started from a client node (that is quite a usual case) then the client first commits data to a storage and after that to in-memory.
Case with the storage is discussed in this blog post: http://gridgain.blogspot.ru/2014/09/two-phase-commit-for-in-memory-caches.html <http://gridgain.blogspot.ru/2014/09/two-phase-commit-for-in-memory-caches.html> — Denis > On Jun 27, 2016, at 2:22 PM, daniel07 <[email protected]> wrote: > > Hi, > I saw other questions related 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) exception,but not find my answer. > > I have one remote server node,and from local client node I discover that > server node. > Now from client node I want to create cache- > p.s. <property name="peerClassLoadingEnabled" value="true"/> added for 2 > configurations > my code is following > > private final CacheConfiguration<EntityIdLoader.EntityIdCacheKey, > List<Integer>> cacheConfiguration = > SpringContextHolder.applicationContext > .getBean("cacheConfigurationTemplate", > CacheConfiguration.class); > > ignite.createCache((CacheConfiguration<EntityIdLoader.EntityIdCacheKey, > List<Integer>>)new > CacheConfiguration<>(cacheConfiguration).setName(CACHE_NAME) > .setReadThrough(true) > .setCacheLoaderFactory(new > EntityIdLoaderFactory()) > > .setExpiryPolicyFactory(EternalExpiryPolicy.factoryOf()))) > > > > public class EntityIdLoaderFactory > implements Factory<EntityIdLoader> { > > private static final long serialVersionUID = 7512841233166239706L; > > @Override > public EntityIdLoader create() { > return new EntityIdLoader( > () -> > SpringContextHolder.applicationContext.getBean("persistenceService", > PersistenceService.class), > () -> > SpringContextHolder.applicationContext.getBean("kbEngine", > KbEngine.class)); > } > > } > > > > > public class EntityIdLoader implements > CacheLoader<EntityIdLoader.EntityIdCacheKey, List<Integer>> { > > @Nonnull > private final Supplier<PersistenceService> persistenceService; > @Nonnull > private final Supplier<KbEngine> kbEngine; > > public EntityIdLoader(@Nonnull Supplier<PersistenceService> > persistenceService, @Nonnull Supplier<KbEngine> kbEngine) { > this.kbEngine = Preconditions.checkNotNull(kbEngine); > this.persistenceService = > Preconditions.checkNotNull(persistenceService); > } > > .................................... > } > > > 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.EntityIdLoaderFactory > > 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) > at > java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1517)12) > at > java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350)a:1771) > at > java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1915)90) > at > java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350)a:1798) > at > java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1915)90) > at > java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350)a:1798) > at java.io.ObjectInputStream.readObject(ObjectInputStream.java:370) > at sun.reflect.GeneratedMethodAccessor17.invoke(Unknown Source) > at > java.lang.reflect.Method.invoke(Method.java:606)DelegatingMethodAccessorImpl.java:43) > at > java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1893)7) > at > java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350)a:1798) > at > java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1915)90) > at > java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350)a:1798) > at > java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1915)90) > at > java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350)a:1798) > at > org.apache.ignite.marshaller.jdk.JdkMarshaller.unmarshal(JdkMarshaller.java:102) > ... 9 more > > Jun 27, 2016 11:18:37 AM org.apache.ignite.logger.java.JavaLogger error > SEVERE: Failed to unmarshal discovery custom message. > 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.AbstractMarshaller.unmarshal(AbstractMarshaller.java:78) > at > org.apache.ignite.spi.discovery.tcp.messages.TcpDiscoveryCustomEventMessage.message(TcpDiscoveryCustomEventMessage.jaat > org.apache.ignite.spi.discovery.tcp.ServerImpl$RingMessageWorker.processCustomMessage(ServerImpl.java:4768) > 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.EntityIdLoaderFactory > > 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) > at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1612) > at > java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1771) > at > java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1990) > at > java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1798) > at > java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1990) > at > java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1798) > at > java.io.ObjectInputStream.readObject(ObjectInputStream.java:370)0) > at sun.reflect.GeneratedMethodAccessor17.invoke(Unknown Source) > at > java.lang.reflect.Method.invoke(Method.java:606)DelegatingMethodAccessorImpl.java:43) > at > java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1893)7) > at > java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350)a:1798) > at > java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1915)90) > at > java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350)a:1798) > at > java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1915)90) > at > java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350)a:1798) > at > org.apache.ignite.marshaller.jdk.JdkMarshaller.unmarshal(JdkMarshaller.java:102) > ... 8 more > > > > -- > View this message in context: > http://apache-ignite-users.70518.x6.nabble.com/Creating-cache-with-CacheLoaderFactory-on-client-node-brings-exception-org-apache-ignite-IgniteCheck-tp5915.html > Sent from the Apache Ignite Users mailing list archive at Nabble.com.
