gpt4 book ai didi

java - 如何从 JBoss 中打开的连接池正确保持数据库连接

转载 作者:行者123 更新时间:2023-11-29 10:15:39 25 4
gpt4 key购买 nike

我使用 JBoss AS 7.1 作为服务器,我的数据源配置了池化。我对此很陌生,所以请原谅任何新手错误...毕竟我是来学习的。

当客户端登录时,它会获得到数据库的连接,我需要保持该连接(来自池)打开,直到用户注销或 HttpSession 过期。这是来 self 们的数据库管理员的绝对要求。谁说他需要 DB session 变量。我正在使用 servlet 来处理这一切。

在尝试各种可能性时我遇到了 2 个主要问题:

  1. 据我所知,JBoss 会自动关闭未使用的连接 => 我打开的连接返回到池中。所以这可能不是正确的道路。

  2. 如果我尝试像这样存储/调用 Connection 对象:

    private Hashtable<String, Connection> connections = new Hashtable<String, Connection>();

    try {
    String strDSName1 = "java:/OracleDSJNDI";
    ctx = new InitialContext();
    ds1 = (javax.sql.DataSource) ctx.lookup(strDSName1);

    System.out.println("Got 1'st ds.");

    } catch (Exception e) {
    System.out.println("ERROR getting 1'st DS : " + e);
    }

    connection = ds1.getConnection();
    connections.put(session.getId(), connection);

    conn = (Connection) connections.get(sessionID);

    它抛出这个异常:

    java.sql.SQLException: Connection is not associated with a managed connection.org.jboss.jca.adapters.jdbc.jdk6.WrappedConnectionJDK6@dee1f37



我的问题是:如何正确地保持连接打开?

谢谢

最佳答案

How do I properly keep my connection opened?

不能那样做,让连接池处理。


在后台,连接池将保持一堆与数据库引擎(MySQL、Oracle、SQL Server...取决于您如何配置)的数据库连接处于SLEEPING 状态。当您执行此代码时:

//avoiding all the particular exceptions just for code simplicity purposes...
//in real world applications, you must handle each of these exceptions
public Connection getConnection() throws Exception {
ctx = new InitialContext();
ds1 = (javax.sql.DataSource) ctx.lookup(strDSName1);
return ds1.getConnection();
}

您要求连接池检索这些可用连接之一。连接池会给你一个数据库连接(如果可用的话),让你想用多久就用多久。然后你可以在任何你想要/需要的地方使用它并关闭它:

public void foo() throws Exception {
Connection connection = getConnection();
//do what you want/need...

//in the end, you close the connection
//this is A MUST!
connection.close();
}

当从连接池检索到的连接执行 connection.close() 时,您并没有关闭物理数据库连接,而是通知连接池这个特定的数据库连接必须返回到 sleep 状态。


解释中的一些建议:

  • 不得尝试保持连接有效,这是连接池的工作。
  • 不得尝试将连接存储在任何类似缓存的结构中,这是连接池的工作。
  • 必须在您需要的最短范围内检索java.sql.Connection。使用后,关闭它。

关于java - 如何从 JBoss 中打开的连接池正确保持数据库连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18749104/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com