JBoss AS 7.1 をサーバーとして使用しており、DataSource をプーリングで構成しています。私はこれにまったく慣れていないので、初心者の間違いを許してください...結局のところ、私は学ぶためにここにいます.
クライアントがログインすると、データベースへの接続が確立され、ユーザーがログアウトするか HttpSession の有効期限が切れるまで、(プールからの) その接続を開いたままにしておく必要があります。これは、DB 管理者からの絶対的な要件です。誰がDBセッション変数が必要だと言っています。これらすべてにサーブレットを使用しています。
私が遭遇した2つの大きな問題:
私が見る限り、JBoss は未使用の接続を自動的に閉じます => 開いた接続はプールに戻ります。したがって、これは正しい道ではないかもしれません。
次のように接続オブジェクトを保存/リコールしようとすると:
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: 接続が管理された接続に関連付けられていません.org.jboss.jca.adapters.jdbc.jdk6.WrappedConnectionJDK6@dee1f37
私の質問は次のとおりです。接続を適切に開いたままにするにはどうすればよいですか?
ありがとう