user3732317
user3732317

Reputation: 253

Having issues with jndi lookup for JBoss embedded MQ for camel route input endpoint

I am trying to retrieve messages from embedded MQ on JBoss. I have turned off security for now. the jndi name for queue looks like xQueue [java:/jms/queue/xQueue]

I am trying to access it from Spring Boot Application running on tomcat and using Apache Camel to create a route from this queue as input.

my JMS Config

<bean name="jmsConnectionFactory" class="org.hornetq.jms.client.HornetQJMSConnectionFactory">
        <constructor-arg name="ha" value="false"></constructor-arg>
        <constructor-arg>
            <bean name="transportConfiguration" class="org.hornetq.api.core.TransportConfiguration">
                <constructor-arg
                    value="org.hornetq.core.remoting.impl.netty.NettyConnectorFactory" />
                <constructor-arg>
                    <map key-type="java.lang.String" value-type="java.lang.Object">
                        <entry key="host" value="127.0.0.1" />
                        <entry key="port" value="5445" />
                    </map>
                </constructor-arg>
            </bean>
        </constructor-arg>
    </bean>

<bean id="jms" class="org.apache.camel.component.jms.JmsComponent">
        <property name="connectionFactory" ref="jmsConnectionFactory"/>
        <property name="destinationResolver" ref="destResolver" />
</bean>

<bean id="destResolver" class="org.springframework.jms.support.destination.JndiDestinationResolver">
<property name="jndiTemplate" ref="jndiTemplate" />
</bean>

<bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate"
        lazy-init="true">
        <property name="environment">
            <props>
                <prop key="java.naming.factory.url.pkgs">org.jnp.interfaces:org.jboss.naming</prop>
                <prop key="java.naming.factory.initial">org.jnp.interfaces.NamingContextFactory</prop>
            </props>
        </property>
    </bean>

My code for Router

import org.apache.camel.spring.boot.FatJarRouter;
import org.springframework.stereotype.Component;

@Component
public class RepConnectorRouter extends FatJarRouter {

    @Override
    public void configure() {
        from(
                "jms:queue:xQueue").autoStartup(true).to(
                "file://c:/temp/out");
    }

}

I am able to establish the jms connection but jndi lookup for the queue is failing. I have tried all sorts of combinations with queue name in my router. Has anyone got this to working?

My Stack trace

