2011-03-01 63 views
5

嗨 當我嘗試使用JNDI連接到數據源,我收到此錯誤:org.apache.tomcat.dbcp.dbcp.SQLNestedException:不能「的連接網址「空」創建一流的」 JDBC驅動程序

[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 

我有使用mysql-connector-java的5.1.15-bin.jar,activation.jar,然後在了mail.jar的tomcat的lib diectory和Web應用程序在tomcat的webapps文件夾中滾動。

我一直無法理解我在這裏做錯了什麼。有人能幫我理解我在這裏錯過了什麼嗎?

謝謝。

謝謝。

回答

1

我剛剛通過了一個類似的錯誤,事實證明我的context.xml文件略有損壞。我認爲這很可能是問題所在。

我在比較我和你之間的context.xml文件的建議,我說試試這個

driverClass 

在地方的

driverClassName 
+1

當我發現錯誤時,我正在做一些非常愚蠢的事情。就像使用'Context.xml'而不是'context.xml'。 – skip 2011-07-02 04:16:23

0

我已經解決了這個問題,改變了進口參考(以我的情況)來源:

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

import org.apache.commons.dbcp.BasicDataSource; 

我的錯誤是由於我總是使用CRTL + o作爲導入引用而產生的,當我進行導入時,我的引用中沒有.jar。 我希望這可能對其他人有用。

0

在我的情況下幫助以下變化:在APPLICATION_PATH /的WebContent/META_INF /上下文。XML

舊代碼:

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

新的代碼:

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

JDBC-Driver類被放置在路徑下 /user_path/Tomcat的INSTANCE_PATH/web應用/ APP_NAME/WEB-INF/lib/com.mysql.jdbc_5.1.5.jar

相關問題