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

Hazelcast ClassCastException when deploying a mule application that uses Hazelcast in mule 3.6.2 ee

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

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

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

  2. 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。您可以在接下来的 link 中查看有关此配置的更多信息: http://docs.hazelcast.org/docs/3.5/manual/html/logging.html