You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@ignite.apache.org by "Ivan Fedorenkov (Jira)" <ji...@apache.org> on 2021/07/18 16:49:00 UTC

[jira] [Updated] (IGNITE-15143) ClassNotFoundException in server node logs on attempt to invoke service method from ThinClient

     [ https://issues.apache.org/jira/browse/IGNITE-15143?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Ivan Fedorenkov updated IGNITE-15143:
-------------------------------------
    Description: 
S2R:

1) Create and register a custom BinarySerializer for any custom domain object
{code:java}
@Configuration
public class BinaryConfig {
    @Bean
    public BinaryConfiguration binaryConfiguration(Collection<BinaryTypeConfiguration> binaryTypeConfigs) {
        BinaryConfiguration config = new BinaryConfiguration();
        config.setTypeConfigurations(binaryTypeConfigs);
        return config;
    }

    @Bean
    public BinaryTypeConfiguration customObjectBinaryTypeConfig() {
        BinaryTypeConfiguration config = new BinaryTypeConfiguration(CustomObject.class.getCanonicalName());
        config.setSerializer(new CustomObjectBinarySerializer());
        return config;
    }
}{code}
2) Create and register a Service that returns the registered custom object
{code:java}
public interface CustomObjectService {
    String SERVICE_NAME = "CustomObjectService";

    CustomObject getCustomObject(String name);
} {code}
{code:java}
public static class MySuperService implements CustomObjectService, Service, Serializable {
    private static final Logger logger = LoggerFactory.getLogger(MySuperService.class);

    private static final long serialVersionUID = -5935242560080229790L;

    @Override
    public void cancel(ServiceContext ctx) {
        logger.info("Cancelling my super service!");
    }

    @Override
    public void init(ServiceContext ctx) throws Exception {
        logger.info("Initializing my super service!");
    }

    @Override
    public void execute(ServiceContext ctx) throws Exception {
        logger.info("Executing my super service!");
    }

    @Override
    public CustomObject getCustomObject(String name) {
        return new CustomObject(name);
    }
} {code}
3) Start a grid server node and make sure that the node doesn't invoke any methods that could register the custom type (create a file within IGNITE_WORKING_DIR/work/db/marashaller)

4) Start a Java Thin Client (do not register the binary configuration as this is impossible due to IGNITE-15138, create a service proxy instance and invoke the method that returns CustomObject

5) The following exception may be observed in grid server node logs
{code:java}
18:33:29.736 [client-connector-#71] ERROR org.apache.ignite.internal.processors.odbc.ClientListenerNioListener - Failed to process client request [req=o.a.i.i.processors.platform.client.binary.ClientBinaryTypeNameGetRequest@7accc6a6]
org.apache.ignite.IgniteException: Failed to resolve class name [platformId=0, platform=Java, typeId=1510313036]
	at org.apache.ignite.internal.processors.platform.client.binary.ClientBinaryTypeNameGetRequest.process(ClientBinaryTypeNameGetRequest.java:58) ~[ignite-core-2.10.0.jar:2.10.0]
	at org.apache.ignite.internal.processors.platform.client.ClientRequestHandler.handle(ClientRequestHandler.java:99) ~[ignite-core-2.10.0.jar:2.10.0]
	at org.apache.ignite.internal.processors.odbc.ClientListenerNioListener.onMessage(ClientListenerNioListener.java:202) [ignite-core-2.10.0.jar:2.10.0]
	at org.apache.ignite.internal.processors.odbc.ClientListenerNioListener.onMessage(ClientListenerNioListener.java:56) [ignite-core-2.10.0.jar:2.10.0]
	at org.apache.ignite.internal.util.nio.GridNioFilterChain$TailFilter.onMessageReceived(GridNioFilterChain.java:279) [ignite-core-2.10.0.jar:2.10.0]
	at org.apache.ignite.internal.util.nio.GridNioFilterAdapter.proceedMessageReceived(GridNioFilterAdapter.java:109) [ignite-core-2.10.0.jar:2.10.0]
	at org.apache.ignite.internal.util.nio.GridNioAsyncNotifyFilter$3.body(GridNioAsyncNotifyFilter.java:97) [ignite-core-2.10.0.jar:2.10.0]
	at org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:120) [ignite-core-2.10.0.jar:2.10.0]
	at org.apache.ignite.internal.util.worker.GridWorkerPool$1.run(GridWorkerPool.java:70) [ignite-core-2.10.0.jar:2.10.0]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130) [?:?]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630) [?:?]
	at java.lang.Thread.run(Thread.java:831) [?:?]
