Olá, colegas da lista:

Estou desenvolvendo um servidor RMI para um projeto interno. Mas tenho um
problema muito chato. Compilo a classe do servidor (implementação da minha
interface remota) com sucesso e construo a classe stub (através de rmic
-v1.2 nomeDaClasse). Quando executo o servidor, esta execção:

********************************************************************
java.rmi.ServerException: RemoteException occurred in server thread; nested
exception is:
java.rmi.UnmarshalException: error unmarshalling arguments; nested
exception is:
java.lang.ClassNotFoundException:
br.com.aopec.gabriel.servers.RMIPersistenciaImpl_Stub

java.rmi.UnmarshalException: error unmarshalling arguments; nested exception
is:
java.lang.ClassNotFoundException:
br.com.aopec.gabriel.servers.RMIPersistenciaImpl_Stub

java.lang.ClassNotFoundException:
br.com.aopec.gabriel.servers.RMIPersistenciaImpl_Stub

at
sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:245)

at
sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:220)

at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:354)

at sun.rmi.registry.RegistryImpl_Stub.rebind(Unknown Source)

at java.rmi.Naming.rebind(Naming.java:160)

at
br.com.aopec.gabriel.servers.RMIPersistenciaImpl.main(RMIPersistenciaImpl.java:160)
**********************************************************************

  Informando que a classe stub não foi encontrada. De fato, minha classe
stub é APAGADA durante a execução. Alguém já teve esse tipo de problema?
Alguém pode me ajudar?


Segue o código fonte da minha classe servidora, para referência:

**********************************************************************
package br.com.aopec.gabriel.servers;

import java.rmi.server.*;
import java.rmi.*;
import br.com.aopec.gabriel.objetos.*;
import br.com.aopec.gabriel.exceptions.*;
import java.sql.*;
import java.util.*;
/**
* Title:        AOPEC Gabriel: Sistema de Mensagens
* Description:  Sistema de compartilhamento e registro de mensagens AOPEC.
* Copyright:    Copyright (c) 2001
* Company:      AOPEC
* @author Cláudio Marcelo Silva
* @version 1.0
*/

