我有一个简单的Web服务,正在尝试打开与数据库的连接。
我正在使用jax-ws,Oracle 12c DB,Tomcat 9,Java 8。
任何人都可以发布正确的方法吗?
到目前为止,我已经将ojdbc7.jar和ucp.jar下载到$ TOMCAT_HOME / lib目录中。
现在我有以下内容:
<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>
现在我有以下内容:
<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>
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'"
我做错了什么?
提前感谢!
您可以看看github example,然后按照它来构建Tomcat应用程序吗?
好消息,我今天能在办公室使用它。
这是我做的:
<?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