Ubuntu Tomcat7 java.lang.ClassNotFoundException: org.Apache.tomcat.dbcp.dbcp.BasicDataSourceFactory
j'essaie de configurer une source de données JDBC dans Tomcat 7 sous Ubuntu 12.X, donc j'ai ajouté ce qui suit au contexte.fichier xml:
<Resource name="jdbc/myDS" auth="Container" type="javax.sql.DataSource"
maxActive="5" maxIdle="2" maxWait="5000"
driverClassName="org.postgresql.Driver" username="usr" password="***" url="jdbc:postgresql://localhost:5432/db" />
évidemment, en utilisant le nom d'utilisateur et le mot de passe droits et testés de la base de données. Quand je redémarre Tomcat, j'obtiens cette erreur:
Feb 05, 2013 1:10:01 PM org.apache.catalina.core.NamingContextListener addResource
WARNING: Failed to register in JMX: javax.naming.NamingException: Could not create resource factory instance [Root exception is java.lang.ClassNotFoundException: org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory]
j'ai cherché sur Google, et j'ai découvert que le pilote JDBC devait être copié dans le dossier $CATALINA_HOME/lib, donc j'ai copié le postgresql-9.2-1000.jdbc4.pot à /usr/share/tomcat7/lib, mais il n'a pas aidé. J'ai essayé de copier le fichier à d'autres endroits, avec les mêmes résultats.
une autre tentative fut de changer le tomcat-dbcp.jar lien symbolique dans /usr/share/tomcat7/lib ../../ java / tomcat-dbcp-7.0.30.jar ../../ java / tomcat-dbcp.pot. Le seul changement est que je n'ai reçu qu'un seul avertissement au lieu de quatre, mais la source de données ne fonctionne pas non plus.
version Java:
jdoe@sever:~$ java -version
java version "1.7.0_09"
OpenJDK Runtime Environment (IcedTea7 2.3.4) (7u9-2.3.4-0ubuntu1.12.10.1)
OpenJDK 64-Bit Server VM (build 23.2-b09, mixed mode)
Tout soupçon, très bien accueilli.
Cheers.
5 réponses
La bibliothèque tomcat-dbcp-7.0.30.jar
depuis les dépôts est corrompu.
Remplacer par:
sudo wget -O /usr/share/java/tomcat-dbcp-7.0.30.jar http://search.maven.org/remotecontent?filepath=org/apache/tomcat/tomcat-dbcp/7.0.30/tomcat-dbcp-7.0.30.jar
La cause d'un problème dans le Ubuntu construire/paquet processus de Tomcat7. Si je comprends bien le problème, Apache construit tomcat-dbcp.jar à partir de fichiers binaires, alors Qu'Ubuntu ne construit des paquets qu'à partir de la source. Le projet Ubuntu finit par avoir besoin de changer le nom du paquet Java, ce qui a tendance à casser les choses pour nous les utilisateurs pauvres. Les détails sanglants peuvent être trouvés à la Ubuntu liste de problèmes.
la solution que j'ai trouvée est de nommer l'usine de la source de données ressources. Dans un cas, J'ai un méta-INF/contexte.fichier xml qui contient:
<Resource name="jdbc/myDataSource"
auth="Container"
type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/myDatabase"
username="username" password="password"
validationQuery="SELECT COUNT(*) FROM MY_TABLE"
factory="org.apache.commons.dbcp.BasicDataSourceFactory" />
l'élément critique est la déclaration" factory", qui l'emporte sur la valeur par défaut.
sur nos machines de production, la ressource est définie dans L'élément Globalnamingressources du serveur.fichier xml. Spécifier l'usine n'est nécessaire que sur les systèmes Ubuntu.
j'ai eu le même problème sur CentOS. J'ai obtenu arounbd ceci en téléchargeant une nouvelle copie de tomcat à partir du site et téléchargé tomcat-dbcp.jar pour mon serveur en ligne lib, redémarrez le serveur :)
J'ai eu le même problème sur Fedora 20 avec Tomcat 7.0.55. J'ai remplacé le 7.0.30 par 7.0.55 dans le chemin du fichier et le nom du fichier et cela a fonctionné pour moi. Je ne sais pas pourquoi, mais ce fichier était complètement absent de l'installation de YUM pour tomcat 7. Impossible d'utiliser une base de données sans.
Qu'il a fait.
assurez-vous que le tomcat-dbcp-7.0.30.le fichier jar n'a pas la taille ci-dessous, alors il peut être corrompu et vous pouvez avoir besoin de le remplacer par la commande sudo wget ci-dessus.
-rw-r--r-- 1 root 235411 May 1 2013 tomcat-dbcp-7.0.30.jar
lrwxrwxrwx 1 root root 22 Jan 10 2013 tomcat-dbcp.jar - > tomcat-dbcp-7.0.30.jar