Artigo "Integrando Flex com Java utilizando o BlazeDS" na Java Magazine 72

Java Magazine 72

Já está nas bancas o meu mais novo artigo sobre Java e Flex na revista Java Magazine!

O nome do artigo é Integrando Flex com Java utilizando o BlazeDS, e como o título já diz, este artigo é para quem quer aprender integrar o Flex com Java.

Foi escrito de forma bem detalhada com vários exemplos, incluindo a utilização dos serviços de mensageria do BlazeDS.

Artigo "Interfaces de qualidade com Flex" na Java Magazine 68

Java Magazine 68.

Já está nas bancas meu artigo sobre Java e Flex na revista Java Magazine!

O nome do artigo é Interfaces de qualidade com Adobe Flex. Ele é voltado para quem não conhece nada, ou está começando à aprender Flex e conhece um pouco de Java.

No artigo Faço uma analogia entre a Linguagem ActionScript 3.0 e Java 5, apresento algumas formas de consumir dados e também como fazer que um código feito para executar na Web com o Flash Player, possa ser executado no Desktop sem alterar uma linha de código funcional.

Estou por finalizar um próximo artigo, nesse o foco está em apresentar como utilizar o Flex em aplicações corporativas, integrando com SpringFramework e EJBs utilizando o JBoss.

Sem mais, por favor deixe o seu feedback!

Abraços.

o/

Flex: Um chat simples em menos de 20 linhas.

Uma coisas mais excepcionais que o design do framework do Adobe Flex traz, é a facilidade de trabalhar com os serviços de mensageria. Toda a complexidade que existe nas soluções de mensageria como a do JMS do Java, no Flex, basicamente foi resumido ao <mx:Producer/> e <mx:Consumer/> (ver a documentação).

Assim como os outros meios de comunicação do Flex ( HttpService, WebService, RemoteObject ) o Consumer e Producer precisam de uma funcionalidade no back-end, em específico o DataService que está usando. Como por exemplo, no Java o DataService mais comum que contém essa funcionalidade é o Live Cycle Data Services e o BlazeDS, este OpenSource. No PHP, tem o WebOrb for PHP.

Como o título deste tópico informa, para provar que é muito simples trabalhar com mensageria no Flex, vamos criar um chat com nem 20 linhas (um total de linhas programadas e não de configuração) no Flex. Para tal façanha, primeiro escolha qual linguagem e DataService que irá utilizar no back-end. Eu estarei utilizando Java + BlazeDS.

Partindo do princípio que o BlazeDS já está integrado ao Java e com as configurações básicas:

  1. O primeiro passo é criar um canal de comunicação para trafegar as mensagens. Para isso, no arquivo services-config.xml do BlazeDS, adicione o seguinte canal:

    [xml]

    [/xml]

    Esse é um canal de Streaming, e só irá funcionar se for executado em Http 1.1. Outra forma de utilizar os serviços de menssageria, é criar um canal AMF normal (AMFChannel) e ativar o polling, como no exemplo abaixo:

    [xml]

    true

    [/xml]

  2. Criado o canal, vamos criar o destination na qual irá utilizar o canal. Para isso, crie se não existir um arquivo no mesmo diretório do services-config.xml com o nome de messaging-config.xml, nele coloque o seguinte conteúdo:
  3. [xml]

    [/xml]

    Com o messaging-config.xml criado, é preciso informar ao services-config.xml que existem destinations de mensageria. Para isso adicione as linhas abaixo no services-config.xml:

    [xml]

    [/xml]

  4. Adicionado o destination (chatMessage), a configuração já está completa. Vamos agora criar a Interface do Chat junto com o Producer e Consumer (menos de 20 linhas):

    [xml]

    [/xml]

Pronto! agora basta startar seu Container Web (no meu caso o TomCat) e abrir 2 browsers distintos e enviar as menssagens.
Atenção com o Firefox, pois ele armazena a mesma session para abas diferentes, e por default, o BlazeDS suporta uma conexão por cliente.

Para todo e qualquer erro, verifique sempre o console do Tomcat, ele sempre traz informações úteis para identificar os erros.

[Download do Fonte]

ChatApp

Manifesto Flex Brasil

[Saiba o que é o Manifesto Flex Brasil]

Minhas principais contribuições para a comunidade:

Post: Configurando Ambiente com Flex 2 e HelloWorld.
Por que ele é relevante: Aprenda a montar um ambiente de desenvolvimento com Flex 2 e um HelloWorld.
A quem ele se destina: Desenvolvedores inexperientes com Flex.

Post: Simples Leitor de RSS
Por que ele é relevante: Veja como em poucas linhas de código é possível fazer um leitor de RSS com Flex usando HttpService.
A quem ele se destina: Desenvolvedores Flex em geral.

Post: Adobe Flex – Brincando com Efeitos
Por que ele é relevante: Veja como é fácil adicionar efeitos aos componentes Flex.
A quem ele se destina: Desenvolvedores Flex em geral.

Post: Trocando objetos entre Flex e PHP
Por que ele é relevante: Faça uso de uma boa prática trocando objetos do tipo VO/DTO/TO entre Flex e PHP via RemoteObject.
A quem ele se destina: Desenvolvedores Flex que usam PHP no back-end.

Post: Censo Adobe Flex Developer
Por que ele é relevante: Um pequena aplicação em Flex que armazena dados de desenvolvedores Flex.
A quem ele se destina: Desenvolvedores Flex em geral.

Post: Trabalhando com CSS no FlexBuilder 3
Por que ele é relevante: Aprenda como criar estilos no Flex através de .css usando o FlexBuilder 3.
A quem ele se destina: Desenvolvedores Flex que tem foco em design.

Post: Proposta de Arquitetura com Adobe Flex e PHP usando Zend Framework
Por que ele é relevante: Disponibilizo a comunidade uma proposta de desenvolvimento com Flex e PHP, para que possa padronizar, arquitetar o código usando boas práticas.
A quem ele se destina: Desenvolvedores Flex que usam PHP no back-end.

Post: Fórum FlexBrasil
Por que ele é relevante: Uma alternativa a listas Flex-Brasil e FlexDev, e armazenamento de tópicos com intenção de ajudar novos desenvolvedores Flex.
A quem ele se destina:
Desenvolvedores Flex em geral.

Post: Integrando Adobe Flex + BlazeDS + SpringFramework + Hibernate. [Parte1]  [Parte2]
Por que ele é relevante: Mostro com detalhes como integrar frameworks de mercado mais famosos no mundo Java com Flex usando RemoteObjects.
A quem ele se destina: Desenvolvedores Flex que usam Java no back-end.

E agora eu passo a bola para o Eberton Consolim

Integrando Adobe Flex + BlazeDS + SpringFramework + Hibernate – Uma Solução OpenSource para Sistemas Web. (Parte 2 – Final)

Olá Pessoal!

Primeiro lugar, quero agradecer a todos pelo feedback do post anterior, isto é motivante e me dá ânimo em concluir este, e outros que virão.

Hoje o foco deste artigo é que você termine ele sabendo:

Configurar os Beans do Spring através de annotations;

Integrar o esquema de Beans do Spring com os services do Flex através de uma Factory;

Configurar o Spring para usar o Hibernate para abstrair nosso banco de dados;

Para isso vamos a uma breve introdução a estes poderosos frameworks

Breve Introdução ao Spring

spring

Como não sou fã de ficar re-escrevendo a roda, vou tentar dar a você leigo em Spring, um caminho para estudar.

Primeiro de tudo, leia este artigo feito pelo Phillip Calçado (Shoes)
apostila-spring.pdf 
Valeu
Ebertom pela hospedagem! =)

Uma Introdução ao que o  SpringFramework pode oferecer:
http://blog.fragmental.com.br/2005/08/31/spring-em-acao/
http://www.ime.usp.br/~reverbel/SMA/Slides/seminarios/spring.pdf
http://imasters.uol.com.br/artigo/4497/java/spring_framework_introducao/

Outros Tutoriais
http://www.javafree.org/content/view.jf?idContent=46

http://www.devmedia.com.br/articles/viewcomp.asp?comp=6627
http://www.devmedia.com.br/articles/viewcomp.asp?comp=6628
http://www.devmedia.com.br/articles/viewcomp.asp?comp=6653

Spring Annotations
http://blog.interface21.com/main/2006/11/28/a-java-configuration-option-for-spring/
http://weblogs.java.net/blog/seemarich/archive/2007/11/annotation_base_1.html

Exemplos de códigos
http://paulojeronimo.com/arquivos/tutoriais/tutorial-spring-framework.zip
http://www.java2s.com/Code/Java/Spring/CatalogSpring.htm

Documentação
The Spring Framework – Reference Documentation

Bom acredito que se você que está afim de conhecer o SpringFramewok, com esses Link’s já é possível entender quase tudo o que ele pode oferecer a sua arquitetura. Lembrando que não é recomendável seguir com este artigo, sem antes entender como funciona  IoC, AOP, DAO, com o SpringFramework.

*Nota A abordagem aqui é sobre o SpringFramework, (Framework de Negócio) e não sobre o SpringMVC, uma vez que o Flex pode se trocar objetos através do protocolo AMF3, é totalmente dispensável o uso de Frameworks MVC’s.

Breve Introdução ao Hibernate

Como eu já disse, uma vez que já existe um bom conteúdo sobre Hibernate na Internet, não há a necessidade de re-escrever, por isso vou lhe dar a você leigo em Hibernate uma sequência de Link que irá te ajudar a entender este poderoso Framework.

