Faz um tempo que não escrevo por aqui, mas olhando o meu rank de post, percebi que uns dos assuntos mais vistos é do BlazeDS, então decidir escrever um artigo bem focado. Este tutorial tem como objetivo criar um exemplo simples para “conectar” um cliente Flex com um serviço Java utilizando o BlazeDS. No exemplo não vou me prolongar em detalhes, pois temos que seguir o cronograma de três minutos
Para desenvolver o exemplo vamos utilizar as seguintes ferramentas:
Eclipse 3.3.2
Flex Builder 3
Flex 3 SDK
BlazeDS 3.0.0
JBoss4.2.2GA
1-Criação do Serviço Java.
Primeiro vamos criar um projeto que vai rodar no nosso servidor, o back-end Java, crie-o com o nome “ServerBlazeDS” com a seguinte estrutura:
WebContent
|____swf
|____WEB-INF
|______classes
|______flex
|______lib
Desenpacote o zip de download do BlazeDS e extraia o arquivo blazeds.war, va ate o diretório WEB-INF/lib e copie todas os jars e cole no mesmo diretório do seu projeto, faça a mesma coisa com a pasta “flex”, feito isso vamos contruir nossa classe de serviço Java:
public class Service {
private List<Map<String,String>> collection;
public List<Map<String,String>> getCollection(){
System.out.println(“Begin-getCollection()”);
collection = new ArrayList<Map<String,String>>();
Map<String, String> joao = new HashMap<String, String>();
joao.put(“Nome”,“Joao”);
Map<String, String> Zezinho = new HashMap<String, String>();
Zezinho.put(“Nome”,“Zezinho”);
Map<String, String> Mariazinha =new HashMap<String,String>();
Mariazinha.put(“Nome”,“Mariazinha”);
collection.add(joao);
collection.add(Zezinho);
collection.add(Mariazinha);
System.out.println(“end-getCollection()”);
return collection;
}
}
Essa classe implementa um método simples que retorna uma List de Maps, fiz isso, pois é uma maneira simples de implementar um objeto não tipado na hora da deserialização em ActionScript, onde vamos ter a mesma estrutura em um Object. E claro que podemos implementar perfeitamente um VO para a mesma operação.
Seguindo a seqüência, precisamos mapear os nossos serviços como destination, ou seja, fazer com que nossa aplicação possa invocar métodos da nossa classe de serviço distribuída dentro de nosso servidor Java. Dentro da pasta flex abra o arquivo remoting-config.xml e adicione nossa classe Service como destination.
<destination id=“myService”>
<properties>
<source>exmplo.amf.ds.Service</source>
<scope>application</scope>
</properties>
</destination>
Lembre-se do id (no caso ‘myService‘), pois será o nome que sua aplicação flex ira usar para referenciar sua classe remota. Pronto, tudo que precisamos em nosso servidor já foi configurado, agora precisamos criar nosso cliente Flex para acessar nosso serviço.
2-Criação do Flex Client
Agora utilizando o Plug-in do Flex Builder podemos seguir os passos New> Flex Project> digite o nome do projeto como “ClientBlazeDS” e “finish”, por padrão o plug-in já cria uma Application para você com o mesmo nome do projeto, mais ou menos assim.
<?xml version=”1.0″ encoding=”utf-8″?>
<mx:Application xmlns:mx=”http://www.adobe.com/2006/mxml” layout=”absolute“>
</mx:Application>
Tudo que escrevermos tem que esta dentro desta tag ‘Application’ é onde o compilador flex vai considerar como base para gerar nosso swf. Antes de começar a codificar precisamos indicar ao nosso compilador onde ele deve ler nosso arquivo servide-config.xml tambem dentro da pasta ‘flex’, então clique com o botão direito em cima do projeto va em Properties>Flex Compiler>Aditional compiler argumes e adicione:
-context-root ServerBlazeDS -services <DIR_PROJETO>\ ServerBlazeDS \WebContent\WEB-INF\flex\services-config.xml
Recapitulando:
1) Nossa aplicação terá que fazer uma requisição para nosso serviço Java, para isso vamos utilizar um componente chamado RemoteObject que ira fazer nossa chamada assíncrona de nosso método.
2) Mostrar de alguma forma esses dados, vamos utilizar o DataGrid para exibição de listas de objetos.
<?xml version=”1.0″ encoding=”utf-8″?>
<mx:Application xmlns:mx=”http://www.adobe.com/2006/mxml” layout=”absolute“
creationComplete=”init()”>
<mx:Script>
<![CDATA[
import mx.controls.Alert;
import mx.collections.ArrayCollection;
import mx.rpc.events.ResultEvent;
[Bindable]
private var collection:ArrayCollection;
private function init():void{
ROService.getCollection();
}
private function onResult(event:ResultEvent):void{
collection = event.result ? event.result as ArrayCollection : new ArrayCollection();
}
]]>
</mx:Script>
<mx:RemoteObject id=”ROService” destination=”myService” requestTimeout=”1“>
<mx:method name=”getCollection” result=”onResult(event)” fault=”{Alert.show(‘error de conexão’)}” />
</mx:RemoteObject>
<mx:Panel width=”384” height=”314” layout=”absolute” verticalCenter=”0” horizontalCenter=”0“>
<mx:Form width=”100%” height=”100%“>
<mx:DataGrid id=”grd” width=”100%” height=”100%” dataProvider=”{collection}“>
</mx:DataGrid>
</mx:Form>
</mx:Panel>
</mx:Application>
3-Empacotando e distribuindo a aplicação:
Vamos criar dentro da pasta swf uma pagina para carregar nosso arquivo *.swf gerado pelo nosso cliente:
<html>
<head>
<meta http-equiv=“Content-Type” content=“text/html; charset=utf-8″ />
<title></title>
<style>
body { margin: 0px; overflow:hidden }
</style>
<script language=“JavaScript” type=“text/javascript”>
</script>
</head>
<body scroll=“no”>
<object classid=“clsid:D27CDB6E-AE6D-11cf-96B8-444553540000″
id=“callcenter” width=“100%” height=“100%”
codebase=“http://fpdownload.macromedia.com/get/flashplayer/current/swflash.cab”>
<param name=“movie” value=“http://localhost:8080/ServerBlazeDS/swf/ClientBlazeDS.swf” />
<param name=“quality” value=“high” />
<param name=“bgcolor” value=“#869ca7″ />
<param name=“allowScriptAccess” value=“sameDomain” />
<embed src=“ClientBlazeDS.swf” quality=“high” bgcolor=“#869ca7″
width=“100%” height=“100%” name=“callcenter” align=“middle”
play=“true”
loop=“false”
quality=“high”
allowScriptAccess=“sameDomain”
type=“application/x-shockwave-flash”
pluginspage=“http://www.adobe.com/go/getflashplayer”>
</embed>
</object>
</body>
</html>
Agora copie o swf gerado no seu projeto flex dentro da pasta ‘bin-debug’ para pasta ‘swf’ do seu projeto servidor, execute o ant de deploy.
<project name=“BlazeDS-ANT” default=“pack-blaze”>
<property name=“deploy.dir” value=“../deploy”/>
<property name=“output.dir” value=“../output”/>
<target name=“create-directories” >
<echo>Creating output Directories …</echo>
<mkdir dir=“${deploy.dir}” />
<mkdir dir=“${output.dir}” />
<mkdir dir=“${output.dir}/blaze” />
<mkdir dir=“${output.dir}/blaze/WEB-INF/classes” />
<mkdir dir=“${output.dir}/blaze/swf” />
<echo>Done.</echo>
</target>
<property name=“sourceBlaze.dir” value=“../../ServerBlazeDS/src/”/>
<target name=“clean” >
<echo>Deleting build temp DIR …</echo>
<delete dir=“${output.dir}/blaze”/>
<mkdir dir=“${output.dir}/blaze”/>
<mkdir dir=“${output.dir}/blaze/WEB-INF/classes”/>
<mkdir dir=“${output.dir}/blaze/WEB-INF/lib”/>
<echo>done.</echo>
</target>
<target name=“build-blaze” depends=“create-directories”>
<echo>Compiling classes …</echo>
<javac destdir=“${output.dir}/blaze/WEB-INF/classes”
encoding=“iso-8859-1″
debug=“on”>
<src path=“${sourceBlaze.dir}”/>
<classpath>
<pathelement path=“${classpath}”/>
<fileset dir=“${sourceBlaze.dir}/../WebContent/WEB-INF/lib”>
<include name=“**/*.jar”/>
</fileset>
</classpath>
</javac>
<echo>Done Compiling.</echo>
<echo>Copying .swf.</echo>
<copy todir=“${output.dir}/blaze”>
<fileset dir=“${sourceBlaze.dir}/../WebContent”>
<include name=“**/*.*”/>
<exclude name=“**/*.svn”/>
</fileset>
</copy>
<echo>Done.</echo>
</target>
<target name=“pack-blaze” depends=“build-blaze”>
<echo>Packing WebAPP on WAR file …</echo>
<jar destfile=“${deploy.dir}/ServerBlazeDS.war” basedir=“${output.dir}/blaze”>
</jar>
<echo>Done.</echo>
</target>
</project>
Pronto, agora é só botar no servidor e testar a aplicação. Abra o browser e digite http://localhost:8080/ServerBlazeDS/swf/main.html, se ocorrer tudo bem a sua aplicação vai aparecer com essa cara.

Agora sim temos nossa aplicação (lindona
) , funcionando e acessando nossos objetos Java. Entao fico por aqui espero ter ajudado.
Codigo Fonte:
ClienteBlazeDS
ServerBlazeDS