Я столкнулся со странной ошибкой "Недопустимая длина пакета" (именно так пишется ошибка), когда я запускаю автоматический массовый тест для некоторого моего кода Java, и я надеюсь, что кто-то уже сталкивался с этой ошибкой или может указать я в правильном направлении.
Я не сталкиваюсь с этой ошибкой при тестировании моего кода через модульные тесты JUnit или из графического интерфейса. Я сталкиваюсь только с этой ошибкой в моем автоматическом массовом тесте. Немного о моем массовом тесте: для некоторых входных данных мой код будет работать в течение длительного времени (что и следовало ожидать), но чтобы ускорить результаты до более разумного периода времени, я создаю новый поток для запуска каждого индивидуальный тест, чтобы я мог остановить тест по истечении определенного максимального времени.
Обратите внимание, что и тестовый, и фактический код должны подключаться к одному экземпляру базы данных для загрузки данных. Фактический код использует одно соединение для чтения из базы данных (оно не является многопоточным). Я все еще пытаюсь найти наилучший способ подключения теста к базе данных (отсюда и этот вопрос).
Моей первой мыслью было, что я делаю что-то недружелюбное в том, как закрываю свой тестовый поток, чтобы рано выйти из цикла. Я называю устаревшим
threadObject.stop();
метод, поскольку мой реальный код не является многопоточным и не существует "дружественного" способа уничтожения встроенного потока. После нескольких (~ 2-3) остановленных потоков мое соединение JDBC выдает одну "недопустимую длину пакета" ошибка, за которой следуют исключения «Socket closed» для остальных тестов.
Я пробовал все это с одинаковыми результатами:
- Повторно использовать то же соединение, что и
фактический код использует
- Создать одно новое соединение и повторно использовать это же второе соединение для всех
Тесты
- Закройте и заново создайте тестовое соединение каждый раз, когда я останавливаю () a
длительный тест
- Создать новое соединение для каждого теста (это работает до тех пор, пока я не увеличу максимальное количество соединений)
Я определил, что из двух соединений, «test» и «фактическое», «test» соединение является тем, которое выдает исключение.
Конфигурация:
- Затмение 3.4
- Соответствие Java 1.6
- ojdbc14_g.jar JDBC Driver
- Oracle 9 DB
Что я делаю не так? Есть ли другой способ обработки моего «тестового» соединения? Нужно ли перепроектировать мое «реальное» соединение только для запуска массового теста? Что вызывает ошибку «Недопустимая длина пакета»?