public class RMIPersistenciaImpl extends UnicastRemoteObject implements
RMIPersistencia{
private Connection conexao;

public RMIPersistenciaImpl()throws RemoteException {
   try{
     Class.forName("oracle.jdbc.driver.OracleDriver");
     conexao =
DriverManager.getConnection("jdbc:oracle:thin:@164.137.86.230:1521:bd01",
"alunoJava", "alunoJava");
   }catch(Exception e){
     e.printStackTrace();
   }
}

public void addUsuario(Usuario user)throws RemoteException{
   try{
     Statement st = conexao.createStatement();
     String values = "'" + user.getID() + "', '" + user.getNome() + "', " +
user.getCargoID() + ", '" + user.getEMail() + "', '" + user.getTelefone() +
"'";
     st.executeUpdate("Insert into Usuario VALUES(" + values + ")");
     st.close();
   }catch(Exception e){
     System.err.println("Falha ao adicionar usuário");
     e.printStackTrace(System.err);
   }
}

public void removeUsuario(Usuario user)throws RemoteException{
   try{
     Statement st = conexao.createStatement();
     st.executeUpdate("Delete from Usuario where user_id='" + user.getID()
+ "'");
     st.close();
   }catch(Exception e){
     System.err.println("Falha ao remover usuario");
     e.printStackTrace(System.err);
   }
}

public void registraMensagem(AbstractMsg msg)throws RemoteException{
   try{
     Statement st = conexao.createStatement();
     String values = "'" + msg.getID() + "', " + msg.getTitulo() + "', '" +
msg.getCorpo() + "', '" + msg.getRemID() + "', " + msg.getDestID() + "'";
     st.executeUpdate("Insert Into Mensagem values(" + values + ")");
     st.close();
   }catch(Exception e){
     System.err.println("Falha ao registrar mensagem");
     e.printStackTrace(System.err);
   }
}

public AbstractMsg[] listaMensagensUsuario(Usuario user)throws
RemoteException{
   AbstractMsg[] msgArray = null;
   try{
     Statement st = conexao.createStatement();
     ResultSet rsConta = st.executeQuery("Select Count(*) AS Conta FROM
Mensagem WHERE Destino_id = '" + user.getID() + "'");
     int contagem = rsConta.getInt("Conta");
     rsConta.close();
     ResultSet rs = st.executeQuery("SELECT Corpo, Titulo FROM Mensagem
WHERE Destino_id = '" + user.getID() + "'");
     msgArray = new AbstractMsg[contagem];
     int index = 0;
     while(rs.next()){
       AbstractMsg msg = new Mensagem();
       msg.setCorpo(rs.getString("corpo"));
       msg.setTitulo(rs.getString("titulo"));
       msgArray[index] = msg;
       index++;
     }
     rs.close();
     st.close();
   }catch(Exception e){
     System.err.println("Falha ao listar mensagem para o usuario " +
user.getNome() + "@" + user.getID());
     e.printStackTrace(System.err);
   }
   return msgArray;
}

public AbstractMsg[] listaMensagensEnviadas(Usuario user)throws
RemoteException{
   AbstractMsg[] msgArray = null;
   try{
     Statement st = conexao.createStatement();
     ResultSet rsConta = st.executeQuery("Select Count(*) AS Conta FROM
Mensagem WHERE Rem_id = '" + user.getID() + "'");
     int contagem = rsConta.getInt("Conta");
     rsConta.close();
     ResultSet rs = st.executeQuery("SELECT Corpo, Titulo FROM Mensagem
WHERE Rem_id = '" + user.getID() + "'");
     msgArray = new AbstractMsg[contagem];
     int index = 0;
     while(rs.next()){
       AbstractMsg msg = new Mensagem();
       msg.setCorpo(rs.getString("corpo"));
       msg.setTitulo(rs.getString("titulo"));
       msgArray[index] = msg;
       index++;
     }
     rs.close();
     st.close();
   }catch(Exception e){
     System.err.println("Falha ao listar mensagem para o usuario " +
user.getNome() + "@" + user.getID());
     e.printStackTrace(System.err);
   }
   return msgArray;
}

public AbstractMsg[] listaMensagensRoot(Usuario user)throws
RemoteException, NotRootException{
   if(user.getID().equals("0")) throw new NotRootException();
   AbstractMsg[] msgArray = null;
   try{
     Statement st = conexao.createStatement();
     ResultSet rsConta = st.executeQuery("Select Count(*) AS Conta FROM
Mensagem");
     int contagem = rsConta.getInt("Conta");
     rsConta.close();
     ResultSet rs = st.executeQuery("SELECT Corpo, Titulo FROM Mensagem");
     msgArray = new AbstractMsg[contagem];
     int index = 0;
     while(rs.next()){
       AbstractMsg msg = new Mensagem();
       msg.setCorpo(rs.getString("corpo"));
       msg.setTitulo(rs.getString("titulo"));
       msgArray[index] = msg;
       index++;
     }
     rs.close();
     st.close();
   }catch(Exception e){
     System.err.println("Falha ao listar mensagem para o usuario Root");
     e.printStackTrace(System.err);
   }
   return msgArray;
}

public void removeMensagem(AbstractMsg msg)throws RemoteException{
   try{
     Statement st = conexao.createStatement();
     st.executeUpdate("Delete from Mensagem where msg_id='" + msg.getID() +
"'");
     st.close();
   }catch(Exception e){
     System.err.println("Falha ao apagar a mensagem " + msg.getTitulo() +
"@" + msg.getID());
     e.printStackTrace(System.err);
   }
}

public static void main(String args[]){
   try{
     System.out.println("Iniciando serviço de persistencia...");
     RMIPersistenciaImpl server = new RMIPersistenciaImpl();
     Naming.rebind("//164.137.86.103/PServer", server);
   }catch(Exception e){
     System.err.println("Falha ao iniciar servidor");
     e.printStackTrace(System.err);
   }
}

public void finalize(){
   try{
     conexao.close();
   }catch(Exception e){
     e.printStackTrace(System.err);
   }
   System.gc();
}
}
************************************************************************

_________________________________________________________________
O MSN Photos é o jeito mais fácil de compartilhar, editar e imprimir suas 
fotos preferidas: http://photos.msn.com.br/support/worldwide.aspx


------------------------------ LISTA SOUJAVA ---------------------------- 
http://www.soujava.org.br  -  Sociedade de Usuários Java da Sucesu-SP 
dúvidas mais comuns: http://www.soujava.org.br/faq.htm
regras da lista: http://www.soujava.org.br/regras.htm
historico: http://www.mail-archive.com/java-list%40soujava.org.br
para sair da lista: envie email para [EMAIL PROTECTED] 
-------------------------------------------------------------------------

Responder a