Java Websphere 7.0.0.17池连接错误
我在一个应用程序中遇到了问题,我在oracle 11g中使用EclipseLink 2.4.1,我得到了一个J2CA0045E错误,因为池没有从jndi中释放任何连接池 你有这个问题吗?显然,连接没有被释放,它达到了我配置的限制 任何想法,这是我的连接池Java Websphere 7.0.0.17池连接错误,java,oracle,jndi,websphere-7,Java,Oracle,Jndi,Websphere 7,我在一个应用程序中遇到了问题,我在oracle 11g中使用EclipseLink 2.4.1,我得到了一个J2CA0045E错误,因为池没有从jndi中释放任何连接池 你有这个问题吗?显然,连接没有被释放,它达到了我配置的限制 任何想法,这是我的连接池 Connection timeout: 180 Maximum connections: 10 Minimum connections: 1 Reap time: 60 Unused timeout: 180 Aged timeout: 120
Connection timeout: 180
Maximum connections: 10
Minimum connections: 1
Reap time: 60
Unused timeout: 180
Aged timeout: 120
Purge policy: Entire Pool
编辑
我在同一个服务中有一个web服务,其行为是相同的,使用相同的jndi,连接会增加,并且不会释放任何连接
initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
DataSource ds = (DataSource) envCtx.lookup("jdbc/abc");
conn = ds.getConnection();
根据提供的代码,看起来您正在类范围中存储
连接
引用。您应该避免存储对可能跨越多个请求的连接对象的引用
相反,存储对数据源的引用
举例说明。首选这种方法:
public class GoodService {
DataSource ds;
public GoodService() throws NamingException {
// Only the DataSource reference is stored, this is allowed
ds = new InitialContext().lookup("java:comp/env/jdbc/abc");
}
public void doSomething() throws Exception {
// Get the connection in a request.
Connection conn = ds.getConnection();
try {
// do something...
} finally {
// Always close the connection in the finally block
// so it gets returned to the pool no matter what
conn.close();
}
}
}
以下方法被视为不良做法,可能会导致您看到的J2CA0045E错误:
public class BadService {
Connection conn; // BAD: don't store a Connection across requests!
public BadService() throws NamingException, SQLException {
DataSource ds = new InitialContext().lookup("java:comp/env/jdbc/abc");
// BAD: don't leave connections open indefinitely like this
conn = ds.getConnection();
}
public void doSomething() throws Exception {
// do something using conn...
}
}
这可能是由许多不同的因素造成的。发布java代码的相关部分,向我们展示如何使用连接。你正在使用共享连接吗?我添加了信息,如果你有任何想法,请告诉我@Aguibertyu您可能正在泄漏连接。