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
Vous devez vous connecter pour publier un commentaire.
Semble fonctionner maintenant. Je pense que c'était un problème que j'ai été le débogage sous Eclipse, donc je n'étais pas à l'aide de la server.xml que je pensais que j'ai été en utilisant. Eclipse des copies de l'un, sous le répertoire de tomcat. La Solution est de supprimer et de le recréer sous Eclipse pour obtenir des changements dans server.xml pour être efficaces.
OriginalL'auteur Patrick