Artigo Java Magazine 52 - Conectividade com MINA

Neste artigo veremos como desenvolver aplicações de rede em Java com alto nível de abstração, fazendo uso do Apache MINA (Multipurpose Infrastructure for Network Applications).

Esse artigo faz parte da revista Java Magazine edição 52. Clique aqui para ler todos os artigos desta edição 

Clique aqui para ler esse artigo em PDF.

Conectividade com MINA

Tire proveito do desempenho do New I/O sem escovar bits

 

Neste artigo veremos como desenvolver aplicações de rede em Java com alto nível de abstração, fazendo uso do Apache MINA (Multipurpose Infrastructure for Network Applications). O MINA é um framework que facilita a codificação de aplicações que requerem conectividade, com foco na flexibilidade, escalabilidade e facilidade de manutenção. Ele faz pelo desenvolvimento de aplicações de rede o que, por exemplo, o framework de coleções do Java SE faz pela programação com conjuntos de objetos. O  MINA é baseado nas APIs New I/O (NIO), que foram lançadas com o J2SE 1.4.

O MINA é muito usado para criar servidores e clientes suportando protocolos arbitrários. Neste ponto, o leitor pode perguntar por que desenvolver um servidor desde o início, ao invés de utilizar soluções prontas como o JBoss ou o Tomcat? Temos que ter em mente que esses servidores utio lizam principalmente o protocolo HTTP/ HTTPS para a troca de mensagens, mas que, às vezes, temos que utilizar aplicativos que trabalham com protocolos customizados, que não são suportados por padrão em servidores ou em soluções de integração. Como exemplo, podemos citar um servidor que os autores desenvolveram recentemente para realizar a troca de mensagens entre companhias aéreas, no qual um dos requisitos básicos era a utilização de protocolos como o GIOP (General Inter-ORB Protocol1), MATIP (Mapping of Airline Traffic over Internet Protocol), além de protocolos customizados. Tudo isso foi simples de ser implementado por utilizarmos o MINA. O sistema também exigia alta performance e escalabilidade, O que é garantido com o correto uso desse framework.

 

Nota 1: O GIOP é o protocolo abstrato, independente de transporte, do middleware CORBA. Sendo que o mais conhecido IIOP é um mapeamento deste protocolo para redes TCP/IP, usado por ORBs CORBA e pelo EJB.

 

Arquitetura e conceitos

O MINA suporta a manipulação de bytes e de outros recursos de baixo nível, e também permite adicionar um nível de abstração no recebimento e envio dos dados pela rede. Veremos a seguir como trabalhar nesses dois níveis de abstração.

 

Camada de I/O: desenvolvendo em baixo nível

Quem necessita realizar operações de entrada e saída (I/O) de baixo nível para serviços simples pode se beneficiar dos recursos do MINA. A arquitetura do framework é dividida em camadas. A primeira é a de I/O de baixo nível, que permite realizar a manipulação dos dados em forma de bytes, mas sem deixar de aproveitar os recursos providos pelo framework. A Figura 1 ilustra a arquitetura do MINA para a camada de I/O.

 

Figura 1. Arquitetura do MINA para I/O de baixo nível

 

IoSession

Um elemento essencial do MINA (não mostrado na figura) é a interface org.apache. mina.common.IoSession, que representa umaconexão entre o cliente e o servidor. Através de implementações desta interface, é possível obter informações sobre a conexão e acerca da comunicação entre o cliente e o servidor. A Figura 2 destaca essa interface com todos os métodos disponíveis.

 

Figura 2. Interface IoSession

 

IoHandler: I/O através de eventos

A interface org.apache.mina.common.IoHandler recebe notificações do MINA sobre os eventos ocorridos e permite que a aplicação responda a esses eventos através de uma instância de IoSession, que encapsula  a conexão de rede.

Para facilitar, o MINA provê um classe adaptadora (org.apache.mina.common. IoHandlerAdapter), que já implementa todos os métodos da interface IoHandler. Com isso, é possível redefinir (override) apenas os métodos que serão realmente utilizados. Os métodos da interface IoHandler são os seguintes:

  • sessionCreated(): Invocado quando uma conexão é criada, permite configurar parâmetros do socket utilizado para a comunicação, através da propriedade IoSession.config. Nesse método não devem ser realizadas operações de I/O, mas sim apenas configurações.
  • sessionOpened(): Chamado após o sessionCreated(), permite a realização de I/O.
  • sessionClosed()" [...] continue lendo...

Artigos relacionados