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.
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.
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=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”?
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.
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.