在我的server.xml中,我正在定义一个资源:
<Resource name="global" auth="Container" type="javax.sql.DataSource"
maxTotal="100" maxIdle="30" maxWaitMillis="10000"
username="user" password="betterThanThis"
factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
driverClassName="org.apache.derby.jdbc.EmbeddedDriver"
url="jdbc:derby:memory:test;create=true"/>
在我的webapp context.xml中,我正在链接它:
<ResourceLink name="local"
auth="Container"
global="global"
type="javax.sql.DataSource" />
在我的web.xml中我引用它
<resource-ref>
<res-ref-name>local</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
在我的代码中,我正在使用它
DataSource ds = InitialContext.doLookup("java:/comp/env/local");
ds.getConnection();
最后一行抛出异常:
java.sql.SQLException: Cannot create JDBC driver of class '' for connect URL 'null'
at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createConnectionFactory(BasicDataSource.java:2167) ~[tomcat8-dbcp-8.5.14.jar:8.5.14]
at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createDataSource(BasicDataSource.java:2037) ~[tomcat8-dbcp-8.5.14.jar:8.5.14]
at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.getConnection(BasicDataSource.java:1543) ~[tomcat8-dbcp-8.5.14.jar:8.5.14]
问题:当我在资源上指定org.apache.tomcat.dbcp.dbcp2
时,为什么factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
包中的类会抛出错误?
这不是一个缺少jar的问题,因为我可以在tomcat的日志中看到Derby init。我不认为这是一个命名问题,因为当我更改InitialContext.doLookup("java:/comp/env/local")
中的名称时,我收到命名错误。
编辑:请求的完整堆栈跟踪:
java.sql.SQLException: No suitable driver
at java.sql.DriverManager.getDriver(DriverManager.java:315) ~[na:1.8.0_151]
at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createConnectionFactory(BasicDataSource.java:2151) ~[tomcat8-dbcp-8.5.14.jar:8.5.14]
... 8 common frames omitted
Wrapped by: java.sql.SQLException: Cannot create JDBC driver of class '' for connect URL 'null'
at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createConnectionFactory(BasicDataSource.java:2167) ~[tomcat8-dbcp-8.5.14.jar:8.5.14]
at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createDataSource(BasicDataSource.java:2037) ~[tomcat8-dbcp-8.5.14.jar:8.5.14]
at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.getConnection(BasicDataSource.java:1543) ~[tomcat8-dbcp-8.5.14.jar:8.5.14]
at com.moosemorals.webmail.Database.getConnection(Database.java:46) ~[classes/:na]
at com.moosemorals.webmail.Database.getAccountForAlias(Database.java:55) ~[classes/:na]
at com.moosemorals.webmail.authserver.PostfixLookupServer.lookup(PostfixLookupServer.java:61) ~[classes/:na]
at com.moosemorals.webmail.authserver.PostfixLookupServer.execute(PostfixLookupServer.java:40) ~[classes/:na]
at com.moosemorals.webmail.authserver.GenericServer$Client.run(GenericServer.java:151) [classes/:na]
答案 0 :(得分:0)
它显示“没有合适的驱动程序”,因此您可能缺少一些derby jdbc jar。可能需要将其放入Tomcat lib。