我正在使用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:连接与托管连接未关联。org.jboss.jca.adapters.jdbc.jdk6.WrappedConnectionJDK6@
dee1f37
我的问题是:如何正确保持连接打开?
谢谢
如何正确保持连接打开?
您 一定不 要这样做,让连接池来处理。
在后台,连接池将保持与数据库引擎(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()
从连接池检索到的连接执行时,您不是在关闭物理数据库连接,而是通知连接池此特定的数据库连接必须返回到SLEEPING
状态。
来自解释的一些建议:
java.sql.Connection
在需要的最短范围内检索它。使用完后,将其 关闭 。我遇到了这个问题:对于Vaadin7,我已经配置了我的持久性。xml,下面是代码 http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd“version=“2.0” 当我创建一个新的JPA容器并将其绑定到一个表时,我会在MSSQL活动监视器上看到我的新连接,但如果会话超时或注销,我仍然会在SQL上看到连接。 如果我在应用程序中重新登录,
我正在尝试修复与MySQL数据库的连接问题。几个小时后,我的服务器意外地关闭了与MySQL数据库的连接。 这是我的错误代码: 通用域名格式。mysql。jdbc。例外。jdbc4。CommunicationsException:从服务器成功接收到的最后一个数据包是37521865毫秒前。最后一个成功发送到服务器的数据包是37521865毫秒前。长于服务器配置的“等待超时”值。在应用程序中使用之前,
问题内容: 在许多使用MongoDB的入门示例中,您将看到类似以下的代码: 如果MongoDB与任何其他数据库系统一样,并且操作通常在时间上很昂贵。 所以,我的问题是这样的:只需执行一次,将返回值分配给某个全局模块即可,模块中具有各种功能就可以进行各种与数据库相关的工作(将文档插入集合,更新文档等)。 ),然后由应用程序的其他部分调用它们(从而重新使用该值),然后,在应用程序完成后,才执行。 换句
那么有什么方法可以在JBoss中获得多个用户连接池呢?
我正在为员工管理系统创建一个web应用程序,使用ApacheTomcat作为HTTP服务器,Oracle作为数据库,applet用于客户端编程,servlet用于服务器端编程。我还想使用DBCP来管理与数据库的连接。 我希望执行查询的servlet使用客户端为连接输入的用户名和密码。但是到目前为止,我看到在中配置资源时必须设置连接池的用户名和密码。 有没有什么方法可以实现这一点并且仍然使用DBCP
我有一个使用jHipster创建的Spring Boot应用程序,我正在尝试运行一些集成测试用例,我已经使用以下注释配置了测试用例类: 但我还是得到了上面提到的例外。堆栈跟踪如下所示: