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