我使用 JBoss AS 7.1 作为服务器,并且我的 DataSource 配置了池。我对此很陌生,所以请原谅任何菜鸟的错误......毕竟我是来这里学习的。
当客户端登录时,它会连接到数据库,我需要保持该连接(来自池)打开,直到用户注销或 HttpSession 过期。这是来自我们的数据库管理员的绝对要求。谁说他需要数据库会话变量。我正在为所有这些使用servlet。
发挥我遇到的两个主要问题的可能性:
据我所知,JBoss 会自动关闭未使用的连接 => 我打开的连接返回到池中。所以这可能不是正确的道路。
如果我尝试像这样存储/调用 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 an managed connection.org.jboss.jca.adapters.jdbc.jdk6.WrappedConnectionJDK6@dee1f37
我的问题是:如何正确保持连接打开?
谢谢