Uma breve análise do Java RMI (semelhante ao .net remoting) para construir seu próprio aplicativo Java distribuído

Uma breve análise do Java RMI (semelhante ao .net remoting) para construir seu próprio aplicativo Java distribuído

Java e .NET fornecem funções de processamento remoto, mas não são exatamente iguais. O processamento remoto Java é implementado por meio de uma "interface compartilhada", enquanto o .NET pode ser implementado por meio de um "conjunto de comandos compartilhado". Os dois métodos a seguir são explicados especificamente.

 

Java remoto

 

Java Remote Method Invocation (RMI) fornece a função de comunicação remota da linguagem de programação Java.Este recurso permite que programas em execução no cliente chamem objetos no servidor remoto, permitindo que programadores Java distribuam operações em um ambiente de rede.

Para criar um programa de chamada de método remoto distribuído Java simples, você pode seguir as seguintes etapas,

 

1. Defina a interface remota:

Em Java, um objeto remoto é uma instância de uma classe que implementa uma interface remota, e a interface remota declara que cada método deve ser chamado remotamente. Quando precisamos criar um objeto remoto, passamos uma interface para ocultar os detalhes de implementação da camada básica, e o cliente pode enviar uma mensagem através do identificador da interface.

A interface remota possui as seguintes características:

1) A interface remota deve ser um atributo público. Se não for esse o caso, a menos que o cliente e a interface remota estejam no mesmo pacote, ao tentar carregar um objeto remoto que implementa a interface remota, a chamada obterá um resultado incorreto.

2) A interface remota deve estender a interface java.rmi.Remote.

3) Exceto para exceções específicas com o próprio aplicativo, cada método na interface remota deve declarar java.rmi.RemoteException em sua própria cláusula throws. (Ou a classe pai de RemoteException).

4) Um objeto remoto (seja diretamente ou embutido em um objeto local) passado como um parâmetro ou valor de retorno deve ser declarado como uma interface remota, não como uma classe de implementação.

A seguir está a definição da interface remota RmiSample

 

 import java.rmi. *;

 interface pública RmiSample extends Remote {

     public int sum (int a, int b) lança RemoteException;

 }

 

 2. Perceba a interface remota:

A classe de implementação do objeto remoto deve estender a classe do objeto remoto java.rmi.UnicastRemoteObject e implementar a interface remota definida. A classe de implementação do objeto remoto contém o código que implementa o método remoto especificado por cada interface remota. Essa classe também pode conter métodos adicionais, mas os clientes só podem usar métodos na interface remota. Porque o cliente é um identificador para a interface, não sua classe. Você deve definir um construtor para o objeto remoto, mesmo se for apenas definir um construtor padrão, use-o para chamar o construtor da classe base. Como o construtor da classe base pode lançar java.rmi.RemoteException, mesmo que não haja outro uso, ele deve lançar java.rmi.RemoteException.

A seguir está a declaração da classe de implementação do objeto remoto:

 

  import java.rmi. *;

  import java.rmi.server. *;

  public class RmiSampleImpl estende UnicastRemoteObject

                           implementa RmiSample {

      RmiSampleImpl () throws RemoteException {

         super();

      }

      public int sum (int a, int b) throws RemoteException {

         retornar a + b;

      }

  }

 

Três, escreva a classe do servidor:

A classe que contém o método principal pode ser a própria classe de implementação ou pode ser outra classe inteiramente. Em seguida, use RmiSampleServer para criar uma instância de um objeto remoto e use o método createRegistry da classe java.rmi.registry.LocateRegistry para iniciar o programa de serviço de registro a partir do número da porta especificado. Você também pode iniciar o programa de serviço de registro executando o comando rmiregistry. O valor padrão do programa de serviço de registro é A porta operacional é 1099. O nome do objeto remoto deve ser associado à referência ao objeto remoto: Naming.rebind ("// localhost: 8808 / SAMPLE-SERVER", Server);

A seguir está a declaração da classe do servidor:

 

 import java.rmi. *;

 import java.rmi.registry. *;

 public class RmiSampleServer {

     public static void main (String args []) {

         experimentar {

         LocateRegistry.createRegistry (8808);

         SampleServerImpl Server = novo SampleServerImpl ();

         // Vincule a instância do objeto com o nome "SAMPLE-SERVER"

         Naming.rebind ("// localhost: 8808 / SAMPLE-SERVER", Servidor);

         } catch (java.net.MalformedURLException me) {

            System.out.println ("URL malformado:" + me.toString ());

         } catch (RemoteException re) {

            System.out.println ("Exceção remota:" + re.toString ());

         }

     }

  }

 

Quarto, escreva uma classe de cliente que use serviços remotos:

Existem duas funções principais da classe de cliente, uma é construir uma instância do programa stub do programa de serviço de registro por meio do método Naming.lookup e a outra é chamar um método remoto no objeto remoto do servidor.

A seguir está a declaração da classe do servidor:

 

 import java.rmi. *;

 import java.rmi.server. *;

 public class RmiSampleClient {

     public static void main (String [] args)

     {

         experimentar {

            String url = "// localhost: 8808 / SAMPLE-SERVER";

            RmiSample RmiObject = (RmiSample) Naming.lookup (url);

            System.out.println ("1 + 2 =" + RmiObject.sum (1,2));

         } catch (RemoteException exc) {

             System.out.println ("Erro na pesquisa:" + exc.toString ());

         } catch (java.net.MalformedURLException exc) {

             System.out.println ("URL malformado:" + exc.toString ());

         } catch (java.rmi.NotBoundException exc) {

             System.out.println ("NotBound:" + exc.toString ());

         }

      }

   }

 

Cinco, compile o código:

Para compilar os arquivos de origem Java, execute o comando javac:

 javac RmiSample.java RmiSampleImpl.java RmiSampleServer.java RmiSampleClient.java

 

6. Crie raiz e tronco para implementação de objeto remoto:

Para criar programas stub e arquivos esqueleto, o compilador rmic deve ser executado com o nome completo do pacote de classe compilado contendo a implementação do objeto remoto.

O stub é o proxy do objeto remoto no lado do cliente. Ele passa a chamada RMI para o esqueleto do lado do servidor (Skeleton), que é responsável por passar a chamada para o método remoto real. A entrada é a seguinte:

D: / RMI> rmic -d D: / RMI RmiSampleImpl execute este comando, se rmic for executado com sucesso, haverá duas novas classes no diretório RMI: RmiSampleImpl_Stub.class RmiSampleImpl_Skel.class Eles correspondem ao stub e Esqueleto.

 

Sete, execute o código:

Execute o programa do servidor: No Windows, digite o seguinte comando para iniciar o programa RmiSampleServer em segundo plano:

D: / RMI> java RmiSampleServer

Execute o programa cliente:

D: / RMI> java RmiSampleClient

Resultado do cliente: 1 + 2 = 3

Acho que você gosta

Origin blog.csdn.net/fanxiaoduo1/article/details/106228920
Recomendado
Clasificación