2012-02-17 15 views
7

He intentado casi todo lo que puedo encontrar, si alguien puede ayudarme, estaré eternamente agradecido (y mucho más libre en mi tiempo).No se puede crear el controlador JDBC de la clase '' para conectar la URL 'nulo': Tomcat & SQL Server Controlador JDBC

Básicamente, tengo un error en Tomcat 7.0 (tanto cuando se ejecuta dentro de Eclipse ya través de startup.bat) que indique que esta vez los datos comienza a ser visitada por mi aplicación web dinámica:

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) 

tengo el archivo sqljdbc4.jar en mi directorio tomcat \ lib. También intenté poner esto en mi WEB-INF/lib, e incluso en mis directorios JDK lib. No creo que sqljdbc.jar funcione, ya que está destinado a instalaciones anteriores de JDK/JRE que las mías.

He oído que los archivos context.xml y web.xml son cruciales para que esto funcione.

Web.xml fragmento:

<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 pestaña

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

El contexto tiene una lengüeta de cierre, con el tiempo.

Por favor ayuda! Si necesita más información, hágamelo saber. Además, no estoy seguro de qué context.xml debe modificarse, hay 2 en los directorios de Tomcat, uno en la carpeta/conf y otro en la carpeta webapps/appname/META-INF. Lo siento si suena como si fuera un novato, ¡eso es porque lo soy!

Además, he visto muchos ejemplos diferentes de la parte url = "..." de context.xml, algunos de ellos con números de puerto. He intentado varias cosas en línea, pero nada parece funcionar (no ayuda nada en línea es mi entorno de datos exacto, también supongo que es un reto que esta aplicación consulte dos bases de datos diferentes en momentos determinados).

¿Pensamientos?

Respuesta

7
  1. El context.xml en la carpeta de su aplicación web META-INF tendrá prioridad sobre el que está en el directorio/conf, que es en realidad un defecto genérico.

  2. El controlador de fuente abierta JTDS SQL Server es mucho mejor que el de Microsoft. A menos que exista una razón imperiosa, utilícela en su lugar. La única razón para ponerlo en su carpeta tomcat/lib es si declara GlobalNamingResource para la base de datos en su server.xml, de lo contrario, puede simplemente ponerlo en la carpeta/lib de su aplicación.

  3. La URL de JDBC para jTDS es: jdbc:jtds:sqlserver://hostname/databasename

  4. La clase de controlador de conexión para jTDS es: net.sourceforge.jtds.jdbc.Driver

+0

Muchas gracias por esta aclaración, había escuchado tantas cosas en línea con server.xml y utilizando recursos globales, problemas context.xml, etc. que puede ser confuso para un recién llegado. Apuesto a que esto me ayudará a resolver mi problema. – aohm1989

+0

Para su información, el cambio al controlador JTDS SQL Server, y el uso de la clase URL/controlador JDBC parecía haber funcionado. No puedo asegurarlo, pero parece que los errores se han ido. Resulta que esta aplicación web tiene algunos otros problemas que no estaban relacionados con esto, creo, pero esto todavía ayuda mucho para mis propios fines. Gracias un montón. – aohm1989

3

En Tomcat 6.0.36 es exactamente al revés:

CATALINA_HOME/conf/Catalina/your_host/context.xml

tendrá presedence sobre el de

YourApplication/WebContent/META-INF/

Después de poner los datos siguiente fragmento dentro del Contexto-Tag en Catalina/your_host funcionó en mi 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"/> 

Ver la documentación de Tomcat en http://tomcat.apache.org/tomcat-6.0-doc/config/context.html

+0

Esto funcionó para mí. Mi configuración es Eclipse con un complemento Tomcat, para la depuración. Para la configuración inicial, Eclipse coloca un archivo básico 'context.xml' en 'CATALINA_HOME/conf/Catalina/MY_MAGIC_APP/context.xml'. Tal vez hice algo mal, pero el complemento Eclipse-Tomcat no detectó ni descubrió el archivo 'META-INF/context.xml' real de mis proyectos, que contiene la información de configuración necesaria. Reemplacé el archivo 'context.xml' básico con el archivo' context.xml' real y todo está bien. – clafonta

Cuestiones relacionadas