GARANTIR DESCONTO

Fórum Problema estranho com JBOSS 4.2.2 GA #14355

20/01/2010

0

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
Alan Santos

Alan Santos

Responder

Posts

20/01/2010

Alan Santos

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
Responder

Gostei + 0

21/01/2010

Alan Santos

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
Responder

Gostei + 0

21/01/2010

Henrique Weissmann

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?
Responder

Gostei + 0

21/01/2010

Alan Santos

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
Responder

Gostei + 0

21/01/2010

Henrique Weissmann

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?
Responder

Gostei + 0

21/01/2010

Alan Santos

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
Responder

Gostei + 0

21/01/2010

Henrique Weissmann

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.)
Responder

Gostei + 0

21/01/2010

Alan Santos

É 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
Responder

Gostei + 0

21/01/2010

Henrique Weissmann

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?
Responder

Gostei + 0

21/01/2010

Alan Santos

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
Responder

Gostei + 0

21/01/2010

Alan Santos

Tirei o jboss-serialization.jar do lado cliente, mas o método continua lançando exception quando passo o objeto "cheio".

tks
Responder

Gostei + 0

21/01/2010

Henrique Weissmann

Já deu uma lida na documentação do JBoss Serialization? Talvez lá haja a solução para o seu problema.
Responder

Gostei + 0

22/01/2010

Alan Santos

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
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar