Re: [java-list] Servidor RMI...

2002-03-04 Por tôpico Wilhem de Araujo Rodrigues

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() + ');
 

Re: [java-list] Servidor RMI...

2002-03-04 Por tôpico Helder da Rocha

Olá...(sreng sreng?)

Para que um stub seja encontrado pelo RMIRegistry ele precisa estar no seu
classpath ou codebase. A menos que o CLASSPATH da sua aplicação faça parte
do CLASSPATH do RMIRegistry (geralmente não é o caso) ele não vai achar o
stub e vai procurar no codebase que precisa ser definido na sua aplicação
(ou via linha de comando ao executar o servidor). O codebase também serve
para que um cliente remoto possa fazer download do seu stub.

No exemplo abaixo, usado em um JAR com CLASSPATH único, o RMI registry verá
os arquivos que estiverem no CLASSPATH da aplicação.

java.util.Properties props = System.getProperties();
props.setProperty(java.rmi.server.codebase, file:// +
props.getProperty(java.class.path));

Normalmente, em vez de file:// você usaria http://, ftp:// ou outro
protocolo para que seus clientes remotos possam baixar os stubs.

Observe que o código acima pode falhar se java.class.path tiver mais de um
caminho (é preciso testar isto antes e partir o string em caminhos
separados. O code base pode ter vários caminhos. É só separar com espaços:

props.setProperty(java.rmi.server.codebase, http://abc.com/stubs.jar
http://xyz.com/morestubs/;));

Você também pode passar a propriedade na linha de comando ou guardar em um
arquivo .properties:

java -Djava.rmi.server.codebase=http://abc/coisas/stubs.jar
myrmi.server.Server
java -Djava.rmi.server.codebase=http://abc/coisas/stubs.jar
http://xyz/stubs/; myserver.Server

Importante: se o codebase contiver um diretório é necessário que termine em
/ (já perdi um domingo inteiro por não observar esse detalhe).

[]s
Helder.

--
Helder da Rocha
Web Consultant
www.argonavis.com.br
São Paulo

- Original Message -
From: sreng sreng [EMAIL PROTECTED]
To: [EMAIL PROTECTED]
Sent: Monday, March 04, 2002 2:04 PM
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



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