Question

J'ai eu du mal à faire fonctionner une source de données JNDI. Suivre les instructions à http://tomcat.apache.org/tomcat-5.5- doc / jndi-resources-howto.html Je me connecte à Oracle avec Tomcat5.5 Je peux me connecter correctement si j'utilise une connexion JDBC directe dans le code.

Voici ce que j'ai: dans mon META-INF / context.xml:

<Resource name="jdbc/mydb" auth="Container"
          type="javax.sql.DataSource" driverClassName="oracle.jdbc.OracleDriver"
          url="jdbc:oracle:thin:theserver:1521/mydb"
          username="user" password="password" maxActive="20" maxIdle="10"
/>

voici ce qu'il y a dans web.xml:

<resource-ref>
  <description>please work</description>
  <res-ref-name>jdbc/mydb</res-ref-name>
    <res-type>
    javax.sql.DataSource
    </res-type>
    <res-auth>Container</res-auth>
  </resource-ref>

voici le code:

   Connection conn = null;
    try{
    InitialContext ic = new InitialContext();
    DataSource ds = (DataSource) ic.lookup("java:comp/env/jdbc/mydb");
    conn = ds.getConnection();
    } catch ....... etc.

J'ai essayé de nombreuses configurations différentes et lancé un nouveau projet simple pour éviter tout fichier JAR supplémentaire ou autre, mais

.

quelqu'un peut-il voir quelque chose qui ne va pas?

l'erreur sur le serveur indique une exception NullPointerException lorsque j'essaie d'utiliser l'objet conn. excusez-moi, il propose d'abord: org.apache.tomcat.dbcp.dbcp.SQLNestedException: impossible de créer PoolableConnectionFactory (exception Io: l'adaptateur réseau n'a pas pu établir la connexion)

Était-ce utile?

La solution

L'URL de la base de données me semble cassé.

essayez:

jdbc:oracle:thin:@theserver:1521/mydb

Autres conseils

"La carte réseau n'a pas pu établir la connexion"

.

Ceci est votre indice. Il ne peut pas atteindre la base de données. Vérifiez que votre serveur et votre port sont corrects, qu'ils sont accessibles depuis votre ordinateur.

Je réponds aux commentaires de la réponse Sebastian.

Lorsque je vois org.apache.commons.dbcp, cela signifie que Tomcat utilise la bibliothèque intégrée de regroupement de connexions de base de données Apache Commons à la place de la bibliothèque du pilote JDBC Oracle.

Le pilote JDBC Oracle qui ne se trouve pas dans le répertoire commun est généralement le premier problème que je tente de résoudre. Il semble que ce ne soit pas votre problème.

Deuxièmement, au démarrage de l'application, s'il y avait un problème lors de la création de la source de données JNDI, Tomcat peut utiliser la bibliothèque Commons. Cela peut être votre cas en raison de votre mauvaise URL de base de données. La correction de context.xml ou du fichier copié / renommé dans le répertoire conf / Catalina / localhost risque de ne pas résoudre le problème sans arrêter et redémarrer Tomcat. Je vous recommande donc d’arrêter et de redémarrer Tomcat pour vérifier si le problème est résolu.

Une dernière remarque, le lien que vous indiquez concerne la configuration de la bibliothèque du Commun. Il m'a fallu un certain temps pour comprendre cela. Vous trouverez ci-dessous un exemple de l'une de mes définitions de source de données JNDI Oracle.

  <Resource auth="Container" name="jdbc/mydb" 
    type="oracle.jdbc.xa.client.OracleXADataSource"
    driverClassName="oracle.jdbc.driver.OracleDriver"
    factory="oracle.jdbc.pool.OracleDataSourceFactory"
    url="jdbc:oracle:thin:@theserver:1521:mydb" 
    connectionCachingEnabled="true"
    connectionCacheProperties="{InactivityTimeout=1800,PropertyCheckInterval=300,MaxStatementsLimit=125,ValidateConnection=true}"
    implicitCachingEnabled="true"/>

Je ne sais pas si le type compte dans votre cas et je pense que l'utilisateur et le mot de passe sont toujours les attributs de la balise Resource. Ce que je veux souligner, c'est l'attribut connectionCacheProperties. Voici où spécifiez vous spécifiez les connexions maximum et minimum. Accédez à Propriétés du cache de connexion pour plus d'informations sur cet attribut.

J'espère que cela vous aidera.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top