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.