Remote Method Invocation: RMI na prática
Veja nesse artigo como desenvolver aplicações com objetos distribuídos.
Este artigo apresenta os principais recursos disponibilizados pelo Java RMI para realizar a invocação de métodos de objetos remotos, fazendo com que a comunicação entre aplicações Java localizadas em diferentes JVMs seja de simples implementação, mas muito eficiente, principalmente por que Java RMI cria uma abstração na qual o objeto remoto é acessado como se estivesse localizado na JVM local.
Através de sua forma natural e completamente integrada com a linguagem Java, o Java RMI se mostra como sendo um poderoso padrão que é utilizado no desenvolvimento de aplicações com objetos distribuídos, oferecendo uma abstração simples de comunicação entre processos, escondendo a complexidade do uso de sockets e outros mecanismos de baixo nível usados em aplicações em que objetos precisam receber ou enviar informações a outros objetos.
Em aplicações distribuídas, é comum organizar os processos em processo servidor e processo cliente, de forma que os processos possam estar localizados em plataformas diferentes, em computadores diferentes. Segundo esse modelo, o processo servidor oferece serviços aos processos clientes, porém a implementação do modelo de comunicação entre tais processos pode ser difícil devido à complexidade natural da utilização de sockets ou outras streams de comunicação de dados. A complexidade aumenta quando é necessário acessar ou enviar objetos pela internet, pois os mesmos apresentam atributos e métodos que precisam ser convertidos para a forma binária para serem enviados por uma stream.
A fim de facilitar a implementação de aplicações distribuídas entre diversas plataformas de sistemas operacionais ou hardware, foi criado o padrão CORBA (Common Object Request Architecture), disponibilizado nas linguagens mais adotadas. Sua implementação oferece recursos para serem utilizados para facilitar a comunicação entre objetos de aplicações diferentes, dessa forma, permitindo invocar métodos de objetos remotos, mover objetos entre computadores diferentes e outros.
CORBA é um padrão multilinguagem, mas existe outro padrão criado especificamente para a linguagem Java, chamado de Java RMI (Java Remote Method Invocation), onde são oferecidos recursos avançados para o desenvolvimento de aplicações com objetos distribuídos, de forma a disponibilizar classes e interfaces simples de usar, mas poderosas; deste modo, possibilitando que a utilização de tais recursos seja totalmente contida na linguagem Java, sem precisar de bibliotecas de terceiros e sem sobrecarregar os programas com sintaxe adicional, e facilitando em muito o desenvolvimento de aplicações com objetos distribuídos.
Geralmente em aplicações Java RMI, o servidor é usado para criar objetos remotos cujos métodos são invocados pelos clientes da mesma forma como se fossem objetos locais, simplificando bastante as aplicações que realizam comunicação entre objetos distribuídos. Dessa forma, o Java RMI esconde a complexidade inerente à transmissão de dados por streams pela internet.
A fim de que os objetos remotos sejam encontrados, um registro de objetos remotos é utilizado, e ele possibilita vincular objetos a nomes no lado do servidor, operação chamada de bind. No lado do cliente, o registro é consultado para que se obtenham referências a objetos remotos.
O pacote java.rmi
O pacote java.rmi contém a implementação do Java RMI pertencente ao JDK e disponibiliza classes, interfaces e subpacotes para serem utilizados no desenvolvimento de aplicações com objetos distribuídos. Dentre estes recursos, os principais são:
• Remote: É uma interface que indica se um objeto possui métodos que podem ser invocados remotamente por outras JVMs;
• MarshalledObject: É uma classe, e o seu construtor recebe um objeto e o converte para um vetor de bytes (marshalling). Suporta também a reconstrução do objeto (unmarshalling);
• Naming: É uma classe que oferece métodos para armazenar e consultar referências a objetos remotos no registro de objetos remotos do Java RMI;
• RMISecuretyManager: É uma classe utilizada por aplicações para verificar os requisitos de segurança para acessar classes descarregadas pela internet para serem executadas na máquina local;
• AccessException: É uma exceção que pode ser lançada por vários métodos da classe Naming, por exemplo, quando um servidor tenta se registrar no registro de objetos remotos e ocorre um erro;
• AlreadyBoundException: É uma exceção que ocorre quando se tenta registrar um nome no registro de objetos remotos, porém esse nome já se encontra registrado;
• ConnectException: É uma exceção que é lançada quando não é possível realizar uma conexão entre objetos remotos;
• ConnectIOException: É uma exceção que é lançada quando ocorre uma IOException na tentativa de conexão entre dois objetos remotos;
• MarshallException: É uma exceção que é lançada quando ocorre erro na operação de marshalling;
• NoSuchObjectException: É uma exceção que é lançada quando a aplicação tenta acessar um objeto remoto que não existe mais;
• RemoteException: É a superclasse comum a um grande número de exceções que podem ocorrer durante a invocação de um método remoto;"
[...] continue lendo...Artigos relacionados
-
Artigo
-
Artigo
-
Artigo
-
Artigo
-
Vídeo