2011-03-01 19 views
5

Hola Cuando intento conectar a la fuente de datos utilizando JNDI, estoy consiguiendo este error:org.apache.tomcat.dbcp.dbcp.SQLNestedException: No se puede crear el controlador JDBC de clase '' para la dirección URL de conexión 'nulo'

[org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null' 
    at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createConnectionFactory(BasicDataSource.java:1452) 
    at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1371) 
    at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044) 
    at org.apache.roller.weblogger.business.DatabaseProvider.getConnection(DatabaseProvider.java:179) 
    at org.apache.roller.weblogger.business.DatabaseProvider.<init>(DatabaseProvider.java:141) 
    at org.apache.roller.weblogger.business.startup.WebloggerStartup.prepare(WebloggerStartup.java:171) 
    at org.apache.roller.weblogger.ui.core.RollerContext.contextInitialized(RollerContext.java:138) 
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4205) 
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4704) 
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:799) 
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:779) 
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:601) 
    at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1079) 
    at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:1002) 
    at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:506) 
    at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1315) 
    at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:324) 
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:142) 
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1061) 
    at org.apache.catalina.core.StandardHost.start(StandardHost.java:840) 
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053) 
    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463) 
    at org.apache.catalina.core.StandardService.start(StandardService.java:525) 
    at org.apache.catalina.core.StandardServer.start(StandardServer.java:754) 
    at org.apache.catalina.startup.Catalina.start(Catalina.java:595) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289) 
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414) 
Caused by: 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) 
    ... 30 more] 

context.xml

<Context path="/roller" docBase="c:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\roller" debug="0"> 
    <Resource name="jdbc/rollerdb" auth="Container" 
     type="javax.sql.DataSource" 
     driverClassName="com.mysql.jdbc.Driver" 
     url="jdbc:mysql://localhost:3306/rollerdb?autoReconnect=true&amp;useUnicode=true&amp;characterEncoding=utf8-&amp;mysqlEncoding=utf8" 
     username="roller_user" 
     password="password" 
     maxActive="20" maxIdle="3" removeAbandoned="true" 
     maxWait="3000" 
    /> 
    <Resource name="mail/Session" 
     auth="Container" 
     type="javax.mail.Session" 
     username="[email protected]" 
     password="password" 
     mail.debug="false" 
     mail.user="[email protected]" 
     mail.password="password" 
     mail.smtp.from="[email protected]" 
     mail.transport.protocol="smtp" 
     mail.smtp.port="465" 
     mail.smtp.host="smtp.gmail.com" 
     mail.smtp.auth="true" 
     mail.smtp.starttls.enable="true" 
     mail.smtp.socketFactory.port="465" 
     mail.smtp.socketFactory.class="javax.net.ssl.SSLSocketFactory" 
     mail.smtp.socketFactory.fallback="false" 
    /> 
</Context> 

web.xml

<web-app .. > 
... 
    <!-- jndi resources --> 
    <resource-ref> 
     <res-ref-name>jdbc/rollerdb</res-ref-name> 
     <res-type>javax.sql.DataSource</res-type> 
     <res-auth>Container</res-auth> 
    </resource-ref> 

    <resource-ref> 
     <res-ref-name>mail/Session</res-ref-name> 
     <res-type>javax.mail.Session</res-type> 
     <res-auth>Container</res-auth> 
    </resource-ref> 

</web-app> 

roller-custom.properties

installation.type=auto 
database.configurationType=jndi 
database.jndi.name=jdbc/rollerdb 
mail.configurationType=jndi 
mail.jndi.name=mail/Session 

que tengo mysql-connector-java-5.1.15-bin.jar, activation.jar y mail.jar en diectory lib de Tomcat y la aplicación web rodillo en la carpeta webapps de tomcat.

No he podido entender lo que estoy haciendo mal aquí. ¿Alguien podría ayudarme a entender qué es lo que echo de menos aquí?

Gracias.

Gracias.

Respuesta

1

Acabo de recibir un error similar y resulta que mi archivo context.xml fue ligeramente mutilado. Creo que esto es donde reside el problema.

Mi sugerencia en la comparación de archivos context.xml entre yo y tú, digo tratar este

driverClass 

En lugar de

driverClassName 
+1

Estaba haciendo algo muy tonto cuando recibí ese error. Algo así como usar 'Context.xml' en lugar de' context.xml'. – skip

0

He resuelto este problema cambiando la referencia de importación (en mi caso) de:

import org.apache.tomcat.dbcp.dbcp.BasicDataSource; 

a

import org.apache.commons.dbcp.BasicDataSource; 

Mi error se generó porque siempre uso CRTL + o para las referencias de importación, y cuando hice la importación no tenía el .jar en mis referencias. Espero que esto pueda ser útil para otros.

0

en mi caso ayudaron siguientes cambios: en APPLICATION_PATH/WebContent/META_INF/contexto.xml

código antiguo:

<resource name="jdbc/internships_db" auth="Container" type="javax.sql.DataSource"> 
    <param name="username" value="my_user" /> 
    <param name="password" value="my_password" /> 
    <param name="url" value="jdbc:mysql://localhost:3306/internships_db" /> 
</resource> 

nuevo código:

<Resource name="jdbc/internships_db" 
    auth="Container" 
    type="javax.sql.DataSource" 
    maxActive="100" 
    maxIdle="30" 
    username="my_user" 
    maxWait="10000" 
    driverClassName="com.mysql.jdbc.Driver" 
    password="my_password" 
    url="jdbc:mysql://localhost:3306/internships_db"/> 

clase JDBC conductor se coloca debajo de la ruta /user_path/tomcat-vía_acceso_instancia/webapps/nombre_apl/WEB-INF/lib/com.mysql.jdbc_5.1.5.jar

Cuestiones relacionadas