gpt4 book ai didi

java - 使用 gwt 和 c3p0 连接池重新加载 Web 服务器?

转载 作者:行者123 更新时间:2023-12-01 15:42:52 24 4
gpt4 key购买 nike

我有一个用 gwt 编写的 Web 应用程序,我在后端使用 PostgreSQL 数据库。当我在服务器上建立一个新 session 时,我设置了 c3p0 并获得了 jdbc 连接:

ComboPooledDataSource source = new ComboPooledDataSource();
Properties connectionProps = new Properties();
connectionProps.put("user", "username");
connectionProps.put("password", "password");
source.setProperties(connectionProps);
source.setJdbcUrl("some jdbc url that works");

当我关闭服务器上的 session 时,我会关闭 ComboPooledDataSource。

但是...当我在 GWT 开发模式下按下黄色的“重新加载 Web 服务器”按钮并刷新页面时,我收到以下警告,以及一系列后续错误,阻止我获取数据库连接:

WARNING: A C3P0Registry mbean is already registered. This probably means that an application using c3p0 was undeployed, but not all PooledDataSources were closed prior to undeployment. This may lead to resource leaks over time. Please take care to close all PooledDataSources.

我认为这意味着重新加载 Web 服务器并没有关闭我所做的 ComboPooledDataSource(可能是一个安全的假设)。有什么方法可以让它做到这一点,以便我可以在重新加载网络服务器后获得连接?

最佳答案

通常关闭数据源(不仅是 C3P0)是不可取的,因为它们应该从服务器上的许多应用程序中使用。如果您终止此连接池,其他连接池可能会失去数据访问权限。实际上,您应该将池管理留给容器并仅使用 JNDI。

无论如何,如果您需要消除 GWT 控制台中的警告,请在 EventListener contextDestroyer 中使用此方法:

public abstract class YourListenerimplements EventListener {
//Probably you initialize your dataSource here. I do it with Guice.
@Override
public void contextInitialized(ServletContextEvent servletContextEvent) {
...
}<p></p>

<pre><code>@Override
public void contextDestroyed(ServletContextEvent servletContextEvent) {
try {
connection = dataSource.getConnection(); //Your dataSource (I obtain it from Guice)
} catch (SQLException ex) {
} finally {
try {
if (connection != null) {
connection.close();
}
if (dataSource != null) {
try {
DataSources.destroy(dataSource);
dataSource = null;
} catch (Exception e) {
}
}
} catch (SQLException sQLException) {
XLog.error(sQLException);
}
}
}
</code></pre>

<p>}
</p>

关于java - 使用 gwt 和 c3p0 连接池重新加载 Web 服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7735019/

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