Comment enregistrer oracle jdbc driver sur Tomcat 7.0.47 de démarrage?
J'ai copié ojdbc6.jar pour le dossier lib dans le dossier d'installation de tomcat.
Quand j'déployer mon Application Web qui rend l'utilisation du Pilote d'Oracle JDBC Connexion, le serveur dit que le pilote de classe ne peut pas être trouvé, et je suis forcé de faire DriverManager.registerDriver manuellement, puis il travaille.
Peut-il être fait de sorte que le conducteur est enregistré au démarrage et je n'ai pas à le faire manuellement, ni créer un pool de connexion?
OriginalL'auteur tonlika | 2013-11-26
Vous devez vous connecter pour publier un commentaire.
Pouvez-vous préciser ce que vous entendez par "dossier lib dans le dossier d'installation de tomcat"? Il devrait signifier l' /lib directement sous la racine de votre serveur Tomcat.
La Tomcat 7 docs dire ceci:
La bonne chose à faire est de mettre en place un JNDI de la source de données plutôt que d'en créer un dans votre code à l'aide de DriverManager.
Je recommande aussi correspondant à la version du pilote pour votre Oracle et versions de la JVM. JDK 6 a atteint la fin de sa vie. JDK 7 est en cours de production. Je le recommande la mise à niveau de ojdbc6.jar si vous utilisez le JDK 7.
Si vous utilisez une source de données JNDI, et vous devriez, c'est là où ils appartiennent. d'autres applications déployées sur Tomcat instance besoin d'eux, trop. Si vous n'allez pas utiliser les données regroupées de sources, et d'insister sur la création de chaque connexion à l'aide d'un DataManager, peut-être la chose la plus facile à faire est d'essayer de supprimer les fichiers jar JDBC à partir de /lib et de les replacer dans /WEB-INF/lib de votre contexte.
OriginalL'auteur duffymo
J'ai eu le même problème lorsque vous essayez d'utiliser ojdbc7.jar avec tomcat 8.0.20 sur oracle jdk 8_31.
J'ai mis le ojdbc7.jar dans $CATALINA_BASE/lib comme suggéré ici : http://tomcat.apache.org/tomcat-8.0-doc/jndi-datasource-examples-howto.html
et puis java attendu du prestataire de services de mécanisme pour enregistrer le pilote à l'aide de tomcat "commun" chargeur de classe, mais il ne fonctionne pas et le pilote n'est pas inscrit.
Après un peu de débogage, Il semble que tomcat JreMemoryLeakPreventionListener initialise le DriverManager du "système" chargeur de classe et non de la "commune" chargeur de classe (à partir de tomcat code) :
Le problème ici est que le système de chargeur de classes (dans mon cas, oracle du Lanceur$AppClassLoader) a la suite de classpath :
Depuis ojbc7.jar n'est pas dans ce chemin de classe, aucun fournisseur de services sera découvert par le DriverManager, de sorte que votre chauffeur ne peut être inscrit de façon explicite depuis le scan est fait uniquement à partir d'un bloc statique lorsque la classe DriverManager est chargé (ce qui est, il est fondamental d'faille).
Ma première idée pour résoudre ce fut pour ajouter le ojdbc le bocal pour le système de chargeur de classe classpath dans de tomcat $CATALINA_BASE/bin/setenv.sh comme :
Avec cela, le pilote est enregistré en utilisant le fournisseur de service de mécanisme de la JreMemoryLeakPreventionListener invocation en utilisant le système de chargeur de classe.
Vous devez être très prudent de ne pas porter les ojdbc pilote dans votre webapp du chargeur de classe (en ayant ojdbc dans votre WEB-INF/lib du dossier par exemple) que ceux des classes ont la priorité sur ceux du parent chargeurs de classes. C'est un peu complexe, mais le DriverManager elle-même peut entraîner et d'enregistrement supplémentaire du pilote à partir de la webapp de chargeurs de classes lors de l'appel de la Classe.forName à l'aide de l'appelant chargeur de classe parce qu'il connait le nom de la classe à partir de l'enregistrement au cours du démarrage.
OriginalL'auteur mryan