27 décembre 2008

Déclaration d'une DataSource dans Tomcat 5.5

Testé sous Windows XP et Debian, avec MySQL et PostgreSQL.

La webapp a les lignes suivantes dans WEB-INF/web.xml :   
<resource-ref>
<res-ref-name>jdbc/janitorDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
Et dans META-INF/context.xml (important) :
<Context
path="/avpoc-webapp-datasource"
reloadable="true"
antiJARLocking="true"
antiResourceLocking="true">
</Context>  
La déclaration de la DataSource jdbc/myJndiName dans Tomcat 5.5 peut se faire de la façon suivante.

D'abord dans conf/server.xml, pour par exemple MySQL : 
<Resource  
name="jdbc/myJndiName"
type="javax.sql.DataSource"
password="myPassword"
driverClassName="com.mysql.jdbc.Driver"
maxIdle="2"
maxWait="5000"
username="myUsername"
url="jdbc:mysql://localhost:3306/myDbName?autoReconnect=true"
maxActive="4"/>
Pour PostgreSQL ça donne quelque chose comme ça :
<Resource  
name="jdbc/myJndiName"
auth="Container"
type="javax.sql.DataSource"
driverClassName="org.postgresql.Driver"
url="jdbc:postgresql://127.0.0.1:5432/myDatabaseName"
username="myUsername" 
password="myPassword"
maxActive="20" 
maxIdle="10" 
maxWait="-1"/>
Ensuite dans conf/context.xml :
<ResourceLink
global="jdbc/myJndiName"
name="jdbc/myJndiName"
type="javax.sql.DataSource"/>
On peut également mettre directement dans conf/context.xml la configuration de la <Resource> mais c'est moins propre.

En tout cas si on ne met rien du tout dans  conf/context.xml on obtient : 
org.apache.commons.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null'
        at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:780)
        at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:540)
        at com.avcompris.avpoc.webapp.PocDataSourceServlet.executePoc(PocDataSourceServlet.java:86)
        at com.avcompris.avpoc.webapp.PocDataSourceServlet.service(PocDataSourceServlet.java:42)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
        atA org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
        at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
        at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
        at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
        at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
        at java.lang.Thread.run(Thread.java:595)
Caused by: java.sql.SQLException: No suitable driver
        at java.sql.DriverManager.getDriver(DriverManager.java:243)
        at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:773)
        ... 18 more

Aucun commentaire: