无法为连接 URL 'null' Tomcat 9,Oracle 12c,JDK 8,创建 class '' 的 JDBC 驱动程序,

Cannot create JDBC driver of class '' for connect URL 'null' Tomcat 9, Oracle 12c, JDK 8,

我有一个简单的 Web 服务正在尝试打开到数据库的连接。

我正在使用 jax-ws,Oracle 12c 数据库,Tomcat9,Java8.

任何人都可以 post 正确的方法吗?

到目前为止,我已经将 ojdbc7.jar 和 ucp.jar 下载到 $TOMCAT_HOME/lib 目录中。

  1. applicationPath/META-INF/web.xml 是什么?

现在我有以下内容:

  <resource-ref>
    <res-ref-name>jdbc/UCPPool</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
  </resource-ref>
</web-app>
  1. TOMCAT_HOME/conf/server.xml 中的内容?

现在我有以下内容:

<context docbase="demods" path="/demods" reloadable="true">
  <Resource 
       name="jdbc/UCPPool"
       auth="Container"
       factory="oracle.ucp.jdbc.PoolDataSourceImpl"
       type="oracle.ucp.jdbc.PoolDataSource"
       description="Pas testing UCP Pool in Tomcat"
       connectionFactoryClassName="oracle.jdbc.pool.OracleDataSource"
       minPoolSize="2"
       maxPoolSize="5"
       inactiveConnectionTimeout="20"
       user="test"
       password="test"
       url="jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=oracleDB12c)(PORT=1563))(CONNECT_DATA=(SERVICE_NAME=PPS)))"
       connectionPoolName="UCPPool"
       validateConnectionOnBorrow="true"
       sqlForValidateConnection="select 1 from DUAL" />
 </context>
  1. TOMCAT_HOME/conf/context.xml 是什么?

    我现在在这个文件中没有任何内容。

这是我用来设置 JDBC 连接的代码:

         Context ctx = new InitialContext();
         Context envContext = (Context) ctx.lookup("java:comp/env");
         DataSource ds  = (DataSource) envContext.lookup("jdbc/UCPPool");
         Connection conn = null;                         
         try {
             conn = ds.getConnection();
         }
         catch (SQLException e) { 
             return e.getMessage();
         }          

网络服务返回的消息是:

"Cannot create JDBC driver of class '' for connect URL 'null'"

我做错了什么?

提前致谢!

你能看看 github example 并按照它来构建你的 Tomcat 应用程序吗?

好消息,我今天能够在办公室使用它。

这是我所做的:

  1. 我创建了一个 context.xml 文件并将其放在 META-INF/ 内的我的 eclipse 项目中。在 META-INF/context.xml 中,我输入了以下代码:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xml>
<Context> 
<Resource 
        name="jdbc/orcljdbc_ds" 
        auth="Container"
        type="javax.sql.DataSource" 
        driverClassName="oracle.jdbc.OracleDriver"
        username="user1"
        password="password"
        url="jdbc:oracle:thin:@//myoracledb:1563/DEVSID"

/>
</Context>

我没有在 Tomcat context.xml 或 server.xml 文件中放置任何内容,但我认为您可以针对不同的场景(i.e.Shared 具有多个应用程序的数据源 运行 在单个应用程序服务器上)。我也没有在我的 Eclipse 项目中放入任何东西 WEB-INF\web.xml.

我使用以下代码来测试连接:

package planAdminWS;

import javax.jws.WebMethod;
import javax.jws.WebService;

import java.io.PrintWriter;
import java.sql.*;
import javax.sql.*;
import javax.naming.*;

@WebService
public class PlanAdminWS {

    @WebMethod
     public String createPlan(String EIN, String PN)
     {
        return "Creating Plan: " + EIN + "/" + PN;
     }

    @WebMethod
    public String updatePlan(String EIN, String PN) throws NamingException, SQLException {
        // Get a context for the JNDI look up
        DataSource ds = getDataSource();
        Connection conn = null;
        try {
            conn = ds.getConnection();
            if (conn != null) {
                Statement stmt = null;
                ResultSet rs = null;
                String query = "select * from V$version";
                stmt = conn.createStatement();
                rs = stmt.executeQuery(query);
                while (rs.next()) {
                    System.out.println(rs.getString(1));
                    return "Database Version : " + rs.getString(1);
                }
            } else {
                return "Conn is NULL";
            }

        } catch (SQLException e) {
            return e.getMessage();
        }

        return "Could not get DB Version";
    }

     /*
      * Method to create a datasource after the JNDI lookup
      */

      private DataSource getDataSource() throws NamingException {
        Context ctx;
        ctx = new InitialContext();
        Context envContext = (Context) ctx.lookup("java:/comp/env");
        // Look up a data source
        javax.sql.DataSource ds
              = (javax.sql.DataSource) envContext.lookup ("jdbc/orcljdbc_ds");
        return ds;
      }
}

这在 SoapUI 中返回了以下内容:

"Database Version : Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production"

感谢帮助!!!

这是另一个很好的资源:https://www.journaldev.com/2513/tomcat-datasource-jndi-example-java