2016-03-23 17:35:22.823  INFO 28172 --- [           main] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@23bb8443: startup date [Wed Mar 23 17:35:22 EDT 2016]; root of context hierarchy
2016-03-23 17:35:24.007  INFO 28172 --- [           main] o.s.b.f.xml.XmlBeanDefinitionReader      : Loading XML bean definitions from class path resource [common-jms.xml]
2016-03-23 17:35:24.660  INFO 28172 --- [           main] o.s.b.f.s.DefaultListableBeanFactory     : Overriding bean definition for bean 'beanNameViewResolver': replacing [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=org.springframework.boot.autoconfigure.web.ErrorMvcAutoConfiguration$WhitelabelErrorViewConfiguration; factoryMethodName=beanNameViewResolver; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [org/springframework/boot/autoconfigure/web/ErrorMvcAutoConfiguration$WhitelabelErrorViewConfiguration.class]] with [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter; factoryMethodName=beanNameViewResolver; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [org/springframework/boot/autoconfigure/web/WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter.class]]
2016-03-23 17:35:24.665  INFO 28172 --- [           main] o.s.b.f.s.DefaultListableBeanFactory     : Overriding bean definition for bean 'camelContext': replacing [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=defaultConfig; factoryMethodName=camelContext; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [com/ibcm/spider/DefaultConfig.class]] with [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=org.apache.camel.spring.boot.CamelAutoConfiguration; factoryMethodName=camelContext; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [org/apache/camel/spring/boot/CamelAutoConfiguration.class]]
2016-03-23 17:35:24.665  INFO 28172 --- [           main] o.s.b.f.s.DefaultListableBeanFactory     : Overriding bean definition for bean 'applicationController': replacing [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=defaultConfig; factoryMethodName=applicationController; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [com/ibcm/spider/DefaultConfig.class]] with [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=org.apache.camel.spring.boot.CamelAutoConfiguration; factoryMethodName=applicationController; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [org/apache/camel/spring/boot/CamelAutoConfiguration.class]]
2016-03-23 17:35:24.666  INFO 28172 --- [           main] o.s.b.f.s.DefaultListableBeanFactory     : Overriding bean definition for bean 'producerTemplate': replacing [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=defaultConfig; factoryMethodName=producerTemplate; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [com/ibcm/spider/DefaultConfig.class]] with [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=org.apache.camel.spring.boot.CamelAutoConfiguration; factoryMethodName=producerTemplate; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [org/apache/camel/spring/boot/CamelAutoConfiguration.class]]
2016-03-23 17:35:24.666  INFO 28172 --- [           main] o.s.b.f.s.DefaultListableBeanFactory     : Overriding bean definition for bean 'consumerTemplate': replacing [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=defaultConfig; factoryMethodName=consumerTemplate; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [com/ibcm/spider/DefaultConfig.class]] with [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=org.apache.camel.spring.boot.CamelAutoConfiguration; factoryMethodName=consumerTemplate; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [org/apache/camel/spring/boot/CamelAutoConfiguration.class]]
2016-03-23 17:35:24.666  INFO 28172 --- [           main] o.s.b.f.s.DefaultListableBeanFactory     : Overriding bean definition for bean 'propertiesParser': replacing [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=defaultConfig; factoryMethodName=propertiesParser; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [com/ibcm/spider/DefaultConfig.class]] with [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=org.apache.camel.spring.boot.CamelAutoConfiguration; factoryMethodName=propertiesParser; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [org/apache/camel/spring/boot/CamelAutoConfiguration.class]]
2016-03-23 17:35:24.666  INFO 28172 --- [           main] o.s.b.f.s.DefaultListableBeanFactory     : Overriding bean definition for bean 'properties': replacing [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=defaultConfig; factoryMethodName=properties; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [com/ibcm/spider/DefaultConfig.class]] with [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=org.apache.camel.spring.boot.CamelAutoConfiguration; factoryMethodName=properties; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [org/apache/camel/spring/boot/CamelAutoConfiguration.class]]
2016-03-23 17:35:24.667  INFO 28172 --- [           main] o.s.b.f.s.DefaultListableBeanFactory     : Overriding bean definition for bean 'camelBeanPostProcessor': replacing [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=defaultConfig; factoryMethodName=camelBeanPostProcessor; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [com/ibcm/spider/DefaultConfig.class]] with [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=org.apache.camel.spring.boot.CamelAutoConfiguration; factoryMethodName=camelBeanPostProcessor; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [org/apache/camel/spring/boot/CamelAutoConfiguration.class]]
2016-03-23 17:35:24.991  INFO 28172 --- [           main] f.a.AutowiredAnnotationBeanPostProcessor : JSR-330 'javax.inject.Inject' annotation found and supported for autowiring
2016-03-23 17:35:25.190  INFO 28172 --- [           main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.jms.annotation.JmsBootstrapConfiguration' of type [class org.springframework.jms.annotation.JmsBootstrapConfiguration$$EnhancerBySpringCGLIB$$2cd850e9] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2016-03-23 17:35:25.209  INFO 28172 --- [           main] trationDelegate$BeanPostProcessorChecker : Bean 'org.apache.camel.spring.boot.CamelAutoConfiguration' of type [class org.apache.camel.spring.boot.CamelAutoConfiguration$$EnhancerBySpringCGLIB$$16347185] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2016-03-23 17:35:26.042  INFO 28172 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat initialized with port(s): 8090 (http)
2016-03-23 17:35:26.266  INFO 28172 --- [           main] o.apache.catalina.core.StandardService   : Starting service Tomcat
2016-03-23 17:35:26.270  INFO 28172 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet Engine: Apache Tomcat/8.0.20
2016-03-23 17:35:26.909  INFO 28172 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2016-03-23 17:35:26.910  INFO 28172 --- [ost-startStop-1] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 4109 ms
2016-03-23 17:35:27.178  INFO 28172 --- [ost-startStop-1] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService  'metricsExecutor'
2016-03-23 17:35:28.060  INFO 28172 --- [ost-startStop-1] o.s.b.c.e.ServletRegistrationBean        : Mapping servlet: 'dispatcherServlet' to [/]
2016-03-23 17:35:28.073  INFO 28172 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean  : Mapping filter: 'metricFilter' to: [/*]
2016-03-23 17:35:28.074  INFO 28172 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean  : Mapping filter: 'characterEncodingFilter' to: [/*]
2016-03-23 17:35:28.074  INFO 28172 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean  : Mapping filter: 'webRequestLoggingFilter' to: [/*]
2016-03-23 17:35:28.074  INFO 28172 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean  : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]
2016-03-23 17:35:28.074  INFO 28172 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean  : Mapping filter: 'applicationContextIdFilter' to: [/*]
2016-03-23 17:35:28.840  INFO 28172 --- [           main] o.a.c.i.converter.DefaultTypeConverter   : Loaded 183 type converters
2016-03-23 17:35:29.418  INFO 28172 --- [         main] o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup
2016-03-23 17:35:29.958  INFO 28172 --- [           main] o.s.c.support.DefaultLifecycleProcessor  : Starting beans in phase 0
2016-03-23 17:35:30.036  INFO 28172 --- [           main] o.s.c.support.DefaultLifecycleProcessor  : Starting beans in phase 2147483647
2016-03-23 17:35:30.219  INFO 28172 --- [           main] o.a.camel.spring.SpringCamelContext      : Apache Camel 2.15.2 (CamelContext: camel-1) is starting
2016-03-23 17:35:30.220  INFO 28172 --- [           main] o.a.c.m.ManagedManagementStrategy        : JMX is enabled
2016-03-23 17:35:30.686  INFO 28172 --- [           main] o.a.camel.spring.SpringCamelContext      : AllowUseOriginalMessage is enabled. If access to the original message is not needed, then its recommended to turn this option off as it may improve performance.
2016-03-23 17:35:30.686  INFO 28172 --- [           main] o.a.camel.spring.SpringCamelContext      : StreamCaching is not in use. If using streams then its recommended to enable stream caching. See more details at http://camel.apache.org/stream-caching.html
2016-03-23 17:35:31.758  INFO 28172 --- [           main] o.a.camel.spring.SpringCamelContext      : Route: route1 started and consuming from: Endpoint[jms://queue:jms/queue/xQueue]
2016-03-23 17:35:31.762  INFO 28172 --- [           main] o.a.camel.spring.SpringCamelContext      : Total 1 routes, of which 1 is started.
2016-03-23 17:35:31.763  INFO 28172 --- [           main] o.a.camel.spring.SpringCamelContext      : Apache Camel 2.15.2 (CamelContext: camel-1) started in 1.558 seconds
2016-03-23 17:35:31.913  INFO 28172 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8090 (http)
2016-03-23 17:35:31.915  INFO 28172 --- [           main] c.i.spider.PocApplication    : Started PocApplication in 9.635 seconds (JVM running for 17.429)
2016-03-23 17:35:42.701  WARN 28172 --- [connectorQueue]] c.c.j.DefaultJmsMessageListenerContainer : Setup of JMS message listener invoker failed for destination 'jms/queue/xQueue' - trying to recover. Cause: Destination [jms/queue/xQueue] not found in JNDI; nested exception is javax.naming.CommunicationException: Receive timed out [Root exception is java.net.SocketTimeoutException: Receive timed out]
2016-03-23 17:35:42.857  INFO 28172 --- [connectorQueue]] c.c.j.DefaultJmsMessageListenerContainer : Successfully refreshed JMS Connection

Upvotes: 1

Views: 775

Answers (2)

Doug Grove
Doug Grove

Reputation: 1045

If you are trying to access a destination (a queue, in this case) from another JVM (not JBoss), you will need to define both your queue and the connection factory to be in the java:jboss/exported name space.

For example:

<entry name="java:jboss/exported/jms/queue/sample"/>

This destination would be available to other JVMs via JNDI lookup as:

jms/queue/sample
  • Doug

Upvotes: 0

Nicholas
Nicholas

Reputation: 16066

The issue is: Cause: Destination [jms/queue/xQueue] not found in JNDI;

I forget exactly what the exact proper prefix is, but it should be something like:

java:jms/queue/xQueue

Upvotes: 0

Related Questions