ClusterSelector problems

Hi Allard,

We’re having some troubles with our cluster setup… It seems that the cluster selector using annotations does not work correctly. We’re facing the stacktrace shown below. When we use a cluster selector based on the classname it all works just fine. Could it be that CGlib has something to do with this issue?

We’re using axon 2.0.9 by the way.

Thnx!!

java.lang.IllegalStateException: Failed to load ApplicationContext
at org.springframework.test.context.CacheAwareContextLoaderDelegate.loadContext(CacheAwareContextLoaderDelegate.java:99)
at org.springframework.test.context.TestContext.getApplicationContext(TestContext.java:122)
at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:154)
at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:100)
at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:307)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:211)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:284)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:231)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:88)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:71)
at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:174)
at org.junit.runners.Suite.runChild(Suite.java:127)
at org.junit.runners.Suite.runChild(Suite.java:26)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
at org.junit.runner.JUnitCore.run(JUnitCore.java:160)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:65)
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name ‘formValidatorUtils’ defined in file [/Users/stein/Documents/code/gini-2.0/onegini/onegini-war/target/classes/com/onegini/form/FormValidatorUtils.class]: Unsatisfied dependency expressed through constructor argument with index 0 of type [com.onegini.service.UserService]: : Error creating bean with name ‘userService’ defined in file [/Users/stein/Documents/code/gini-2.0/onegini/onegini-war/target/classes/com/onegini/service/UserService.class]: Unsatisfied dependency expressed through constructor argument with index 0 of type [com.onegini.dao.identity.UsernameDao]: : Error creating bean with name ‘usernameDao’ defined in file [/Users/stein/Documents/code/gini-2.0/onegini/onegini-query/target/classes/com/onegini/dao/identity/UsernameJpaDao.class]: Initialization of bean failed; nested exception is org.axonframework.eventhandling.EventListenerSubscriptionFailedException: Unable to subscribe [com.onegini.dao.identity.UsernameJpaDao$$EnhancerByCGLIB$$1d22d2f8] to the Event Bus. There is no suitable cluster for it. Make sure the ClusterSelector is configured properly; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘usernameDao’ defined in file [/Users/stein/Documents/code/gini-2.0/onegini/onegini-query/target/classes/com/onegini/dao/identity/UsernameJpaDao.class]: Initialization of bean failed; nested exception is org.axonframework.eventhandling.EventListenerSubscriptionFailedException: Unable to subscribe [com.onegini.dao.identity.UsernameJpaDao$$EnhancerByCGLIB$$1d22d2f8] to the Event Bus. There is no suitable cluster for it. Make sure the ClusterSelector is configured properly; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name ‘userService’ defined in file [/Users/stein/Documents/code/gini-2.0/onegini/onegini-war/target/classes/com/onegini/service/UserService.class]: Unsatisfied dependency expressed through constructor argument with index 0 of type [com.onegini.dao.identity.UsernameDao]: : Error creating bean with name ‘usernameDao’ defined in file [/Users/stein/Documents/code/gini-2.0/onegini/onegini-query/target/classes/com/onegini/dao/identity/UsernameJpaDao.class]: Initialization of bean failed; nested exception is org.axonframework.eventhandling.EventListenerSubscriptionFailedException: Unable to subscribe [com.onegini.dao.identity.UsernameJpaDao$$EnhancerByCGLIB$$1d22d2f8] to the Event Bus. There is no suitable cluster for it. Make sure the ClusterSelector is configured properly; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘usernameDao’ defined in file [/Users/stein/Documents/code/gini-2.0/onegini/onegini-query/target/classes/com/onegini/dao/identity/UsernameJpaDao.class]: Initialization of bean failed; nested exception is org.axonframework.eventhandling.EventListenerSubscriptionFailedException: Unable to subscribe [com.onegini.dao.identity.UsernameJpaDao$$EnhancerByCGLIB$$1d22d2f8] to the Event Bus. There is no suitable cluster for it. Make sure the ClusterSelector is configured properly
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:738)
at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:196)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1075)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:979)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:487)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:296)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:293)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:628)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479)
at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:128)
at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:60)
at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:100)
at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:248)
at org.springframework.test.context.CacheAwareContextLoaderDelegate.loadContextInternal(CacheAwareContextLoaderDelegate.java:64)
at org.springframework.test.context.CacheAwareContextLoaderDelegate.loadContext(CacheAwareContextLoaderDelegate.java:91)
… 31 more
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name ‘userService’ defined in file [/Users/stein/Documents/code/gini-2.0/onegini/onegini-war/target/classes/com/onegini/service/UserService.class]: Unsatisfied dependency expressed through constructor argument with index 0 of type [com.onegini.dao.identity.UsernameDao]: : Error creating bean with name ‘usernameDao’ defined in file [/Users/stein/Documents/code/gini-2.0/onegini/onegini-query/target/classes/com/onegini/dao/identity/UsernameJpaDao.class]: Initialization of bean failed; nested exception is org.axonframework.eventhandling.EventListenerSubscriptionFailedException: Unable to subscribe [com.onegini.dao.identity.UsernameJpaDao$$EnhancerByCGLIB$$1d22d2f8] to the Event Bus. There is no suitable cluster for it. Make sure the ClusterSelector is configured properly; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘usernameDao’ defined in file [/Users/stein/Documents/code/gini-2.0/onegini/onegini-query/target/classes/com/onegini/dao/identity/UsernameJpaDao.class]: Initialization of bean failed; nested exception is org.axonframework.eventhandling.EventListenerSubscriptionFailedException: Unable to subscribe [com.onegini.dao.identity.UsernameJpaDao$$EnhancerByCGLIB$$1d22d2f8] to the Event Bus. There is no suitable cluster for it. Make sure the ClusterSelector is configured properly
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:738)
at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:196)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1075)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:979)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:487)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:296)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:293)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:912)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:855)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:770)
at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:803)
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:731)
… 49 more
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘usernameDao’ defined in file [/Users/stein/Documents/code/gini-2.0/onegini/onegini-query/target/classes/com/onegini/dao/identity/UsernameJpaDao.class]: Initialization of bean failed; nested exception is org.axonframework.eventhandling.EventListenerSubscriptionFailedException: Unable to subscribe [com.onegini.dao.identity.UsernameJpaDao$$EnhancerByCGLIB$$1d22d2f8] to the Event Bus. There is no suitable cluster for it. Make sure the ClusterSelector is configured properly
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:529)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:296)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:293)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:912)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:855)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:770)
at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:803)
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:731)
… 63 more
Caused by: org.axonframework.eventhandling.EventListenerSubscriptionFailedException: Unable to subscribe [com.onegini.dao.identity.UsernameJpaDao$$EnhancerByCGLIB$$1d22d2f8] to the Event Bus. There is no suitable cluster for it. Make sure the ClusterSelector is configured properly
at org.axonframework.eventhandling.ClusteringEventBus.clusterFor(ClusteringEventBus.java:111)
at org.axonframework.eventhandling.ClusteringEventBus.subscribe(ClusteringEventBus.java:96)
at org.axonframework.eventhandling.annotation.AnnotationEventListenerAdapter.subscribe(AnnotationEventListenerAdapter.java:99)
at org.axonframework.eventhandling.annotation.AnnotationEventListenerAdapter.subscribe(AnnotationEventListenerAdapter.java:52)
at org.axonframework.eventhandling.annotation.AnnotationEventListenerBeanPostProcessor.initializeAdapterFor(AnnotationEventListenerBeanPostProcessor.java:55)
at org.axonframework.eventhandling.annotation.AnnotationEventListenerBeanPostProcessor.initializeAdapterFor(AnnotationEventListenerBeanPostProcessor.java:36)
at org.axonframework.common.annotation.AbstractAnnotationHandlerBeanPostProcessor.postProcessAfterInitialization(AbstractAnnotationHandlerBeanPostProcessor.java:71)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsAfterInitialization(AbstractAutowireCapableBeanFactory.java:409)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1518)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:521)
… 73 more

Onegini logo small signature[18].png

Hi Stein,

annotations, by default aren’t ‘visible’ on subclasses. The CGLib library in fact creates a subclass of yours, to be able to proxy it.

You can use the “check-superclass” attribute to have Axon check for annotations on superclasses. Alternatively, you can use the meta-annotation @Inherited to mark an annotation as inherited.

Hope this helps.
Cheers,

Allard

Onegini logo small signature[18].png