Problemas com aplicação Java WEB Start com integração do Spring com o Hibernate

Pessoal tenho uma aplicação desktop onde utilizo o Spring para o controle das instâncias dos objetos (com injeção de dependências entre outras coisas) e utilizo para o acesso a banco de dados o Hibernate. Porém o Hibernate está integrado com o Spring. Até aí tudo bem, pois esta aplicação funciona normalmente quando executada da maneira tradicional.

Esta aplicação será distribuída através do Java WEB Start e é aí que estamos tendo problemas, pois desde que adicionamos o acesso ao banco de dados a aplicação não está sendo executada corretamente através do Java WEB Start. Mas a aplicação continua funcionando quando executada localmente.

O mensagem de erro que aparece no console é a seguinte: “Socket creation error”. Agora me pergunto porque ele não está conseguindo criar o socket de conexão com o banco de dados? Já configuramos o jnlp para que a aplicação possa acessar os recursos da máquina, tanto que a aplicação quando executada via Java WEB Start cria arquivos em um determinado diretório do usuário, utiliza impressora, etc.

Alguém já passou por problema semelhante? A equipe está desconfiando da integração do Spring com o Hibernate, porém isso por enquanto é uma suposição.

Agradeço antecipadamente qualquer ajuda para este problema.

[]s

Bom pessoal, o problema com o Java WEB Start persiste, porém descobrimos que o problema, especificamente falando, ocorre no momento em que o Hibernate tenta construir uma sessão de acesso ao banco de dados.
Então desta maneira eliminamos a hipósite de problemas com o Spring.
O que ocorre é que durante a execução do método de criação da sessão é retornada a mensagem “socjet creation error”. Porém volto, a afirmar que os arquivos estão assinados e, portanto, possuem permissão para utilizar os recursos da máquina do usuário quando este executa o aplicativo via Java WEB Start.

ps: quando executado do modo tradicional a aplicação funciona perfeitamente.

[]s

Você assinou também os jar do Spring e do Hibernate? Se sim, faça o seguinte:

  • Limpe a assinatura de todos os jar da sua aplicação(o jeito que eu conheço é apagar os arquivos de assinatura do jar que estão no diretório META-INF).
  • Assine novamente todos os jar
  • Limpe o cache do JWS (via Java Control Panel)
  • Refaça os testes

Oyama,

todos os jars da aplicação estão assinados corretamente e o procedimento de limpeza do cache do Java WEB Start foi feito e refeito N vezes pela a nossa equipe.
Estou realizando testes neste momento para averiguar se somente o Hibernate não consegue estabelecer a conexão com o banco de dados.

[]s

[quote=superbig]
todos os jars da aplicação estão assinados corretamente e o procedimento de limpeza do cache do Java WEB Start foi feito e refeito N vezes pela a nossa equipe.
Estou realizando testes neste momento para averiguar se somente o Hibernate não consegue estabelecer a conexão com o banco de dados.[/quote]

Qual banco de dados você está usando? Instalar a aplicação na máquina cliente sem ser por JWS e conectar no banco funciona? Qual a versão da JVM na máquina cliente? Qual o sistema operacional na máquina cliente? Tem firewall ativado? O usuário que está rodando tem permissão de “criar socket”?

Oyama,

[quote]Oyama escreveu

Qual banco de dados você está usando? Instalar a aplicação na máquina cliente sem ser por JWS e conectar no banco funciona? Qual a versão da JVM na máquina cliente? Qual o sistema operacional na máquina cliente? Tem firewall ativado? O usuário que está rodando tem permissão de “criar socket”?
[/quote]
respondendo as suas perguntas:

O banco de dados utilizado é o HSQLDB.
Quando instalo na máquina do cliente sem ser por JWS a aplicação conecta normalmente no banco de dados.
A versão da JVM é a 1.6.0_05.
O sistema operacional no cliente é o Windows XP.
Não há firewall ativado.
Quanto a última pergunta, o usuário possui permissão de utilizar a rede no sistema operacional, já no Java WEB Start acredito que ele deveria possuir tal permissão, pois no arquivo JNLP inseri a seguinte instrução:

<security> 
        <all-permissions/> 
</security> 

Quanto aos testes que citei anteriormente, pude constatar que mesmo utilizando JDBC puro o software não estabelece a conexão com o banco de dados, logo o problema não é do Hibernate. Estou suspeitando que está faltando alguma configuração específica no arquivo JNLP.

[]s

Você está enviando o banco junto da aplicação (JWS) ou o banco está remoto?

O que eu queria saber se o usuário tem permissão de “escrita” em socket. Como é WinXP, a perguante seria: está rodando como administrador da máquina?

Coloque o StackTrace completo do erro. Pode ser que de uma ideia melhor do problema…

Oyama,

o banco de dados é remoto e o usuário é o administrador da máquina. Segue o stack trace gerado:

[]s

uma duvida:
o hsqldb foi startado no modo server?
Sem isso ele não aceita conexões remotas.

[]´s

Pessoal,

enfim encontrei o culpado e já solucionei o problema de acesso ao banco via Java WEB Start. O culpado era o proxy da rede e a solução foi configurar o mesmo para ignorar o IP da máquina onde o banco de dados está sendo executado.
Esse problema ocorre no Java WEB Start porque por padrão ele utiliza as configurações de proxy do sistema, porém quando executo a aplicação da forma tradicional não há nenhuma intervenção do proxy durante o tráfego de dados na rede.
Agradeço a todos, principalmente ao Oyama, por me acompanharem na resolução deste problema.

[]s