BT

Disseminando conhecimento e inovação em desenvolvimento de software corporativo.

Contribuir

Tópicos

Escolha a região

Início Artigos 13 Razões para Programadores Java aprenderem Flex e BlazeDS

13 Razões para Programadores Java aprenderem Flex e BlazeDS

Favoritos

Este artigo salienta as 13 razões para que programadores java aprendam Flex e BlazDS. Ele discute sobre o porquê que Flex e BlazeDS é uma das melhores opções para desenvolver aplicação ricas de Internet (RIAs) - de websites altamente interativos à aplicações comerciais com Java atrás da cena. Mais importante, mostra o alto retorno de investimento que tal combinação oferece, tanto para desenvolvedores quanto para empresas.

No transcorrer do artigo, utilizo uma máquina de refrigerantes fictícia para mostrar como transformar uma aplicação Java existente em uma RIA. Através do exemplo, explico as diferentes maneiras possíveis para se utilizar BlazeDS, tanto para aplicações já existentes quanto para as novas.

Razão 1: Tem seu código fonte aberto.

O núcleo do kit para desenvolvimento de software (SDK) Flex é um framework, com o código aberto, usado para desenvolvimento e manutenção de softwares RIA que tem a mesma aparência em diferentes navegadores e sistemas operacionais. Flex é lançado sob a Mozilla Public License. Aplicações Flex compiladas podem ser executadas na plataforma proprietária Adobe Flash.

Para conectar o Flex ao Java, BlazeDs é uma tecnologia de código aberto para acionamento remoto e envio de mensagens. Ele executa em servidores de aplicação Java como servlets, permitindo que se use em qualquer aplicação Java web. BlazeDS licenciada sob a Lesser GNU Public License (LGPL). Junto ao lançamento do BlazeDS, a Adobe publicou a especificação da ActionScript Message Format (AMF), que permite a comunicação entre o BlazeDS e o Java com o cliente Flex usando um formato binário compacto.

Razão 2: Tem uma grande comunidade para suporte

Flex tem uma comunidade muito ativa, com muitas contribuições. Flex.org, um sítio Adobe com notícias, é atualizado quase que diariamente com novos projetos da comunidade, e o grupo de usuários Flex no Yahoo! tem mais de 11.000 membros.

Por exemplo, o projeto FlexLib no Google Code contribuiu com uma grande quantidade de componentes de interface de usuário, tudo com o código livre. Os projetos Swiz e Mate contribuíram ajudando o framework com a manipulação de eventos. E o Gorilla Logic contribuiu com o Flex Monkey com automatização de testes de componentes de interface.

Razão 3: Você pode ter um emprego em seis meses

De acordo com o James Ward, um pregador do Flex para a Adobe, existe uma grande necessidade de desenvolvedores sênior para a tecnologia. Aprender Flex lhe dará habilidades mercadológicas que o colocarão à frente na disputa.

Razão 4: Retorno de investimento maior

Em geral, desenvolver aplicações web empresariais têm sido notadamente difíceis. Flex e BlazeDS oferecem não só ferramentas poderosas como também são fáceis de se trabalhar. O aumento na produtividade do desenvolvedor permitirá que as organizações ganhem mercado mais rapidamente. Flex e Flash também criam uma experiência mais envolvente para o usuário, o que pode aumentar as taxas de conversão e de tráfego.

Um exemplo perfeito é o da cadeia de livrarias Borders, que recentemente introduziu um novo sítio com um "Magic Shelf". O sítio usa uma interface Flash para simular a experiência de folhear os livros. A loja descobriu que isto aumento imensamente o retorno: "Clientes que utilizam a interface — que permite visualizar capas de livros, DVDs e CDs -têm um aumento de 62 porcento à mais comparados aos que não utilizam".

Razão 5: Flex foi a primeira linguagem desenvolvida para criar interfaces de usuário

Muitas linguagens adicionam suporte à criação de interfaces de usuário como um pensamento à posteriori. O que é particularmente real para o Java com o Swing. Como resultado, coisas simples em Swing — conectar dados — pode ser difícil e exige modelos de dados específicos. Seu maior problema é que você precisa ir muito à fundo na API para ser produtivo.

