JDBC连接错误

JDBC连接错误,jdbc,glassfish,Jdbc,Glassfish,我在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 ja

我在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();
    }
}
package de.java2enterprise.onlineshop;
导入java.io.FileWriter;
导入java.io.IOException;
导入java.io.PrintWriter;
导入java.sql.Connection;
导入javax.annotation.Resource;
导入javax.naming.InitialContext;
导入javax.servlet.ServletException;
导入javax.servlet.annotation.WebServlet;
导入javax.servlet.http.HttpServlet;
导入javax.servlet.http.HttpServletRequest;
导入javax.servlet.http.HttpServletResponse;
导入javax.sql.DataSource;
@WebServlet(“/test”)
公共类TestServlet扩展了HttpServlet{
私有静态最终长serialVersionUID=1L;
//@Resource(name=“jdbc/”默认值)
//私有数据源ds;
public void doGet(HttpServletRequest请求、HttpServletResponse响应)
抛出ServletException、IOException{
PrintWriter=response.getWriter();
setContentType(“text/html;charset=UTF-8”);
writer.println(“”);
writer.println(“”);
连接con=null;
数据源ds;
试一试{
ds=(数据源)InitialContext.doLookup(“jdbc/_默认值”);
con=ds.getConnection();
如果(合同有效(10)){
writer.println(“
已连接!”); } con.close(); }捕获(例外情况除外){ writer.println(例如getMessage()); }最后{ 如果(con!=null){ 试一试{ con.close(); }捕获(例外情况除外){ } } } writer.println(“
测试完成!”); writer.close(); } }
但是,我在web浏览器中收到以下错误:

分配连接时出错。原因:无法分配连接,因为:侦听器拒绝连接,出现以下错误:ORA-12518,TNS:侦听器无法切换客户端连接 测试完成了

在服务器日志中,我发现以下错误:

2015-04-08T08:15:20.540+0200 |信息:在[onlineshop war]加载应用程序[onlineshop#onlineshop war.war] 2015-04-08T08:15:20.636+0200 |信息:onlineshop在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 |信息:成功获取仪器:sun.instrument。InstrumentationImpl@2d618042

2015-04-08T08:15:41.471+0200 |警告:RAR5038:为pool Onlineshop创建资源时出现意外异常。异常:javax.resource.spi.ResourceAllocationException:无法分配连接,因为:侦听器拒绝连接,出现以下错误: ORA-12516,TNS:侦听器找不到具有匹配协议堆栈的可用处理程序

2015-04-08T08:15:41.471+0200 |警告:RAR5117:无法从连接池[Onlineshop]获取/创建连接。原因:com.sun.appserv.connectors.internal.api.pooligeException:无法分配连接,因为:侦听器拒绝连接,出现以下错误: ORA-12516,TNS:侦听器找不到具有匹配协议堆栈的可用处理程序

2015-04-08T08:15:41.486+0200 |警告:RAR5114:分配连接时出错:[分配连接时出错。原因:无法分配连接,因为:侦听器拒绝了连接,出现以下错误: ORA-12516,TNS:侦听器找不到具有匹配协议堆栈的可用处理程序 ]

之后,我无法再次ping连接池并在管理控制台中或多或少地收到相同的错误

我使用以下配置:JDK1.8.0_25、GlassFish服务器开源版本4.1(build 13)、Oracle数据库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连接池属性中添加了用户和密码


有人有主意吗?:-)

如果您使用jdk7+,请在或中关闭连接,因为它应该在Java中完成。看看是否有帮助

你好,jjd,谢谢!我已经在我的代码中添加了以下内容,但这不起作用:
最后{if(con!=null){try{con.close();writer.close();}catch(Exception ex){}}}
你能不能,请用你所做的更改来更新代码,并提供更多信息,比如你使用了什么数据库,什么驱动程序,连接池设置我已经在上面添加了信息。还有什么遗漏吗?愚蠢的问题:您的域库文件夹中有oracle驱动程序,对吗?您可以根据官方文档中的说明检查您的值。这是针对v3.1的,但我相信它适用于当前版本。您还可能希望使用文档中的命令重新创建池,看看是否有帮助。您还可能需要再次检查您使用的用户是否具有访问数据库的权限