【发布时间】:2013-09-11 18:55:28
【问题描述】:
我使用 JBoss AS 7.1 作为服务器,并且我的 DataSource 配置了池。我对此很陌生,所以请原谅任何新手错误......毕竟我是来这里学习的。
当客户端登录时,它会连接到数据库,我需要保持该连接(来自池)打开,直到用户注销或 HttpSession 过期。这是来自我们的数据库管理员的绝对要求。谁说他需要 DB 会话变量。我正在使用 servlet 来完成这一切。
发挥我遇到的两个主要问题的可能性:
据我所知,JBoss 自动关闭未使用的连接 => 我打开的连接返回到池中。所以这可能不是正确的道路。
-
如果我尝试像 this:
这样存储/调用 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.org.jboss.jca.adapters.jdbc.jdk6.WrappedConnectionJDK6@dee1f37
我的问题是:如何正确保持连接打开?
谢谢
【问题讨论】:
-
也许你能详细说明为什么需要“会话变量”?保持数据库连接似乎阻碍了 J2ee 的连接池原则......
-
我知道这违反了 J2ee 原则...我试图维持我的情况,但数据库管理员。坚持他需要每个客户端连接的会话变量。也许出于跟踪目的。老实说,我不明白他。我告诉他会话跟踪应该是服务器应用程序的工作。不是数据库。
标签: java jboss datasource connection-pooling