Flex é o exato oposto: Foi desenvolvida desde o princípio para a criação de interfaces web. Como Bruce Eckel gosta de dizer, é a primeira linguagem de domínio específico para desenvolvimento de interfaces. Assim, é muito mais fácil criá-las usando Flex do que em outras tecnologias, como JavaServer Pages (JSP), JavaServer Faces (JSF) e Swing. Data binding, manipulação de eventos, layout de componentes e outros, técnicas comuns para o desenvolvimento de interfaces são construídas na linguagem, o que lhe permite ser produtivo mesmo quando se sabe pouco sobre ela.

Razão 6: Tem um modelo de programação parecido com o do Java

Você pode desenvolver utilizando ferramentas existentes para Java. Também pode criar aplicações Flex com as ferramentas livres em linha de comando distribuídas no SDK ou com o Adobe Flex Builder (um plugin para o Eclipse) ou ainda, mais recentemente, com o Intellij IDEA 8.

Flex oferece um ambiente onde os dados são carregados do cliente. O modelo de programação é mais parecido com o processo de criação de um cliente desktop do quê com o HTML, o que torna o trabalho familiar para qualquer um que tenha feito algo com Java Swing.

Ele é programado usando uma combinação de MXML, uma linguagem de marcação parecida com o XML e Adobe ActionScript, uma linguagem de scripting orientada à objetos. E isto torna o desenvolvimento em Flex parecido com o Java, já que você está familiarizado com os conceitos de orientação à objetos.

A melhor maneira de configurar seu ambiente de desenvolvimento é manter sua aplicação Flex onde está seu conteúdo web. Assim você não terá que se preocupar em copiá-la a cada compilação: Uma simples atualização no seu navegador trará a versão mais recente. Como resultado o desenvolvimento com Flex e BlazeDS será bastante produtivo.

Razão 7: BlazeDS executa em qualquer servidor de aplicações Java

Múltiplas versões de BlazeDS estão disponíveis, inclusive uma que disponibiliza o Apache Tomcat configurado com BlazeDS. Para este artigo, utilizei a distribuição binária, que vem como um arquivo web (WAR), para mostrar como é possível distribuí-la em qualquer servidor de aplicações. Por outro lado, é possível extrair os arquivos Java (JAR) e utilizá-los em seu projeto. Visite o wiki do BlazeDS para mais informações sobre as opções de instalação do BlazeDS.

Este exemplo utiliza o BlazeDS em um projeto existente - uma máquina de refrigerante simples. Só é preciso adicionar os arquivos JAR à ele, então poderá utilizar o BlazeDS a partir da aplicação, o que permitirá distribuí-lo onde possa fazê-lo com o próprio software.

para adicionar o BlazeDS ao seu projeto, siga estes passos:

              1. Extraia o conteúdo do arquivo WAR BlazeDS: jar xvf blazeds.war

              2. Copie os arquivos JAR para o diretório de bibliotecas do seu projeto: cp -R WEB-INF/lib/sodaSample

Razão 8: Você pode utilizá-lo com aplicações Java existentes

Para o exemplo, assuma que deseja expor seu atual serviço da máquina de refrigerantes para que aplicações Flex possam, remotamente, conectar-se à ele. Os passos básicos para configurar o BlazeDS à uma aplicação existente são:

             1. Edite os arquivos de configuração BlazeDS no diretório WEB-INF/flex

             2. Defina MessageBrokerServlet e uma ouvinte de sessões no arquivo web.xml da aplicação

Depois será preciso adicionar o serviço da máquina de refrigerante ao arquivos de configuração de serviços remotos do BlazeDS, o quê permitirá ser executado a partir de uma chamada de um cliente Flex. Esta mudança é feita definindo um destino e um, ou mais, canais para o transporte de dados. O canal básico AMF Channel é definido no arquivo services.xml. Use está definição para identificar seu destino no arquivo remoting-config.xml.

<destination id="sodaService" channels="my-amf">
	<properties>
                <source>com.gorillalogic.sodaSample.SodaService</source>
	</properties>
</destination>

