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)