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

问题描述 投票:1回答:2

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

我正在使用jax-ws,Oracle 12c DB,Tomcat 9,Java 8。

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

到目前为止,我已经将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();
         }          

Web服务返回的消息是:

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

我做错了什么?

提前感谢!

jax-ws tomcat9 ojdbc
2个回答
0
投票

您可以看看github example,然后按照它来构建Tomcat应用程序吗?


0
投票

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

这是我做的:

  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="apps"
        password="a*****"
        url="jdbc:oracle:thin:@//db15:1563/PPSOM"

/>
</Context>

我没有在Tomcat context.xml或server.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中返回了以下内容:

“数据库版本:Oracle Database 12c企业版12.1.0.2.0版-64位生产”

感谢您的帮助!

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

© www.soinside.com 2019 - 2024. All rights reserved.