Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过客户端用户代码部署将JAR上载到Hazelcast云后出现NoClassDefFoundError_Hazelcast_Hazelcast Cloud - Fatal编程技术网

通过客户端用户代码部署将JAR上载到Hazelcast云后出现NoClassDefFoundError

通过客户端用户代码部署将JAR上载到Hazelcast云后出现NoClassDefFoundError,hazelcast,hazelcast-cloud,Hazelcast,Hazelcast Cloud,我目前正在尝试Hazelcast云,我需要将jar依赖项上传到Hazelcast云服务器。我有大约20mb要上传,通过客户端用户代码部署功能上传似乎很好,但是一旦上传完成并尝试使用类,我就会收到这个错误。我正在使用Jet streams和IMDG地图、集合、列表和执行器服务。是否有些功能在Hazelcast Cloud上不受支持,或者我遗漏了什么?我在想,当以编程方式使用客户机用户代码部署功能时,我可能还需要addClass,而不仅仅是addJar 下面是添加依赖项的代码 ClientUserC

我目前正在尝试Hazelcast云,我需要将jar依赖项上传到Hazelcast云服务器。我有大约20mb要上传,通过客户端用户代码部署功能上传似乎很好,但是一旦上传完成并尝试使用类,我就会收到这个错误。我正在使用Jet streams和IMDG地图、集合、列表和执行器服务。是否有些功能在Hazelcast Cloud上不受支持,或者我遗漏了什么?我在想,当以编程方式使用客户机用户代码部署功能时,我可能还需要
addClass
,而不仅仅是
addJar

下面是添加依赖项的代码

ClientUserCodeDeploymentConfig ClientUserCodeDeploymentConfig=
新建ClientUserCodeDeploymentConfig();
clientUserCodeDeploymentConfig.addJar(“包含com.my.jarlibrary.SomeClass的jar路径”);
clientUserCodeDeploymentConfig.setEnabled(true);
ClientConfig=new ClientConfig();//Jet&Hazelcast配置
setUserCodeDeploymentConfig(clientUserCodeDeploymentConfig);
//我还尝试在添加了包含该类的jar之后添加该类,
//同样的错误也出现了。
clientUserCodeDeploymentConfig.addClass(SomeClass.class);
以下是我得到的错误:

java.util.concurrent.ExecutionException: com.hazelcast.client.UndefinedErrorCodeException: 
Class name: java.lang.NoClassDefFoundError, Message:  com/my/jarlibrary/SomeClass
    at com.hazelcast.client.spi.impl.ClientInvocationFuture.resolveAndThrowIfException(ClientInvocationFuture.java:109)
    at com.hazelcast.client.spi.impl.ClientInvocationFuture.resolveAndThrowIfException(ClientInvocationFuture.java:33)
    at com.hazelcast.spi.impl.AbstractInvocationFuture.get(AbstractInvocationFuture.java:163)
    at com.hazelcast.client.spi.impl.ClientUserCodeDeploymentService.deploy(ClientUserCodeDeploymentService.java:172)
    at com.hazelcast.client.impl.clientside.HazelcastClientInstanceImpl.onClusterConnect(HazelcastClientInstanceImpl.java:444)
    at com.hazelcast.client.connection.nio.ClusterConnectorServiceImpl.connectAsOwner(ClusterConnectorServiceImpl.java:150)
    at com.hazelcast.client.connection.nio.ClusterConnectorServiceImpl.connectToCandidate(ClusterConnectorServiceImpl.java:252)
    at com.hazelcast.client.connection.nio.ClusterConnectorServiceImpl.connectToClusterInternal(ClusterConnectorServiceImpl.java:192)
    at com.hazelcast.client.connection.nio.ClusterConnectorServiceImpl.access$000(ClusterConnectorServiceImpl.java:62)
    at com.hazelcast.client.connection.nio.ClusterConnectorServiceImpl$1.call(ClusterConnectorServiceImpl.java:279)
    at com.hazelcast.client.connection.nio.ClusterConnectorServiceImpl$1.call(ClusterConnectorServiceImpl.java:275)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)
    at com.hazelcast.util.executor.HazelcastManagedThread.executeRun(HazelcastManagedThread.java:64)
    at com.hazelcast.util.executor.HazelcastManagedThread.run(HazelcastManagedThread.java:80)
