Problèmes à l'aide de Tomcat Pool de connexions JDBC dans Tomcat 7

Dans server.xml:

<GlobalNamingResources>
<Resource name="jdbc/ArchiveDB" 
    auth="Container" 
    type="javax.sql.DataSource" 
    driverClassName="oracle.jdbc.OracleDriver"
    factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
    ...etc

Dans web.xml:

<resource-ref>
<description>Archive Database</description>
<res-ref-name>jdbc/ArchiveDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>  

Mon Code:

Context ic = new InitialContext();         
DataSource ds = (DataSource) ic.lookup( "java:/comp/env/jdbc/ArchiveDB" );             

Je suis l'exception suivante:

java.lang.ClassCastException: org.apache.tomcat.dbcp.dbcp.BasicDataSource cannot be cast to org.apache.tomcat.jdbc.pool.DataSource

Une idée de ce que j'ai mal? Il semble que l'usine de champ dans la ressource n'est pas utilisé, mais je n'ai aucune idée de comment trouver pourquoi. Des idées comment je peux progrès?

Mise à jour 1. Fouiller dans le code source a révélé ce qui suit dans ResourceFactory.java

if (ref.getClassName().equals("javax.sql.DataSource")) {
String javaxSqlDataSourceFactoryClassName =
    System.getProperty("javax.sql.DataSource.Factory",
    Constants.DBCP_DATASOURCE_FACTORY);

Je suppose que je dois mettre que le système de la propriété afin de ne pas revenir aux valeurs par défaut.

Mise à jour 2.
Ont maintenant définir les paramètres suivants pour le démarrage:

-Djavax.sql.DataSource.Factory=org.apache.tomcat.jdbc.pool.DataSourceFactory

Et l'obtention d'erreur différents:

09-Jun-2011 14:48:20 org.apache.naming.NamingContext lookup
WARNING: Unexpected exception resolving reference
java.sql.SQLException
at        org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.java:243)
Caused by: java.lang.NullPointerException
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
    at     org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.java:236)
    ... 57 more
javax.naming.NamingException
    at org.apache.naming.NamingContext.lookup(NamingContext.java:843)

Je suppose que ce n'est pas en mesure de prendre le pilote d'info que j'ai précisé.

J'ai un problème similaire. Quel est le type de source de données lors de l'accès à la source de données à partir d'une classe java? J'utilise org.apache.tomcat.jdbc.pool.DataSource, ou il devrait être javax.sql.DataSource (la dernière est la valeur de la type attributs de la Ressource)?

OriginalL'auteur Patrick | 2011-06-09