java.lang.RuntimeException: mapped-name is required for jdbc
jerome.droz Jun 11, 2008 4:03 AMHi,
I'm new to jBoss AS and I'm trying to migrate a web application that almost worked on Tomcat 6.0.16 to jBoss 5 Beta4. The reason is that I realized Tomcat currently doesn't support resource injection and is somehow buggy... The application uses JPA to access one database and a datasource taken out from JNDI to access another database (but no other types of EJBs). The problem occurs when deploying the web archive:
09:02:31,896 ERROR [BaseModelMBean] Exception invoking method addChild java.lang.RuntimeException: mapped-name is required for jdbc/[my-jndi-name] of deployment [my-war] at org.jboss.injection.ResourceHandler.loadXmlResourceRefs(ResourceHandler.java:156) at org.jboss.injection.ResourceHandler.loadXml(ResourceHandler.java:270) at org.jboss.web.tomcat.service.TomcatInjectionContainer.processMetadata(TomcatInjectionContainer.java:348) ...
I followed jBoss's guide to configure a data source in an xml file named mysql-ds.xml (in the "deploy" directory) that looks like this:
<datasources> <local-tx-datasource> <jndi-name>jdbc/[my-jndi-name]</jndi-name> <connection-url>jdbc:mysql://[my-host]:3306/[my-db]</connection-url> <driver-class>com.mysql.jdbc.Driver</driver-class> <user-name>[my-username]</user-name> <password>[my-password]</password> <min-pool-size>5</min-pool-size> <max-pool-size>20</max-pool-size> <idle-timeout-minutes>5</idle-timeout-minutes> <exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter</exception-sorter-class-name> <valid-connection-checker-class-name>org.jboss.resource.adapter.jdbc.vendor.MySQLValidConnectionChecker</valid-connection-checker-class-name> <new-connection-sql>SELECT 1</new-connection-sql> <metadata> <type-mapping>mySQL</type-mapping> </metadata> </local-tx-datasource> </datasources>
I've also add the following fragment to the web.xml file:
<resource-ref> <description>DB Connection</description> <res-ref-name>jdbc/[my-jndi-name]</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref>
I found some documentation about mapped-name in the J2EE API docs, in the @Resource annotation class... but I'm confused about its usage. Do I have to use resource injection in order to make it work? Because that's not the case... I'm using plain JNDI coding:
... Context initialContext = new InitialContext(); DataSource dataSource = (DataSource)initialContext.lookup(JNDI_CONNECTION_NAME); connection = dataSource.getConnection(); ...
Is there something obvious I'm missing? Do I have to configure an ejb-jar.xml and refactor my code to exclusively use stateless Beans and resource injection?
Any help will be appreciated.
Thanks,
Jerome