Jsp + dll

Pessoal.

Alguém já desenvolvel algum aplicativo web utilizando métodos que contém em uma dll (desenvolvida com jni e c++) ?

Vou mostar passo a passo do que fiz:

  • Desenvolvi a dll no Visual Studio 2003;
  • Criei um aplicativo Desktop para acessar a dll e funcionou;
  • Estou criando um aplicativo web para utilizar essa dll e ocorre o seguinte problema:

O meu método connect esta funcionando, pois como ja disse fiz um aplicativo Desktop e funcionou.

Alguém saberia me dizer qual o problema?
Como posso arrumar?

PS: Estou chamando a dll no próprio arquivo jsp da seguinte maneira:

static { System.loadLibrary("TerraJava"); }

System.loadLibrary não pode ser chamado mais que uma única vez por uma biblioteca JNI durante seu carregamento. Portanto você não pode nem pôr esse código em uma classe normal Java (cujo deploy será feito em um diretório da aplicação), quanto mais em um JSP.

Essa classe deve ser isolada dentro de um .jar e copiada para o diretório jre/lib/ext da JVM que está rodando seu aplicativo web.

Desculpe-me mas eu não sei encapsular uma dll em um .jar, vc poderia me ajudar?

A DLL deve ser copiada para o diretório jre\bin de sua JVM (se for no Windows) ou para o diretório jre/bin de sua JVM (se for Linux/Unix), e o .jar deve ficar em jre\lib\ext.

Por enquanto não é possível encapsular uma DLL em um .jar.

Não deu certo fazer dessa maneira indicada.

Então agora eu estou tentando utilizar a DLL da seguinte maneira:

Dentro do Servlet eu mando carregar a Dll através do System.loadLibrary. Ela conecta a Dll pois eu fiz um tratamento e diz que está sendo carregada.
Até ai tudo bem, mas quando eu chamo um método que esta dentro dessa dll (exe: connect) ele da o erro HTTP Status 500.

Pq ele da esse erro?
Se ele já carregou a dll então os métodos que estão dentro dela estão disponíveis para eu utilizar não é?

O indicado é fazer o seguinte:

  • Isole a classe que tem métodos nativos e sua DLL fora do seu application server.
    Elas devem ficar instaladas em um lugar que ficará sempre carregado.
    No seu caso, é mais fácil deixar a DLL em c:\windows\system32, por exemplo, e o .class dentro de um .jar no diretório <diretorio de instalação do JDK>\jre\lib\ext.
    Quem tem de chamar loadLibrary é essa classe que tem métodos nativos. Esse loadLibrary nunca deve ser chamada mais de uma vez por uma classe durante o funcionamento da JVM. Por isso é que sugeri pôr fora do application server.
    O servlet só referencia essa tal classe; nunca deve chamar diretamente loadLibrary.

Eu fiz o que vc me falou…
Adicionei no projeto como um External JARs e apareceu no meu eclipse a minha classe.

Agora com faço para utiliza-la?
Como eu crio um objeto para acessa-la?

Agora é com você, já que você desenvolveu o tal aplicativo desktop, deve saber como é que é possível instanciar um objeto da tal classe.

Eu fiz o que vc me falou…
Adicionei no projeto como um External JARs e apareceu no meu eclipse a minha classe.

Já estou utilizado os métodos que estão no meu .jar, mas na hora que eu vou dar um ANT BUILD ele apresenta o seguinte erro:

[code]
Buildfile: C:\Junior Bruno\Pessoal\Projeto Java\TerraJava\build.xml
prepare:
compile:
[javac] Compiling 1 source file to C:\tomcat-4.1.31\webapps\terrajava\WEB-INF\classes

[javac] C:\Junior Bruno\Pessoal\Projeto Java\TerraJava\src\br\org\funcate\terramanager\TerraJavaDll.java:7: package br.org.funcate.dllterra does not exist

[javac] import br.org.funcate.dllterra.*;
[javac] ^

[javac] C:\Junior Bruno\Pessoal\Projeto Java\TerraJava\src\br\org\funcate\terramanager\TerraJavaDll.java:14: cannot resolve symbol

[javac] symbol  : class DllTerra

[javac] location: class br.org.funcate.terramanager.TerraJavaDll
[javac] DllTerra teste;
[javac] ^
[javac] C:\Junior Bruno\Pessoal\Projeto Java\TerraJava\src\br\org\funcate\terramanager\TerraJavaDll.java:51: cannot resolve symbol
[javac] symbol  : variable DllTerra
[javac] location: class br.org.funcate.terramanager.TerraJavaDll
[javac] DllTerra.teste();
[javac] ^
[javac] 3 errors

BUILD FAILED[/code]

Pessoal.

Gostaria de saber se tenho que confugurar alguma coisa no Tomcat para poder utilizar uma dll.

Tenho que fazer alguma configuração no meu build.xml para copiar a dll em um diretório da minha página?

Na minha dll existe um método que conecta ao bando de dados (que pode ser Access, Oracle, SqlServer, Postgres e MySql). Gostaria de saber se tenho que ter o driver do banco instalado no meu servidor para rodar a aplicação web?