[Duvida] RMI e HIBERNATE [java.lang.ClassNotFoundException: org.hibernate.collection.PersistentBag]

2 respostas
fabriciopellegrini

Olá

Eu tenho os seguintes projeto de puglins:

Persistence - onde estão minhas classes mapeadas usando Hibernate e o pacoteDAO
Servidor - onde esta minha aplicação que vai gerenciar os clientes. Utiliza RMI para cominicação, portanto possui a implementação e interfaces das minhas classes. Ele exporta o pacote de interface para o cliente via plugin.
Cliente - Produto RCP do eclipse.

Estou com essa exceção:

java.rmi.UnmarshalException: error unmarshalling return; nested exception is: java.lang.ClassNotFoundException: org.hibernate.collection.PersistentBag (no security manager: RMI class loader disabled) at sun.rmi.server.UnicastRef.invoke(Unknown Source) at java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(Unknown Source) at java.rmi.server.RemoteObjectInvocationHandler.invoke(Unknown Source) at $Proxy0.login(Unknown Source)

Ela está sendo levantada quando no meu cliente eu tento chamar o metodo login. Esse cliente é um plugin RCP do eclipse que estou reescrevendo para atender o modelo cliente/servidor.

Eu tbm possuo um cliente teste, que eh apenas um main java chamando os metodos do servidor.
Nesse cliente teste tudo funciona, nenhuma exceção é levantada.

Fiz mais alguns testes com meu cliente RPC, quando tento executar ele pela segunda vez recebo a resposta que o usuario já esta logado. Então suspeito que o erro de unmarshalling esta sendo quando o servidor retorna para o cliente o Objeto User (que já implementa Serializable). Tambem testei um metodo que retorna um valor booleano e nenhuma exceção foi levantada.

Mas não consegui descobrir a razão dessa exceção

Alguma dica?

2 Respostas

maior_abandonado

bom…só uma suposição, mas na falta de outra coisa… desconfio de certo problema de atenção, esse objeto User, quais classes ele referencia nas variaveis dele? estou meio desconfiado que ele use alguma variavel que tenha possa ter outra desse tipo “PersistentBag”, se for isso, você vai precisar tratar a serialização para esse caso, se for isso mesmo acredito que marcando sua variavel como transient resolva. O ideal mesmo é o objeto transitado no RMI só possuir tipos primitivos, wrappers, bigDecimal, tipos que sejam seus e você possa controlar a serialização…

fabriciopellegrini

Vou dar uma chegada nisso…
Mas isso não explica quando eu executo meu clienteTest usando run as JavaApplication no Eclipse, todos os metodos funcionam perfeitamente.
Desconfio que seja algum parametro de execução quando se usa run as Eclipse Application para executar um produto RCP.

Criado 10 de março de 2010
Ultima resposta 10 de mar. de 2010
Respostas 2
Participantes 2