Rmi com netbeans

to tentando implementar uma calculador usando rmi, mas não sei como faz para gerar os stubs e os skeletons necessarios para o devido funcionamento. tenho um cliente, uma interface, a implementação da interface e o servidor. quando rodo o cliente (run do netbeans), ta ok, mas quando tento somar não ha a comunicação.

como resolver?
bjs…

ha esqueci. olha um pedaço do cod.:
[long x,y,r;
String num1, num2;
num1=vlr1.getText();
num2=vlr2.getText();
x=Long.parseLong(num1);
y=Long.parseLong(num2);
try {
InterfaceCalculadora c = (InterfaceCalculadora) Naming.lookup(“rmi://localhost/InterfaceCalculadorService”);
r=c.Soma(x,y);
} catch (Exception e){JOptionPane.showMessageDialog(null,"Problema: "+e);}]

Olá Jussa…

De uma olhada no tutorial sobre RMI que tem aqui mesmo no GUJ, com certeza você conseguirá responder suas dúvidas. O tutorial é bem simples e fácil de entender.

URL do tutorial:
http://www.guj.com.br/java.tutorial.artigo.37.1.guj

Espero ter ajudado
Qualquer coisa é só perguntar…

valeu, ricardo!
eu não estava sabendo como fazer rodar tudo no netbeans, mas acho que não é possível, tenho que usar o console para o registry.
abraços!

cara esses tipos de testes é legal voce fazer tudo na mao sabe, sem IDE.
IDE sempre facilita uma coisa ou outra e no final se ajente ainda é leigo se fode geral!

rmic gera o skeleton eo stub!

exatmente, n tem como rodar td no NetBeans n, vc tem q dar o rmic p gerar os stubs e skeletons e dps rmiregistry p serem registrados.

o eskema eh o seguinte (supondo ja compilados os skeletons e stubs):

1- na pasta dos stubs e skeletons, digita rmiregistry no prompt (n se eskeca de estar na pasta, levei mto pau nisso)
2- roda o servidor q ira registrar os objetos
3- roda o cliente q ira usa-los
4- divirta-se

ajudei?
qlq duvida posta ai…

rodou perfeitinho :slight_smile:

Só um detalhe:

Não foi gerado o arquivo skeleton conforme citado no tutorial, porém, conforme andei pesquisando, isso é normal para as novas versões do RMI, ele não necessita mais do skeleton ^^

vlw por contribuir

Boa Noite, eu também estou tentando rodar minha aplicação e também está dando erro do tipo:
Erro:java.rmi.ConnectException: Connection refused to host: localhost; nested exception is:
java.rmi.ConnectException: Connection refused to host: localhost; nested exception is:
java.net.ConnectException: Connection refused: connect
java.net.ConnectException: Connection refused: connect

O meu CLIENTE roda normalmente, mas quando vai acessar o SERVIDOR, dá esse erro.

Já tentei fazer várias coisas e mesmo assim ainda não consegui, se alguem puder me ajudar, ficarei muito Feliz.
Abaixo segue meu código,
Bjos,
Rebecca

SERVIDOR

view plaincopy to clipboardprint?

    /* 
    * To change this template, choose Tools | Templates 
    * and open the template in the editor. 
    */  
    package rmi;  
    import java.rmi.Naming;  
        import java.rmi.RemoteException;  
           
    /** 
    *  
    * @author Rebecca 
    */  
    public class Servidor  
        {  
                /** 
                 *  
                 * @throws RemoteException 
                 */  
                public Servidor() throws RemoteException  
            {  
                String localServico = "rmi://localhost:1099/InterfaceCalculoRemoto";  
                InterfaceCalculoRemoto objServidorRemoto = new ImplementacaoCalculoRemoto();  
           
                try  
                {  
                     Naming.rebind(localServico, objServidorRemoto);  
                }  
                catch (Exception e)  
                {  
                     e.printStackTrace();  
                }  
             }  
           
                /** 
                 *  
                 * @param args 
                 * @throws RemoteException 
                 */  
                public static void main(String[] args) throws RemoteException  
                {  
                      Servidor objServidor = new Servidor();  
                }  
        }  

CLIENTE

view plaincopy to clipboardprint?

    /* 
    * To change this template, choose Tools | Templates 
    * and open the template in the editor. 
    */  
    package rmi;  
      
    import java.net.MalformedURLException;  
        import java.rmi.Naming;  
        import java.rmi.NotBoundException;  
        import java.rmi.RemoteException;  
        import javax.swing.JOptionPane;  
      
           
    /** 
    *  
    * @author Rebecca 
    */  
    public class Cliente {  
           
        /** 
         *  
         * @param args 
         */  
        public static void main(String[] args)  
            {  
                try {  
                       int val1 = Integer.parseInt(JOptionPane.showInputDialog("Entre com o primeiro valor"));  
                       String opcao[] = {"+", "-", "*", "/"};  
           
                       int operacao = JOptionPane.showOptionDialog(null, "Escolha uma das operacoes", "Tipo de operacao",  
                       0, JOptionPane.INFORMATION_MESSAGE, null, opcao, opcao[0]);  
           
                       int val2 = Integer.parseInt(JOptionPane.showInputDialog("Entre com o segundo valor"));  
           
                       InterfaceCalculoRemoto objCalculoRemoto = (InterfaceCalculoRemoto)Naming.lookup("rmi://localhost:1099/InterfaceCalculoRemoto");  
           
                       System.out.println("Servidor fala: O resultado é = " + objCalculoRemoto.metodo_calcular(val1, val2, operacao));  
                       objCalculoRemoto.mensagemServidor("Recebi a Resposta");  
                 }  
           
                    catch (MalformedURLException e)  
                    {  
                            System.out.println("Erro:" + e.toString());  
                            e.printStackTrace();  
                    }  
                    catch (RemoteException e)  
                    {  
                            System.out.println("Erro:" + e.toString());  
                            e.printStackTrace();  
                        }  
                    catch (NotBoundException e)  
                    {  
                            System.out.println("Erro:" + e.toString());  
                            e.printStackTrace();  
                        }  
                    catch (Exception e)  
                    {  
                            JOptionPane.showMessageDialog(null, "Entrada inválida", e.getMessage(), JOptionPane.ERROR_MESSAGE);  
                            System.exit(-1);  
                    }  
            }  
    }  

IMPLEMENTAÇÃO CALCULOREMOTO

view plaincopy to clipboardprint?

    /* 
    * To change this template, choose Tools | Templates 
    * and open the template in the editor. 
    */  
    package rmi;  
      
    import java.rmi.RemoteException;  
        import java.rmi.server.UnicastRemoteObject;  
           
    /** 
    *  
    * @author Rebecca 
    */  
    public class ImplementacaoCalculoRemoto extends UnicastRemoteObject implements InterfaceCalculoRemoto  
        {  
          
        /** 
         *  
         * @throws RemoteException 
         */  
        public ImplementacaoCalculoRemoto() throws RemoteException  
            { }  
           
                /** 
                 *  
                 * @param mensagem 
                 * @throws RemoteException 
                 */  
        @Override  
                public void mensagemServidor(String mensagem) throws RemoteException  
        {  
              System.out.println("Cliente fala: " + mensagem);  
        }  
           
                /** 
                 *  
                 * @param val1 
                 * @param val2 
                 * @param op 
                 * @return 
                 * @throws RemoteException 
                 */  
        @Override  
                public double metodo_calcular(int val1, int val2, int op) throws RemoteException  
        {  
           double v1 = Double.valueOf(String.valueOf(val1));  
           double v2 = Double.valueOf(String.valueOf(val2));  
           
              if (op == 0)  
              {  
                  return (v1 + v2);  
              }  
              else  
                  if (op == 1)  
                  {  
                      return (v1 - v2);  
                  }  
                  else  
                      if (op == 2)  
                      {  
                          return (v1 * v2);  
                      }  
                      else  
                           if (op == 3)  
                           {  
                               return (v1 / v2);  
                            }  
             return 0;  
          }  
    }  

INTERFACE CALCULOREMOTO

view plaincopy to clipboardprint?

    /* 
    * To change this template, choose Tools | Templates 
    * and open the template in the editor. 
    */  
    package rmi;  
      
    import java.rmi.Remote;  
        import java.rmi.RemoteException;  
           
    /** 
    *  
    * @author Rebecca 
    */  
    public interface InterfaceCalculoRemoto extends Remote  
        {  
                /** 
                 *  
                 * @param val1 
                 * @param val2 
                 * @param operacao 
                 * @return 
                 * @throws RemoteException 
                 */  
                public double metodo_calcular(int val1, int val2, int operacao) throws RemoteException;  
                /** 
                 *  
                 * @param mensagem 
                 * @throws RemoteException 
                 */  
                public void mensagemServidor(String mensagem) throws RemoteException;  
        }  

Fico no aguardo, Obrigada

Ahhh, Eu abri o cmd e digitei “java rmi.Servidor” e tbem deu erro do tipo “Não foi possível localizar nem carregar a classe principal rmi.Servidor”. De fato não sei mais o que eu faço…rsrs.
Sou novata nisso, acho que até da pra perceber pelo exemplo do trabalho que fiz…rsrs. O que eu fiz, foi o seguinte, fiz esses programinhas em netbeans, selecionei o arquivo e coloquei pra executar (não sei se só tem isso pra ser feito ou se tem mais alguma coisa), primeiro selecionei o cliente e executei, ele roda perfeitamente, quando o cliente envia a mensagem para o servidor que aparece esse erro. Já desabilitei meu firewall e mesmo assim dá erro. Eu li que teria de ir no cmd e fazer algumas coisas, mas nem sei como faço isso. De fato, nao sei o que fazer, se puder passar “passo a passo” pra mim, ficarei extremamente grata. Imagine que só criei os arquivos no netbeans e coloquei pra executar, como se eu estivesse feito um aplicativo desktop normal, onde crio as classes e depois de tudo pronto, só coloco pra executar e é aberto normalmente. Com o Rmi, sei que nao é somente isso, preciso de mais coisas, mas onde vou? como faço pra startar o servidor? o que preciso fazer para rodar essa simples aplicação?

Só pra complementar, eu abri o cmd e fui nos diretórios da pasta do netbeansprojects tentei fazer o registro do rmi, apareceu que “esse comando não é reconhecido como comando interno ou externo, um programa operável ou um arquivo em lotes”.
Acredito que o erro não estão nas minhas classes, acho que está na forma de fazer rodar o rmi. De verdade, não sei o que fazer…rsrsr
O netbeans já compilou o arquivo, ja abri o cmd, fui nos diretórios, mas na hora de tentar fazer o rmiregistry, aparece o erro acima.

Como faço pra rodar isso??? Me ajudemmmmm…rsrsrs