Caused by: java.lang.ClassNotFoundException: Failed to resolve class name [platformId=0, platform=Java, typeId=1510313036]
	at org.apache.ignite.internal.MarshallerContextImpl.getClassName(MarshallerContextImpl.java:459) ~[ignite-core-2.10.0.jar:2.10.0]
	at org.apache.ignite.internal.MarshallerContextImpl.getClassName(MarshallerContextImpl.java:384) ~[ignite-core-2.10.0.jar:2.10.0]
	at org.apache.ignite.internal.processors.platform.client.binary.ClientBinaryTypeNameGetRequest.process(ClientBinaryTypeNameGetRequest.java:53) ~[ignite-core-2.10.0.jar:2.10.0]
	... 11 more {code}
Note that the issue is not reproducible without registration of a custom BinarySerializer.

  was:
S2R:

1) Create and register a custom BinarySerializer for any custom domain object
{code:java}
@Configuration
public class BinaryConfig {
    @Bean
    public BinaryConfiguration binaryConfiguration(Collection<BinaryTypeConfiguration> binaryTypeConfigs) {
        BinaryConfiguration config = new BinaryConfiguration();
        config.setTypeConfigurations(binaryTypeConfigs);
        return config;
    }

    @Bean
    public BinaryTypeConfiguration customObjectBinaryTypeConfig() {
        BinaryTypeConfiguration config = new BinaryTypeConfiguration(CustomObject.class.getCanonicalName());
        config.setSerializer(new CustomObjectBinarySerializer());
        return config;
    }
}{code}
2) Create and register a Service that returns the registered custom object
{code:java}
public interface CustomObjectService {
    String SERVICE_NAME = "CustomObjectService";

    CustomObject getCustomObject(String name);
} {code}
{code:java}
public static class MySuperService implements CustomObjectService, Service, Serializable {
    private static final Logger logger = LoggerFactory.getLogger(MySuperService.class);

    private static final long serialVersionUID = -5935242560080229790L;

    @Override
    public void cancel(ServiceContext ctx) {
        logger.info("Cancelling my super service!");
    }

    @Override
    public void init(ServiceContext ctx) throws Exception {
        logger.info("Initializing my super service!");
    }

    @Override
    public void execute(ServiceContext ctx) throws Exception {
        logger.info("Executing my super service!");
    }

    @Override
    public CustomObject getCustomObject(String name) {
        return new CustomObject(name);
    }
} {code}
3) Start a grid server node and make sure that the node doesn't invoke any methods that could register the custom type (create a file within IGNITE_WORKING_DIR/work/db/marashaller)

4) Start a Java Thin Client, create a service proxy instance and invoke the method that returns CustomObject

