Spring - Hibernate - JBOSS - 在配置的阻塞超时内没有ManagedConnections(30000 [ms])

时间:2014-02-26 21:26:27

标签: multithreading hibernate database-connection spring-3 jboss-4.2.x

我使用Spring 3.0.1和Hibernate 3.2与JBOSS 4.2.2,我们使用Spring事务管理来管理事务。

我的代码实现运行了一个大约10分钟的巨大工作。春天服务bean RunJobBean.java是我的工作的入口点,它实例化了许多独立的线程(每个执行不同的DB更新和其他逻辑等)这些线程调用hibernate DAO bean(这些bean被注入RunJobBean,传递给线程)从DB2服务器读取并读取和写入两个不同的Oracle数据库(在两个不同的服务器上运行)。

Bean StartRunJob.java执行必要的预处理并调用RunJobBean来运行该作业。

这种用法可以在最近的更改之前正常工作。

最近修改了bean StartRunJob.java(由另一个团队管理。我对此无法控制)以并行调用多个作业。所以StartRunJob调用多个独立的线程,每个线程调用我的RunJobBean。在运行StartRunJob时,我收到了下面提到的错误。日志显示这是来自我的代码。

org.hibernate.exception.GenericJDBCException:无法打开连接 引起:org.jboss.util.NestedSQLException:配置的阻塞超时(30000 [ms])内没有可用的ManagedConnections; - 嵌套throwable:(javax.resource.ResourceException:配置的阻塞超时内没有ManagedConnections(30000 [ms]))

服务器上配置的最大连接数为5,min为1.每个人都认为连接到Oracle DB1的代码正在消耗所有连接而不释放它们。 JBOSS控制台将InUseConnectionCount显示为3或4或5.但我仍然看到这个问题。但我连接到第二个OracleDB的代码也有5个最大连接,但是我调用了12个不同的线程来调用DB,这很好。

我想就如何解决这个问题提出建议。

提前致谢。

与此相关的一些问题。 1.如何检查JBOSS哪个bean持有数据库连接? 2.如何检查JBOSS有多少数据库连接空闲?

1 个答案:

答案 0 :(得分:-1)

我已经解决了这个问题。已经确定了交易中的泄密。

更新:我已经做了很长时间了,但是正如我记得的那样,在其中一个交易中,一个属性必须是只读的,因为它被分配了类似于更新的东西,因为这个多次调用是被春天解雇给DB。当我们将其改为只读时,情况正常。

但是我仍然可以让这个问题让一些专家回答其他问题,这样他们就会对某人有所帮助。