Escolar Documentos
Profissional Documentos
Cultura Documentos
Programa
1. Tecnologias de backend que podem interligar 2. 3. 4. 5. 6. 7.
com o Flex Mtodos de comunicao possveis Flash Remoting em detalhe Flash Remoting vs Web Services Implementaes open-source de Flash Remoting AMFPHP em detalhe Exemplo: utilizar o AMFPHP para ligar um frontend em Flex a um backend em PHP
O apresentador
Joo Saleiro joao.saleiro@webfuel.pt Licenciado em Engenharia de Telecomunicaes
e Informtica no ISCTE
PFC consistiu no desenvolvimento de uma Rich
Internet Application recorrendo a best-practices de Engenharia da Programao e ferramentas opensource de desenvolvimento na plataforma Flash
(tentem dizer isto de seguida num s flego...)
www.castingoffice.net
O apresentador
user: osflash
pass: test
O apresentador
Co-fundador da Comunidade Portuguesa de Rich
Web na etic_
O apresentador
Tecnologias de backend
Pergunta Frequente:
P: Vou precisar de aprender uma tecnologia de
backend nova? R: No. possvel ligar o Flex a quase qualquer tecnologia de backend existente
JAVA, .NET, PHP, RoR, CF, Python... O que importa no a tecnologia, mas sim o
mtodo de comunicao
Mtodos de comunicao
Pergunta Frequente:
P: A minha empresa possui uma aplicao distribuda
sustentada em Web-Services, mas queria mudar o frontend para Flex. Tenho que refazer o backend? R: No. As aplicaes Flex consomem facilmente os Web-Services existentes sem ser necessrio mudar o backend
Flash Remoting?
Pergunta Frequente:
P: O que o Flash Remoting? R: um eficiente mtodo de comunicao RPC com
serializao automtica de dados sustentada num formato binrio (AMF Actionscript Message Format)
http://www.jamesward.org/census/
usar Web-Services e vice-versa? R: Podem ser usados ambos ao mesmo tempo! Basta expr duas verses para cada servio, uma usando Flash Remoting, e outra usando Web-Services
Pergunta Frequente:
P: Tenho que comprar esse Flash Remoting? R: No. Existem diversas implementaes de Flash
Perl
AMF::Perl
PHP
SabreAMF
CakePHP WebOrb AMFPHP
Ruby
Rubyamf WebOrb
NET
Fluorine AMF.NET
Python
PyAMF
Mais em http://osflash.org/projects
AMFPHP
A mais antiga implementao de Flash Remoting
para PHP
URL: www.amfphp.org Iniciado pelo Wolfgang Hamman, guiado pelo
AMFPHP
Pergunta Frequente:
P: Preciso de algum servidor especial para usar
AMFPHP? De instalar alguma ferramenta, tecnologia, alguma coisa? R: No. Basta fazer upload do source code do AMFPHP para um servidor LAMP e usar!
AMFPHP!
Os ingredientes
http://www.apachefriends.org/en/xampp-windows.html
http://www.amfphp.org
Est disponvel uma verso do FB2 trial de 30 dias no site da Adobe: http://www.adobe.com/products/flex/flexbuilder/ Est disponvel uma verso do FB3 RC1 trial de 90 dias no Adobe Labs: http://labs.adobe.com/technologies/flex/
Montar o cenrio
Em vez de instalarmos o Apache, PHP e MySQL em separado, podemos usar o XAMPP. Basta fazer o download, descomprimir e correr os servios. Certificar-se do endereo do pasta htdocs do Apache, ou alter-lo para um mais confortvel
A pasta htdocs onde deveremos colocar os projectos que sero servidos pelo Apache Para mud-la, preciso editar o ficheiro httpd.conf na directoria conf do Apache
Criar na pasta htdocs uma pasta para o nosso projecto, e descomprimir l para dentro o zip do AMFPHP
Montar o cenrio
Vamos obter a seguinte estrutura de
directorias:
browser permite inspeccionar e testar os
servios que criamos core no mexer services a pasta onde devermos colocar o cdigo para os nossos servios
Montar o cenrio
Criar o projecto no Flex, e mudar as directorias
argumento: services services-config.xml aplicao o endereo para a gateway que permite comunicar com o backend
O ficheiro services-config.xml
<?xml version="1.0" encoding="UTF-8"?> <services-config> <services> <service id="amfphp-flashremoting-service" class="flex.messaging.services.RemotingService" messageTypes="flex.messaging.messages.RemotingMessage"> <destination id="amfphp"> <channels> <channel ref="my-amfphp"/> </channels> <properties> <source>*</source> Colocar aqui o endereo </properties> para o gateway.php </destination> </service> Pode ser usado um </services> <channels> caminho relativo :) <channel-definition id="my-amfphp" class="mx.messaging.channels.AMFChannel"> <endpoint uri="http://localhost/riapt/backend/amfphp/gateway.php" class="flex.messaging.endpoints.AMFEndpoint"/> </channel-definition> </channels> </services-config>
tabela:
CREATE TABLE `produtos` ( `id` int(6) NOT NULL auto_increment, `designacao` varchar(255) NOT NULL, `quantidade` int(4) default NULL, `descricao` longtext, `categoria` varchar(255) default NULL, PRIMARY KEY (`id`)) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=latin1; -- ----------------------------- Records -- ---------------------------INSERT INTO `produtos` VALUES ('1', 'Porttil A6JC', '5', ' o meu :)', 'Informtica'); INSERT INTO `produtos` VALUES ('2', 'Frigorifico Zippy', '15', 'Frigorifico ecolgico ', 'Electrodomsticos'); INSERT INTO `produtos` VALUES ('3', 'Telemvel 8G', '1', 'Um telemvel 3G que engana os clientes', 'Telecomunicaes');
<? class GestorDeProdutosService { function GestorDeProdutosService () { $this->conn = mysql_pconnect('localhost', 'root', ''); mysql_select_db ('riapt'); } } ?>
E criar um mtodo que envia dados para o backend? Por exemplo, inserir produto?
No backend adicionar:
function addProduto($produto) { mysql_query("INSERT INTO produtos(designacao, quantidade, descricao, categoria) VALUES ( '".$produto['designacao']."', '".$produto['quantidade']."', '".$produto['descricao']."', '".$produto['categoria']."')"); return mysql_insert_id(); }
Resultado
E com isto, j temos uma aplicao que
A partir daqui o processo seria sempre o O passo seguinte seria recorrer a Value Objects
para definir explicitamente o formato dos objectos trocados entre o cliente e o servidor
Mais info
Exemplo de Flex com AMFPHP:
http://www.riapt.org/2007/07/16/exemplo-em-flex-2-operacoes-crudusando-flash-remoting-via-amfphp-19b2/
http://www.riapt.org/2007/07/16/exemplo-em-flex-2-utilizacao-de-valueobjects-com-flash-remoting/
Aprender Cairngorm:
http://www.riapt.org/2007/12/07/onde-aprender-cairngorm-a-frameworkmvc-da-adobe/
http://www.sephiroth.it/tutorials/flashPHP/flex_remoteobject/
Mais info
Sniffing de AMF (ver os dados trocados):
http://kevinlangdon.com/serviceCapture/
AMFPHP:
http://www.5etdemi.com/blog/archives/2007/01/amfphp-19-beta-2-
ridiculously-faster/
Questes ?