Ну, я решил проблему сам. Кстати, спасибо jkysam за ваши комментарии.
Проблема возникла из-за загрузки applicationContext более одного раза. Поэтому каждый раз, когда загружается applicationContext, создается новый экземпляр kaha db, и это приводит к блокировке.
Что я сделал, так это отделил конфигурацию, связанную с jms, от applicationContext. Итак, я создал новый контекстный XML-файл с именем jmsContext.xml и переместил в этот файл строки конфигурации, связанные с jms (и activemq). Затем в моих тестовых классах я загружал различные контекстные xml в зависимости от того, является ли это jmsTest или нет.
Например; У меня есть два класса GenericUnitTest для того, чтобы отделить конфигурацию контекста. Первый:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"/jmsContext.xml"})
public abstract class GenericJmsUnitTest {
}
Второй:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"/applicationContext.xml"})
public abstract class GenericUnitTest {
}
А потом я расширяю эти классы в зависимости от тестового примера. Вот пример;
public class ProductQueueTest extends GenericJmsUnitTest{
@Autowired
private ProductQueueService productQueueService;
@Test
public void productTest() {
productQueueService.sendProduct();
}
}
Образец класса тестирования без jms:
public class SchedularTest extends GenericUnitTest {
@Autowired
private Processor schedulerProcessor;
@Test
public void scheduleForProduct() {
schedulerProcessor.processForProducts();
}
}
Кстати, я исключаю фильтры сканирования компонентов, которые находятся в очереди в applicationContext.xml, и включаю их в jmsContext.xml. Вот пример;
applicationContext xml ниже
<context:component-scan base-package="com.project">
<context:exclude-filter type="regex" expression="com.project.queue.*"/>
<context:exclude-filter type="regex" expression="com.project.test.queue.*"/>
</context:component-scan>
jmsContext xml ниже
<context:component-scan base-package="com.project.queue"/>
<context:component-scan base-package="com.project.test.queue"/>