2012-02-17 25 views
7

Ho provato praticamente tutto quello che posso trovare, se qualcuno è in grado di aiutarmi, sarò eternamente grato (e molto più libero nei miei tempi).Impossibile creare il driver JDBC di classe "" per l'URL di connessione "null": Driver JDBC Tomcat & SQL Server

Fondamentalmente, ho un errore di Tomcat 7.0 (sia in fase di esecuzione all'interno di Eclipse e via startup.bat) che dice questa volta che i dati comincia ad essere accessibili da mia applicazione web dinamici:

Cannot create JDBC driver of class '' for connect URL 'null' 
java.lang.NullPointerException 
at sun.jdbc.odbc.JdbcOdbcDriver.getProtocol(JdbcOdbcDriver.java:507) 
at sun.jdbc.odbc.JdbcOdbcDriver.knownURL(JdbcOdbcDriver.java:476) 
at sun.jdbc.odbc.JdbcOdbcDriver.acceptsURL(JdbcOdbcDriver.java:307) 

ho la file sqljdbc4.jar nella mia directory tomcat \ lib. Ho anche provato a inserire questo nel mio WEB-INF/lib e anche nelle mie directory lib di JDK. Non penso che sqljdbc.jar funzioni, in quanto è destinato alle vecchie installazioni JDK/JRE rispetto alle mie.

Ho sentito che i file context.xml e web.xml sono fondamentali per far funzionare tutto questo.

web.xml frammento:

<resource-ref> 
<description>LBI DB Connection</description> 
<res-ref-name>jdbc/LBIDB</res-ref-name> 
<res-type>javax.sql.DataSource</res-type> 
<res-auth>Container</res-auth> 
<res-sharing-scope>Shareable</res-sharing-scope> 
</resource-ref> 
<resource-ref> 
<description>OR DB Connection</description> 
<res-ref-name>jdbc/ORDB</res-ref-name> 
<res-type>javax.sql.DataSource</res-type> 
<res-auth>Container</res-auth> 
<res-sharing-scope>Shareable</res-sharing-scope> 
</resource-ref> 

context.xml scheda

<Context> 
<!-- Default set of monitored resources --> 
<WatchedResource>WEB-INF/web.xml</WatchedResource> 
<Resource name="jdbc/LBIDB" auth="Container" 
type="javax.sql.DataSource" username="***" password="***" driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver" 
url="jdbc:sqlserver:localhost;DatabaseName=YYBackOffice;SelectMethod=cursor;" 
maxActive="8" maxIdle="4"/> 

<Resource name="jdbc/ORDB" auth="Container" 
type="javax.sql.DataSource" username="***" password="***" driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver" 
url="jdbc:sqlserver:localhost;DatabaseName=XXBackOffice;SelectMethod=cursor;" 
maxActive="8" maxIdle="4"/> 

Il contesto ha ancora una linguetta di chiusura, alla fine.

Si prega di aiuto! Se avete bisogno di ulteriori informazioni, fatemelo sapere. Inoltre, non sono sicuro di quale context.xml debba essere modificato, ci sono 2 nelle directory di Tomcat, uno nella cartella/conf e uno nella cartella webapps/appname/META-INF. Scusa se suona come se fossi un po 'un novellino, è perché lo sono!

Inoltre, ho visto molti diversi esempi di url = "..." parte del context.xml, alcuni dei quali includono numeri di porta. Ho provato diverse cose online, ma niente sembra funzionare (non aiuta nulla online è il mio ambiente dati esatto, suppongo anche che sia difficile che questa app interroghi due DB diversi a volte determinate).

Pensieri?

risposta

7
  1. Il context.xml nella cartella dell'applicazione web META-INF avrà la precedenza su quella nella directory/conf, che è in realtà solo un generico predefinito.

  2. Il driver open source JTDS SQL Server è decisamente migliore di quello di Microsoft. A meno che non ci sia un motivo imperativo, usalo invece. L'unica ragione per metterlo nella cartella tomcat/lib è se stai dichiarando un GlobalNamingResource per il database nel tuo server.xml, altrimenti puoi semplicemente metterlo nella cartella/lib dell'applicazione.

  3. L'URL JDBC per jTDS è: jdbc:jtds:sqlserver://hostname/databasename

  4. La classe driver di connessione per jTDS è: net.sourceforge.jtds.jdbc.Driver

+0

Grazie mille per questo chiarimento, avevo sentito tante cose online anche con server.xml e utilizzando risorse globali, problemi context.xml, ecc. Che possono creare confusione per un nuovo arrivato. Scommetto che questo mi aiuterà a risolvere il mio problema. – aohm1989

+0

FYI, la modifica al driver JTDS SQL Server e l'utilizzo della classe URL/driver JDBC sembravano aver funzionato. Non posso dirlo con certezza, ma sembra che gli errori siano andati via! Si scopre che questa app web ha alcuni altri problemi che non erano correlati a questo, penso, ma questo aiuta ancora una tonnellata per i miei scopi. Grazie mille. – aohm1989

3

in Tomcat 6.0.36 è esattamente al contrario:

CATALINA_HOME/conf/Catalina/your_host/context.xml

prenderà presedence su quello da

YourApplication/WebContent/META-INF/

Dopo aver messo i dati seguente frammento di codice all'interno del contesto-Tag in Catalina/your_host ha funzionato nel mio caso:

<WatchedResource>WEB-INF/web.xml</WatchedResource> 
    <Resource name="jdbc/your_db" auth="Container" type="javax.sql.DataSource" 
     maxActive="50" maxIdle="30" maxWait="10000" 
     username="your_usr" password="your_pwd" 
     driverClassName="com.mysql.jdbc.Driver" 
     url="jdbc:mysql://your_host:3306/your_db"/> 

Vedere documentazione Tomcat su http://tomcat.apache.org/tomcat-6.0-doc/config/context.html

+0

Questo ha funzionato per me. Il mio setup è Eclipse con un plugin Tomcat, per il debug. Per la configurazione iniziale, Eclipse inserisce un file 'context.xml' di base in 'CATALINA_HOME/conf/Catalina/MY_MAGIC_APP/context.xml'. Forse ho fatto qualcosa di sbagliato, ma il plugin Eclipse-Tomcat non ha rilevato o scoperto il mio reale file 'META-INF/context.xml', che contiene le informazioni di configurazione necessarie. Ho sostituito il file 'context.xml' di base con il vero file' context.xml' e tutto va bene. – clafonta

Problemi correlati