Vadim Pakhnushev created IGNITE-26530:
-----------------------------------------
Summary: ByteArrayMarshaller.create doesn't work
Key: IGNITE-26530
URL: https://issues.apache.org/jira/browse/IGNITE-26530
Project: Ignite
Issue Type: Bug
Components: compute ai3
Reporter: Vadim Pakhnushev
Assignee: Vadim Pakhnushev
{{ByteArrayMarshaller.create}} creates an instance of the marshaller that uses
the class loader of the created instance to resolve the class for creating
object to unmarshal.
The class loader of {{ByteArrayMarshaller}} is an application class loader
because the class matches the system classes pattern (its name starts with
{{org.apache.ignite}}).
So when we try to infer the class loader to load the class to unmarshal, we use
application class loader but we should use job class loader.
To reproduce this, deploy a job with a custom argument class and overridden
{{inputMarshaller}} that returns {{ByteArrayMarshaller.create()}}.
Then submit this job using the
{{argumentMarshaller(ByteArrayMarshaller.create())}} in the {{JobDecriptor}}.
The result is the following exception:
{noformat}
Caused by: java.lang.ClassNotFoundException:
org.apache.ignite.internal.network.compatibilitytests.jobs.DeserializeJobParams
at
java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
at
java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:398)
at
java.base/java.io.ObjectInputStream.resolveClass(ObjectInputStream.java:763)
at
org.apache.ignite.marshalling.ByteArrayMarshaller$2.resolveClass(ByteArrayMarshaller.java:84)
{noformat}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)