Uma Introdução ao que o  Hibernate pode oferecer:
http://www.students.ic.unicamp.br/~ra007271/docs/white-papers/hibernate-uma_introducao_dirigida.pdf
http://www.guj.com.br/java.tutorial.artigo.125.1.guj
http://www.jeebrasil.com.br/mostrar/4
http://www.devmedia.com.br/articles/viewcomp.asp?comp=4149

Outros Tutoriais
http://simundi.blogspot.com/2007/09/criar-uma-aplicao-com-hibernate.html
http://www.hibernate.org/hib_docs/v3/reference/en/html/queryhql.html
http://www.hibernate.org/hib_docs/tools/reference/en/html/plugins.html
http://www.guj.com.br/posts/list/7249.java

Pacotão de PDF’s
http://br.groups.yahoo.com/group/java-br/files/Hibernate/

Exemplos de código
http://www.java2s.com/Code/Java/Hibernate/CatalogHibernate.htm

Documentação
http://www.hibernate.org/hib_docs/v3/reference/en/html/

Ok, partindo do princípio que você já entendeu como funciona o Hibernate, e o Spring, vamos ao código! +)

Continue reading

Integrando Adobe Flex + BlazeDS + SpringFramework + Hibernate – Uma Solução OpenSource para Sistemas Web. (Parte 1)

Olá Pessoal,

Hoje vou começar algo que estou prometendo há um bom tempo! A integração dos seguintes frameworks:

Adobe Flex;

Adobe BlazeDS;

Spring Framework;

Hibernate;

Introdução

No mundo de desenvolvimento WEB principalmente com Java, temos problemas quanto ao desenvolvimento de interfaces, como incompatibilidade entre browsers, desenvolviemento lento, e outros detalhes que muitos vivenciam diariamente.

Existem soluções que prometem como o JSF por exemplo, mas como dizem “A primeira experiência em Flex o programador Java nunca esquece.” logo quero convidar você que vem do mundo do Java, para conhecer uma solução de desenvolvimento de interfaces com o AdobeFlex.

Apresentando Adobe Flex e Adobe BlazeDS

Adobe Flex

Do Flex não vou falar muito, também por que neste blog você pode encontrar muito conteúdo explicativo como por exemplo este link: http://23.20.48.222/?p=32 algumas abordagens ali já estão desatualizadas, porém a essência é a mesma como por exemplo algumas vantagens de se usar Flex:

O Flex é executado a partir de uma máquina virtual, logo o programador apenas se preocupa em desenvolver a interface não em programar compatibilidade entre browsers.

Você programa sua interface totalmente orientada a objetos, isso visa reuso de componentes, desenvolvimento de módulos e afins.

Há várias maneiras de comunicar o Java com o Flex, mas em destaque é que você pode trocar objetos Java/Flex por um protocolo que provê compactação e tranferência binária, este é o AMF.

Adobe BlazeDS

O BlazeDS é um produto OpenSource (Licença LGPL v3) que corresponde à tecnologia JAVA server-side que dá suporte tanto para o Remoting assim como ao Messaging de objetos trocados entre o Java e o Flex/Flash.

Com o BlazeDS você pode gerar vários tipos de canais de conexão, um destaque muito importante para toda a comunidade Flex/Flash mundial, é que o serviço de data-push também foi disponibilizado de graça!, para quem não conhece, é algo semelhante ao Pattern Observer.

Integrando o Adobe Flex com o BlazeDS

Requerimentos:

Eclipse 3.3;

Adobe Flex Builder 3 Plugin;
*No título apresento como solução OpenSource, e o FlexBuilder 3 é pago, mas irei fazer uso apenas para facilitar o entendimento, caso seja estudante, baixe o FlexBuilder 2 é de graça para estudantes ou afins, caso não, baixe o Flex SDK e compile com Ant ou com o FlashDeveloper que é de graça.

Adobe BlazeDS;
*É recomendável que baixe a documentação do BlazeDS, para futuros estudos.

Tomcat 6.0;

Ok, Vamos começar!

Extraia o Eclipse 3.3 em algum lugar, por exemplo C:/Desenvolvimento/Eclipse 3.3/

Instale o Plugin do Flex no Eclipse, quando pedir o local aonde instalar o flex sdk, você pode selecionar em C:/Desenvolvimento/Frameworks/Adobe/

Após baixado o BlazeDS, perceba que ele vem vários arquivos, o que importa agora são os seguintes:

blazeds-samples.war

blazeds.war

No blazeds-samples.war como o próprio nome diz, contém aplicações de exemplo, como implementação do data-push, um chat, e etc…

O blazeds.war contém tudo o que é necessário para podermos configurar nossa aplicação.

Você deve ter percebido que no arquivo que você baixou o BlazeDS, contém um Tomcat já com todas as libs necessárias e etc.. Algumas libs ali tem reelevância como a flex-tomcat-common.jar e flex-tomcat-server.jar mas vamos deixar isso para outro artigo =)

