Ol� amigos de lista:

  Tenho tido um problema dif�cil de rastrear ao tentar fazer um servidor RMI 
rodar.

  Compilo a intreface remota, a classe servidora (implementa��o da classe 
remota), crio a classe stub (rmic -v1.2 nomedaclasse) e ponho o rmiregistry 
pra rodar.

  Quando executo a classe servidora, esta me retorna a seguinte exce��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)
**********************************************************************

   De onde se conclui que a classe stub n�o pode ser encontrada. Inclusive, 
quando executo o servidor pelo JBulder (e n�o diretamente pelo JDK) a classe 
stub � inclusive APAGADA.

   Algu�m j� teve algum problema parecido?

Segue o c�digo fonte do meu servidor, como refer�ncia (o endere�amento do 
banco de dados, conta e senha foram suprimidos):
***********************************************************************
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:@enderecodobanco", "usuario", 
"senha");
    }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.setSecurityManager(new RMISecurityManager());
      System.out.println("Iniciando servi�o de persistencia...");
      RMIPersistenciaImpl server = new RMIPersistenciaImpl();
      Naming.rebind("//164.137.86.103/PServer", server);
      System.out.println("Servidor de persistencia ativo.");
    }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();
  }
}

***********************************************************************

Algu�m pode me dar uma m�o?

_________________________________________________________________
Associe-se ao maior servi�o de e-mail do mundo atrav�s do MSN Hotmail. 
http://www.hotmail.com/br


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