I've been beating my head against the wall on and off for a week now and
just can't seem to get the hand of JNDI DataSources with Tomcat. Everything
I try seems to end with "javax.naming.NamingException: Cannot create
resource instance."
Though I've also done a fair amount of research on this I haven't found any
clear answers as to what exactly causes this error, esp. when using Tomcat.
Thanks for any ideas,
Ken
The entries in server.xml, under <GlobalNamingResources> are:
<Resource name="jdbc/CheckUsers" auth="Container"
type="javax.sql.DataSource"/>
<ResourceParams name="jdbc/CheckUsers">
<parameter>
<name>driverClassName</name>
<value>com.mysql.jdbc.Driver</value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:mysql://inqtomcat/photo?autoReconnect=true</value>
</parameter>
<parameter>
<name>username</name>
<value>xxx</value>
</parameter>
<parameter>
<name>password</name>
<value>xxx</value>
</parameter>
<parameter>
<name>maxActive</name>
<value>10</value>
</parameter>
<parameter>
<name>maxIdle</name>
<value>30000</value>
</parameter>
<parameter>
<name>maxWait</name>
<value>100</value>
</parameter>
<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>
</ResourceParams>
</Resource>
In my web.xml I have:
<resource-ref>
<res-ref-name>jdbc/CheckUsers</res-ref-name>
<res-type>javax.sqlDataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
And in the calling code I have:
private DataSource ds;
Context initContext;
Context env;
try {
initContext = new InitialContext();
env = (Context)initContext.lookup("java:comp/env");
ds = (DataSource) env.lookup("jdbc/CheckUsers");
} catch ( NamingException ne ) {
logger.info( "Problem setting datasource in setDs using JNDI
and DataSource: " + ne + ".");
} catch ( Exception e ) {
logger.info( "Problem setting datasource in setDs : " + e + ".");
}