BT

Netflix traz o Reactive Extensions para Java, com código aberto

por Jonathan Allen , traduzido por Ivo La Puma em 05 Mar 2013 |

O Netflix criou e abriu os fontes do RxJava, uma implementação em Java do Reactive Extensions (Rx) da MS Open Technologies, que foi projetada para uso com qualquer linguagem que roda na JVM. Além do próprio Java, Groovy, Clojure, Scala e JRuby são linguagens já suportadas por essa implementação.

A criação do RxJava surgiu da necessidade de simplificar a concorrência no lado do servidor. A ideia é permitir que o cliente realize uma única requisição
"pesada" a ser executada em paralelo no servidor.
Ben Christensen e Jafar Husain explicam como isso acontece:

A concorrência no lado do servidor é necessária para reduzir idas e vindas na rede de maneira efetiva. No entanto, sem paralelizar a execução no servidor, uma única requisição "pesada" do cliente talvez não seja muito melhor que várias requisições "leves", pois cada requisição vai geralmente estar executando em paralelo com outras requisições na rede. Se a execução, no servidor, de uma requisição pesada, que tenha sido quebrada em partes menores, não alcançar certo nível de paralelismo, a execução pode demorar mais que múltiplas requisições leves, mesmo levando em conta o tempo gasto com a latência de rede.

Outro ponto que Christensen e Husain destacam é sobre o uso de Programação Reativa Funcional (Functional Reactive Programming ou FRP). Eles defendem que a FRP é preferível ao uso da interface Future e de callbacks, pois seu uso "deixa a composição e a execução do código mais eficientes, uma vez que disponibiliza um conjunto de operadores capazes de filtrar, selecionar, transformar, combinar e compor os objetos Observable".

Todos os métodos da API da camada de serviço retornam um objeto do tipo Observable<T>. Assim, as aplicações que utilizam o serviço não correm o risco de quebrar caso algo mude em seus métodos. Por exemplo, atualmente os métodos são chamados assincronamente, mas podem ser alterados no futuro para fazer o retorno de maneira síncrona. E os métodos de serviço têm autonomia para optar por I/O bloqueante ou não-bloqueante, sendo que a primeira opção é mais utilizada quando os recursos são limitados.

O RxJava é compatível com "o Java 5 (para incluir suporte ao Android) e versões superiores, havendo a meta de construir uma versão compatível com as expressões Lambda do Java 8." Assim como o Rx original, o RxJava é distribuído sob a Licença Apache. Os códigos do projeto podem ser obtidos a partir do seu repositório no Github.

Olá visitante

Você precisa cadastrar-se no InfoQ Brasil ou para enviar comentários. Há muitas vantagens em se cadastrar.

Obtenha o máximo da experiência do InfoQ Brasil.

Dê sua opinião

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber menssagens dessa discussão
Comentários da comunidade

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber menssagens dessa discussão

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber menssagens dessa discussão

Dê sua opinião

Conteúdo educacional

Feedback geral
Bugs
Publicidade
Editorial
InfoQ Brasil e todo o seu conteúdo: todos os direitos reservados. © 2006-2013 C4Media Inc.
Política de privacidade
BT