Just released RC 3

Hi all,

this is a notification message that I have just released Axon Framework 1.0-rc3. This release contains a few performance enhancements as well as a critical fix. The new version is already available in maven central. If you prefer the full download, it will be provided early next week on jteam.nl. If you have downloaded any versions there before, you will be notified when it’s available.

If you are using 1.0-rc1 or 1.0-rc2, you are advised to upgrade to 1.0-rc3. These versions contain a problem when command processing results in an exception. In that case, a lock is not properly released, causing other threads to hang, waiting for that lock.

Command processing is now done a lot faster. Benchmark tests (with an in-memory repository to remove that as a factor) shows that command processing speed is increased by a factor 25. The initial processing speed of a command was 4K commands per second. After some improvements, the same machine managed to process 100K commands per second. Of course, there was no network or disk-io involved in this test.

Cheers,

Allard

Hello,

Using axon version 1.0-rc3 with guice instead of spring I encounter
the following exception when using an
"AnnotationEventListenerAdapter":

2011-03-26 21:27:17.004:WARN::failed ContextHandlerCollection@646bfb:
java.lang.NoClassDefFoundError: org/springframework/core/annotation/
AnnotationUtils
2011-03-26 21:27:17.005:WARN::failed HandlerCollection@ed3b53:
java.lang.NoClassDefFoundError: org/springframework/core/annotation/
AnnotationUtils
2011-03-26 21:27:17.005:WARN::Error starting handlers
java.lang.NoClassDefFoundError: org/springframework/core/annotation/
AnnotationUtils
  at
org.axonframework.eventhandling.annotation.AnnotationEventListenerAdapter.<init>(AnnotationEventListenerAdapter.java:
89)
  at
org.axonframework.eventhandling.annotation.AnnotationEventListenerAdapter.<init>(AnnotationEventListenerAdapter.java:
70)
  at
com.bookme.guice.ReportEventListenerProvider.get(ReportEventListenerProvider.java:
20)
  at
com.bookme.guice.ReportEventListenerProvider.get(ReportEventListenerProvider.java:
12)
  at
com.google.inject.BoundProviderFactory.get(BoundProviderFactory.java:
58)

My guess is there are still some Spring dependencies in axon 1.0-rc3.

Kind regards,

Jaron Schut

Hi Jaron,

you’re right. There was a little left-over from Spring. It has been solved in the current snapshot version.

Thanks for reporting it.

Cheers,

Allard

It is so common to have spring libs on the classpath that it is all
too easy to inadvertently supply the dependency during testing.

Yes, the bug is fixed in the snapshot!

Jaron

Hi Allard,

After switching to RC3 (from 0.7.1), we get these exception when deploying our application on JBoss:

