Hi. I use UriDeploymentSpi to deploy users code and ComputeTasks. Simple ComputeTasks work well, but in ComputeTask with IgniteStreamer I have ClassNotFoundException.
There is users transformations code in application which should be applied to data on each node. So I put transform execution into StreamReceiver. Each transform is a user java class which was deployed along with ComputeTask in one gar file In StreamReceiver constructor or readResovle method I am trying to get instance of user transform class but I have ClassNotFoundException. I try to get instanse that way: try { try { return (Transform) Class.forName(transform, true, Thread.currentThread().getContextClassLoader()).newInstance(); } catch (ClassNotFoundException e) { return (Transform) Class.forName(transform).newInstance(); } } This is my stackTrace: SEVERE: Failed to unmarshal message [nodeId=0000493d-03cd-4ccb-85e5-3c4b17793d7f, req=DataStreamerRequest [reqId=77, cacheName=ODS_CDR.MSC_CDR, ignoreDepOwnership=true, skipStore=false, keepBinary=true, depMode=SHARED, sampleClsName=wf.LoadMscCdr.ETLTransform, userVer=0, ldrParticipants=null, clsLdrId=019b403b161-0000493d-03cd-4ccb-85e5-3c4b17793d7f, forceLocDep=false, topVer=AffinityTopologyVersion [topVer=5, minorTopVer=2], partId=-2147483648]] class org.apache.ignite.IgniteCheckedException: Failed to deserialize object [typeName=com.gridfore.dmp.etl.receivers.impl.DataBinaryReceiver] at org.apache.ignite.internal.util.IgniteUtils.unmarshal(IgniteUtils.java:9859) at org.apache.ignite.internal.processors.datastreamer.DataStreamProcessor.processRequest(DataStreamProcessor.java:289) at org.apache.ignite.internal.processors.datastreamer.DataStreamProcessor.access$000(DataStreamProcessor.java:59) at org.apache.ignite.internal.processors.datastreamer.DataStreamProcessor$1.onMessage(DataStreamProcessor.java:89) at org.apache.ignite.internal.managers.communication.GridIoManager.invokeListener(GridIoManager.java:1555) at org.apache.ignite.internal.managers.communication.GridIoManager.processRegularMessage0(GridIoManager.java:1183) at org.apache.ignite.internal.managers.communication.GridIoManager.access$4200(GridIoManager.java:126) at org.apache.ignite.internal.managers.communication.GridIoManager$9.run(GridIoManager.java:1090) at org.apache.ignite.internal.util.StripedExecutor$Stripe.run(StripedExecutor.java:505) at java.lang.Thread.run(Thread.java:748) Caused by: class org.apache.ignite.binary.BinaryObjectException: Failed to deserialize object [typeName=com.gridfore.dmp.etl.receivers.impl.DataBinaryReceiver] at org.apache.ignite.internal.binary.BinaryClassDescriptor.read(BinaryClassDescriptor.java:874) at org.apache.ignite.internal.binary.BinaryReaderExImpl.deserialize0(BinaryReaderExImpl.java:1762) at org.apache.ignite.internal.binary.BinaryReaderExImpl.deserialize(BinaryReaderExImpl.java:1714) at org.apache.ignite.internal.binary.GridBinaryMarshaller.deserialize(GridBinaryMarshaller.java:310) at org.apache.ignite.internal.binary.BinaryMarshaller.unmarshal0(BinaryMarshaller.java:99) at org.apache.ignite.marshaller.AbstractNodeNameAwareMarshaller.unmarshal(AbstractNodeNameAwareMarshaller.java:82) at org.apache.ignite.internal.util.IgniteUtils.unmarshal(IgniteUtils.java:9853) ... 9 more Caused by: class org.apache.ignite.binary.BinaryObjectException: Failed to execute readResolve() method on com.gridfore.dmp.etl.receivers.impl.DataBinaryReceiver@3a40ad0e at org.apache.ignite.internal.binary.BinaryClassDescriptor.read(BinaryClassDescriptor.java:866) ... 15 more Caused by: java.lang.reflect.InvocationTargetException at sun.reflect.GeneratedMethodAccessor37.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.ignite.internal.binary.BinaryClassDescriptor.read(BinaryClassDescriptor.java:855) ... 15 more Caused by: java.lang.RuntimeException: java.lang.ClassNotFoundException: wf.LoadMscCdr.ETLTransform at com.gridfore.dmp.workflow.job.TaskAdapter.getTransform(TaskAdapter.java:18) at com.gridfore.dmp.workflow.job.source.SourceTaskAdapter.getTransform(SourceTaskAdapter.java:127) at com.gridfore.dmp.etl.transform.CompileAllTransforms.compile(CompileAllTransforms.java:28) at com.gridfore.dmp.etl.receivers.BinaryReceiver.initTransforms(BinaryReceiver.java:47) at com.gridfore.dmp.etl.receivers.BinaryReceiver.readResolve(BinaryReceiver.java:60) ... 19 more Caused by: java.lang.ClassNotFoundException: wf.LoadMscCdr.ETLTransform at java.net.URLClassLoader.findClass(URLClassLoader.java:381) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:264) at com.gridfore.dmp.workflow.job.TaskAdapter.getTransform(TaskAdapter.java:15) ... 23 more I try to use IgniteStreamer deployClass() method but it doesn't help: Optional.ofNullable(sourceTaskAdapter.getTransform()) .ifPresent(it -> dataStreamer.deployClass(it.getClass())); Is it possible in my particular case? Maybe it should be used for another cases? PeerClassloading is on. Could you help me with that problem? How can I instansiate my users classes in StreamReceiver? Dmitry.