Caused by: com.hazelcast.client.UndefinedErrorCodeException: Class name: java.lang.NoClassDefFoundError, Message: com/my/jarlibrary/SomeClass
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:642)
    at com.hazelcast.internal.usercodedeployment.impl.ClassSource.define(ClassSource.java:50)
    at com.hazelcast.internal.usercodedeployment.impl.ClassLocator.defineClassFromClient(ClassLocator.java:126)
    at com.hazelcast.internal.usercodedeployment.UserCodeDeploymentService.defineClass(UserCodeDeploymentService.java:72)
    at com.hazelcast.internal.usercodedeployment.impl.operation.DeployClassesOperation.run(DeployClassesOperation.java:50)
    at com.hazelcast.spi.Operation.call(Operation.java:170)
    at com.hazelcast.spi.impl.operationservice.impl.OperationRunnerImpl.call(OperationRunnerImpl.java:210)
    at com.hazelcast.spi.impl.operationservice.impl.OperationRunnerImpl.run(OperationRunnerImpl.java:199)
    at com.hazelcast.spi.impl.operationexecutor.impl.OperationExecutorImpl.run(OperationExecutorImpl.java:407)
    at com.hazelcast.spi.impl.operationexecutor.impl.OperationExecutorImpl.runOrExecute(OperationExecutorImpl.java:434)
    at com.hazelcast.spi.impl.operationservice.impl.Invocation.doInvokeLocal(Invocation.java:648)
    at com.hazelcast.spi.impl.operationservice.impl.Invocation.doInvoke(Invocation.java:633)
    at com.hazelcast.spi.impl.operationservice.impl.Invocation.invoke0(Invocation.java:592)
    at com.hazelcast.spi.impl.operationservice.impl.Invocation.invoke(Invocation.java:256)
    at com.hazelcast.spi.impl.operationservice.impl.InvocationBuilderImpl.invoke(InvocationBuilderImpl.java:61)
    at com.hazelcast.client.impl.protocol.task.AbstractMultiTargetMessageTask.processMessage(AbstractMultiTargetMessageTask.java:57)
    at com.hazelcast.client.impl.protocol.task.AbstractMessageTask.initializeAndProcessMessage(AbstractMessageTask.java:129)
    at com.hazelcast.client.impl.protocol.task.AbstractMessageTask.run(AbstractMessageTask.java:109)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)
    at com.hazelcast.util.executor.HazelcastManagedThread.executeRun(HazelcastManagedThread.java:64)
    at com.hazelcast.util.executor.HazelcastManagedThread.run(HazelcastManagedThread.java:80)
    at ------ submitted from ------.(Unknown Source)
    at com.hazelcast.spi.impl.operationservice.impl.InvocationFuture.resolve(InvocationFuture.java:126)
    at com.hazelcast.spi.impl.AbstractInvocationFuture$1.run(AbstractInvocationFuture.java:251)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)
    at com.hazelcast.util.executor.HazelcastManagedThread.executeRun(HazelcastManagedThread.java:64)
    at com.hazelcast.util.executor.HazelcastManagedThread.run(HazelcastManagedThread.java:80)
    at ------ submitted from ------.(Unknown Source)
    at com.hazelcast.client.spi.impl.ClientInvocationFuture.resolveAndThrowIfException(ClientInvocationFuture.java:96)
    ... 16 more)

如果从另一个类加载器加载
SomeClass
,Hazelcast客户端将无法加载其类定义,因此引发此异常。 一个示例场景如下:您在Tomcat上运行Spring boot应用程序。 SomeClass由Tomcat类加载器加载,而Hazelcast客户端类则通过spring引导类加载器加载。 在这种情况下,Hazelcast客户端可以访问某个类,但不能访问通过类加载器加载的类定义

作为一种解决方法,您需要告诉Hazelcast客户端要使用哪个类加载器:

clientConfig.setClassLoader(SomeClass.class.getClassLoader());

如果从另一个类加载器加载
SomeClass
,Hazelcast客户端将无法加载其类定义,因此引发此异常。 一个示例场景如下:您在Tomcat上运行Spring boot应用程序。 SomeClass由Tomcat类加载器加载,而Hazelcast客户端类则通过spring引导类加载器加载。 在这种情况下,Hazelcast客户端可以访问某个类,但不能访问通过类加载器加载的类定义

作为一种解决方法,您需要告诉Hazelcast客户端要使用哪个类加载器:

clientConfig.setClassLoader(SomeClass.class.getClassLoader());

我在编写问题文本时出错,请将该类替换为com/my/jarlibrary/SomeClass,然后是以前添加的。我在编写问题文本时出错,请将该类替换为com/my/jarlibrary/SomeClass,然后是以前添加的。只需添加jar就可以了?为什么我们也需要添加类?它应该通过添加JAR来工作,确保包含所有依赖项。如果要重新部署类/JAR,请确保首先重新启动集群。它不能与此类加载程序一起工作,也不能仅与JAR一起工作,我接下来应该尝试什么?有没有办法查看云上的hazelcast服务器实例?Classloader的解决方法只有在加载单个类时,而不是JAR加载。注意,只加载JAR就足够了。作为下一步,1)能否重新启动Hazelcast云群集?2) 然后,只需
addJar
,看看是否得到异常。3) 在URL的末尾共享集群ID,这样我们就可以检查异常日志了。只需添加jar就可以了吗?为什么我们也需要添加类?它应该通过添加JAR来工作,确保包含所有依赖项。如果要重新部署类/JAR,请确保首先重新启动集群。它不能与此类加载程序一起工作,也不能仅与JAR一起工作,我接下来应该尝试什么?有没有办法查看云上的hazelcast服务器实例?Classloader的解决方法只有在加载单个类时,而不是JAR加载。注意,只加载JAR就足够了。作为下一步,1)能否重新启动Hazelcast云群集?2) 然后,只需
addJar
,看看是否得到异常。3) 在URL末尾共享集群ID,以便我们检查异常日志