IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JDBC Java Discussion :

ojdbc14.jar où placer ce fichier ?


Sujet :

JDBC Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 19
    Points : 8
    Points
    8
    Par défaut ojdbc14.jar où placer ce fichier ?
    bonjour,

    Actuellement sur notre serveur Tomcat, des contextes tournent et se connectent sans soucis à nos bases oracles 10g (et 9.2).

    Nous venons de poser LE nouveau contexte est ce dernier refuse de charger les drivers jdbc ... OR si nous mettons le fichier ojdbc14.jar dans le repertoire $CATALINA_HOME/common/lib ..le driver monte !!! et uniquement si on le met ici ...

    car ce fichier .jar se trouve bien sous : <context_appli>/WEB-INF/lib/
    Mais il n'est pas appellé !

    Ou les développeurs auraient-ils pu mettre ce chemin en dur dans leur code ???
    car nous ne mettons aucune librairies sous le CATALINA_HOME (c'est une norme)

    Merci de vos lumières de développeur , un chti du système qui doit debuggé le code ... java

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    les driver sql, qu'il s'agisse d'oracle ou autre, il vaut mieux les placer dans common/lib. Pourquoi? Parce qu'il s'enregistrent automatiquement auprès de java.sql.DriverManager lors de leur chargement. Imaginons maintenant que tu aie cette structure:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
     
          Bootstrap
              |
           System
              |
           Common
          /      \
     Catalina   Shared
                 /   \
            Webapp1  Webapp2 ... 
                |         |
            Ojdbc14(A) Ojdbc14(B)
    Lors du chargement d'un driver jdbc, celui-ci va toujours s'enregistrer auprès de java.sql.DriverManager et une référence va se créer allant de system(contenant le package java.sql) vers Webapp1. Lors du chargement de webapp2, aucune nouvelle référence ne se créera, car le driver est déjà enregistré.
    Le premier problème que l'on constate, c'est cette référence. Si on décharge Webapp1, la référence reste, empechant le garbage collect de webapp1 -> memory leak.

    Deuxième problème, si Webapp2 ne fait pas appel à des datasources, mais fait directement appel à DriverManager.getConnection("jdbc:oracle:thin:@server:6969:mydb",properties), elle utilisera le driver de Webapp1, qui pourrait de surcroit foirer si webapp1 a été rechargée entre temps (le driver utilisé ferait alors partie d'un classloader déchargé, dans lequel tomcat lance délibérément des ThreadDeathException).

    Plusieurs raisons donc de préférer mettre un point central avec les drivers jdbc, çà évite le mélange de contexte.

    Voilà pour la théorie Dans ton cas, il faudrait plus de précisions, si tu veux absolument éviter common/lib, afin de comprendre comment résoudre autrement. Pourrais-tu nous dire quel message d'erreur tu as?

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 19
    Points : 8
    Points
    8
    Par défaut
    voici le message d'erreur que nous avons :

    Cannot load JDBC driver class 'Oracle.jdbc.driver.OracleDriver'

    et ce dernier disparait si nous plaçons le ojdbc14.jar dans $CATALINA_HOME/common/lib

    Ou les dev. paramétrent t'ils l'appel de cette librairie ? dans quel .xml ?
    (ils ont struts , hibernate)

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    :s pas de stacktrace? Sinon, les lib se mettent dans WEB-INF/lib d'habitude. Sans stacktrace, difficile de voir quel classloader a été impliqué.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 19
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    :s pas de stacktrace? Sinon, les lib se mettent dans WEB-INF/lib d'habitude. Sans stacktrace, difficile de voir quel classloader a été impliqué.
    ben oui on demande que tout soit mis dans/WEB-INF/lib ... du contexte pour que chque contexte tourne dans avec ses lib propres (versionning etc)

  6. #6
    Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    143
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 143
    Points : 69
    Points
    69
    Par défaut
    Au sein d'une architecture distribuée, j'ai des applications web fonctionnant sous Tomcat 5.5.

    Aujourd'hui ces applicatifs pointent vers des bases de données Oracle 8i via une connection JDBC utilisant la librairie classes12.jar placée dans le common/lib du serveur Tomcat.

    Progressivement, ces applicatifs vont pointer vers des bases Oracle 10g, nous avons choisi d'utiliser la librairie ojdbc14.jar.

    Ma question est de savoir s'il est possible de faire cohabiter les deux drivers dans le common/lib du serveur Tomcat ?

    Ou si c'est plus sûr que chaque webapp embarque sa propre librairie et que l'on garde le lien symbolique vers le classes12.jar ?

  7. #7
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    tu pourra pas faire cohabiter les deux driver, car, malheureusement, dans l'architecture java, les driver sont enregistrés dans une place centre de java.sql. comme ce package dépend d'un classloader commun à toutes les webapp, tout chargement de driver est automatiquement visible pour toutes les webapps. Comme le choix du driver se fait par analyse de la string de connection, ce sera d'office le driver enregistré qui sera pris. classes12 ou ojdbc suivant l'ordre de chargement.

    Normalement, ojdbc14 dialogue sans problème avec du oracle 8, alors pourquoi conserver ce classes12 qui date des dinausores... ?

  8. #8
    Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    143
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 143
    Points : 69
    Points
    69
    Par défaut
    C'est justement ce dont à quoi j'ai pensé entre temps.

    En effet, ojdbc14 dialogue sans problème avec du Oracle 8, on a d'ailleurs des applications qui attaquent simultanément des schémas 10g et 8i.

    Y a t-il une conséquence en terme de performance si on place le driver dans le common/lib et qu'il est déjà positionné dans chaque webapp ?

    Merci.

  9. #9
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    retire le des webapp, ça peut poser des problèmes de classloader leak lors des redéploiement ou des stop/start de webapps

  10. #10
    Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    143
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 143
    Points : 69
    Points
    69
    Par défaut
    Et si on l'embarque dans chaque webapp sans le mettre dans le common/lib, y a t-il des risques particuliers ?

  11. #11
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    regarde mon post précédent pour les risque. Rajoute à ca que chaque webapp profitera d'un driver jdbc dont elle ne sait pas d'ou il viens. Mettre les drivers jdbc dans les webapp, je ne recommande pas.

Discussions similaires

  1. Réponses: 3
    Dernier message: 18/02/2005, 10h05
  2. [Info]où placer un fichier resource.properties
    Par tic42 dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 19/08/2004, 09h35
  3. [jar] Comment modifier un fichier jar
    Par newfsch dans le forum JBuilder
    Réponses: 5
    Dernier message: 18/07/2004, 14h25
  4. [TOMCAT][XML] Ou placer les fichiers XML ?
    Par kitov dans le forum Tomcat et TomEE
    Réponses: 5
    Dernier message: 01/06/2004, 14h29
  5. [Jar]comment creer un fichier JAR?
    Par ed_hunter dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 24/05/2004, 11h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo