Создание экземпляра драйвера Oracle приводит к исключению InvocationTargetException

StackOverflow https://stackoverflow.com/questions/911052

Вопрос

У меня есть простой веб-сервис, который использует базу данных Oracle.Когда я тестирую службу внутренне, она работает нормально, однако вызов веб-службы через моего клиента (на том же компьютере, но в другом WAR) вызывает исключение invocationtargetexception.Я, наконец, обнаружил, что это проблема с созданием экземпляра OracleDriver.Он вообще не генерирует никаких исключений, поэтому я не могу выяснить, в чем заключается ошибка.

Поиск в Google предоставил решение только с использованием oracle.jdbc.driver.OracleDriver вместо oracle.jdbc.OracleDriver но, похоже, это ничего не исправляет.Jar, который я использую, - это ojdbc14.jar и, насколько я могу судить, он правильно включен в путь к классу для веб-службы...поскольку это работает, когда я тестирую сервис с помощью простого основного метода.

Редактировать:Исключение InvocationTargetException генерируется AxisFault с сервера Axis.Исключение invocationtargetexception является классом-оболочкой, и мои попытки извлечь исключение с помощью .getCause() всегда возвращают null .

Я развертываю службу с помощью jboss и включал файл JAR драйвера в библиотеку для исходного кода, но не для сервера.Включение драйвера в / jboss/server /default / lib решило эту проблему.

Это было полезно?

Решение

2 войны?Я полагаю, что ваш ojdbc.jar находится внутри WEB-INF / lib веб-службы WAR.

Возможно, ваша ВОЙНА находится внутри EAR, поэтому вам следует сослаться на драйвер в MANIFEST.MF.

Подробная информация: http://java.sun.com/j2ee/verified/packaging.html

Другие советы

Без дополнительной информации трудно представить конкретные предложения;Однако у меня был опыт работы с драйвером Oracle, который пытается подключиться через собственные библиотеки OCI, не может найти эти библиотеки, установленные в системе, и выдает исключение InvocationTargetException.Это все из очень смутных воспоминаний, так что ваш пробег почти наверняка будет отличаться.

Прошло некоторое время, но, если мне не изменяет память, у меня был случай, когда URL-адрес подключения был неправильно настроен, и OracleDriver (или одна из его оболочек) перебирала набор возможных методов подключения, пытаясь найти тот, который работал.В случае, если URL-адрес был настроен правильно, он никогда не доходил до попытки OCI (попытка метода тонкого подключения была первой), но если URL-адрес подключения был неправильно настроен, попытка тонкого подключения завершилась неудачей, вызвав попытку OCI, которая затем также завершилась неудачей, поскольку клиент OCI не был установлен на хосте (что привело к исключению InvocationTargetException).

Итак, некоторые вещи, которые нужно проверить:

  1. Действителен ли URL-адрес подключения?Если вы используете один и тот же URL-адрес подключения в обоих местах, вы уверены, что оба процесса привязаны к одному и тому же сетевому адаптеру?Если они привязаны к разным сетевым адаптерам, это может привести к сбоям в подключении даже на одном хосте.
  2. Одинакова ли среда в обоих случаях - если клиент OCI используется в вашей среде разработки, вероятно, существует несколько переменных среды, от которых он зависит.Если эти переменные среды не установлены идентично в среде, в которой запущен контейнер сервлета, я бы ожидал другого поведения.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top