【发布时间】:2015-06-12 13:21:10
【问题描述】:
我在 Glassfish 中创建了一个 JDBC 连接池并将其用作 JDBC 资源“jdbc/__default”。我可以在管理控制台界面中成功ping通这个连接池。
然后,我正在尝试运行以下程序:
package de.java2enterprise.onlineshop;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import javax.annotation.Resource;
import javax.naming.InitialContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sql.DataSource;
@WebServlet("/test")
public class TestServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
// @Resource(name="jdbc/__default")
// private DataSource ds;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
PrintWriter writer = response.getWriter();
response.setContentType("text/html;charset=UTF-8");
writer.println("<!DOCTYPE html>");
writer.println("<html><body>");
Connection con = null;
DataSource ds;
try {
ds = (DataSource) InitialContext.doLookup("jdbc/__default");
con = ds.getConnection();
if (con.isValid(10)) {
writer.println("<BR>Connected!");
}
con.close();
} catch (Exception ex) {
writer.println(ex.getMessage());
} finally {
if (con != null){
try{
con.close();
} catch (Exception ex){
}
}
}
writer.println("<BR>Test finished!</body></html>");
writer.close();
}
}
但是,我在网络浏览器中收到以下错误:
分配连接时出错。原因:无法分配连接,因为:侦听器拒绝连接并出现以下错误:ORA-12518,TNS:侦听器无法切换客户端连接 测试完毕!
在服务器日志中,我收到以下错误:
2015-04-08T08:15:20.540+0200|信息:在 [onlineshop-war] 加载应用程序 [onlineshop#onlineshop-war.war] 2015-04-08T08:15:20.636+0200|信息:网店在611毫秒内部署成功。 2015-04-08T08:15:38.552+0200|警告:来自 ServletContext 的上下文路径:/onlineshop-war 与来自 bundle 的路径不同:onlineshop-war 2015-04-08T08:15:38.802+0200|信息:访问未访问的引用 2015-04-08T08:15:39.519+0200|信息:成功获取INSTRUMENTATION:sun.instrument.InstrumentationImpl@2d618042
2015-04-08T08:15:41.471+0200|警告:RAR5038:为池在线商店创建资源时出现意外异常。异常:javax.resource.spi.ResourceAllocationException:无法分配连接,因为:侦听器拒绝连接并出现以下错误: ORA-12516, TNS:listener 找不到具有匹配协议栈的可用处理程序
2015-04-08T08:15:41.471+0200|警告:RAR5117:无法从连接池 [ Onlineshop ] 获取/创建连接。原因:com.sun.appserv.connectors.internal.api.PoolingException:无法分配连接,因为:侦听器拒绝连接并出现以下错误: ORA-12516, TNS:listener 找不到具有匹配协议栈的可用处理程序
2015-04-08T08:15:41.486+0200|警告:RAR5114:分配连接时出错:[分配连接时出错。原因:无法分配连接,因为:侦听器拒绝连接并出现以下错误: ORA-12516, TNS:listener 找不到具有匹配协议栈的可用处理程序 ]
之后,我无法再次 ping 连接池,并且在管理控制台中收到或多或少相同的错误。
我使用以下配置:JDK 1.8.0_25、GlassFish Server Open Source Edition 4.1(build 13)、Oracle Database XE 11.2。
在 Glassfish 管理控制台中,我创建了以下 JDBC 资源:JNDI 名称:jdbc/__default,逻辑 JNDI 名称:java:comp/DefaultDataSource,连接池:Onlineshop。 JDBC 连接池名称为 Onlineshop,资源类型:javax.sql.DataSource,类名:oracle.jdbc.pool.OracleDataSource。
我的最小池大小为 800 个连接,最大为 3200 个连接。其他参数我保持不变,我只在 JDBC 连接池属性中添加了用户和密码。
任何人的想法? :-)
【问题讨论】: