I am upgrading HazelCast from 2.5 to 3.8 , but after upgrading I am getting below exception :
com.google.common.util.concurrent.UncheckedExecutionException: java.lang.IllegalStateException: Recursive load of: .
.
.
at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2201)
at com.google.common.cache.LocalCache.get(LocalCache.java:3934)
at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3938)
at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4821)
at com.google.common.cache.LocalCache$LocalLoadingCache.getUnchecked(LocalCache.java:4827)
at com.google.inject.internal.FailableCache.get(FailableCache.java:48)
at com.google.inject.internal.ConstructorInjectorStore.get(ConstructorInjectorStore.java:50)
at com.google.inject.internal.ConstructorBindingImpl.initialize(ConstructorBindingImpl.java:136)
at com.google.inject.internal.InjectorImpl.initializeJitBinding(InjectorImpl.java:547)
at com.google.inject.internal.InjectorImpl.createJustInTimeBinding(InjectorImpl.java:884)
at com.google.inject.internal.InjectorImpl.createJustInTimeBindingRecursive(InjectorImpl.java:805)
at com.google.inject.internal.InjectorImpl.getJustInTimeBinding(InjectorImpl.java:282)
at com.google.inject.internal.InjectorImpl.getBindingOrThrow(InjectorImpl.java:214)
at com.google.inject.internal.SingleFieldInjector.<init>(SingleFieldInjector.java:42)
at com.google.inject.internal.MembersInjectorStore.getInjectors(MembersInjectorStore.java:131)
at com.google.inject.internal.MembersInjectorStore.createWithListeners(MembersInjectorStore.java:98)
Does any one has any idea ?
This is bug in guice, when guice couldn't initialize inject a class due missing interface implementation binding or it fails during constructor initialization, it displays this error instead of actual error, You can check, https://github.com/google/guice/issues/785
Below program fails with same error
`package com.guicetest;
import javax.inject.Inject;
import javax.inject.Provider;
import com.google.inject.AbstractModule;
import com.google.inject.Guice;
import com.google.inject.Provides;
/* Dependencies:
Class01
Class04
Class03
Class02
@Provides Class01
Class03
Class01
Class04
Class05
Class01
Class05
Interface01
*/
public class MyTest {
public static void main(String[] args) {
Guice.createInjector(new AbstractModule() {
@Override
protected void configure() {
}
@Provides
public Class02 providesClass02(Provider<Class01> arg) {
return null;
}
});
}
}
class Class01 {
@Inject
public Class01(Provider<Class04> arg1, Provider<Class03> arg2) {
}
}
class Class02 {
}
class Class03 {
@Inject
public Class03(Provider<Class01> arg) {
}
}
class Class04 {
@Inject
public Class04(Provider<Class05> arg1, Provider<Class01> arg2) {
}
}
class Class05 {
@Inject
public Class05(Provider<Interface01> arg) {
}
}
interface Interface01 {
}`
You can find actual error by putting debug point on LocalCache in the exception cause and expand loader object, you will be able to find actual error, Finding actual error in intellij IDE