5) The following exception may be observed in grid server node logs
{code:java}
18:33:29.736 [client-connector-#71] ERROR org.apache.ignite.internal.processors.odbc.ClientListenerNioListener - Failed to process client request [req=o.a.i.i.processors.platform.client.binary.ClientBinaryTypeNameGetRequest@7accc6a6]
org.apache.ignite.IgniteException: Failed to resolve class name [platformId=0, platform=Java, typeId=1510313036]
	at org.apache.ignite.internal.processors.platform.client.binary.ClientBinaryTypeNameGetRequest.process(ClientBinaryTypeNameGetRequest.java:58) ~[ignite-core-2.10.0.jar:2.10.0]
	at org.apache.ignite.internal.processors.platform.client.ClientRequestHandler.handle(ClientRequestHandler.java:99) ~[ignite-core-2.10.0.jar:2.10.0]
	at org.apache.ignite.internal.processors.odbc.ClientListenerNioListener.onMessage(ClientListenerNioListener.java:202) [ignite-core-2.10.0.jar:2.10.0]
	at org.apache.ignite.internal.processors.odbc.ClientListenerNioListener.onMessage(ClientListenerNioListener.java:56) [ignite-core-2.10.0.jar:2.10.0]
	at org.apache.ignite.internal.util.nio.GridNioFilterChain$TailFilter.onMessageReceived(GridNioFilterChain.java:279) [ignite-core-2.10.0.jar:2.10.0]
	at org.apache.ignite.internal.util.nio.GridNioFilterAdapter.proceedMessageReceived(GridNioFilterAdapter.java:109) [ignite-core-2.10.0.jar:2.10.0]
	at org.apache.ignite.internal.util.nio.GridNioAsyncNotifyFilter$3.body(GridNioAsyncNotifyFilter.java:97) [ignite-core-2.10.0.jar:2.10.0]
	at org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:120) [ignite-core-2.10.0.jar:2.10.0]
	at org.apache.ignite.internal.util.worker.GridWorkerPool$1.run(GridWorkerPool.java:70) [ignite-core-2.10.0.jar:2.10.0]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130) [?:?]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630) [?:?]
	at java.lang.Thread.run(Thread.java:831) [?:?]
Caused by: java.lang.ClassNotFoundException: Failed to resolve class name [platformId=0, platform=Java, typeId=1510313036]
	at org.apache.ignite.internal.MarshallerContextImpl.getClassName(MarshallerContextImpl.java:459) ~[ignite-core-2.10.0.jar:2.10.0]
	at org.apache.ignite.internal.MarshallerContextImpl.getClassName(MarshallerContextImpl.java:384) ~[ignite-core-2.10.0.jar:2.10.0]
	at org.apache.ignite.internal.processors.platform.client.binary.ClientBinaryTypeNameGetRequest.process(ClientBinaryTypeNameGetRequest.java:53) ~[ignite-core-2.10.0.jar:2.10.0]
	... 11 more {code}
Note that the issue is not reproducible without registration of a custom BinarySerializer.


