[jboss-user] [JNDI/Naming/Network] - java.lang.RuntimeException: mapped-name is required for jdbc

jerome.droz do-not-reply at jboss.com
Wed Jun 11 04:03:49 EDT 2008


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.


View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4157237#4157237

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4157237

More information about the jboss-user mailing list