Hibernate Lucene在调用startAndWait()时挂起

时间:2014-07-11 05:08:11

标签: java lucene full-text-search hibernate-search

我在云环境中的应用程序中使用hibernate lucene search(4.5.1)。对于每个租户,都会维护一个单独的hibernate配置(除hibernate.search.default.indexBase属性外,所有属性都相同。每个租户都有单独的文件系统位置)。在启动应用程序时,我通过调用方法Search.getFullTextSession(session).createIndexer().startAndWait()使逻辑为每个租户的唯一位置索引一些表数据(例如:d:/ dbindex / tenant1 /,d:/ dbindex / tenant2 /)。对于第一个租户来说,每件事都很好,索引完美无缺。对于第二个租户,startAndWait未完成。它不会从startAndWait()出来,但有一段时间它正在发挥作用。有些时间不会从startAndWait()出来。经过认真调试后,我发现BatchIndexingWorkspace有两个线程生产者和消费者,其中生产者从DB中获取Id列表并将其放入队列中,Consumer接受并对其进行索引。在生产者方(IdentifierProducer),名为inTransactionWrapper的方法有一个语句

Transaction transaction = Helper.getTransactionAndMarkForJoin( session );
transaction.begin();

语句transaction.begin()挂起并且事务没有开始,因此不会生成生产者,因此消费者没有编入索引并且startAndWait冻结。经过长时间的搜索,一些帖子说池的大小将会成为一个死锁。但是我使用BoneCPConnectionProvidermaxConnectionsPerPartition一起使用50(每个租户)。我在启动时监控了活动连接,它不超过10.更多连接可用。但我不知道这是什么问题。

0 个答案:

没有答案