La creación de instancias del controlador Oracle da como resultado InvocationTargetException

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

Pregunta

Tengo un servicio web sencillo que utiliza una base de datos Oracle.Cuando pruebo el servicio internamente, funciona bien; sin embargo, llamar al servicio web a través de mi cliente (en la misma máquina pero en un WAR diferente) genera una excepción de invocación de destino.Finalmente descubrí que hay un problema al crear instancias de OracleDriver.No genera ninguna excepción, por lo que no puedo descubrir cuál es el error.

Buscar en Google solo ha proporcionado una solución para usar oracle.jdbc.driver.OracleDriver en lugar de oracle.jdbc.OracleDriver, pero eso no parece solucionar nada.El jar que estoy usando es ojdbc14.jar y, hasta donde puedo decir, está incluido correctamente en la ruta de clases para el servicio web...ya que funciona cuando pruebo el servicio con un método principal simple.

EDITAR:La InvocationTargetException es generada por un AxisFault del servidor de Axis.La excepción de invocación es una clase contenedora, y mis intentos de extraer la excepción usando .getCause() siempre devuelven nulo.

Estoy implementando el servicio usando jboss e incluí el archivo JAR del controlador en la biblioteca para la fuente pero no para el servidor.Incluir el controlador en /jboss/server/default/lib lo resolvió.

¿Fue útil?

Solución

2 guerras? Supongo que su ojdbc.jar se encuentra dentro de WEB-INF / lib de la guerra el servicio web.

Tal vez su WAR está dentro de un EAR, por lo que deberá hacer referencia al conductor en MANIFIEST.MF.

Más información: http://java.sun.com/j2ee/verified/ packaging.html

Otros consejos

Sin más información, es difícil ofrecer sugerencias concretas;Sin embargo, he tenido experiencia con un controlador de Oracle que intenta conectarse a través de bibliotecas OCI nativas, no encuentra las bibliotecas instaladas en el sistema y genera una excepción InvocationTargetException.Todo esto proviene de un recuerdo muy vago, por lo que es casi seguro que su kilometraje variará.

Ha pasado un tiempo, pero si la memoria no me falla, tuve un caso en el que la URL de conexión estaba configurada incorrectamente y OracleDriver (o uno de sus contenedores) recorrió un conjunto de posibles métodos de conexión, tratando de encontrar uno que funcionara.En el caso de que la URL estuviera configurada correctamente, nunca llegó al intento de OCI (el intento del método de conexión ligera fue primero), pero si la URL de conexión estaba mal configurada, el intento ligero fallaría, provocando el intento de OCI, que luego también falló. porque el cliente OCI no estaba instalado en el host (lo que genera una InvocationTargetException).

Entonces, algunas cosas para verificar:

  1. ¿Es válida la URL de conexión?Si está utilizando la misma URL de conexión en ambos lugares, ¿está seguro de que ambos procesos están vinculados a la misma NIC?Si se vinculan a diferentes NIC, podrían causar rarezas en la conexión, incluso en el mismo host.
  2. ¿El entorno es el mismo en ambos casos? Si el cliente OCI se está utilizando en su entorno de desarrollo, es probable que existan varias variables de entorno de las que depende.Si esas variables de entorno no se configuran de manera idéntica en el entorno donde se ejecuta el contenedor de servlets, esperaría un comportamiento diferente.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top