在Struts2中维护多个JDBC连接

时间:2015-05-15 10:27:12

标签: java jdbc jboss struts2 jndi

与DB的连接数超出了允许的限制。

这是我到目前为止所尝试的。

当用户成功登录时,我将一个连接对象添加到会话中:

Connection conn = DatabaseConnectionManager.getConnection();
sessionMap.put("Connection", conn);

然后,每当我需要数据库连接时,我都会从会话中获取它:

Map<String, Object> sessionMap = (Map<String, Object>) ActionContext.getContext().get("session");
Connection conn = (Connection) sessionMap.get("Connection");

getConnection()方法中,我打印调用方法的次数。 因此,虽然我从会话中获取Connection对象,但为什么连接数超过了50的允许限制?

JNDI代码:

Connection conn = null;         
try {
    Context initCtx = new InitialContext();
    Context envCtx = (Context) initCtx.lookup("java:comp/env");
    DataSource ds = (DataSource) envCtx.lookup("jdbc/MySqdb");
    conn = ds.getConnection();

}  
catch (NamingException ex) {
    Logger.getLogger(DatabaseConnectionManager.class.getName()).log(Level.SEVERE, null, ex);
}
catch (SQLException sqle) {
    sqle.printStackTrace();
}
System.out.println("connection: "+connection++);
return conn;

我使用过JNDI。连接数在允许的限制范围内。我不确定这是否正确,请告知。

1 个答案:

答案 0 :(得分:2)

每个用户的一个连接根本不是一个好的解决方案。如前所述,您必须使用一些连接轮询,如果您想要简单的使用https://commons.apache.org/proper/commons-dbcp/。 如上所述:

  

为每个用户创建新连接可能非常耗时(通常   需要多秒的时钟时间),以便执行   数据库事务可能需要几毫秒。打开一个   在公共托管的Internet中,每个用户的连接可能是不可行的   应用程序,其中同时用户的数量可能非常大。   因此,开发人员通常希望共享一个开放的“池”   所有应用程序的当前用户之间的连接。数字   在任何给定时间实际执行请求的用户通常是   活跃用户总数的非常小的百分比   请求处理是数据库连接的唯一时间   需要。应用程序本身登录到DBMS,并处理任何   用户帐户内部问题。

您可以在http://svn.apache.org/viewvc/commons/proper/dbcp/trunk/doc/

找到样本