Search code examples
guavaguicehazelcast

HazelCast Upgrade Issue from 2.5 to 3.8


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 ?


Solution

  • 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