Aplicativo Java RMI

Para escrever um aplicativo RMI Java, você teria que seguir as etapas fornecidas abaixo -

  • Defina a interface remota
  • Desenvolva a classe de implementação (objeto remoto)
  • Desenvolva o programa de servidor
  • Desenvolva o programa do cliente
  • Compile o aplicativo
  • Execute o aplicativo

Definindo a Interface Remota

Uma interface remota fornece a descrição de todos os métodos de um determinado objeto remoto. O cliente se comunica com esta interface remota.

Para criar uma interface remota -

  • Crie uma interface que estenda a interface predefinida Remote que pertence ao pacote.

  • Declare todos os métodos de negócios que podem ser chamados pelo cliente nesta interface.

  • Como há uma chance de problemas de rede durante chamadas remotas, uma exceção chamada RemoteExceptionpode ocorrer; jogá-lo.

A seguir está um exemplo de uma interface remota. Aqui definimos uma interface com o nomeHello e tem um método chamado printMsg().

import java.rmi.Remote; 
import java.rmi.RemoteException;  

// Creating Remote interface for our application 
public interface Hello extends Remote {  
   void printMsg() throws RemoteException;  
}

Desenvolvendo a classe de implementação (objeto remoto)

Precisamos implementar a interface remota criada na etapa anterior. (Podemos escrever uma classe de implementação separadamente ou podemos fazer diretamente o programa do servidor implementar esta interface.)

Para desenvolver uma classe de implementação -

  • Implemente a interface criada na etapa anterior.
  • Fornece implementação para todos os métodos abstratos da interface remota.

A seguir está uma classe de implementação. Aqui, criamos uma classe chamadaImplExample e implementou a interface Hello criado na etapa anterior e fornecido body para este método que imprime uma mensagem.

// Implementing the remote interface 
public class ImplExample implements Hello {  
   
   // Implementing the interface method 
   public void printMsg() {  
      System.out.println("This is an example RMI program");  
   }  
}

Desenvolvendo o Programa de Servidor

Um programa de servidor RMI deve implementar a interface remota ou estender a classe de implementação. Aqui, devemos criar um objeto remoto e vinculá-lo aoRMIregistry.

Para desenvolver um programa de servidor -

  • Crie uma classe de cliente de onde você deseja chamar o objeto remoto.

  • Create a remote object instanciando a classe de implementação conforme mostrado abaixo.

  • Exporte o objeto remoto usando o método exportObject() da classe chamada UnicastRemoteObject que pertence ao pacote java.rmi.server.

  • Obtenha o registro RMI usando o getRegistry() método do LocateRegistry classe que pertence ao pacote java.rmi.registry.

  • Vincule o objeto remoto criado ao registro usando o bind() método da classe chamada Registry. Para este método, passe uma string representando o nome do bind e o objeto exportado, como parâmetros.

A seguir está um exemplo de um programa de servidor RMI.

import java.rmi.registry.Registry; 
import java.rmi.registry.LocateRegistry; 
import java.rmi.RemoteException; 
import java.rmi.server.UnicastRemoteObject; 

public class Server extends ImplExample { 
   public Server() {} 
   public static void main(String args[]) { 
      try { 
         // Instantiating the implementation class 
         ImplExample obj = new ImplExample(); 
    
         // Exporting the object of implementation class  
         // (here we are exporting the remote object to the stub) 
         Hello stub = (Hello) UnicastRemoteObject.exportObject(obj, 0);  
         
         // Binding the remote object (stub) in the registry 
         Registry registry = LocateRegistry.getRegistry(); 
         
         registry.bind("Hello", stub);  
         System.err.println("Server ready"); 
      } catch (Exception e) { 
         System.err.println("Server exception: " + e.toString()); 
         e.printStackTrace(); 
      } 
   } 
}

Desenvolvendo o Programa do Cliente

Escreva um programa cliente nele, busque o objeto remoto e invoque o método requerido usando este objeto.

Para desenvolver um programa de cliente -

  • Crie uma classe de cliente de onde você pretende invocar o objeto remoto.

  • Obtenha o registro RMI usando o getRegistry() método do LocateRegistry classe que pertence ao pacote java.rmi.registry.

  • Busque o objeto do registro usando o método lookup() da classe Registry que pertence ao pacote java.rmi.registry.

    Para este método, você precisa passar um valor de string representando o nome do vínculo como um parâmetro. Isso retornará o objeto remoto.

  • O lookup () retorna um objeto do tipo remote, down cast para o tipo Hello.

  • Finalmente invoque o método requerido usando o objeto remoto obtido.

A seguir está um exemplo de um programa cliente RMI.

import java.rmi.registry.LocateRegistry; 
import java.rmi.registry.Registry;  

public class Client {  
   private Client() {}  
   public static void main(String[] args) {  
      try {  
         // Getting the registry 
         Registry registry = LocateRegistry.getRegistry(null); 
    
         // Looking up the registry for the remote object 
         Hello stub = (Hello) registry.lookup("Hello"); 
    
         // Calling the remote method using the obtained object 
         stub.printMsg(); 
         
         // System.out.println("Remote method invoked"); 
      } catch (Exception e) {
         System.err.println("Client exception: " + e.toString()); 
         e.printStackTrace(); 
      } 
   } 
}

Compilando o aplicativo

Para compilar o aplicativo -

  • Compile a interface remota.
  • Compile a classe de implementação.
  • Compile o programa do servidor.
  • Compile o programa cliente.

Ou,

Abra a pasta onde você armazenou todos os programas e compile todos os arquivos Java como mostrado abaixo.

Javac *.java

Executando o aplicativo

Step 1 - Comece o rmi registro usando o seguinte comando.

start rmiregistry

Isso vai começar um rmi registro em uma janela separada, conforme mostrado abaixo.

Step 2 - Execute o arquivo de classe do servidor conforme mostrado abaixo.

Java Server

Step 3 - Execute o arquivo de classe do cliente conforme mostrado abaixo.

java Client

Verification - Assim que você iniciar o cliente, verá a seguinte saída no servidor.