Search code examples
grailsroutesjmsgrails-plugingrails-2.3

Grails Routing-JMS plugin - Issue while deployment into weblogic


I am using Grails plugin (routing-jms) to enqueue messages into Oracle AQ based queue. It works fine using tomcat but throwing below exception while deploying into Weblogic 10.3 server.

Caused by: java.lang.ClassCastException: weblogic.jms.foreign.IgnoreXAResourceImpl
    at oracle.jms.WebLogicHelper.<clinit>(WebLogicHelper.java:57)
    at oracle.jms.AQjmsConstants.<clinit>(AQjmsConstants.java:310)
    at oracle.jms.AQjmsConnectionFactory.<init>(AQjmsConnectionFactory.java:64)
    at oracle.jms.AQjmsQueueConnectionFactory.<init>(AQjmsQueueConnectionFactory.java:129)
    at oracle.jms.AQjmsFactory.getQueueConnectionFactory(AQjmsFactory.java:160)
    at RoutingJmsGrailsPlugin$_closure1.doCall(RoutingJmsGrailsPlugin.groovy:30)
    at grails.spring.BeanBuilder.invokeBeanDefiningClosure(BeanBuilder.java:755)
    at grails.spring.BeanBuilder.beans(BeanBuilder.java:584)
    at grails.spring.BeanBuilder.invokeMethod(BeanBuilder.java:527)
    at weblogic.servlet.internal.EventsManager$FireContextListenerAction.run(EventsManager.java:481)
    at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
    at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)
    at weblogic.servlet.internal.EventsManager.notifyContextCreatedEvent(EventsManager.java:181)
    at weblogic.servlet.internal.WebAppServletContext.preloadResources(WebAppServletContext.java:1870)
    at weblogic.servlet.internal.WebAppServletContext.start(WebAppServletContext.java:3155)
    at weblogic.servlet.internal.WebAppModule.startContexts(WebAppModule.java:1518)
    at weblogic.servlet.internal.WebAppModule.start(WebAppModule.java:487)
    at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:427)

Appriciate any help.


Solution

  • Actually, WebLogic uses a hierarchy of class loaders (see this article). It seems like the same class is getting loaded via two different class loaders. And you cannot cast between class loaders, hence the ClassCastException.

    Re-check your dependencies to exclude any JAR files that are loaded by the server but also by your application.