Apesar do BlazeDS já vir com um Tomcat, eu estarei usando meu próprio Tomcat 6.0.

Abra seu Eclipse, e faça como no screencast abaixo que mostra como criar seu projeto no Eclipse 3.3:

Link Externo

*Se na aba “Problems” estiver com o erro “Cannot create HTML wrapper. Right-click here to recreate folder html-template.” clique com o botão direito, e clique em Recreate HTML Templates. Considero isso um bug do FlexBuilder.

Continue reading

Forum sobre AdobeFlex!

Olá Pessoal!!

=)

É com muito prazer que divulgo a todos que o forum sobre AdobeFlex ficou pronto! Está bem bacana, utilizamos o PhpBB3 que veio com um layout muito mais atrativo.

http://forum.flexbrasil.com.br/

O forum tem a intenção de unir mais a comunidade, e está voltado para aqueles:

  1. Que não conhece a tecnlogia;
  2. Que estão começando a aprender;
  3. Que já estão em um nível avançado;

 

Acredito que ficou muito bom, pesso que entre e confira!! e também divulguem para que a comunidade cresça  o mais rápido o possível!

Abraços e até mais!

o/

Proposta de Arquitetura com Adobe Flex e PHP usando Zend Framework

Olá Pessoal,

Um item básico quando se trata de sites, é um local onde o visitante pode de alguma forma entrar em contato com a empresa do site, hoje existem algumas boas soluções para isso, como por exemplo um client msn que pode ser colocado no site e se o visitante quiser, pode entrar em contato com o msn da empresa.

Mas hoje vou mostrar a vocês uma forma simples e funcional, que consiste em um formulário onde o visitante preenche os dados, e gera um e-mail para o destinatário.

Mostrarei isso usando PHP/ZEND/AMFPHP/FLEX, poderia fazer isso somente com HTTPService? concerteza, ficaria menos código e até mais simples, porém concordamos que ninguém iria fazer uma aplicação só com essa funcionalidade, pois o Formulário de Contato seria apenas um módulo do sistema.

Então vou lhes mostrar também uma proposta de como você pode trabalhar arquiteturalmente com Flex e PHP, trocando apenas VO/TO/DTO entre as camadas, lembrando que isso é uma boa prática, vejo muitos porae trocando array’s com Flex e PHP, isso é totalmente desnecessário.

Detalhes da Arquitetura

ZEND Framework;

AMFPHP;

Adobe Flex;

A arquitetura usa o ZEND para abstração do banco de dados usando a Classe Zend_Db_Table, e outros recursos como o Zend_Loader e Zend_Registry.

AMFPHP para a comunicação entre o AdobeFlex e o PHP, esta comunicação rodando em cima do protocolo AMF3, que provém comunicação binária não mais String como no HTTP puro, e também compactação.

Estruturando a aplicação

Estrutura de Pastas  
Listagem 1

Crie uma estrutura de pastas como mostrado na Listagem 1

O package entitybean contém classes que segue os conceitos de um EntityBean como nas especificações J2EE/JEE, só que claro BMP através do Zend_Db_Table, e uma outra classe que eu fiz chamada EntityBeanImpl, que abstrai ainda mais os métodos CRUD de um caso de uso, como por Exemplo eliminei os métodos Inserir e Atualizar, e criei um Salvar, que insere ou atualiza baseado na Primary-Key. Em poucas palavras, um EntityBean, é reponsável pela abstração de um Banco de Dados Relacional, as camadas acima de entityBean apenas conhecem o entitybean, não tem acesso ao Banco de dados.

Para Garantir transação e concorrência, criei uma classe chamada DB que cotém um singleton me garantindo apenas uma instância da mesma em uma transação,  ela é reponsavel por iniciar uma transação através do método beginTransaction() realizar o commit se toda a operação ocorrer com sucesso atraveés do método commit()  e realizar o roolback no banco de dados através do método rollback().

O package sessionbean contém classes que segue os conceitos de um SessionBean também como nas especificações J2EE/JEE só que apenas sendo Stateless. Em poucas palavras um SessionBean tem a responsábilidade de implementar a regra de negócio do caso de uso, como por exemplo validações, calculos e etc.

O package facade contém classes que implementam o Pattern Facade em outras palavras é a fachada do sistema, neta arquitetura ela é responsável por garantir a transação usando a classe DB, também é reponsável pelo tratamento de exceções (Erros).

O package vo contém simples classes que implementam os Patterns VO/TO/DTO, são os vo’s encarregados de transportar entre as camadas as informações de cada caso de uso. Lembrando que o mesmo VO no PHP, será automaticamente serializado pelo AMFPHP para um VO no Flex para isso os VO devem ficar assim:

Continue reading