gpt4 book ai didi

java - 如何在oracle上使用wso2连接池避免非 Activity session ?

转载 作者:行者123 更新时间:2023-12-01 08:51:50 24 4
gpt4 key购买 nike

我有一小组自定义 WSO2 ESB 中介器,它们使用 Oracle 数据库,我通过 WSO2 数据源连接到该数据库,如下所示:

	private void Connect(boolean isRetry) throws SQLException {		
DataSource ds = null;

try {
Hashtable environment = new Hashtable();
environment.put("java.naming.factory.initial", "org.wso2.carbon.tomcat.jndi.CarbonJavaURLContextFactory");
Context initContext = new InitialContext(environment);
ds = (DataSource)initContext.lookup("jndi/kernel");
} catch (NamingException e) {
throw new SQLException("Connection pool exception", e);
}

// Nawiazanie polaczenia
this.connection = ds.getConnection();
this.connection.setAutoCommit(false);
}

使用连接后,我将像这样关闭它:

	public void Close() throws SQLException {
try {
if (this.connection != null) {
this.connection.close();
this.connection = null;
}
} catch (SQLException e) {
System.out.println(" @@ Failed to close the connection!");
e.printStackTrace();
throw e;
}
}

每个自定义中介器都在开始时使用上述 Connect 方法,并在最后的 finally 作用域中使用 Close 方法。

在单个序列(由消息处理器执行)中,至少调用 2 个自定义中介器,有时甚至 5 个。

问题是,当有大量消息通过队列时,数据库(oracle)上会有数百个不活动的 session 。看起来 Connect 方法不会尝试获取不活动的连接并使用它,我认为这就是拥有连接池的全部意义。

任何帮助将不胜感激..

最佳答案

我目前有一个自定义中介器,需要在 Oracle 数据库上建立连接。尽管此中介器用于消息处理器执行的序列(处理数千条消息),但我没有出现非 Activity session 的问题

不知道您的情况到底出了什么问题,但我希望这可以帮助您:

  • 数据源是通过 Web 控制台在 WSO2 ESB 中定义的。
  • 使用的驱动程序是oracle.jdbc.OracleDriver
  • 已定义验证查询(从双重中选择 1)
  • 借用测试设置为 true
  • 最大活跃数是正数
  • 删除放弃设置为 true
  • 当然,数据源作为 JNDI 数据源公开

在java部分,我不直接使用InitialContext进行查找:我使用org.apache.synapse.commons.datasource.DataSourceFinder.find(dataSourceName, jndiProperties),其中jndiProperties只是一个新的Properties()

最后,我只需要关闭结果集、语句和连接

它与 ESB 4.8.1 和 ESB 5 配合良好

关于java - 如何在oracle上使用wso2连接池避免非 Activity session ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42339111/

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