> ClassNotFoundException in server node logs on attempt to invoke service method from ThinClient
> ----------------------------------------------------------------------------------------------
>
>                 Key: IGNITE-15143
>                 URL: https://issues.apache.org/jira/browse/IGNITE-15143
>             Project: Ignite
>          Issue Type: Bug
>          Components: general, thin client
>    Affects Versions: 2.10
>            Reporter: Ivan Fedorenkov
>            Priority: Major
>
> S2R:
> 1) Create and register a custom BinarySerializer for any custom domain object
> {code:java}
> @Configuration
> public class BinaryConfig {
>     @Bean
>     public BinaryConfiguration binaryConfiguration(Collection<BinaryTypeConfiguration> binaryTypeConfigs) {
>         BinaryConfiguration config = new BinaryConfiguration();
>         config.setTypeConfigurations(binaryTypeConfigs);
>         return config;
>     }
>     @Bean
>     public BinaryTypeConfiguration customObjectBinaryTypeConfig() {
>         BinaryTypeConfiguration config = new BinaryTypeConfiguration(CustomObject.class.getCanonicalName());
>         config.setSerializer(new CustomObjectBinarySerializer());
>         return config;
>     }
> }{code}
> 2) Create and register a Service that returns the registered custom object
> {code:java}
> public interface CustomObjectService {
>     String SERVICE_NAME = "CustomObjectService";
>     CustomObject getCustomObject(String name);
> } {code}
> {code:java}
> public static class MySuperService implements CustomObjectService, Service, Serializable {
>     private static final Logger logger = LoggerFactory.getLogger(MySuperService.class);
>     private static final long serialVersionUID = -5935242560080229790L;
>     @Override
>     public void cancel(ServiceContext ctx) {
>         logger.info("Cancelling my super service!");
>     }
>     @Override
>     public void init(ServiceContext ctx) throws Exception {
>         logger.info("Initializing my super service!");
>     }
>     @Override
>     public void execute(ServiceContext ctx) throws Exception {
>         logger.info("Executing my super service!");
>     }
>     @Override
>     public CustomObject getCustomObject(String name) {
>         return new CustomObject(name);
>     }
> } {code}
> 3) Start a grid server node and make sure that the node doesn't invoke any methods that could register the custom type (create a file within IGNITE_WORKING_DIR/work/db/marashaller)
> 4) Start a Java Thin Client (do not register the binary configuration as this is impossible due to IGNITE-15138, create a service proxy instance and invoke the method that returns CustomObject
> 5) The following exception may be observed in grid server node logs
> {code:java}
> 18:33:29.736 [client-connector-#71] ERROR org.apache.ignite.internal.processors.odbc.ClientListenerNioListener - Failed to process client request [req=o.a.i.i.processors.platform.client.binary.ClientBinaryTypeNameGetRequest@7accc6a6]
> org.apache.ignite.IgniteException: Failed to resolve class name [platformId=0, platform=Java, typeId=1510313036]
> 	at org.apache.ignite.internal.processors.platform.client.binary.ClientBinaryTypeNameGetRequest.process(ClientBinaryTypeNameGetRequest.java:58) ~[ignite-core-2.10.0.jar:2.10.0]
> 	at org.apache.ignite.internal.processors.platform.client.ClientRequestHandler.handle(ClientRequestHandler.java:99) ~[ignite-core-2.10.0.jar:2.10.0]
> 	at org.apache.ignite.internal.processors.odbc.ClientListenerNioListener.onMessage(ClientListenerNioListener.java:202) [ignite-core-2.10.0.jar:2.10.0]
> 	at org.apache.ignite.internal.processors.odbc.ClientListenerNioListener.onMessage(ClientListenerNioListener.java:56) [ignite-core-2.10.0.jar:2.10.0]
> 	at org.apache.ignite.internal.util.nio.GridNioFilterChain$TailFilter.onMessageReceived(GridNioFilterChain.java:279) [ignite-core-2.10.0.jar:2.10.0]
> 	at org.apache.ignite.internal.util.nio.GridNioFilterAdapter.proceedMessageReceived(GridNioFilterAdapter.java:109) [ignite-core-2.10.0.jar:2.10.0]
> 	at org.apache.ignite.internal.util.nio.GridNioAsyncNotifyFilter$3.body(GridNioAsyncNotifyFilter.java:97) [ignite-core-2.10.0.jar:2.10.0]
> 	at org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:120) [ignite-core-2.10.0.jar:2.10.0]
> 	at org.apache.ignite.internal.util.worker.GridWorkerPool$1.run(GridWorkerPool.java:70) [ignite-core-2.10.0.jar:2.10.0]
> 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130) [?:?]
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630) [?:?]
> 	at java.lang.Thread.run(Thread.java:831) [?:?]
> Caused by: java.lang.ClassNotFoundException: Failed to resolve class name [platformId=0, platform=Java, typeId=1510313036]
> 	at org.apache.ignite.internal.MarshallerContextImpl.getClassName(MarshallerContextImpl.java:459) ~[ignite-core-2.10.0.jar:2.10.0]
> 	at org.apache.ignite.internal.MarshallerContextImpl.getClassName(MarshallerContextImpl.java:384) ~[ignite-core-2.10.0.jar:2.10.0]
> 	at org.apache.ignite.internal.processors.platform.client.binary.ClientBinaryTypeNameGetRequest.process(ClientBinaryTypeNameGetRequest.java:53) ~[ignite-core-2.10.0.jar:2.10.0]
> 	... 11 more {code}
> Note that the issue is not reproducible without registration of a custom BinarySerializer.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)