What is the exact correct way to make JBoss datasource JNDI
mattjiang Oct 4, 2009 10:05 AMHi All,
I saw many people got confused of configuring DataSource JNDI on JBoss, I saw two major example, but for me only one works.
I use Spring 2.5.6, Jboss 4.2.2GA, Sun JDK 1.5
Example 1:(works)
mysql-ds.xml
<?xml version="1.0"?> <datasources> <local-tx-datasource> <jndi-name>jdbc/esoafds</jndi-name> <connection-url>jdbc:mysql://192.168.1.2:3306/jbranch?useUnicode=true&characterEncoding=UTF8&autoReconnect=true</connection-url> <driver-class>com.mysql.jdbc.Driver</driver-class> <user-name>root</user-name> <password></password> <min-pool-size>3</min-pool-size> <max-pool-size>100</max-pool-size> <use-java-context>false</use-java-context> <metadata> <type-mapping>mySQL</type-mapping> </metadata> </local-tx-datasource> </datasources>
Spring applicationContext.xml
<jee:jndi-lookup id="dataSource" jndi-name="jdbc/esoafds" resource-ref="false" />
Above example, could someone advises me why I have to add
<use-java-context>false</use-java-context>to make this config works?
Example 2:(It should work, but NOT)
mysql-ds.xml
<?xml version="1.0"?> <datasources> <local-tx-datasource> <jndi-name>jdbc/esoafds</jndi-name> <connection-url>jdbc:mysql://192.168.1.2:3306/jbranch?useUnicode=true&characterEncoding=UTF8&autoReconnect=true</connection-url> <driver-class>com.mysql.jdbc.Driver</driver-class> <user-name>root</user-name> <password></password> <min-pool-size>3</min-pool-size> <max-pool-size>100</max-pool-size> <metadata> <type-mapping>mySQL</type-mapping> </metadata> </local-tx-datasource> </datasources>
Please be aware that no "use-java-context" tag needed.
web.xml
<resource-ref> <description>Esoaf DataSource</description> <res-ref-name>jdbc/esoafds</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref>
jboss-web.xml
<jboss-web> <resource-ref> <res-ref-name>jdbc/esoafds</res-ref-name> <jndi-name>java:jdbc/esoafds</jndi-name> </resource-ref> </jboss-web>
Spring applicationContext.xml
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> <property name="jndiName" value="java:jdbc/esoafds"/> </bean>
Should I add "java:" before "jdbc/esoafds" or not?
The second example can find correct JNDI name from JBoss, but it returns null from JNDI look up.
Can any body give me a hint what's the concept difference between the two approaches? Why my example 1 works, but exmple 2 return null look up.
Thanks a lot.