O que é um Java.rmi.RemoteException?

Escrito por matthew cory | Traduzido por caio amorim
  • Compartilhar
  • Tweetar
  • Compartilhar
  • Pin
  • E-mail
O que é um Java.rmi.RemoteException?
Não tão obvio quanto letras vermelhas brilhantes, uma RemoteException geralmente significa que algo deu terrivelmente errado (error digital image by UBE from Fotolia.com)

Os programadores Java gastam muito de seu tempo de desenvolvimento planejando a manipulação apropriada de exceções, desde aquelas que vêm das bibliotecas prontas até aquelas que eles desenvolvem dentro de seus próprios códigos. Enquanto a maior parte do código Java lida com exceções comuns (como aquelas que vêm de erros de arquivo ou referências nulas), a RemoteException é mais rara de se encontrar. Desta forma, é difícil para programadores Java ter certeza de quando ela é lançada e o que ela pode significar.

Outras pessoas estão lendo

Uma breve explicação sobre Remoting

A execução de código remoto é uma das "artes negras" da programação de computadores para muitos desenvolvedores. De fato, é fácil um desenvolvedor passar sua carreira inteira sem se preocupar com isso. Os detalhes são bastante desagradáveis, mas a essência é simples: um programa em um computador executa código em outro computador.

Para facilitar um pouco a discussão, o termo "cliente" se referenciará à aplicação que o programador está desenvolvendo e "servidor" à aplicação que o programador está se comunicando.

Uma breve visão de como Remoting funciona em Java

Os detalhes de como escrever um programa que executa código remoto estão além do alcance desse artigo, mas é interessante saber os conceitos básicos. Um objeto remoto é representado por uma interface. O desenvolvedor irá obter uma instância da interface e chamar um método nela.

Esta chamada enviará uma requisição ao servidor, que processará quaisquer parâmetros (e retornará um resultado, se necessário). O processo de enviar objetos/parâmetros para o servidor é chamado de "marshalling", e o processo de receber os dados e traduzi-los de volta para objetos utilizáveis é chamado de "unmarshalling".

Causas

Obviamente, algo sempre pode dar errado. Talvez um programa chame uma função que não exista em outro computador. Por exemplo, se você tentar chamar a.fool() usando RMI e a versão no computador que você está se comunicando não tem a.fool() definido, o processo para. Outra possibilidade é que um erro tenha ocorrido no programa servidor, como um problema na conexão com o banco de dados.

Quando isso acontecer, você receberá um RemoteException ou uma de suas subclasses.

Tipos de RemoteException

Existem diferentes subclasses de RemoteException para manipular as várias situações que podem ocorrer (veja em Referências, onde há um link para uma lista de subclasses). Por exemplo, se um problema ocorre no processo de "marshalling" ou "unmarshalling" com os objetos, uma MarshalException ou UnmarshalException será lançada, respectivamente. Se uma exceção que não está declarada na assinatura do método chamado (como uma exceção em tempo de execução) ocorre, uma UnexpectedException será lançada – isto pode ser uma NullPointerException no servidor, por exemplo.

Lidando com RemoteExceptions

Enquanto a prática geral de Java recomenda que se utilize a instância mais especializada de uma exceção, isto pode ser difícil de alcançar quando o RMI é utilizado. Existem muitas exceções possíveis a se considerar quando se vê as várias subclasses de RemoteException, e lidar com elas de forma individual provavelmente não vale a pena.

Dito isso, um desenvolvedor pode focar nas áreas potencialmente problemáticas que podem ser menos ou mais óbvias durante o desenvolvimento. Por exemplo, na primeira tentativa em uma chamada remota (talvez na inicialização da aplicação), o desenvolvedor pode tentar manipular uma UnknownHostException de forma especializada. Outra possibilidade poderia ser um manipulador RemoteException genérico, o qual pode tomar diferentes ações baseadas na exceção específica encontrada.

Não perca

Filtro:
  • Geral
  • Artigos
  • Slides
  • Vídeos
Mostrar:
  • Mais relevantes
  • Mais lidos
  • Mais recentes

Nenhum artigo disponível

Nenhum slide disponível

Nenhum vídeo disponível