2011-03-30 17:03:38,348 ERROR [org.axonframework.monitoring.jmx.JmxConfiguration] (HDScanner) Non-compliant MBean registered.
javax.management.NotCompliantMBeanException: Class does not expose a management interface: java.lang.Object
at org.jboss.mx.metadata.MBeanCapability.of(MBeanCapability.java:102)
at org.jboss.mx.metadata.MBeanCapability.of(MBeanCapability.java:100)
at org.jboss.mx.server.registry.BasicMBeanRegistry.registerMBean(BasicMBeanRegistry.java:190)
at sun.reflect.GeneratedMethodAccessor75.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:157)
at org.jboss.mx.server.Invocation.dispatch(Invocation.java:96)
at org.jboss.mx.interceptor.AbstractInterceptor.invoke(AbstractInterceptor.java:138)
at org.jboss.mx.server.Invocation.invoke(Invocation.java:90)
at org.jboss.mx.interceptor.ModelMBeanOperationInterceptor.invoke(ModelMBeanOperationInterceptor.java:140)
at org.jboss.mx.server.Invocation.invoke(Invocation.java:90)
at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:668)
at org.jboss.mx.server.MBeanServerImpl$3.run(MBeanServerImpl.java:1431)
at java.security.AccessController.doPrivileged(Native Method)
at org.jboss.mx.server.MBeanServerImpl.registerMBean(MBeanServerImpl.java:1426)
at org.jboss.mx.server.MBeanServerImpl.registerMBean(MBeanServerImpl.java:376)
at org.axonframework.monitoring.jmx.JmxConfiguration.registerMBean(JmxConfiguration.java:70)
at org.axonframework.eventhandling.SimpleEventBus.(SimpleEventBus.java:57)
at org.axonframework.eventhandling.SimpleEventBus.(SimpleEventBus.java:47)
at net.ripe.rs.stat.SelfInitializingEventBus.(SelfInitializingEventBus.java:14)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:126)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:74)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:958)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:911)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:485)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:398)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:388)
at org.springframework.context.support.AbstractApplicationContext.getBeansOfType(AbstractApplicationContext.java:1140)
at org.axonframework.eventhandling.annotation.AnnotationEventListenerBeanPostProcessor.afterPropertiesSet(AnnotationEventListenerBeanPostProcessor.java:76)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1477)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1417)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
at org.springframework.context.support.AbstractApplicationContext.registerBeanPostProcessors(AbstractApplicationContext.java:722)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:410)
at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:276)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:197)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:47)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3910)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4393)
at org.jboss.web.tomcat.service.deployers.TomcatDeployment.performDeployInternal(TomcatDeployment.java:310)
at org.jboss.web.tomcat.service.deployers.TomcatDeployment.performDeploy(TomcatDeployment.java:142)
at org.jboss.web.deployers.AbstractWarDeployment.start(AbstractWarDeployment.java:461)
at org.jboss.web.deployers.WebModule.startModule(WebModule.java:118)
at org.jboss.web.deployers.WebModule.start(WebModule.java:97)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:157)
at org.jboss.mx.server.Invocation.dispatch(Invocation.java:96)
at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:668)
at org.jboss.system.microcontainer.ServiceProxy.invoke(ServiceProxy.java:206)
at $Proxy38.start(Unknown Source)
at org.jboss.system.microcontainer.StartStopLifecycleAction.installAction(StartStopLifecycleAction.java:42)
at org.jboss.system.microcontainer.StartStopLifecycleAction.installAction(StartStopLifecycleAction.java:37)
at org.jboss.dependency.plugins.action.SimpleControllerContextAction.simpleInstallAction(SimpleControllerContextAction.java:62)
at org.jboss.dependency.plugins.action.AccessControllerContextAction.install(AccessControllerContextAction.java:71)
at org.jboss.dependency.plugins.AbstractControllerContextActions.install(AbstractControllerContextActions.java:51)
at org.jboss.dependency.plugins.AbstractControllerContext.install(AbstractControllerContext.java:348)
at org.jboss.system.microcontainer.ServiceControllerContext.install(ServiceControllerContext.java:297)
at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:1633)
at org.jboss.dependency.plugins.AbstractController.incrementState(AbstractController.java:935)
at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:1083)
at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:985)
at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:823)
at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:553)
at org.jboss.system.ServiceController.doChange(ServiceController.java:688)
at org.jboss.system.ServiceController.start(ServiceController.java:460)
at org.jboss.system.deployers.ServiceDeployer.start(ServiceDeployer.java:163)
at org.jboss.system.deployers.ServiceDeployer.deploy(ServiceDeployer.java:99)
at org.jboss.system.deployers.ServiceDeployer.deploy(ServiceDeployer.java:46)
at org.jboss.deployers.spi.deployer.helpers.AbstractSimpleRealDeployer.internalDeploy(AbstractSimpleRealDeployer.java:62)
at org.jboss.deployers.spi.deployer.helpers.AbstractRealDeployer.deploy(AbstractRealDeployer.java:50)
at org.jboss.deployers.plugins.deployers.DeployerWrapper.deploy(DeployerWrapper.java:171)
at org.jboss.deployers.plugins.deployers.DeployersImpl.doDeploy(DeployersImpl.java:1440)
at org.jboss.deployers.plugins.deployers.DeployersImpl.doInstallParentFirst(DeployersImpl.java:1158)
at org.jboss.deployers.plugins.deployers.DeployersImpl.doInstallParentFirst(DeployersImpl.java:1179)
at org.jboss.deployers.plugins.deployers.DeployersImpl.install(DeployersImpl.java:1099)
at org.jboss.dependency.plugins.AbstractControllerContext.install(AbstractControllerContext.java:348)
at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:1633)
at org.jboss.dependency.plugins.AbstractController.incrementState(AbstractController.java:935)
at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:1083)
at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:985)
at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:823)
at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:553)
at org.jboss.deployers.plugins.deployers.DeployersImpl.process(DeployersImpl.java:782)
at org.jboss.deployers.plugins.main.MainDeployerImpl.process(MainDeployerImpl.java:702)
at org.jboss.system.server.profileservice.repository.MainDeployerAdapter.process(MainDeployerAdapter.java:117)
at org.jboss.system.server.profileservice.hotdeploy.HDScanner.scan(HDScanner.java:371)
at org.jboss.system.server.profileservice.hotdeploy.HDScanner.run(HDScanner.java:256)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
at java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:317)
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:150)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(ScheduledThreadPoolExecutor.java:98)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runPeriodic(ScheduledThreadPoolExecutor.java:181)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:205)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619)

Cheers, Oleg.

Hi Oleg,

which version of JBoss application server are you using?

Axon is trying to register an MXBean (not an MBean) with the MBeanServer.
You could try to instantiate the CommandBus and EventBus with “false” as constructor parameter, or if you use the namespace, set “register-mbeans” to false.

If I am not mistaken, the application should ignore this error and move on, although without any MBeans being registered.

Cheers,

Allard

Hi Allard,

We’re using JBoss EAP 5.0.0 (which is based on community’s 5.1.0.GA).
Yes, it ignores MXBeans and goes on, still it’s not nice to have exception on every deployment. Strange that it doesn’t throw exceptions in 0.6/0.7, as there seem to be no changes in MBean registration code.

Initialising buses with “false” in constructor does work, so we’ll stick to that for now.

Cheers,
Oleg

Hi Oleg,

I found some publications with similar problems. I provided a fix that someone else used for a similar problem.
Do you have the opportunity to check whether the 1.0-SNAPSHOT version now correctly registers the MBeans on JBoss?

Some background info: version 0.6 and 0.7 didn’t register the MBeans, unless an explicit “true” was passed as parameter on the buses. Since most other frameworks and libraries had the opposite logic, I decided to follow that convention. Since 1.0, MBeans are automatically registered, unless “false” is provided as constructor parameter. Of course, failure to register MBeans will not change the behavior of the rest of the framework.

Cheers,

Allard