Ao definir endpoints no arquivo de configuração de serviços remotos, é possível chamar qualquer serviço Java básico a partir de um cliente Flex. Para passar seu modelo de dados Java para o cliente Flex, defina uma mapeamento entre os dois em sua classe ActionScript:

[Bindable]
[RemoteClass(alias="com.gorillalogic.sodaSample.SodaModel")]

Este código diz ao Flex que quando os resultados da chamada do serviço remoto retornem seu modelo Java SodaModel, mapei-os ao seu modelo Flex SodaModel. O cliente no exemplo mostra como chamar o serviço Java. A chamada retorna um SodaModel, preenchido com seu pedido.

public function callSodaService():void {
	var sodaType:String = type.text;
	var sodaCount:int = parseInt(cnt.text);
	var flag:Boolean = preOpen.selected;
	remoteObject.getSoda(sodaType, sodaCount, flag);
}

private function resultHandler(event:ResultEvent):void { 
var sodaModel:SodaModel = event.result as SodaModel;
}

Flex retorna uma variável genérica result, que é mapeada para o modelo SodaModel. Não entrarei em detalhes aqui, mas uma dica é especificar o arquivo services-config.xml na configuração do compilador, assim:

-locale en_US -services=/nsource/sodaSample/web/WEB-INF/flex/services-config.xml -context-root /

Senão, seu cliente Flex não será capaz de encontrar os serviços Java. Da mesma maneira você poderá passar um objeto do cliente para o servidor. Por exemplo, é possível passar o modelo soda vazio para o cliente.

Razão 9: Você pode estender BlazeDS e modificá-lo com Java

Suponha que você decida registrar todas as chamadas ao serviço da máquina de refrigerantes. Você pode estender o adaptador Java padrão para adicionar a característica.

Primeiro, adicione a classe Java que descende o JavaAdapter:

import flex.messaging.services.remoting.adapters.JavaAdapter.
public class TimingJavaAdapter extends JavaAdapter  {

Então, sobreponha o método invoke();

public Object invoke(Message message) {
		RemotingMessage remotingMessage = (RemotingMessage) message;
		String operation = remotingMessage.getOperation();
		String destination = remotingMessage.getDestination();

	Logger.info("calling " + operation + " on destination " + destination);
	Object data = super.invoke(message);
	return data;
}

Neste método, é possível ver a operação que chega e o destino para a chamada. Você pode utilizar este gancho para outras finalidades - por exemplo, medir a duração das chamadas ao servidor.

Razão 10: Você pode executar BlazeDS a partir de HTML e JSP

É possível executar esta chamada de diversas maneiras, como através do Brawser Manager e flashVars. A flashVars pode ser configuradas pela página HTML e então lidas pela aplicação Flex.

Por exemplo, caso queira passar seu nome de usuário e o tipo de refrigerante que deseja pedir a partir da página HTML. Você poderia configurar a flashVars assim:

<object id='SodaSample' classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000' codebase='http://fpdownload.macromedia.com/get/flashplayer/current/swflash.cab' height='100%' width='100%'>
	<param name='src' value='SodaSample.swf'/>
	<param name='flashVars' value='username=ryan&type=coke'/>
	<embed name='mySwf' src='SodaSample.swf' pluginspage='http://www.adobe.com/go/getflashplayer' height='100%' width='100%'	flashVars='username=ryan&type=coke'/>

</object>

E então, sua aplicação Flex poderá ler estas variáveis a partir de seus parâmetros:

var username:String;
if (Application.application.parameters.hasOwnProperty("username")) {
		username = Application.application.parameters.username;
}

Razão 11: A transferência de dados feita em Flex e BlazeDS superam outras soluções Ajax

Por padrão, todas as chamadas de procedimentos remotos (RPCs) em uso empregam o AMF Binary Protocol. Um padrão aberto, AMF é extremamente rápido. James Ward mostrou um exemplo que mostra uma comparação com outras soluções. Enquanto outras soluções Ajax como Dojo debatem-se com algumas centenas de linhas, Flex com BlazeDS conseguem manipular facilmente milhares delas. (Veja censo de Jame Ward para uma medição de diferentes tecnologias RIA para carregamento de dados.)

Razão 12: Você pode executar BlazeDS diretamente de clientes Java

O último lançamento do BlazeDS inclui uma classe Java AMF que pode ser utilizada para que o cliente Java execute uma chamada em um servidor BlazeDS. Esta característica é extremamente útil para testes unitários e de carga.

Razão 13: Funciona com o Spring

Adobe e Spring têm trabalhado juntos para integrar os dois projetos, e o lançamento inicial da integração Spring-BlazeDS promete muito. Por permitir que um Spring Bean torne-se um serviço remoto, arquivos de configuração duplicados serão eliminados. Para maiores informações, visite a página do projeto.

Conclusão

Com o BlazeDS sendo código aberto e baseado em Java, é uma opção ideal tanto para novos projetos Java quanto para os já existentes. Com o alto desempenho da comunicação remota e mapeamento de objetos entre Flex e Java, as tecnologias Flex e BlazeDS são uma opção ideal para desenvolvimento de aplicações RIA. Programadores Java novos na tecnologia Flex e BlazeDS irão encontrar um processo de desenvolvimento altamente produtivo e fácil de aprender.

Flex com BlazeDS também são uma boa opção para grandes aplicações comerciais Java. Num projeto anterior, minha equipe escreveu uma aplicação que continha mais de 50 diferentes telas e regularmente transferia milhares de linhas de dados entre o cliente e o servidor. Este tipo de aplicativo teria sido quase impossível de se construir utilizando tecnologia Ajax. Com Flex e BlazeDS, nós pudemos lançar uma versão inicial em menos de um ano. Veja o que está dupla dinâmica pode fazer por seus projetos de desenvolvimento.


Nota: Você deve ter alguma experiência básica nestas tecnologias. Diversos tutoriais estão disponíveis para se começar a trabalhar com BlazeDS, incluindo "Building Web and Desktop Applications with BlazeDS and AMF" e "BlazeDS 30-minute test drive"

Avalie esse artigo

Relevância
Estilo/Redação

Conteúdo educacional

