java - forname - drivermanager.getconnection ejemplo
No se puede crear el controlador JDBC de la clase '''' para conectar la URL ''nulo'' (3)
Para hacer que las 3 aplicaciones web usen la misma fuente de datos, tuve que mover todas mis entradas de <Resource>
de la carpeta META-INF / context.xml a la carpeta $ CATALINA_BASE / conf / context.xml del servidor. No es una gran solución, pero funciona.
Estoy usando Tomcat 7.0.12 y recibiendo este error cada vez que intenté acceder a un datasource JNDI que se conecta a un db postgresql a través de una página .jsp en una aplicación web llamada ''ROOT'':
SEVERE: Servlet.service() for servlet [jsp] in context with path [] threw exception
[java.lang.RuntimeException: Cannot create JDBC driver of class '''' for connect URL ''null''] with root cause
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)
at java.sql.DriverManager.getDriver(DriverManager.java:253)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createConnectionFactory(BasicDataSource.java:1437)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1371)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)
El controlador JDBC postgresql está en mi carpeta CATALINA / lib.
Aquí está mi META-INF / context.xml:
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<Resource name="jdbc/webdbro" auth="Container" type="javax.sql.DataSource"
driverClassName="org.postgresql.Driver" url="jdbc:postgresql://127.0.0.1:5432/webdb"
username="webdbro" password="pass" maxWait="-1" removeAbandoned="true" removeAbandonedTimeout="30"/>
<Resource name="jdbc/webdbrw" auth="Container" type="javax.sql.DataSource"
driverClassName="org.postgresql.Driver" url="jdbc:postgresql://127.0.0.1:5432/webdb"
username="webdbrw" password="pass" maxWait="-1" removeAbandoned="true" removeAbandonedTimeout="30"/>
<Resource name="jdbc/shadowdbro" auth="Container" type="javax.sql.DataSource"
driverClassName="org.postgresql.Driver" url="jdbc:postgresql://127.0.0.1:5432/shadowdb"
username="shadowdbro" password="pass" maxWait="-1" removeAbandoned="true" removeAbandonedTimeout="30"/>
</Context>
Aquí está mi WEB-INF / web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
<display-name>ROOT</display-name>
<resource-ref>
<description>Read only webdb connector.</description>
<res-ref-name>jdbc/webdbro</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
<resource-ref>
<description>Read write webdb connector.</description>
<res-ref-name>jdbc/webdbrw</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
<resource-ref>
<description>Read only shadow db connector.</description>
<res-ref-name>jdbc/shadowdbro</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
Lo extraño es que tengo otras 2 aplicaciones web ejecutándose en el mismo servidor Tomcat usando exactamente la misma configuración (web.xml y context.xml) para que puedan usar el método JNDI para conectarse a la base de datos y AMBAS de esas aplicaciones web funcionan perfectamente bien - Puedo consultar y actualizar la base de datos sin problemas o excepciones en esas aplicaciones. TIA ...
Como se explicó anteriormente, una solución es mover las entradas a $ CATALINA_BASE / conf / context.xml
Otro enfoque se describe aquí: http://blogs.agilefaqs.com/2009/11/23/cannot-create-jdbc-driver-of-class-for-connect-url-null/
En particular, "Copie el archivo Context.xml a la carpeta tomcat / conf / Catalina / localhost y <web_app_name>.xml
a <web_app_name>.xml
"
La causa subyacente podría deberse a un problema con los permisos de archivos: "El usuario bajo el cual se ejecutaba el gato no tenía permiso para escribir en estas carpetas. Así que cambiamos la propiedad del grupo de tomcat y la carpeta / etc / tomcat al mismo grupo para a la que pertenecía el usuario de tomcat y mágicamente todo comenzó a funcionar como antes ".
Esta solución me parece más ''limpia'' porque puede tener toda su aplicación web, incluidas las propiedades de conexión de la base de datos, en un archivo .war.
Estaba teniendo el mismo problema y resultó que mi declaración de nombre de <Resource>
en context.xml no coincidía con la definida en el nombre de <resource-ref>
en web.xml.