ignite - ClassNotFoundException in CacheJdbcStoreExample run on cluster -
i have cluster 2 nodes. tried run cachejdbcstoreexample in apache-ignite-fabric-2.1.0-bin/examples.but got following exception:
visor> [06:51:41,113][severe][tcp-disco-msg-worker-#13%null%][tcpdiscoveryspi] failed unmarshal discovery custom message. class org.apache.ignite.ignitecheckedexception: failed find class given class loader unmarshalling (make sure same versions of classes available on nodes or enable pee r-class-loading) [clsldr=sun.misc.launcher$appclassloader@4aa4ceeb, cls=org.apache.ignite.examples.datagrid.store.jdbc.cachejdbcstoreexample$1] @ org.apache.ignite.marshaller.jdk.jdkmarshaller.unmarshal0(jdkmarshaller.java:124) @ org.apache.ignite.marshaller.abstractnodenameawaremarshaller.unmarshal(abstractnodenameawaremarshaller.java:94) @ org.apache.ignite.marshaller.jdk.jdkmarshaller.unmarshal0(jdkmarshaller.java:143) @ org.apache.ignite.marshaller.abstractnodenameawaremarshaller.unmarshal(abstractnodenameawaremarshaller.java:82) @ org.apache.ignite.internal.util.igniteutils.unmarshal(igniteutils.java:9733) @ org.apache.ignite.spi.discovery.tcp.messages.tcpdiscoverycustomeventmessage.message(tcpdiscoverycustomeventmessage.java:81) @ org.apache.ignite.spi.discovery.tcp.serverimpl$ringmessageworker.notifydiscoverylistener(serverimpl.java:5436) @ org.apache.ignite.spi.discovery.tcp.serverimpl$ringmessageworker.processcustommessage(serverimpl.java:5321) @ org.apache.ignite.spi.discovery.tcp.serverimpl$ringmessageworker.processmessage(serverimpl.java:2629) @ org.apache.ignite.spi.discovery.tcp.serverimpl$ringmessageworker.processmessage(serverimpl.java:2420) @ org.apache.ignite.spi.discovery.tcp.serverimpl$messageworkeradapter.body(serverimpl.java:6576) @ org.apache.ignite.spi.discovery.tcp.serverimpl$ringmessageworker.body(serverimpl.java:2506) @ org.apache.ignite.spi.ignitespithread.run(ignitespithread.java:62) caused by: java.lang.classnotfoundexception: org.apache.ignite.examples.datagrid.store.jdbc.cachejdbcstoreexample$1 @ java.net.urlclassloader$1.run(urlclassloader.java:359) @ java.net.urlclassloader$1.run(urlclassloader.java:348) @ java.security.accesscontroller.doprivileged(native method) @ java.net.urlclassloader.findclass(urlclassloader.java:347) @ java.lang.classloader.loadclass(classloader.java:425) @ sun.misc.launcher$appclassloader.loadclass(launcher.java:308) @ java.lang.classloader.loadclass(classloader.java:358) @ java.lang.class.forname0(native method) @ java.lang.class.forname(class.java:278) @ org.apache.ignite.internal.util.igniteutils.forname(igniteutils.java:8465) @ org.apache.ignite.marshaller.jdk.jdkmarshallerobjectinputstream.resolveclass(jdkmarshallerobjectinputstream.java:54) @ java.io.objectinputstream.readnonproxydesc(objectinputstream.java:1817) @ java.io.objectinputstream.readclassdesc(objectinputstream.java:1711) @ java.io.objectinputstream.readordinaryobject(objectinputstream.java:1982) @ java.io.objectinputstream.readobject0(objectinputstream.java:1533) @ java.io.objectinputstream.readarray(objectinputstream.java:1917) @ java.io.objectinputstream.readobject0(objectinputstream.java:1527) @ java.io.objectinputstream.defaultreadfields(objectinputstream.java:2227) @ java.io.objectinputstream.readserialdata(objectinputstream.java:2151) @ java.io.objectinputstream.readordinaryobject(objectinputstream.java:2009) @ java.io.objectinputstream.readobject0(objectinputstream.java:1533) @ java.io.objectinputstream.defaultreadfields(objectinputstream.java:2227) @ java.io.objectinputstream.readserialdata(objectinputstream.java:2151) @ java.io.objectinputstream.readordinaryobject(objectinputstream.java:2009) @ java.io.objectinputstream.readobject0(objectinputstream.java:1533) @ java.io.objectinputstream.readobject(objectinputstream.java:420) @ java.util.arraylist.readobject(arraylist.java:771) @ sun.reflect.generatedmethodaccessor16.invoke(unknown source) @ sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl.java:43) @ java.lang.reflect.method.invoke(method.java:606) @ java.io.objectstreamclass.invokereadobject(objectstreamclass.java:1058) @ java.io.objectinputstream.readserialdata(objectinputstream.java:2118) @ java.io.objectinputstream.readordinaryobject(objectinputstream.java:2009) @ java.io.objectinputstream.readobject0(objectinputstream.java:1533) @ java.io.objectinputstream.defaultreadfields(objectinputstream.java:2227) @ java.io.objectinputstream.readserialdata(objectinputstream.java:2151) @ java.io.objectinputstream.readordinaryobject(objectinputstream.java:2009) @ java.io.objectinputstream.readobject0(objectinputstream.java:1533) @ java.io.objectinputstream.defaultreadfields(objectinputstream.java:2227) @ java.io.objectinputstream.readserialdata(objectinputstream.java:2151) @ java.io.objectinputstream.readordinaryobject(objectinputstream.java:2009) @ java.io.objectinputstream.readobject0(objectinputstream.java:1533) @ java.io.objectinputstream.readobject(objectinputstream.java:420) @ org.apache.ignite.marshaller.jdk.jdkmarshaller.unmarshal0(jdkmarshaller.java:121) ... 12 more i decompiled cachejdbcstoreexample$1.class , got following code:
cachejdbcstoreexample$1
package org.apache.ignite.examples.datagrid.store.jdbc; import javax.cache.configuration.factory; import org.apache.ignite.cache.store.cachestoresessionlistener; import org.apache.ignite.cache.store.jdbc.cachejdbcstoresessionlistener; import org.h2.jdbcx.jdbcconnectionpool; class cachejdbcstoreexample$1 implements factory<cachestoresessionlistener> { public cachestoresessionlistener create() { cachejdbcstoresessionlistener lsnr = new cachejdbcstoresessionlistener(); lsnr.setdatasource(jdbcconnectionpool.create("jdbc:h2:tcp://localhost/mem:exampledb", "sa", "")); return lsnr; } } so think there wrong @ row 90 in cachejdbcstoreexample source code:
// configure jdbc session listener. cachecfg.setcachestoresessionlistenerfactories(new factory<cachestoresessionlistener>() { @override public cachestoresessionlistener create() { cachejdbcstoresessionlistener lsnr = new cachejdbcstoresessionlistener(); lsnr.setdatasource(jdbcconnectionpool.create("jdbc:h2:tcp://localhost/mem:exampledb", "sa", "")); return lsnr; } }); if run example on 1 node not cluster, it's ok.
what should fix it?
the problem configured cache factory of cachestoresessionlistener-s, factory not visible other nodes don't have in classpath.
you should start additional remote nodes org.apache.ignite.examples.examplenodestartup class examples module or add examples module classpath of other nodes.
Comments
Post a Comment