app/jdbc/xyz should be a valid datasource name in jndi ( Jboss AS 6.Final)
vincent_aumont Mar 30, 2011 9:05 PMHello,
I have this resource defined in a *-ds.xml file:
{code}
<datasources>
<local-tx-datasource>
<jndi-name>app/jdbc/MyDS</jndi-name>
<connection-url>xxx</connection-url>
<driver-class>oracle.jdbc.OracleDriver</driver-class>
<user-name>xxx</user-name>
<password>xxx</password>
</local-tx-datasource>
</datasources>
{code}
It causes the following error:
{code}
17:27:45,220 ERROR [AbstractKernelController] Error installing to Real: name=vfs:///Users/vincent/dev/appservers/jboss-6.0.0.Final/server/default/deploy/foo-ds.xml state=PreReal mode=Manual requiredState=Real: org.jboss.deployers.spi.DeploymentException: Could not bind ConnectionFactory into jndi: java:app/jdbc/MyDS
at org.jboss.resource.connectionmanager.ConnectionFactoryBindingService.bindConnectionFactory(ConnectionFactoryBindingService.java:164) [:6.0.0.Final]
at org.jboss.resource.adapter.jdbc.remote.WrapperDataSourceService.startService(WrapperDataSourceService.java:108) [:6.0.0.Final]
at org.jboss.system.ServiceMBeanSupport.jbossInternalStart(ServiceMBeanSupport.java:355) [:6.0.0.Final (Build SVNTag:JBoss_6.0.0.Final date: 20101228)]
at org.jboss.system.ServiceMBeanSupport.jbossInternalLifecycle(ServiceMBeanSupport.java:301) [:6.0.0.Final (Build SVNTag:JBoss_6.0.0.Final date: 20101228)]
[...]
Caused by: javax.naming.NamingException: java:app not supported by legacy component null
at org.jboss.reloaded.naming.service.AppObjectFactory.getObjectInstance(AppObjectFactory.java:52) [:0.3.0]
at javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:304) [:1.6.0_24]
at org.jnp.interfaces.NamingContext.getObjectInstance(NamingContext.java:1483) [:5.0.5.Final]
at org.jnp.interfaces.NamingContext.getObjectInstanceWrapFailure(NamingContext.java:1500) [:5.0.5.Final]
at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:824) [:5.0.5.Final]
at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:688) [:5.0.5.Final]
at javax.naming.InitialContext.lookup(InitialContext.java:392) [:1.6.0_24]
at org.jboss.util.naming.Util.createSubcontext(Util.java:70) [jboss-common-core.jar:2.2.17.GA]
at org.jboss.util.naming.NonSerializableFactory.rebind(NonSerializableFactory.java:248) [jboss-common-core.jar:2.2.17.GA]
at org.jboss.resource.connectionmanager.ConnectionFactoryBindingService.bindConnectionFactory(ConnectionFactoryBindingService.java:159) [:6.0.0.Final]
... 79 more
{code}
Changing the jndi name to:
{code}
<jndi-name>jdbc/MyDS</jndi-name>
{code}
fixes the problem, but section EE.5.17 (DataSource Resource Definition) of the EE 6 specs clearly states that:
{code}
The DataSource resource may be defined in any of the JNDI namespaces
described in Section EE.5.2.2, “Application Component Environment Namespaces”.
For example,a DataSource resource may be defined:
• in the java:comp namespace,for use by a singlecomponent;
• in the java:module namespace, for use by all components in amodule;
• in the java:app namespace,for use by all components in an application;
• in the java:global namespace,for use by all applications.
{code}
So, app/jdbc/MyDS should be a valid jndi name for this data source (and it works fine on Glassfish 3.1).
Am I missinterpreting the spec, or is jboss AS 6 non-compliant?
Thanks,
-Vincent