我尝试部署Mule应用程序,该应用程序使用Hazelcast缓存一些常用方法的结果。但是,在部署应用程序时,我收到以下错误:
java.lang.ClassCastException: Cannot cast com.hazelcast.client.txn.ClientTxnPortableHook to com.hazelcast.nio.serialization.PortableHook
at java.lang.Class.cast(Class.java:3176) ~[?:1.7.0_79]
at com.hazelcast.util.ServiceLoader$1.next(ServiceLoader.java:97) ~[hazelcast-3.1.6.jar:3.1.6]
at com.hazelcast.nio.serialization.PortableHookLoader.load(PortableHookLoader.java:48) ~[hazelcast-3.1.6.jar:3.1.6]
at com.hazelcast.nio.serialization.PortableHookLoader.(PortableHookLoader.java:41) ~[hazelcast-3.1.6.jar:3.1.6]
我已尝试将下一个设置放在mule-deploy.properties
中来使用加载程序覆盖功能:
loader.override=-com.hazelcast
Mule应用程序使用Hazelcast 3.5,而Mule 3.6.2 EE使用Hazelcast 3.1.6。你能告诉我一个可能的解决方案吗?
答案 0 :(得分:3)
我已经查看了Enrique(ClassCastException when casting to the same class)提供的链接,这很有用,因为有两种不同的类路径,但在解决问题时还需要考虑其他方面:
Hazelcast版本不同。 Mule应用程序使用Hazelcast 3.5,而Mule 3.6.2 EE使用Hazelcast 3.1.6。
mule服务器中没有Hazelcast的日志配置。
因为我真的需要使用Hazelcast 3.5,所以不能将Hazelcast降级到3.1.6。因此,我不得不将mule服务器中的Hazelcast版本替换为3.5并从Mule应用程序中删除此库。然后我不得不做了很多测试来丢弃可能的不兼容问题。测试成功了。
对于mule服务器中Hazelcast的日志配置,我必须将下一个JVM参数添加到mule服务器包装器中:
wrapper.java.additional.44 = -Dhazelcast.logging.type = log4j的
我使用“log4j”,因为我使用的是Log4j2。您可以在下一个链接中查看有关此配置的更多信息: http://docs.hazelcast.org/docs/3.5/manual/html/logging.html