2015-11-02 49 views
2

我想部署一個Mule應用程序,它使用Hazelcast緩存一些經常使用的方法的結果。在mule-deploy.properties通過將一個設置Hazelcast ClassCastException當部署mule應用程序,使用Hazelcast在騾3.6.2 ee

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] 

我試圖使用加載器倍率功能:然而,當部署應用程序,我得到了以下錯誤

loader.override=-com.hazelcast 

騾子應用程序使用Hazelcast 3.5 ,Mule 3.6.2 EE使用Hazelcast 3.1.6。你能告訴我一個可能的解決方案嗎?

+0

這可能會有所幫助:http://stackoverflow.com/questions/826319/classcastexception-when-casting-to-the-same-class – Enrique

回答

3

我已審查通過恩裏克(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的日誌配置。

因爲我確實需要使用Hazelcast 3.5,所以不是將Hazelcast降級到3.1.6的選擇。所以,我必須將mule服務器中的Hazelcast版本替換爲3.5,並從Mule應用程序中刪除此庫。然後,我不得不做了很多測試來放棄可能的不兼容問題。測試成功了。

對於騾服務器Hazelcast日誌配置,我只好到下一個JVM參數添加到騾子服務器包裝:

wrapper.java.additional.44 = -Dhazelcast.logging.type = log4j的

我使用了「log4j」,因爲我使用的是Log4j2。您可以在下一個鏈接中看到有關此配置的更多信息: http://docs.hazelcast.org/docs/3.5/manual/html/logging.html