Issue
The exception we are getting in the log is as below. It is a maven project
Caused by: java.lang.LinkageError: loader constraint violation: when resolving interface method "com.hazelcast.core.IMap.getLocalMapStats()Lcom/hazelcast/monitor/LocalMapStats;" the class loader (instance of <bootloader>) of the current class, java/lang/Object, and the class loader (instance of weblogic/utils/classloaders/ChangeAwareClassLoader) for the method's defining class, com/hazelcast/core/IMap, have different Class objects for the type com/hazelcast/monitor/LocalMapStats used in the signature
at java.lang.invoke.MethodHandleNatives.resolve(Native Method) ~[?:1.8.0_141]
at java.lang.invoke.MemberName$Factory.resolve(MemberName.java:975) ~[?:1.8.0_141]
at java.lang.invoke.MemberName$Factory.resolveOrFail(MemberName.java:1000) ~[?:1.8.0_141]
at java.lang.invoke.MethodHandles$Lookup.resolveOrFail(MethodHandles.java:1386) ~[?:1.8.0_141]
at java.lang.invoke.MethodHandles$Lookup.findVirtual(MethodHandles.java:861) ~[?:1.8.0_141]
at io.micrometer.core.instrument.binder.cache.HazelcastIMapAdapter.resolveIMapMethod(HazelcastIMapAdapter.java:202) ~[micrometer-core-1.5.7.jar:1.5.7]
at io.micrometer.core.instrument.binder.cache.HazelcastIMapAdapter.<clinit>(HazelcastIMapAdapter.java:39) ~[micrometer-core-1.5.7.jar:1.5.7]
We are using Hazelcast 3.12.9 and many other dependencies in our project. I do understand that java.lang.LinkageError happens when there are 2 or more versions found for the class. As per above message it seems there are 2 versions of com.hazelcast.monitor.LocalMapStats is getting loaded. The questions that are not answered are
- How to find the jar which are having 2 versions of com.hazelcast.monitor.LocalMapStats class?
- Is there any role of loaders and <weblogic/utils/classloaders/ChangeAwareClassLoader> in this error?
- There is another way to define to give priority to web application jar compared to weblogic jars by specifying prefer-web-inf-classes = false (more details https://docs.oracle.com/cd/E12840_01/wls/docs103/webapp/weblogic_xml.html#wp1067857)
Solution
Two different class versions of LocalMapStats are available hence the issue while loading the class. To avoid this we can set prefer application resources
<weblogic-application>
<prefer-application-resources>
<resource-name>com/hazelcast/map/LocalMapStats.class</resource-name>
</prefer-application-resources>
</weblogic-application>
Answered By - user1891092