2 Replies Latest reply on Mar 29, 2012 9:55 AM by sfcoy

    JBoss datasource JNDI lookup through Spring issue

    jonfoxx

      I am trying to locate the default ExampleDS datasource present in standalone.xml using JNDI via the Spring framework.

       

      The relevant portion of my Spring context for the datasource is as follows:

       

      <jee:jndi-lookup id="dataSource" jndi-name="java:jboss/datasources/ExampleDS"

              expected-type="javax.sql.DataSource" environment-ref="jndiProperties">

      </jee:jndi-lookup>

       

      <util:properties id="jndiProperties" location="classpath:jndi.properties" />

       

      and the jndi.properties is as follows:

       

      java.naming.provider.url=remote://localhost:4447

      java.naming.factory.initial=org.jboss.naming.remote.client.InitialContextFactory

      java.naming.security.principal=somename

      java.naming.security.credentials=somepassword

       

      However, on deploying the WAR on JBoss AS 7.1.Final, I get the following exception:

       

      16:24:42,577 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/JobConsumer]] (MSC service thread 1-4) Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource': Invocation of init method failed; nested exception is javax.naming.NameNotFoundException: jboss/datasources/ExampleDS -- service jboss.naming.context.java.jboss.exported.jboss.datasources.ExampleDS

              at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1455) [org.springframework.beans-3.1.1.RELEASE.jar:3.1.1.RELEASE]

              at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) [org.springframework.beans-3.1.1.RELEASE.jar:3.1.1.RELEASE]

              at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) [org.springframework.beans-3.1.1.RELEASE.jar:3.1.1.RELEASE]

              at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294) [org.springframework.beans-3.1.1.RELEASE.jar:3.1.1.RELEASE]

              at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225) [org.springframework.beans-3.1.1.RELEASE.jar:3.1.1.RELEASE]

              at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291) [org.springframework.beans-3.1.1.RELEASE.jar:3.1.1.RELEASE]

              at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) [org.springframework.beans-3.1.1.RELEASE.jar:3.1.1.RELEASE]

              at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:567) [org.springframework.beans-3.1.1.RELEASE.jar:3.1.1.RELEASE]

              at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:913) [org.springframework.context-3.1.1.RELEASE.jar:3.1.1.RELEASE]

              at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:464) [org.springframework.context-3.1.1.RELEASE.jar:3.1.1.RELEASE]

              at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:245) [spring.jar:2.0.7]

              at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:188) [spring.jar:2.0.7]

              at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:49) [spring.jar:2.0.7]

              at org.apache.catalina.core.StandardContext.contextListenerStart(StandardContext.java:3392) [jbossweb-7.0.10.Final.jar:]

              at org.apache.catalina.core.StandardContext.start(StandardContext.java:3850) [jbossweb-7.0.10.Final.jar:]

              at org.jboss.as.web.deployment.WebDeploymentService.start(WebDeploymentService.java:90) [jboss-as-web-7.1.0.Final.jar:7.1.0.Final]

              at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]

              at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]

              at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) [rt.jar:1.6.0_21]

              at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) [rt.jar:1.6.0_21]

              at java.lang.Thread.run(Thread.java:619) [rt.jar:1.6.0_21]

      Caused by: javax.naming.NameNotFoundException: jboss/datasources/ExampleDS -- service jboss.naming.context.java.jboss.exported.jboss.datasources.ExampleDS

              at org.jboss.as.naming.ServiceBasedNamingStore.lookup(ServiceBasedNamingStore.java:97) [jboss-as-naming-7.1.0.Final.jar:7.1.0.Final]

              at org.jboss.as.naming.NamingContext.lookup(NamingContext.java:177) [jboss-as-naming-7.1.0.Final.jar:7.1.0.Final]

              at org.jboss.naming.remote.protocol.v1.Protocol$1.handleServerMessage(Protocol.java:124) [jboss-client-7.1.0.Final.jar:7.1.0.Final]

              at org.jboss.naming.remote.protocol.v1.RemoteNamingServerV1$MessageReciever$1.run(RemoteNamingServerV1.java:70) [jboss-client-7.1.0.Final.jar:7.1.0.Final]

              ... 3 more

       

      I tried to use a different datasource name containing 'exported' ("java:jboss/exported/datasources/ExampleDS") but it still gives the same exception and the WAR fails to deploy. I have also tried giving the jndi-name as "datasources/ExampleDS" in Spring's application context. What's wrong?

       

      PS: I intend to enable JNDI access of datasources and accessor applications may not be on the same system as the one hosting JBoss.  Thanks!