Que erro é esse?

12 respostas
S

Pessoal estou usando RMI onde um pc tem o servidor que executo seu stub, inicio o rmiregistry e rodo o servidor...

tenho uma outra aplicação que é o cliente... onde faço seu stub tbm e executo a aplicação para salvar no banco de dados do Servidor

Quando executo a aplicação não da erro nenhum, mais quando clico no botão salvar ele da esse erro:

run:
java.rmi.ServerException: RemoteException occurred in server thread; nested exception is: 
        java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: 
        java.io.InvalidClassException: Dominio.Veiculo; local class incompatible: stream classdesc serialVersionUID = -5429522017618971673, local class serialVersionUID = 7374631058537327199
        at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:336)
        at sun.rmi.transport.Transport$1.run(Transport.java:159)
        at java.security.AccessController.doPrivileged(Native Method)
        at sun.rmi.transport.Transport.serviceCall(Transport.java:155)
        at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535)
        at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790)
        at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
        at java.lang.Thread.run(Thread.java:619)
        at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:255)
        at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:233)
        at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:142)
        at Controle.Fachada_Stub.setDomainObject(Unknown Source)
        at View.RegistrarOcorrencia.jButton1ActionPerformed(RegistrarOcorrencia.java:295)
        at View.RegistrarOcorrencia.access$000(RegistrarOcorrencia.java:39)
        at View.RegistrarOcorrencia$1.actionPerformed(RegistrarOcorrencia.java:134)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
        at java.awt.Component.processMouseEvent(Component.java:6263)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
        at java.awt.Component.processEvent(Component.java:6028)
        at java.awt.Container.processEvent(Container.java:2041)
        at java.awt.Component.dispatchEventImpl(Component.java:4630)
        at java.awt.Container.dispatchEventImpl(Container.java:2099)
        at java.awt.Component.dispatchEvent(Component.java:4460)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
        at java.awt.Container.dispatchEventImpl(Container.java:2085)
        at java.awt.Window.dispatchEventImpl(Window.java:2475)
        at java.awt.Component.dispatchEvent(Component.java:4460)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
Caused by: java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: 
        java.io.InvalidClassException: Dominio.Veiculo; local class incompatible: stream classdesc serialVersionUID = -5429522017618971673, local class serialVersionUID = 7374631058537327199
        at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:293)
        at sun.rmi.transport.Transport$1.run(Transport.java:159)
        at java.security.AccessController.doPrivileged(Native Method)
        at sun.rmi.transport.Transport.serviceCall(Transport.java:155)
        at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535)
        at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790)
        at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
        at java.lang.Thread.run(Thread.java:619)
Caused by: java.io.InvalidClassException: Dominio.Veiculo; local class incompatible: stream classdesc serialVersionUID = -5429522017618971673, local class serialVersionUID = 7374631058537327199
        at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:562)
        at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1583)
        at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1496)
        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1732)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
        at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947)
        at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871)
        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
        at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
        at sun.rmi.server.UnicastRef.unmarshalValue(UnicastRef.java:306)
        at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:290)
        ... 9 more