  • Cinnamon + Pimento

    by Dennys Fredericci,

    Seu comentário está aguardando aprovação dos moderadores. Obrigado por participar da discussão!

    Gosto do BlazeDS mas acho que o Cinnamon + Pimmento muito interessante também, claro que cada projeto possui sua característica e não podemos esquecer disso.

    Abaixo algumas das features interessantes do Cinnamon e Pimento.






    Automatic import of JPA/Hibernate configuration



    AS3 EntityManager remote service based on Cinnamon and the binary AMF3 protocol



    Managed AS3 entities and client-side cache



    Guarantee that there is always only one instance representing a particular entity



    Full support for AMF3.



    Comes with its own Client API and does not build on top of the RemoteObject API of Flex, so it can be used with or without Flex.



    Client Proxies of remote services implement business interfaces so you don't lose type safetey for remote method invocations like with RemoteObject.



    Flexible server configuration: XML, annotations, custom Spring configuration namespace, programmatic configuration.



    Many options how to map ActionScript classes to Java classes.



    Extensible automatic type conversion for method parameters and bean properties.



    Currently supports Spring Beans and plain Java classes as services.



    Sending only change sets on merge operations



    Managed primary key values when persisting new entities



    Support for inheritance, managed and optionally lazy associations and collections



    Perform JPAQL and Named Queries from the Client



    Server-side Interceptor Architecture (allows to observe all CRUD operations initiated from the client)



    Support for Pimento Integration Tests written in AS3, with automatic database population




    Abraços!

  • Mais um motivo

    by Ricardo Rufino,

    Seu comentário está aguardando aprovação dos moderadores. Obrigado por participar da discussão!

    Produtividade é a palavra chave, e para os que trabalham com Mentawai(www.mentaframework.org) existe uma solução que faz a integração dele com o Flex, o chamado Mentaflex, seguindo o mesmo princípio do Spring, onde seus serviços/actions podem ser configurados de forma programática no ApplicationManager.

    Seque os links para consulta.
    sourceforge.net/projects/mentaflex/
    forum.mentaframework.org/posts/list/45/2023.page (Forum de discursões)

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

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

BT