Domanda

Ho avuto difficoltà a far funzionare un'origine dati JNDI. Seguendo le istruzioni a http://tomcat.apache.org/tomcat-5.5- doc / JNDI-risorse-HOWTO.html Mi sto collegando a Oracle con Tomcat5.5 Posso collegarmi bene se uso una connessione JDBC diretta nel codice.

Ecco cosa ho: nel mio 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"
/>

ecco cosa c'è in 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>

ecco il codice:

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

Ho provato molte configurazioni diverse e ho avviato un nuovo progetto semplice per assicurarmi che nessun file jar aggiuntivo fosse in conflitto o qualcosa del genere, ma.

qualcuno può vedere qualcosa che non sembra giusto?

l'errore sul server indica una NullPointerException quando tento di utilizzare l'oggetto conn. mi scusi, prima offre: org.apache.tomcat.dbcp.dbcp.SQLNestedException: impossibile creare PoolableConnectionFactory (eccezione Io: l'adattatore di rete non è riuscito a stabilire la connessione)

È stato utile?

Soluzione

L'URL del database mi sembra rotto.

Prova:

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

Altri suggerimenti

" L'adattatore di rete non è riuscito a stabilire la connessione "

Questo è il tuo indizio. Non può raggiungere il database. Verifica che il tuo server e la tua porta siano corretti, controlla che siano raggiungibili dal tuo computer.

Sto rispondendo ai commenti nella risposta di Sebastian.

Quando vedo org.apache.commons.dbcp, significa che Tomcat sta utilizzando la libreria di pool di connessioni al database Apache Commons integrata anziché la libreria nel driver JDBC Oracle.

Il driver Oracle JDBC che non si trova nella directory comune è in genere il primo problema che cerco di risolvere. Sembra che questo non sia un tuo problema.

In secondo luogo, all'avvio dell'applicazione, se si è verificato un problema durante la creazione dell'origine dati JNDI, Tomcat potrebbe utilizzare la libreria Commons. Questo potrebbe essere il tuo caso a causa dell'URL del database errato. Correggere context.xml o il file copiato / rinominato nella directory conf / Catalina / localhost potrebbe non risolvere il problema senza arrestare e riavviare Tomcat. Quindi, consiglierei di interrompere e riavviare Tomcat e vedere se questo risolve il problema.

Un'ultima nota, il link fornito è per l'impostazione della libreria di Common. Mi ci è voluto un po 'per capirlo. Di seguito è riportato un esempio di una delle mie definizioni dell'origine dati Oracle JNDI.

  <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"/>

Non sono sicuro che il tipo contenga nel tuo caso e credo che l'utente e la password siano ancora attributi del tag Resource. Quello che voglio sottolineare è l'attributo connectionCacheProperties. Qui è dove specificare si specificano le connessioni massima e minima. Vai a Proprietà cache di connessione per maggiori informazioni su questo attributo.

Spero che questo aiuti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top