Problema estranho com JBOSS 4.2.2 GA
Boa tarde,
hoje me deparei com um problema estranho em uma aplicação aqui na empresa.
é uma aplicação Web (Tomcat) que utiliza diversos conponentes EJB já desenvolvidos e funcionando normalmente.
O que é estranho é que a chamada a um determinado método que, isolamente funciona perfeitamente, quando chamado após a execução de diversos outros métodos dá a seguinte exception:
ERROR [ServerThread] Worker thread initialization failure
java.io.EOFException
at org.jboss.remoting.transport.socket.ServerThread.processInvocation(ServerThread.java:530)
at org.jboss.remoting.transport.socket.ServerThread.dorun(ServerThread.java:373)
at org.jboss.remoting.transport.socket.ServerThread.run(ServerThread.java:166)
isso seria algum bug do JBOSS ou alguma configuração de JTA que precisa ser feita?
Obrigado
hoje me deparei com um problema estranho em uma aplicação aqui na empresa.
é uma aplicação Web (Tomcat) que utiliza diversos conponentes EJB já desenvolvidos e funcionando normalmente.
O que é estranho é que a chamada a um determinado método que, isolamente funciona perfeitamente, quando chamado após a execução de diversos outros métodos dá a seguinte exception:
ERROR [ServerThread] Worker thread initialization failure
java.io.EOFException
at org.jboss.remoting.transport.socket.ServerThread.processInvocation(ServerThread.java:530)
at org.jboss.remoting.transport.socket.ServerThread.dorun(ServerThread.java:373)
at org.jboss.remoting.transport.socket.ServerThread.run(ServerThread.java:166)
isso seria algum bug do JBOSS ou alguma configuração de JTA que precisa ser feita?
Obrigado
Alan Santos
Curtidas 0
Respostas
Alan Santos
20/01/2010
E o que é ainda mais estranho....
Fiz um teste chamando o mesmo método (insertPedido(TbPedido) ) passando um new TbPedido() e funcionou perfeitamente.
Mas chamar o método passando um objeto TbPedido existente lança a exception citada anteriormente.
Teriam alguma ideia do problema?
Tks
Fiz um teste chamando o mesmo método (insertPedido(TbPedido) ) passando um new TbPedido() e funcionou perfeitamente.
Mas chamar o método passando um objeto TbPedido existente lança a exception citada anteriormente.
Teriam alguma ideia do problema?
Tks
GOSTEI 0
Alan Santos
20/01/2010
Não acredito que esteja relacionado a quantidade de métodos que são chamados antes do método que dá problema... pois passando um objeto vazio o método funciona, mas passando o objeto "cheio", (setando todos os seus atributos) o método não funciona.
Até onde eu sei, para transmitir os dados do Tomcat ao JBoss o objeto é serializado para ser enviado.
Imagino que o erro esteja na serialização do objeto e suas referências, mas não consigo imaginar uma solução.
Fico no aguardo.
Obrigado
Até onde eu sei, para transmitir os dados do Tomcat ao JBoss o objeto é serializado para ser enviado.
Imagino que o erro esteja na serialização do objeto e suas referências, mas não consigo imaginar uma solução.
Fico no aguardo.
Obrigado
GOSTEI 0
Henrique Weissmann
20/01/2010
Olá Alan,
até o momento também não havia encontrado problema similar ao seu. Porém, após fazer algumas buscas na Internet, acabei encontrando situações similares ao seu caso:
* Será que os arquivos .jar do lado cliente estão corretos? Dê uma olhada nesta thread:
http://www.techienuggets.com/Comments?tx=15125
Pelo que vi, é o mais provável para o seu caso. A excessao java.io.EOFException ocorre quando você chega ao fim de um stream (ou arquivo) e tenta ler novamente conteúdo a partir do mesmo. Como não há mais nada, esta excessão normalmente é disparada.
Verifique o que lhe falei e mande-nos o seu retorno ok?
GOSTEI 0
Alan Santos
20/01/2010
Bom dia, Henrique.
Também já havia me deparado com esse forum (e outros semelhantes)...
Os .jar do cliente estão corretos e as versões do lado server e client são as mesmas.
Seguindo o caminho que apontei anteriormente quanto à serialização dos objetos, populei o objeto que preciso passando apenas a chave dos objetos que devem ser gravados no banco, ao invés do objeto propriamente dito, e o método funcionou normalmente. Acredito que funcionou pois o objeto está mais "leve".
Mas não acho essa solução correta... onde fica a orientação a objetos dessa forma?!?!?
Acredito que seja alguma configuração do Tomcat (5.5.2) ou JBoss (4.2.2 GA).
Ou pode ser um bug do JBoss, como apontado em alguns fóruns.
Tks
Também já havia me deparado com esse forum (e outros semelhantes)...
Os .jar do cliente estão corretos e as versões do lado server e client são as mesmas.
Seguindo o caminho que apontei anteriormente quanto à serialização dos objetos, populei o objeto que preciso passando apenas a chave dos objetos que devem ser gravados no banco, ao invés do objeto propriamente dito, e o método funcionou normalmente. Acredito que funcionou pois o objeto está mais "leve".
Mas não acho essa solução correta... onde fica a orientação a objetos dessa forma?!?!?
Acredito que seja alguma configuração do Tomcat (5.5.2) ou JBoss (4.2.2 GA).
Ou pode ser um bug do JBoss, como apontado em alguns fóruns.
Tks
GOSTEI 0
Henrique Weissmann
20/01/2010
Alan,
você talvez tenha matado a charada: os objetos que você está serializando possuem outros componentes que não sejam tipos primitivos ou strings? Se este for o caso, verifique se estes objetos também implementam a interface serializable. Se não a implementarem, inclua-a.
Porque nesta situação o problema da excessão EOFException passa a fazer ainda mais sentido, pois no momento de desserialização, o cliente pode estar esperando que algo que não era esperado ser desserializado o seja.
Como você mencionou, ao passar apenas o identificador do objeto, você não teve problemas, correto? Isto faz sentido, porque o identificador normalmente é ou uma string ou um tipo primitivo, que são naturalmente serializáveis.
Neste caso, não acredito que seja alguma configuração do Tomcat, pois ele apenas envia dados para o servidor EJB, correto? Experimente incluir a interface java.io.Serializable nos componentes de seu objeto e depois nos diga se funcionou ok?
GOSTEI 0
Alan Santos
20/01/2010
Os atributos do objeto em questão são praticamente todos não primitivos.
O problema é que todos já são Serializable...
Poderia ser erro com as Collections do JPA (Toplink) ?
Tks
O problema é que todos já são Serializable...
Poderia ser erro com as Collections do JPA (Toplink) ?
Tks
GOSTEI 0
Henrique Weissmann
20/01/2010
Neste caso não, porque o JPA não exige a interface Serializable para coisa alguma: ele simplesmente mapeia os atributos das classes para campos em bases de dados.
No entanto, se estiver sendo transmitido uma versão serializada do objeto pela rede, todos os membros da classe deverão implementar a interface java.io.Serializable (este último parágrafo nada tem a ver com JPA/Toplink/Hibernate/etc.)
GOSTEI 0
Alan Santos
20/01/2010
É quase certo que é um problema de serialização dos objetos.
Mas não consigo ver onde, pois todos os objetos já são serializable.
Alguma outra sugestão?
Tks
Mas não consigo ver onde, pois todos os objetos já são serializable.
Alguma outra sugestão?
Tks
GOSTEI 0
Henrique Weissmann
20/01/2010
Alan,
desta vez você realmente me pegou. Sabemos que é serialização: mas todos os objetos estão implementando Serializable, correto? Será que você não está usando sem saber a biblioteca de serialização da JBoss (http://www.jboss.org/serialization/)?
Podemos tentar o seguinte: já pensou em serializar seus objetos não usando o serializador default do Java, mas sim XML? Dê uma olhada nesta biblioteca: http://xstream.codehaus.org/
Vou pesquisar mais sobre o seu problema Alan, mas não posso garantir que vou conseguir uma resposta 100% satisfatória ok? Enquanto isto, podemos pensar em algumas outras alternativas para o seu problema, como por exemplo serialização por XML, o que me diz?
GOSTEI 0
Alan Santos
20/01/2010
Opa....
o lado client tem o jar jboss-serialization.jar do Jboss
seria esse o problema?
vou tirar esse jar e fazer o teste.
Tks
o lado client tem o jar jboss-serialization.jar do Jboss
seria esse o problema?
vou tirar esse jar e fazer o teste.
Tks
GOSTEI 0
Alan Santos
20/01/2010
Tirei o jboss-serialization.jar do lado cliente, mas o método continua lançando exception quando passo o objeto "cheio".
tks
tks
GOSTEI 0
Henrique Weissmann
20/01/2010
Já deu uma lida na documentação do JBoss Serialization? Talvez lá haja a solução para o seu problema.
GOSTEI 0
Alan Santos
20/01/2010
Por uma questão de prazo, vamos adotar a solução encontrada (enviar objetos somente com as chaves), mas darei uma olhada na espec do jboss e postarei depois o resultado.
obrigado
obrigado
GOSTEI 0