essa é minha view fazer o registro:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        try {
            JOptionPane.showMessageDialog(null, "aki");
            Ocorrencia ocorrencia = new Ocorrencia();
        
            IFachada fachada = new Fachada();

            Cliente cliente = new Cliente();
            cliente.setCPF(Integer.parseInt(tfcpf.getText()));
            cliente.setNome(tfcliente.getText());
            ocorrencia.setCliente(cliente);




            Servicos servicos = new Servicos();
                TipoServico tiposervico = new TipoServico();
                         tiposervico.setDescricaoServico((String.valueOf(jComboBox1.getSelectedItem())));
                                 tiposervico.setIdServico(Integer.parseInt(codservico.getText()));

            ocorrencia.setServicos(servicos);
            ocorrencia.getServicos().setTiposervico(tiposervico);

            Veiculo veiculo = new Veiculo();
            veiculo.setPlaca(tfplaca.getText());
            veiculo.setNomeVeiculo(tfveiculo.getText());
            ocorrencia.setVeiculo(veiculo);

            ocorrencia.setIDOcorrencia(Integer.parseInt(tfcodigo.getText()));
      
            ocorrencia.setDescricao(tfdescricaoocorrencia.getText());

            ocorrencia.setData(tfdata.getText());
        


            fachada.setDomainObject(ocorrencia);
            fachada.inserir();
            JOptionPane.showMessageDialog(null, "ok salvo");

12 Respostas

Tchello

Essas classes que são transportadas (cliente, fornecedor, etc) são serializaveis?
Digo isso por que esse erro é muito comum quando não se serializa esses objetos.

S

estou fazendo assim:
tenho uma domainobject que é serializada

public abstract class DomainObject implements  Serializable {

    public DomainObject()throws RemoteException{}


    private int id;

    /**
     * @return the id
     */
    public int getId() {
        return id;
    }

e tdas minhas classes extendem aa ela exemplo:

public class Veiculo extends DomainObject {
private int codigoveiculo;
	private String placa;
    private String marca;
    private int ano;
    private String cor;
    private String opcionais;
    private String NomeVeiculo;


	private Ocorrencia ocorrencia;

	private Funcionario funcionario;

	//private Modelo modelo;

	private Cliente cliente;
    public Veiculo() throws RemoteException{}
Tchello

Então, olha só esse trecho do erro:

local class incompatible: stream classdesc serialVersionUID = -5429522017618971673, local class serialVersionUID = 7374631058537327199

Provavelmente você fez alguma alteração no seu pacote e subiu o ear pro servidor de aplicações, correto?
Verifique se a versão do jar no seu cliente é a mesma que está no ear.
Por segurança “rebuilde” a sua aplicação e logo em seguida readicione o jar dela no sue cliente (remova o antigo, de ok, adicione o novo, de ok), parece besteira, eu sei, mas acontece mesmo de usar versões diferentes do cliente e do servidor.
Qual IDE usa mesmo?

S

estou usando o netbeans 6.5

S

Mano rodou a parada!!!
fiz o que eu entendi de sua resposta… peguei a aplicação do servidor e coloquei no cliente… as 2 identicas e foi…

Outra duvida…
Preciso aque ambos os lado… cliente e servidor mandem mensagens na tela um paara o outro… exibindo essa mensagem em um joption pane…

vc tem algum exemplo disso?

Obrigado

Tchello

Fico contente que tenha rodado! Vale lembrar que as versões tanto do lado cliente quando do servidor devem ser idênticas! (a menos que as alterações sejam apenas dentro dos métodos de negócio, o importante é que seus objetos tenham atributos e métodos de assinaturas equivalentes).
Menssagens você diz jms? Daí poderia usar Managed Driven Beans.
Mas talvez seja uma solução complexa demais para um caso mais simples, o que você precisa exatamente?
Se forem mensagens assíncronas independentes da espera de um cliente talvez jms seja realmente uma boa opção, caso contrário evite-as.
Mas pera esquece isso tudo, antes me diga se você está usando algum servidor de aplicações, exemplifique o que sua aplicação cliente e servidor fazem, etc e tal.

S

eu pensei em jms… mais como eu tenho que apresentar meu pfc daki 2 semanas e tenho que arrumar tda analise ainda, acho q jms não seria bom por causa do tempo…

eu so queria uma coisa assim, exemplo:

o cara no auto peças consulta seu estoque e não localiza a peça… somente no estoque do “Cliente”, então ele envia uma mensagem para o outro pc informando a peça que deve ser enviada…

essa mensagem deve ser um alerta que seria “Urgente”… tem que ser exibido na tela por um joptionpane…

coisa simples… sabe fazer isso?

Tchello

Nessa caso jms seria interessante… ouvindo um topic onde as menssagens conteriam o cliente destino (senao seria necessario uma queue por cliente, ia ficar mto esquisito), a menssagem (contendo a peça, quantidade, descricao, etc etc etc). Um ObjectMessage ou mesmo um TextMessage já atende isso.

Mas nao poderia simplesmente enviar um e-mail pro cliente?

Tbm há uma gambi, ele faz algum insert numa tabela e de tempos em tempos alguém verifica se há registros… mas isso amarraria demais a app.

Tbm da pra usar socket… mas vai acabar dando time-out, não é uma boa solução.

Deve ter mais soluções, o que mais tem em mente?

S

O problema eh que não sei usar JMS nunca vi… nem fiz nada parecido…

O jms seria bem legal…

Mais fica dificil implementar isso?

Tchello

Então cara, difícil não é não.
Qual servidor de aplicações você ta usando? (JBoss, Glassfish, WebLogic…).

Quando aprendi MDB fiz uns exemplos pra ver se funcionava o que tava pensando… deram certo.
Só tive muitos problemas pq num determinado fluxo do sistema ele enviada MUITAS menssagens(tipo milhares em questão de minutos) curtas e uma menssagem MUITO grande ( com muitos objetos “pesados” ) e isso tava dando uns paus mto loucos.
Agora pela descrição do seu problema duvido muito que isso ocorra.
Me passa seu E-Mail por mp que te envio um material muito bom pra começar com mdbs.

Abraços!

S

Eu estou fazendo um aplicativo Desktop… não uso TomCat GlassFish nada…
Pra desktop da pra fazer jms?

meu email e msn = [email removido]

Tchello

souzajhonatan:
Eu estou fazendo um aplicativo Desktop… não uso TomCat GlassFish nada…
Pra desktop da pra fazer jms?

meu email e msn = [email removido]


Então cara, nem sei como usar jms em desktop sem um servidor de aplicações.
O que pode ser feito, também, é enviado um e-mail automaticamente pro cliente especifico que tem um verificador de e-mails automatico, que roda a cada x minutos, o que acha?
O JavaMail é bem sussa de se usar, da uma olhada.
Não sei se essa solução é a melhor, jms seria o mais adequado talvez, mas usar um App Sv. só por causa disso pode ser exagerado.

Abraços.

Criado 23 de novembro de 2009
Ultima resposta 25 de nov. de 2009
Respostas 12
Participantes 2