java - 尝试在 tomcat 中进行数据源 JNDI 查找时出现空指针异常

标签 java jakarta-ee

我尝试通过DatabaseSource JNDI查找建立数据库连接。我按照Tomcat网站中的说明进行操作,如下所示

我将资源添加到 server.xml

 <Resource name="jdbc/myDB" auth="Container"
              type="javax.sql.DataSource"/> 
<ResourceParams name="jdbc/myDB">
  <parameter>
    <name>factory</name>
    <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
  </parameter>
  <parameter>
    <name>driverClassName</name>
    <value>oracle.jdbc.OracleDriver</value>
  </parameter>
  <parameter>
    <name>url</name>
    <value>jdbc:oracle:thin:@111.111.111.111:1234:DBNME</value>
  </parameter>
  <parameter>
    <name>username</name>
    <value>Dobby</value>
  </parameter>
  <parameter>
    <name>password</name>
    <value>pwd</value>
  </parameter>
  <parameter>
    <name>maxActive</name>
    <value>20</value>
  </parameter>
  <parameter>
    <name>maxIdle</name>
    <value>10</value>
  </parameter>
  <parameter>
    <name>maxWait</name>
    <value>-1</value>
  </parameter>
</ResourceParams>

web.xml

 <resource-ref>
    <description>MY DataBase</description>
    <res-ref-name>jdbc/myDB</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
    </resource-ref>

在代码中

Context initContext = new  InitialContext();
            DataSource ds = (DataSource)initContext.lookup("java:/comp/env/jdbc/myDB");
            Connection con =  ds.getConnection();   

我收到此错误

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 com.sample.XML.doGet(XML.java:39)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:668)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:770)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.NullPointerException
    at sun.jdbc.odbc.JdbcOdbcDriver.getProtocol(Unknown Source)
    at sun.jdbc.odbc.JdbcOdbcDriver.knownURL(Unknown Source)
    at sun.jdbc.odbc.JdbcOdbcDriver.acceptsURL(Unknown Source)
    at java.sql.DriverManager.getDriver(Unknown Source)
    at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createConnectionFactory(BasicDataSource.java:1437)
    ... 21 more

我的 tomcat 库中有 OJDBC14.jar。

我在 stackoverflow 中发现了同样的问题,但那里提供的解决方案对我不起作用。这就是我再次发布它的原因。

最佳答案

尝试:

datasource = (DataSource) initialContext.lookup( "java:/comp/env/jdbc/myDB" );

正如您的资源名称所示jdbc/myDB

关于java - 尝试在 tomcat 中进行数据源 JNDI 查找时出现空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15406486/

相关文章:

java - 如何在 log4j2 中实现日期模式转换器

java - JavaEE 8 教程,在 hello1 项目上部署失败

Java - 外部可见的静态类私有(private)字段

java - 延迟来自客户端的并发请求,直到创建 HttpSession

java - 同一服务器上的多个 java webapp

java - 是否有任何好的 J2EE 值列表处理程序模式实现?

java - 在运行时重新加载authorizers.xml文件

java - Spring Integration AMQP - 消息偶尔未确认,需要超时吗?

java - 异常 : mockito wanted but not invoked, 实际上与此模拟的交互为零

java - 使用 Libgdx 进行高效 3D block 渲染