使用4次后,OracleDataSource Connection为null

时间:2013-07-07 16:25:04

标签: oracle datasource

我试图多次使用OracleDataSource连接。在类中,我将cacheProperty设置为10:

cacheProps.setProperty("MaxLimit", "10");

调用连接的类正在等待返回值,因此两个调用不会同时进行。使用该连接的类在类中的随机位置获取带有连接变量的空指针。它始终发生在第5个请求上。是否有一些我不知道的属性意味着你只能使用连接池4次?

这是出现空指针的代码片段:

int threadNo = 2;
Connection conn = OraConnODS.getConnection("env " + threadNo);
conn.setAutoCommit(false);
Statement stm = conn.createStatement();

通常在第二行,有时在第三行。

2 个答案:

答案 0 :(得分:1)

尝试此查询以检查oracle中实际打开的连接数

SELECT
  'Currently, ' 
  || (SELECT COUNT(*) FROM V$SESSION)
  || ' out of ' 
  || VP.VALUE 
  || ' connections are used.' AS USAGE_MESSAGE
FROM 
  V$PARAMETER VP
WHERE VP.NAME = 'sessions'

并查看计数是否为> 10.如果> 10然后你需要发布你的完整代码/ xml让我们来看看。

答案 1 :(得分:0)

首先,您应该尝试使用像DBP0这样的数据库连接池,而不是直接使用数据源。通过这种方式,您可以更好地控制它。

无论如何,你的问题似乎是Connection泄漏的关系。可能存在一些陈旧的连接,阻止您创建更多连接。下一步将是检查打开多少个连接[参见satya的答案]。但接下来的问题将是删除陈旧的连接,这将是艰难的,所以我会建议数据库连接池。

编辑:好的,我可以看到您正在使用连接池,然后尝试打印总活动连接,您将能够解决根本问题。我遇到了同样的问题,因为连接泄漏和原始修复将是用暴力清除连接[通常连接池提供这样的api,至少C3P0做]。获取连接池日志,您将了解根本原因。