ActiveMQ on Wildfly classloading issue
prasad.deshpande Oct 13, 2014 5:04 PMHi All,
Sorry if this is not the correct forum to post. I was searching for correct forum for Wildfly but failed.
Here is a background on the problem:
Env is JDK 8, Wildfly 8.1
I have a setup where I'm using ActiveMQ resource-adapter for MDB's. Setup is fine & I can see that there are connections made.
15:29:14,593 INFO [org.jboss.as.connector.deployment] (MSC service thread 1-9) JBAS010406: Registered connection factory java:jboss/activemq/amqObjService
...
...
15:29:14,709 INFO [org.jboss.as.connector.deployment] (MSC service thread 1-9) JBAS010405: Registered admin object at java:/activemq/queue/obj_sync_in
Now, interestingly MDB's are using Spring for doing work. So in the constructor it creates Spring Application context using below statement:
applicationContext = new ClassPathXmlApplicationContext("classpath:spring-services-beans.xml");
and then in onMessage method it just get's the bean from spring & calls method.
Case 1:
But above statement throws error saying:
15:29:27,732 ERROR [stderr] (ActiveMQ Transport: tcp://localhost/127.0.0.1:61616@58461) org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from
class path resource [spring-services-beans.xml]; nested exception is java.io.FileNotFoundException: class path resource [spring-services-beans.xml] cannot be opened because it does not exist
File spring-services-beans.xml is at the root of EJB jar, but code above is executed by a thread "ActiveMQ Transport: tcp://localhost/127.0.0.1:61616@58461" which is using same classloader that has loaded "org.apache.activemq.ra" module (custom module)
Case 2:
There is also another thread running which creates/initialises MDB's produces this log:
5:29:27,773 INFO [org.springframework.beans.factory.xml.XmlBeanDefinitionReader] (default-threads - 7) Loading XML bean definitions from class path resource [spring-services-beans.xml]
This thread correctly uses EJB classloader of EAR & hence finds the "spring-services-beans.xml" file. & everything works fine.
My question is, what is the difference between these two cases, why thread in Case 1 is trying to instantiate MDB?
In my opinion this is something to do with classloading in Wildfly with RA. Why module classloader (that loaded activemq ra) is instantiating MDB's that are in the EAR.?
Interestingly, it all works fine with EAP 6.3.
Any insight will really be helpful...
Thanks,
Prasad
P.S. Not sure if stack helps to find what could be problem with class loader hierarchy....
===================================================================================================================
2014-10-13 21:51:18,327 INFO [org.springframework.context.support.ClassPathXmlApplicationContext] (ActiveMQ Transport: tcp://localhost/127.0.0.1:61616@60804) Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@2f4bfcd3: startup date [Mon Oct 13 21:51:18 BST 2014]; root of context hierarchy
2014-10-13 21:51:18,328 INFO [org.springframework.beans.factory.xml.XmlBeanDefinitionReader] (ActiveMQ Transport: tcp://localhost/127.0.0.1:61616@60804) Loading XML bean definitions from class path resource [spring-services-beans.xml]
2014-10-13 21:51:18,329 ERROR [stderr] (ActiveMQ Transport: tcp://localhost/127.0.0.1:61616@60804) org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from class path resource [spring-services-beans.xml]; nested exception is java.io.FileNotFoundException: class path resource [spring-services-beans.xml] cannot be opened because it does not exist
2014-10-13 21:51:18,330 ERROR [stderr] (ActiveMQ Transport: tcp://localhost/127.0.0.1:61616@60804) at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:344)
2014-10-13 21:51:18,330 ERROR [stderr] (ActiveMQ Transport: tcp://localhost/127.0.0.1:61616@60804) at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:304)
2014-10-13 21:51:18,330 ERROR [stderr] (ActiveMQ Transport: tcp://localhost/127.0.0.1:61616@60804) at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:180)
2014-10-13 21:51:18,331 ERROR [stderr] (ActiveMQ Transport: tcp://localhost/127.0.0.1:61616@60804) at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:216)
2014-10-13 21:51:18,331 ERROR [stderr] (ActiveMQ Transport: tcp://localhost/127.0.0.1:61616@60804) at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:187)
2014-10-13 21:51:18,332 ERROR [stderr] (ActiveMQ Transport: tcp://localhost/127.0.0.1:61616@60804) at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:251)
2014-10-13 21:51:18,332 ERROR [stderr] (ActiveMQ Transport: tcp://localhost/127.0.0.1:61616@60804) at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:127)
2014-10-13 21:51:18,332 ERROR [stderr] (ActiveMQ Transport: tcp://localhost/127.0.0.1:61616@60804) at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:93)
2014-10-13 21:51:18,333 ERROR [stderr] (ActiveMQ Transport: tcp://localhost/127.0.0.1:61616@60804) at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:129)
2014-10-13 21:51:18,333 ERROR [stderr] (ActiveMQ Transport: tcp://localhost/127.0.0.1:61616@60804) at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:537)
2014-10-13 21:51:18,333 ERROR [stderr] (ActiveMQ Transport: tcp://localhost/127.0.0.1:61616@60804) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:452)
2014-10-13 21:51:18,334 ERROR [stderr] (ActiveMQ Transport: tcp://localhost/127.0.0.1:61616@60804) at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
2014-10-13 21:51:18,334 ERROR [stderr] (ActiveMQ Transport: tcp://localhost/127.0.0.1:61616@60804) at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
2014-10-13 21:51:18,335 ERROR [stderr] (ActiveMQ Transport: tcp://localhost/127.0.0.1:61616@60804) at com.tt.ls.soa.stack.services.worker.TestObjectWorkerManager.init(TestObjectWorkerManager.java:73)
2014-10-13 21:51:18,335 ERROR [stderr] (ActiveMQ Transport: tcp://localhost/127.0.0.1:61616@60804) at com.tt.ls.soa.stack.services.worker.TestObjectWorkerManager.<init>(TestObjectWorkerManager.java:50)
2014-10-13 21:51:18,335 ERROR [stderr] (ActiveMQ Transport: tcp://localhost/127.0.0.1:61616@60804) at com.tt.ls.soa.stack.services.worker.TestObjectWorkerManager$$$endpoint3.<init>(Unknown Source)
2014-10-13 21:51:18,336 ERROR [stderr] (ActiveMQ Transport: tcp://localhost/127.0.0.1:61616@60804) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
2014-10-13 21:51:18,336 ERROR [stderr] (ActiveMQ Transport: tcp://localhost/127.0.0.1:61616@60804) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
2014-10-13 21:51:18,336 ERROR [stderr] (ActiveMQ Transport: tcp://localhost/127.0.0.1:61616@60804) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
2014-10-13 21:51:18,337 ERROR [stderr] (ActiveMQ Transport: tcp://localhost/127.0.0.1:61616@60804) at java.lang.reflect.Constructor.newInstance(Constructor.java:408)
2014-10-13 21:51:18,337 ERROR [stderr] (ActiveMQ Transport: tcp://localhost/127.0.0.1:61616@60804) at java.lang.Class.newInstance(Class.java:433)
2014-10-13 21:51:18,337 ERROR [stderr] (ActiveMQ Transport: tcp://localhost/127.0.0.1:61616@60804) at org.jboss.invocation.proxy.AbstractClassFactory.newInstance(AbstractClassFactory.java:225)
2014-10-13 21:51:18,338 ERROR [stderr] (ActiveMQ Transport: tcp://localhost/127.0.0.1:61616@60804) at org.jboss.invocation.proxy.ProxyFactory.newInstance(ProxyFactory.java:270)
2014-10-13 21:51:18,338 ERROR [stderr] (ActiveMQ Transport: tcp://localhost/127.0.0.1:61616@60804) at org.jboss.as.ejb3.inflow.JBossMessageEndpointFactory.createEndpoint(JBossMessageEndpointFactory.java:70)
2014-10-13 21:51:18,338 ERROR [stderr] (ActiveMQ Transport: tcp://localhost/127.0.0.1:61616@60804) at org.jboss.as.ejb3.inflow.JBossMessageEndpointFactory.createEndpoint(JBossMessageEndpointFactory.java:62)
2014-10-13 21:51:18,339 ERROR [stderr] (ActiveMQ Transport: tcp://localhost/127.0.0.1:61616@60804) at org.apache.activemq.ra.ServerSessionPoolImpl.createEndpoint(ServerSessionPoolImpl.java:92)
2014-10-13 21:51:18,339 ERROR [stderr] (ActiveMQ Transport: tcp://localhost/127.0.0.1:61616@60804) at org.apache.activemq.ra.ServerSessionPoolImpl.createServerSessionImpl(ServerSessionPoolImpl.java:76)
2014-10-13 21:51:18,339 ERROR [stderr] (ActiveMQ Transport: tcp://localhost/127.0.0.1:61616@60804) at org.apache.activemq.ra.ServerSessionPoolImpl.getServerSession(ServerSessionPoolImpl.java:116)
2014-10-13 21:51:18,340 ERROR [stderr] (ActiveMQ Transport: tcp://localhost/127.0.0.1:61616@60804) at org.apache.activemq.ActiveMQConnectionConsumer.dispatch(ActiveMQConnectionConsumer.java:132)
2014-10-13 21:51:18,340 ERROR [stderr] (ActiveMQ Transport: tcp://localhost/127.0.0.1:61616@60804) at org.apache.activemq.ActiveMQConnection$3.processMessageDispatch(ActiveMQConnection.java:1872)
2014-10-13 21:51:18,341 ERROR [stderr] (ActiveMQ Transport: tcp://localhost/127.0.0.1:61616@60804) at org.apache.activemq.command.MessageDispatch.visit(MessageDispatch.java:113)
2014-10-13 21:51:18,341 ERROR [stderr] (ActiveMQ Transport: tcp://localhost/127.0.0.1:61616@60804) at org.apache.activemq.ActiveMQConnection.onCommand(ActiveMQConnection.java:1852)
2014-10-13 21:51:18,341 ERROR [stderr] (ActiveMQ Transport: tcp://localhost/127.0.0.1:61616@60804) at org.apache.activemq.transport.ResponseCorrelator.onCommand(ResponseCorrelator.java:116)
2014-10-13 21:51:18,342 ERROR [stderr] (ActiveMQ Transport: tcp://localhost/127.0.0.1:61616@60804) at org.apache.activemq.transport.MutexTransport.onCommand(MutexTransport.java:50)
2014-10-13 21:51:18,342 ERROR [stderr] (ActiveMQ Transport: tcp://localhost/127.0.0.1:61616@60804) at org.apache.activemq.transport.WireFormatNegotiator.onCommand(WireFormatNegotiator.java:113)
2014-10-13 21:51:18,342 ERROR [stderr] (ActiveMQ Transport: tcp://localhost/127.0.0.1:61616@60804) at org.apache.activemq.transport.AbstractInactivityMonitor.onCommand(AbstractInactivityMonitor.java:270)
2014-10-13 21:51:18,343 ERROR [stderr] (ActiveMQ Transport: tcp://localhost/127.0.0.1:61616@60804) at org.apache.activemq.transport.TransportSupport.doConsume(TransportSupport.java:83)
2014-10-13 21:51:18,343 ERROR [stderr] (ActiveMQ Transport: tcp://localhost/127.0.0.1:61616@60804) at org.apache.activemq.transport.tcp.TcpTransport.doRun(TcpTransport.java:214)
2014-10-13 21:51:18,343 ERROR [stderr] (ActiveMQ Transport: tcp://localhost/127.0.0.1:61616@60804) at org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:196)
2014-10-13 21:51:18,344 ERROR [stderr] (ActiveMQ Transport: tcp://localhost/127.0.0.1:61616@60804) at java.lang.Thread.run(Thread.java:745)
2014-10-13 21:51:18,344 ERROR [stderr] (ActiveMQ Transport: tcp://localhost/127.0.0.1:61616@60804) Caused by: java.io.FileNotFoundException: class path resource [spring-services-beans.xml] cannot be opened because it does not exist
2014-10-13 21:51:18,345 ERROR [stderr] (ActiveMQ Transport: tcp://localhost/127.0.0.1:61616@60804) at org.springframework.core.io.ClassPathResource.getInputStream(ClassPathResource.java:172)
2014-10-13 21:51:18,345 ERROR [stderr] (ActiveMQ Transport: tcp://localhost/127.0.0.1:61616@60804) at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:330)
2014-10-13 21:51:18,345 ERROR [stderr] (ActiveMQ Transport: tcp://localhost/127.0.0.1:61616@60804) ... 39 more