RMI (Remote Method Invocation)

the RMI (Remote Method Invocation) é uma API que fornece um mecanismo para criar uma aplicação distribuída em java. A RMI permite que um objeto invoque métodos em um objeto rodando em outra JVM.

the RMI provides remote communication between the applications using two objects stub and skeleton.

Understanding stub and skeleton

RMI uses stub and skeleton object for communication with the remote object.

um objeto remoto é um objeto cujo método pode ser invocado a partir de outra JVM. Vamos entender o stub e os objetos esqueléticos:

stub

o stub é um objeto, atua como uma porta de entrada para o lado cliente. Todos os pedidos de saída são encaminhados através dele. Ele reside no lado do cliente e representa o objeto remoto. Quando o chamador invoca o método no objeto stub, ele faz as seguintes tarefas:

  1. Ele inicia uma conexão com controle remoto Virtual Machine (JVM),
  2. escreve e transmite (comissários) os parâmetros para o controle remoto Virtual Machine (JVM),
  3. aguarda o resultado
  4. lê-se (unmarshals) o valor de retorno ou exceção, e
  5. finalmente, retorna o valor para o chamador.

skeleton

the skeleton is an object, acts as a gateway for the server side object. Todos os pedidos recebidos são encaminhados através dele. Quando o esqueleto recebe o pedido de entrada, ele faz as seguintes tarefas:

  1. lê o parâmetro para o método remoto
  2. invoca o método sobre o real objeto remoto, e
  3. escreve e transmite (empacota) o resultado para o chamador.

no Java 2 SDK, um protocolo stub foi introduzido que elimina a necessidade de esqueletos.stub e skeleton in RMI

Understanding requirements for the distributed applications

If any application performs these tasks, it can be distributed application.

.

  1. O aplicativo precisa para localizar o método remoto
  2. É necessário fornecer a comunicação com os objetos remotos, e
  3. O aplicativo necessário para carregar as definições de classe para os objetos.

a aplicação RMI tem todas estas características, por isso é chamada de aplicação distribuída.

Java RMI Example

the is given the 6 steps to write the RMI program.

  1. Criar a interface remota
  2. Fornecer a implementação da interface remota
  3. Compilar a classe de implementação e criar o stub e skeleton objetos usando o rmic ferramenta
  4. Iniciar o serviço de registro de rmiregistry ferramenta
  5. Criar e iniciar o aplicativo remoto
  6. Criar e iniciar o aplicativo cliente

RMI Exemplo

neste exemplo, temos seguido todas as 6 etapas para criar e executar a aplicação rmi. A aplicação cliente precisa apenas de dois arquivos, interface remota e aplicação cliente. Na aplicação rmi, cliente e servidor interage com a interface remota. A aplicação cliente invoca métodos no objeto proxy, RMI envia o pedido para a JVM remota. O valor de retorno é enviado de volta para o objeto proxy e, em seguida, para a aplicação cliente.

RMI example

1) create the remote interface

For creating the remote interface, extend the Remote interface and declare the RemoteException with all the methods of the remote interface. Aqui, estamos criando uma interface remota que estende a interface remota. Existe apenas um método chamado add () e ele declara Remoteexcepção.

2) Fornecer a implementação da interface remota

Agora fornecer a implementação da interface remota. Para fornecer a implementação da interface Remota, precisamos

  • Quer estender a classe UnicastRemoteObject,
  • ou usar o exportObject() método da classe UnicastRemoteObject

No caso, você estende a classe UnicastRemoteObject, você deve definir um construtor que declara RemoteException.

3) criar o stub e os objetos esqueléticos usando a ferramenta rmic.

o próximo passo é criar objetos de stub e esqueleto usando o compilador rmi. A ferramenta rmic invoca o compilador RMI e cria objetos de stub e esqueleto.

4) iniciar o serviço de registro pela ferramenta rmiregistry

agora iniciar o serviço de registro usando a ferramenta rmiregistry. Se você não especificar o número de porto, ele usa um número de Porto padrão. Neste exemplo, estamos usando a porta número 5000.

5) Criar e executar a aplicação Servidor

agora os Serviços rmi precisam ser hospedados em um processo servidor. A classe de nomenclatura fornece métodos para obter e armazenar o objeto remoto. A classe de nomenclatura fornece 5 métodos.

java estático público.socio.Pesquisa remota(java.idioma.String) lança java.socio.NotBoundException, java. net. MalformedURLException, java.socio.Remoteexcepção; devolve a referência do objecto remoto.
public static Void bind (java.idioma.String, java.socio.Remote) lança java.socio.Já tem uma boa percepção, java.net.Equidistância, java.socio.Remoteexcepção; liga o objecto remoto com o nome dado.
public static Void unbind (java.idioma.String) lança java.socio.Visão remota, java.socio.NotBoundException, java.net.MalformedURLException; destrói o objecto remoto que está ligado ao nome próprio.
public static void rebind (java.idioma.String, java.socio.Remote) lança java.socio.Remoteexcepção, java. net. Malformedurlexcepção; liga o objecto remoto ao novo nome.
java estático público.idioma.Lista de texto (java.idioma.String) lança java.socio.RemoteException, java.net.MalformedURLException; devolve uma lista com os nomes dos objectos remotos ligados no registo.

neste exemplo, estamos ligando o objeto remoto pelo nome sonoo.

6) crie e execute a aplicação cliente

no cliente estamos recebendo o objeto stub pelo método de pesquisa() da classe de nomenclatura e invocando o método sobre este objeto. Neste exemplo, estamos executando as aplicações servidor e cliente, Na Mesma máquina para que estamos usando localhost. Se você quiser acessar o objeto remoto a partir de outra máquina, mude o localhost para o nome da máquina (ou endereço IP) onde o objeto remoto está localizado.

Saída deste RMI exemplo

RMIRMI

Significativo exemplo da RMI aplicação com banco de dados

Considere um cenário, existem duas aplicações executando em máquinas diferentes. Digamos que MachineA e MachineB, machineA está localizada nos Estados Unidos e MachineB na Índia. MachineB quer obter uma lista de todos os clientes da aplicação MachineA.

vamos desenvolver a aplicação RMI seguindo os passos.

1) Criar a tabela

em primeiro lugar, precisamos criar a tabela na base de dados. Aqui, estamos usando a base de dados Oracle10.

RMI application with database

2) Create Customer class and Remote interface

File: Customer.java

Nota: A classe do cliente deve ser serializável.

File: Bank.java

3) Crie a classe que fornece a implementação da interface remota

File: BankImpl.java

4) Compile a classe rmic tool and start the registry service by rmiregistry tool

 RMI example with database

5) Create and run the Server

File: MyServer.java example of remote method invocation

6) Create and run the Client

File: MyClient.javareal world example of rmi