Olá. experimente separar as suas classes em jars diferentes. um para o cliente e um para o servidor. Inicie as aplicações, efetue o teste e nos reporte.
Num pequeno exemplo simplório de distribuição de mensagens utilizei esse esquema e funcionou bem. Trata-se de um ambiente de envio de mensagens de log para o servidor que registra em arquivo txt, onde as mensagens sao enviadas por dois clientes. Um via RMI e outro via SOAP. Se alguém tiver interesse posso enviar. Abraços willy > > From: "sreng sreng" <[EMAIL PROTECTED]> > Date: 2002/03/04 Seg PM 05:04:01 GMT-03:00 > To: [EMAIL PROTECTED] > Subject: [java-list] Servidor RMI... > > > 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(); > } > } > > ------------------------------ 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] -------------------------------------------------------------------------