Gridgain exception java.lang.IncompatibleClassChangeError: Implementing class
Gridgain exception java.lang.IncompatibleClassChangeError: Implementing class
我正在使用 Trident 风暴并尝试在函数准备方法中启动网格实例。相同的配置文件适用于本地集群。当我在 remore 集群中提交它时,我得到了错误。
代码:
public class MemoryGrid extends BaseFunction {
private static final long serialVersionUID = -4574506761580804738L;
private static final String configFileLocation = "file:///home/path/config.xml";
MemGridDAO memgriddao;
public void prepare(Map conf, TridentOperationContext context){
this.memgriddao = new MemGridDAO (configFileLocation);
}
public void execute(TridentTuple tuple, TridentCollector collector) {
try {
memgriddao.put("cahcename",tuple.getValue(0),tuple.getValue(1));
} catch (GridException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
collector.emit(null);
}
public class MemGridDAO {
public MemGridDAO(String configFile){
Grid grid = GridGain.start(configFile);
}
}
错误
java.lang.IncompatibleClassChangeError: Implementing class
at java.lang.ClassLoader.defineClass1(Native Method) ~[na:1.7.0_45]
at java.lang.ClassLoader.defineClass(ClassLoader.java:800) ~[na:1.7.0_45]
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) ~[na:1.7.0_45]
at java.net.URLClassLoader.defineClass(URLClassLoader.java:449) ~[na:1.7.0_45]
at java.net.URLClassLoader.access0(URLClassLoader.java:71) ~[na:1.7.0_45]
at java.net.URLClassLoader.run(URLClassLoader.java:361) ~[na:1.7.0_45]
at java.net.URLClassLoader.run(URLClassLoader.java:355) ~[na:1.7.0_45]
at java.security.AccessController.doPrivileged(Native Method) ~[na:1.7.0_45]
at java.net.URLClassLoader.findClass(URLClassLoader.java:354) ~[na:1.7.0_45]
at java.lang.ClassLoader.loadClass(ClassLoader.java:425) ~[na:1.7.0_45]
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) ~[na:1.7.0_45]
at java.lang.ClassLoader.loadClass(ClassLoader.java:358) ~[na:1.7.0_45]
at java.lang.Class.forName0(Native Method) ~[na:1.7.0_45]
at java.lang.Class.forName(Class.java:190) ~[na:1.7.0_45]
at org.gridgain.grid.util.GridUtils.addLog4jNoOpLogger(GridUtils.java:7697) ~[stormjar.jar:na]
at org.gridgain.grid.kernal.GridGainEx.start(GridGainEx.java:732) ~[stormjar.jar:na]
at org.gridgain.grid.kernal.GridGainEx.start(GridGainEx.java:677) ~[stormjar.jar:na]
at org.gridgain.grid.kernal.GridGainEx.start(GridGainEx.java:524) ~[stormjar.jar:na]
at org.gridgain.grid.kernal.GridGainEx.start(GridGainEx.java:494) ~[stormjar.jar:na]
at org.gridgain.grid.GridGain.start(GridGain.java:314) ~[stormjar.jar:na]
这可能是编译问题。尝试做一个干净的构建。这可能是因为所有相关 class 之间的 .class 文件不匹配。
IncompatibleClassChangeError 扩展了 LinkageError,这与从子 class.class 编译后发生变化的基础 class 引发的问题有关=11=]
您的远程集群应用程序类路径中似乎有多个不兼容版本的 Log4j jar(很可能,其中一个是 GridGain 依赖项,另一个已经存在您的应用程序依赖项)。
您将需要使用与 GridGain 相同版本的 Log4j,或者将 GridGain 配置为使用非 log4j 日志记录。例如,如果你想保留你的 Log4j 版本,你可以使用 GridSlf4jLogger
和适当的 SLF4j-to-Log4j 绑定。
我正在使用 Trident 风暴并尝试在函数准备方法中启动网格实例。相同的配置文件适用于本地集群。当我在 remore 集群中提交它时,我得到了错误。
代码:
public class MemoryGrid extends BaseFunction {
private static final long serialVersionUID = -4574506761580804738L;
private static final String configFileLocation = "file:///home/path/config.xml";
MemGridDAO memgriddao;
public void prepare(Map conf, TridentOperationContext context){
this.memgriddao = new MemGridDAO (configFileLocation);
}
public void execute(TridentTuple tuple, TridentCollector collector) {
try {
memgriddao.put("cahcename",tuple.getValue(0),tuple.getValue(1));
} catch (GridException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
collector.emit(null);
}
public class MemGridDAO {
public MemGridDAO(String configFile){
Grid grid = GridGain.start(configFile);
}
}
错误
java.lang.IncompatibleClassChangeError: Implementing class
at java.lang.ClassLoader.defineClass1(Native Method) ~[na:1.7.0_45]
at java.lang.ClassLoader.defineClass(ClassLoader.java:800) ~[na:1.7.0_45]
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) ~[na:1.7.0_45]
at java.net.URLClassLoader.defineClass(URLClassLoader.java:449) ~[na:1.7.0_45]
at java.net.URLClassLoader.access0(URLClassLoader.java:71) ~[na:1.7.0_45]
at java.net.URLClassLoader.run(URLClassLoader.java:361) ~[na:1.7.0_45]
at java.net.URLClassLoader.run(URLClassLoader.java:355) ~[na:1.7.0_45]
at java.security.AccessController.doPrivileged(Native Method) ~[na:1.7.0_45]
at java.net.URLClassLoader.findClass(URLClassLoader.java:354) ~[na:1.7.0_45]
at java.lang.ClassLoader.loadClass(ClassLoader.java:425) ~[na:1.7.0_45]
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) ~[na:1.7.0_45]
at java.lang.ClassLoader.loadClass(ClassLoader.java:358) ~[na:1.7.0_45]
at java.lang.Class.forName0(Native Method) ~[na:1.7.0_45]
at java.lang.Class.forName(Class.java:190) ~[na:1.7.0_45]
at org.gridgain.grid.util.GridUtils.addLog4jNoOpLogger(GridUtils.java:7697) ~[stormjar.jar:na]
at org.gridgain.grid.kernal.GridGainEx.start(GridGainEx.java:732) ~[stormjar.jar:na]
at org.gridgain.grid.kernal.GridGainEx.start(GridGainEx.java:677) ~[stormjar.jar:na]
at org.gridgain.grid.kernal.GridGainEx.start(GridGainEx.java:524) ~[stormjar.jar:na]
at org.gridgain.grid.kernal.GridGainEx.start(GridGainEx.java:494) ~[stormjar.jar:na]
at org.gridgain.grid.GridGain.start(GridGain.java:314) ~[stormjar.jar:na]
这可能是编译问题。尝试做一个干净的构建。这可能是因为所有相关 class 之间的 .class 文件不匹配。
IncompatibleClassChangeError 扩展了 LinkageError,这与从子 class.class 编译后发生变化的基础 class 引发的问题有关=11=]
您的远程集群应用程序类路径中似乎有多个不兼容版本的 Log4j jar(很可能,其中一个是 GridGain 依赖项,另一个已经存在您的应用程序依赖项)。
您将需要使用与 GridGain 相同版本的 Log4j,或者将 GridGain 配置为使用非 log4j 日志记录。例如,如果你想保留你的 Log4j 版本,你可以使用 GridSlf4jLogger
和适当的 SLF4j-to-Log4j 绑定。