部署在mule 3.6.2 ee中使用Hazelcast的mule应用程序时发生Hazelcast ClassCastException

时间:2015-11-02 22:15:57

标签: mule hazelcast

我尝试部署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。你能告诉我一个可能的解决方案吗?

1 个答案:

答案 0 :(得分:3)

我已经查看了Enrique(ClassCastException when casting to the same class)提供的链接,这很有用,因为有两种不同的类路径,但在解决问题时还需要考虑其他方面:

  1. Hazelcast版本不同。 Mule应用程序使用Hazelcast 3.5,而Mule 3.6.2 EE使用Hazelcast 3.1.6。

  2. mule服务器中没有Hazelcast的日志配置。

  3. 因为我真的需要使用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