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;
• ServerException: É uma exceção que é lançada no servidor se ocorrer erro no processamento de uma requisição de invocação de um método remoto por um cliente remoto;
• UnmarshallException: É uma exceção que é lançada quando ocorre erro na operação de unmarshalling;
• java.rmi.activation: É um pacote que oferece suporte à ativação de objetos remotos. Tais objetos são objetos que necessitam de acesso ...
Confira outros conteúdos:
Programação x Concurso Público
Osvaldo aprendeu programação
DevMedia x Netflix: Onde investir meu...
Promoção de Natal
Oferta exclusiva de Natal!
Pagamento anual
12x no cartão
De: R$ 69,00
Por: R$ 59,90
Total: R$ 718,80
Garanta o desconto
- Formação FullStack Completa
- Carreira Front-end I e II, Algoritmo e Javascript, Back-end e Mobile
- +10.000 exercícios gamificados
- +50 projetos reais
- Comunidade com + 200 mil alunos
- Estude pelo Aplicativo (Android e iOS)
- Suporte online
- 12 meses de acesso
Pagamento recorrente
Cobrado mensalmente no cartão
De: R$ 79,00
Por: R$ 59,90 /mês
Total: R$ 718,80
Garanta o desconto
- Formação FullStack Completa
- Carreira Front-end I e II, Algoritmo e Javascript, Back-end e Mobile
- +10.000 exercícios gamificados
- +50 projetos reais
- Comunidade com + 200 mil alunos
- Estude pelo Aplicativo (Android e iOS)
- Suporte online
- Fidelidade de 12 meses
- Não compromete o limite do seu cartão
<Perguntas frequentes>
Nossos casos de sucesso
Eu sabia pouquíssimas coisas de programação antes de começar a estudar com vocês, fui me especializando em várias áreas e ferramentas que tinham na plataforma, e com essa bagagem consegui um estágio logo no início do meu primeiro período na faculdade.
Estudo aqui na Dev desde o meio do ano passado!
Nesse período a Dev me ajudou a crescer muito aqui no trampo.
Fui o primeiro desenvolvedor contratado pela minha
empresa. Hoje eu lidero um time de desenvolvimento!
Minha meta é continuar estudando e praticando para ser um
Full-Stack Dev!
Economizei 3 meses para assinar a plataforma e sendo sincero valeu muito a pena, pois a plataforma é bem intuitiva e muuuuito didática a metodologia de ensino. Sinto que estou EVOLUINDO a cada dia. Muito obrigado!
Nossa! Plataforma maravilhosa. To amando o curso de desenvolvimento front-end, tinha coisas que eu ainda não tinha visto. A didática é do jeito que qualquer pessoa consegue aprender. Sério, to apaixonado, adorando demais.
Adquiri o curso de vocês e logo percebi que são os melhores do Brasil. É um passo a passo incrível. Só não aprende quem não quer. Foi o melhor investimento da minha vida!
Foi um dos melhores investimentos que já fiz na vida e tenho aprendido bastante com a plataforma. Vocês estão fazendo parte da minha jornada nesse mundo da programação, irei assinar meu contrato como programador graças a plataforma.
Wanderson Oliveira
Comprei a assinatura tem uma semana, aprendi mais do que 4 meses estudando outros cursos. Exercícios práticos que não tem como não aprender, estão de parabéns!
Obrigado DevMedia, nunca presenciei uma plataforma de ensino tão presente na vida acadêmica de seus alunos, parabéns!
Eduardo Dorneles
Aprendi React na plataforma da DevMedia há cerca de 1 ano e meio... Hoje estou há 1 ano empregado trabalhando 100% com React!
Adauto Junior
Já fiz alguns cursos na área e nenhum é tão bom quanto o de vocês. Estou aprendendo muito, muito obrigado por existirem. Estão de parabéns... Espero um dia conseguir um emprego na área.
Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.