Во-первых, позвольте мне коротко объяснить, как работает мое приложение:
Приложение обрабатывает сделки, которые хранятся в виде XML-документа в нашей базе данных (Oracle 11g). Таблица, которая содержит эту информацию, определяется следующим образом:
table T_MYDEALS (
DEAL_ID number(9, 0) not null,
DEAL_XML xmltype
)
Когда мы обновляем или вставляем новые элементы в эту таблицу, у нас есть триггер, который читает (используя XPath) этот XML и заполняет некоторые другие таблицы метаданных.
Все отлично работает, кроме как на моей машине.
Теперь проблема
Когда я запускаю приложение на своем компьютере (т. Е. Tomcat запускается в моем Eclipse, но подключен к базе данных Homologation), триггер завершается ошибкой со следующей ошибкой:
WARN [org.hibernate.util.JDBCExceptionReporter] SQL Error: 1722, SQLState: 42000
ERROR [org.hibernate.util.JDBCExceptionReporter] ORA-01722: invalid number
ORA-06512: at "MY_SCHEMA.AFTER_R_INSERT_MYDEAL", line 628
ORA-04088: error during execution of trigger 'MY_SCHEMA.AFTER_R_INSERT_MYDEAL'
Извините, я не могу поставить свой триггер здесь по соображениям безопасности. Просто отметьте, что строка 628 находится в конце кода триггера.
Мои тесты
Поэтому я попытался понять, почему эта ошибка произошла на моей машине (так как это происходит только на моей машине, никто из моих коллег не сталкивался с этой проблемой). Я не могу сказать, когда он перестает работать, может быть, когда я недавно сменил компьютер?
Сначала я проверяю исходный код, затем соединение с БД, но все кажется правильным.
Я также переключился в режим отладки, чтобы просмотреть XML, отправленный в БД, или, по крайней мере, в нашем HibernateXMLType
(который является расширением org.hibernate.usertype.UserType
, используемым для преобразования нашего XML в данные, читаемые Oracle). Но ничего плохого здесь тоже не найдено.
Я сэкономил вам много тестов, выполненных на моей стороне, но один из моих последних тестов состоял в том, чтобы получить новый сервер Tomcat и развернуть WAR, который развернут в среде (например, Homologation).
Затем я выполнил те же тесты, но триггер все еще не работает.
Пока я исключил следующих подозреваемых:
- Исходный код , так как я также тестировал приложение из WAR-файла, который развернут в среде и который работает правильно;
- Сама DB , так как я подключен к той же БД, что и рабочая среда. Я тоже пробовал с другой БД, результат тот же.
- Данные используются для моих тестов, так как они работают, если я пытаюсь сохранить ту же сделку, но с использованием среды омологации.
- JDK , так как я также изменил JDK на новый;
- Eclipse , так как мои последние тесты проводились вне Eclipse;
- Сервер Tomcat , как я также попробовал на новом Tomcat.
Что меня интересует, так это то, что в моей среде Windows XP есть какая-то конкретная конфигурация кодирования, которая «преобразует» некоторые данные в XML и делает их
Мои вопросы
- Какие возможные элементы я мог забыть в своих тестах?
- Есть ли способ точно узнать XML, обработанный триггером Oracle (если это возможно, без установки чего-либо на экземпляр Oracle, так как я не имею никакого контроля над ним)?
Я знаю, что я не предоставляю много информации, но если вы можете дать мне несколько советов или идей, я был бы очень благодарен!
Привет.
<Ч />
Техническая информация: Java 1.6, Oracle 11g, Tomcat 5.5.23, JSF 1.2, Hibernate 3.3