2009-10-21 2 views
0

У меня странная проблема с dbUnit. Я использую dbUnit 2.4.4, java 1.6, Spring (как пул соединений db), Oracle 9 для моего проекта с примерно 50 модульными тестами. Для некоторых из них (когда я бегу целый набор тестов) я получаю такое исключение:Проблема с dbUnit: java.sql.SQLException: Закрытое заявление

Closed Statement 
[junit] junit.framework.AssertionFailedError: Closed Statement 
[junit]  at com.myproj.DataAccess.Internal.BaseDAOTest.importToDb(Unknown Source) 
[junit]  at com.myproj.DataAccess.Internal.MyDAOTest.testGetBuyClientOrders(Unknown Source) 
[junit]  at org.eclipse.ant.internal.ui.antsupport.EclipseDefaultExecutor.executeTargets(EclipseDefaultExecutor.java:32) 
[junit]  at org.eclipse.ant.internal.ui.antsupport.InternalAntRunner.run(InternalAntRunner.java:423) 
[junit]  at org.eclipse.ant.internal.ui.antsupport.InternalAntRunner.main(InternalAntRunner.java:137) 

importToDb метод загружает тестовые данные из файла XML в базу данных с помощью метода DatabaseOperation.REFRESH.execute DBUnit, и она используется во всех тесты. Если я запускаю эти тесты с проблемами отдельно, для них нет проблем. У вас есть идеи? Благодаря!

+0

Можем ли мы увидеть код importToDb? Ta. –

+0

Вот это http://pastebin.com/mf19de0a – dbf

ответ

1

Я думаю, некоторые из ваших тестов закрывают соединение с базой данных при их очистке. Следующий тест пытается снова использовать это соединение для импорта и не работает.

+0

Я не закрываю соединение явно ни в одном из тестов. Все они используют использование jdbcTemplate из библиотеки Spring DAO, поэтому мне не нужно работать с соединениями вручную. Соединения закрыты в функции импорта, но эта функция одинакова для всех тестов. – dbf

+0

Какой источник данных вы используете? Это «SingleConnectionDataSource»? – tangens

+0

Описание источника данных из моей конфигурации Spring: <имя свойства = "имя пользователя "value =" $ {jdbc.username} "/> <свойство name =" poolPreparedStatements "value =" true "/> < property name = "maxOpenPreparedStatements" значение = "20" /> dbf

1

Когда это случилось со мной, мы явно настроив кэш соединений бекас долгосрочные связи с использованием двух свойств:

AbandonedConnectionTimeout 
InactivityTimeout 

See Oracle's docs here regarding timeout properties

Оказалось, что запрос + время обработки просто перепрыгивая с вершины двух свойств (AbandonedConnectionTimeout + InactivityTimeout < время запроса + время обработки результатов).

Чтобы устранить эту проблему, вы можете поднять свои пределы времени ожидания или вы можете удалить тайм-аут, установив их в 0 (по умолчанию)

Смежные вопросы