Pergunta

Eu tenho um serviço web simples que usa um banco de dados Oracle. Quando eu testar o serviço internamente ele funciona muito bem, no entanto, chamar o serviço web através do meu cliente (na mesma máquina, mas em uma guerra diferente) lança uma InvocationTargetException. Eu finalmente descobri que é um problema com instanciar o OracleDriver. Ele não lançar qualquer exceção em tudo, então não posso descobrir o que é o erro.

pesquisando apenas forneceu uma solução de usar oracle.jdbc.driver.OracleDriver vez de oracle.jdbc.OracleDriver mas isso não parece corrigir alguma coisa. O frasco que estou usando é ojdbc14.jar e, tanto quanto eu posso dizer, ele está incluído no caminho de classe para o serviço web corretamente ... desde que ele funciona quando eu testar o serviço com um método main simples.

EDIT: O InvocationTargetException é gerado por um AxisFault do servidor Axis. O InvocationTargetException é uma classe de mensagens publicitárias, e minhas tentativas para tentar extrair a exceção usando .getCause () sempre retornam null.

Eu estou implantando o serviço usando jboss e foi inclusive o arquivo JAR do driver na biblioteca para a fonte, mas não para o servidor. Incluindo o condutor in / jboss / server / default / lib resolvido-lo.

Foi útil?

Solução

2 guerras? Suponho que o seu ojdbc.jar está localizado dentro de WEB-INF / lib da guerra do serviço Web.

Talvez seu WAR está dentro de um EAR, então você deve referenciar o motorista em MANIFEST.MF.

Mais informações: http://java.sun.com/j2ee/verified/ packaging.html

Outras dicas

Sem mais informações, é difícil para fornecer sugestões concretas; Tenho no entanto tinha experiência com um driver Oracle que as tentativas de se conectar via bibliotecas OCI nativos, não consegue encontrar essas bibliotecas instaladas no sistema, e lança uma InvocationTargetException. Isso tudo é de muito vaga memória, assim que sua milhagem quase certamente irá variar.

Tem sido um tempo, mas se a memória não me falha, eu tive um caso em que a URL de conexão foi configurado incorretamente, e OracleDriver (ou um de seus invólucros) iterado através de um conjunto de métodos de ligação possíveis, tentando encontrar um que trabalhou . No caso de que o URL foi configurado corretamente, ele nunca chegou à tentativa OCI (a fina tentativa método de conexão veio pela primeira vez), mas se a URL de conexão foi mal configurado, a tentativa fina iria falhar, fazendo com que a tentativa OCI, que então também não porque o cliente OCI não foi instalado no host (resultando em uma InvocationTargetException.)

Então, algumas coisas para verificar:

  1. é a URL de conexão válida? Se você estiver usando o mesmo URL de conexão em ambos os lugares, você tem certeza que ambos os processos são vinculativas para o mesmo NIC? Se eles são vinculativas para diferentes NICs, pode causar esquisitices de conexão, mesmo no mesmo host.
  2. O ambiente o mesmo em ambos os casos - se o cliente OCI está sendo usado em seu ambiente de desenvolvimento, há uma probabilidade várias variáveis ??de ambiente ele depende. Se essas variáveis ??de ambiente não são definidas de forma idêntica no ambiente onde o servlet container está em execução, eu esperaria um comportamento diferente.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top