Неожиданное исключение GDS: 335544726. Ошибка чтения данных из соединения.

У меня есть веб-приложение, работающее на Apache Tomcat 6, использующее ZK, Hibernate и Jaybird JDBC для доступа к базе данных Firebird. По неизвестной причине после еще не сопоставленной операции в приложении, которое выполняет динамический SQL, происходит сбой со следующим исключением:

ОШИБКА: org.springframework.transaction.TransactionSystemException: не удалось откатить транзакцию JPA; вложенное исключение - javax.persistence.PersistenceException: непредвиденная ошибка при откате javax.persistence.PersistenceException: непредвиденная ошибка при откате org.hibernate.TransactionException: сбой отката JDBC [SQL: 335544726, HY000] org.firebirdsql.jdbc.FBSQLException. 335544726. Ошибка чтения данных из соединения.

Причина: Ошибка чтения данных из соединения. ...

Тогда любая операция, выполненная пользователем после нее, вызывает следующую ошибку:

ОШИБКА: javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: не удалось выполнить запрос org.hibernate.exception.GenericJDBCException: не удалось выполнить запрос [SQL: 335544721, HY000] org.firebirdsql.jdceptionbceptionc. 335544721. Невозможно выполнить сетевой запрос к хосту "". Причина: Невозможно выполнить сетевой запрос к хосту "".

И система вылетает, как если бы она потеряла связь с базой данных.

Кто-нибудь испытывал это раньше?


person Erick Sperandio    schedule 25.02.2014    source источник
comment
Вы потеряли соединение: firebirdfaq.org/faq96   -  person Edgard Leal    schedule 25.02.2014
comment
Проверьте firebird.log сервера на наличие ошибок примерно в то время, когда приложение выдало эту ошибку. Также: по возможности включите полную трассировку стека.   -  person Mark Rotteveel    schedule 25.02.2014


Ответы (4)


После некоторых исследований и тестов я должен понять, что происходит.

Проблема возникала, когда пользователь выполнял определенный поиск в приложении, используя строку с размером больше, чем размер поля целевой таблицы. Итак, когда система выполнила запрос HQL с вводом строки в качестве параметра, система вылетела из строя - как при сравнении строки длиной 20 с полем varchar (18).

Решение было простым: ограничить размер входной строки в поле поиска.

Надеюсь, это поможет кому-нибудь в будущем.

person Erick Sperandio    schedule 18.04.2014

Вы не можете подключиться к базе данных. Код 335544721 является результатом активного отказа в доступе, который может быть вызван различными элементами, такими как неправильный вход в систему, правила брандмауэра, предотвращающие соединение, или блокировка антивируса.

person renke    schedule 25.02.2014
comment
Jaybird выдаст эту ошибку в течение IOExceptions при чтении из соединения. Это не обязательно активный отказ в доступе. Это также может быть разорванное соединение или недопустимые операции с сетевым сокетом для текущего состояния этого сокета. - person Mark Rotteveel; 25.02.2014
comment
Проблема не связана с активным отказом в доступе. Как я уже говорил, приложение работает до тех пор, пока пользователь не выполнит определенную операцию. С этого момента система начинает показывать эту ошибку. - person Erick Sperandio; 04.03.2014

У меня также была аналогичная проблема, в моем случае это произошло из-за того, что я использовал условие LIKE и вместе с двумя знаками "%" длина параметра превышала длину поля.

Так, например, если у меня есть таблица:

create table TEST (name varchar(5) default '' not null);

Когда я пытаюсь выполнить поиск по следующему условию и имею параметр param1 = '% name1%' (как вы видите, 'name1' действительно для поля varchar (5)):

select * from TEST where name like :param1;

У меня такая же ошибка в спящем режиме, и после этой ошибки я не могу выполнять какие-либо запросы, вероятно, из-за того, что сеанс спящего режима прерван.

Надеюсь, это может кому-то помочь.

person Maxim Votyakov    schedule 08.12.2015
comment
Спасибо, Максим. Хотя это подразумевается в опубликованном мною ответе, вы сделали этот случай явным. - person Erick Sperandio; 17.03.2017

Я решил это, перезапустив FirebirdGuardianService на сервере.

person Stimpson Cat    schedule 11.07.2017