Simplified BlazeDS and JMS
Saturday, January 31st, 2009http://mmartinsoftware.blogspot.com/2008/05/simplified-blazeds-and-jms.html
http://mmartinsoftware.blogspot.com/2008/05/simplified-blazeds-and-jms.html
http://flexible.riaforge.org/
http://msdevstudio.com/blog/tag/flex/
http://blog.flexexamples.com/
http://examples.adobe.com/flex3/componentexplorer/explorer.html
http://blog.digows.com/integrando-adobe-flex-blazeds-springframework-hibernate-uma-soluo-opensource-para-sistemas-web-parte-1/
http://blog.digows.com/integrando-adobe-flex-blazeds-springframework-hibernate-uma-soluo-opensource-para-sistemas-web-parte-2-final/
http://www.jacksonfdam.com.br/2008/07/16/integrando-adobe-flex-blazeds-springframework-hibernate-uma-solucao-opensource-para-sistemas-web/
http://blog.mariojunior.com/
http://www.adobe.com/devnet/flex/tourdeflex/
Este artigo tem como objetivo mostrar a integração entre Flex e Java utilizando OpenAmf, acessando um base de dados através de JDBC.
A primeira parte do artigo cobre a configuração do lado do servidor, ou seja, classes Java, xml de configuração do OpenAmf, web.xml da aplicação web, bibliotecas utilizadas pelo OpenAmf e o script do banco de dados Mysql.
A segunda parte cobre a configuração do Flex para acesso ao Java, ou seja, mxml da tela em Flex e o ActionScript que faz a chamada ao Java.
CREATE TABLE `user` ( `userID` int(10) unsigned NOT NULL auto_increment, `name` varchar(255) NOT NULL default '', `email` varchar(255) NOT NULL default '', PRIMARY KEY (`userID`) );
package tt; public class UserDAO { private Connection conn = null; private PreparedStatement pst = null; private Statement stm = null; public Connection getConnection()throws Exception { if(conn == null){ Class.forName("org.gjt.mm.mysql.Driver"); conn = DriverManager.getConnection("jdbc:mysql://localhost/exemplo?user=root&password=xxxx"); conn.setAutoCommit(false); } return conn; } public void save(String name, String email)throws Exception{ try{ conn = getConnection(); pst = conn.prepareStatement("INSERT INTO user(name, email) values(?, ?)"); pst.setString(1, name); pst.setString(2, email); pst.executeUpdate(); conn.commit(); } catch(Exception e){ e.printStackTrace(); conn.rollback(); } finally{ pst.close(); conn.close(); } } public void delete(int userID)throws Exception{ try{ conn = getConnection(); pst = conn.prepareStatement("DELETE FROM user where userID = ?"); pst.setInt(1, userID); pst.executeUpdate(); conn.commit(); } catch(Exception e){ e.printStackTrace(); conn.rollback(); } finally{ pst.close(); conn.close(); } } public ArrayList list()throws Exception{ ArrayList<User> list = null; try{ conn = getConnection(); stm = conn.createStatement(); ResultSet rs = stm.executeQuery("SELECT * FROM user order by userID DESC"); list = new ArrayList<User>(); while(rs.next()){ User u = new User(); u.setUserID(rs.getInt("userID")); u.setName(rs.getString("name")); u.setEmail(rs.getString("email")); list.add(u); } } catch(Exception e){ e.printStackTrace(); conn.rollback(); } finally{ stm.close(); conn.close(); } return list; } }
package tt; public class User{ public int userID; public String name; public String email; public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public int getUserID() { return userID; } public void setUserID(int userID) { this.userID = userID; } public String getName() { return name; } public void setName(String nome) { this.name = nome; } }
package tt; public class UserService { public UserService() { } public void save(String name, String email)throws Exception{ new UserDAO().save(name, email); } public ArrayList list()throws Exception{ return new UserDAO().list(); } public void delete(int userID)throws Exception{ new UserDAO().delete(userID); } }
<?xml version="1.0" encoding="UTF-8"?> <web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2eehttp://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <!-- openamf gateways --> <servlet> <description>DefaultGateway</description> <display-name>DefaultGateway</display-name> <servlet-name>DefaultGateway</servlet-name> <servlet-class>org.openamf.DefaultGateway</servlet-class> <init-param> <description>Location of the OpenAMF config file.</description> <param-name>OPENAMF_CONFIG</param-name> <param-value>/WEB-INF/openamf-config.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>DefaultGateway</servlet-name> <url-pattern>/gateway</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.html</welcome-file> </welcome-file-list> </web-app>
- ant.jar - astranslator-1.5.9.jar - commons-beanutils-1.7.0.jar - commons-codec-1.3.jar - commons-collections-3.1.jar - commons-digester.jar - commons-discovery.jar - commons-httpclient-3.0.jar - commons-lang-2.1.jar - commons-logging-1.0.4.jar - junit-3.8.1.jar - mysql-connector-java-3.1.12-bin.jar - openamf.jar - saaj.jar - wsdl4j.jar
package tt { import flash.net.NetConnection; import flash.net.ObjectEncoding; public class RemotingConnection extends NetConnection { public var sURL:String = "http://localhost:8080/sua_app_web/gateway"; public function RemotingConnection(){ objectEncoding = ObjectEncoding.AMF0; connect(sURL); } } }
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="531" height="312" initialize="initApp()"> <mx:Script> <![CDATA[ import mx.collections.ArrayCollection; import mx.controls.Alert; import tt.RemotingConnection; import flash.net.Responder; public var service : RemotingConnection; [Bindable] public var users:ArrayCollection; public function initApp(): void{ service = new RemotingConnection(); list(); } public function save() : void{ if(txtName.text != "" && txtEmail.text != ""){ var name:String = txtName.text; var email:String = txtEmail.text; service.call( "tt.UserService.save", new Responder(saveResult, resultFault), name, email); } else{ Alert.show("Você deve informar Nome e Email !"); } } public function saveResult( result : String ) : void { Alert.show("Salvo com Sucesso !"); txtName.text = ""; txtEmail.text = ""; list(); } public function resultFault( fault : String ) : void { Alert.show( "Falha !!" + fault.toString()); } public function list() : void{ service.call( "tt.UserService.list", new Responder(listResult, resultFault)); } public function listResult( result : Array ) : void { users = new ArrayCollection(result); } public function delet(): void{ if(gridUsers.selectedItem != null){ var userID:int = gridUsers.selectedItem.userID; service.call( "tt.UserService.delete", new Responder(deletResult, resultFault), userID); } else{ Alert.show("Selecione uma linha !"); } } public function deletResult( result : String ) : void { Alert.show("Excluído com Sucesso !"); list(); } ]]> </mx:Script> <mx:Panel x="52" y="19" width="427" height="267" layout="absolute" title="Manutenção de Usuários"> <mx:Button x="332" y="45" label="Salvar" id="btnSalvar" click="save();"/> <mx:Label x="10" y="21" text="Nome:"/> <mx:TextInput x="60" y="17" width="337" id="txtName"/> <mx:Label x="12" y="47" text="Email:"/> <mx:TextInput x="60" y="45" width="264" id="txtEmail"/> <mx:DataGrid x="10" y="73" width="387" height="117" dataProvider="{users}" id="gridUsers"> <mx:columns> <mx:DataGridColumn headerText="ID" dataField="userID"/> <mx:DataGridColumn headerText="Nome" dataField="name"/> <mx:DataGridColumn headerText="Email" dataField="email"/> </mx:columns> </mx:DataGrid> <mx:Button x="333" y="198" label="Excluir" id="btnExcluir" click="delet();"/> </mx:Panel> </mx:Application>
AMFPHP, RIA, Flex, PHP February 16th, 2007
Integração do Flex e PHP através do protocolo AMFPHP, em uma simples aplicação que mostrará os valores de uma base de dados MySQL em um Grid do Flex, este tutorial está disponível em inglês, no site da Adobe.
Será baixado o AMFPHP e descompactado na máquina local (ou colocado em algum servidor). O AMF (Action Message Format) é a forma com que a aplicação vai conversar com o banco de dados. O banco de dados escolhido foi o MySQL. Primeiramente foi criado o banco de dados e a tabela “users†(usuários):
Dentro dos arquivos do AMFPHP, o arquivo gateway.php é responsável pela comunicação da aplicação. Dentro do diretório “services†será colocado a aplicação php que se conecta com o banco de dados. Este arquivo terá uma função para se conectar com o AMFPHP utilizando arrays. E outra função getUsers para receber os dados da nossa tabela do banco de dados.
A classe RemotingConnection (.as) estará na pasta raiz da aplicação, com o código abaixo:
Na interface da aplicação, o mxml conterá o código a seguir que herdará a classe RemotingConnection.

Nestas linhas de código é possível verificar que o Flex está se comunicando através de AMFPHP (gateway.php) e chamando a função getUsers do arquivo editado anteriormente. Além deste trecho de código, haverá o código mxml que desenhará a aplicação. Na próxima figura, segue o código de uma aplicação mostrando um DataGrid com valores da tabela “Users†do Banco de Dados, feito em mxml no Flex.
A próxima figura mostra o Grid recheado com as informações que estão no banco de dados. O sistema busca as informações do Banco de Dados (MySQL) através de AMFPHP que acessa o GateWay e este chama a função para retornar os dados da tabela.

Fonte: http://riacenter.com/blog/?p=86
http://www.flash-db.com/Tutorials/helloAS3/
http://labs.adobe.com/wiki/index.php/ActionScript_3:resources:apis:libraries (libs)
Olá Pessoal. Escrevi durante muito tempo no iMasters sobre Zope, e a partir de agora vou me dedicar mais à comunidade Flex, com matérias sobre essa promissora ferramenta, desenvolvendo aplicativos e criando componentes de software.
Espero poder ajudar bastante a todos que se interessem por esta nova tecnologia e, caso tenham dúvidas, por favor, entrem em contato por e-mail. Sugestões para novos artigos também são muito bem aceitos.
Minha linha de desenvolvimento nos artigos iMasters será baseada na tecnologia Flex + PHP, criando através dos artigos um sistema capaz de trazer mais interatividade ao usuário.
Como o Flex funciona?
O Flex tem como base a linguagem Action Script 3.0, junto com uma outra linguagem de desenvolvimento chamada MXML. Com estas duas linguagens, basta compilar para se obter o resultado desejado. Este resultado é um arquivo com a extensão SWF, nativa do Flash Player. Assim, com o SWF, podemos apresentar nosso sistema no Browser do cliente. Veja:

Quando criamos um aplicativo no Flex, o SWF é gerado e então você pode publicá-lo na web. O processo é muito semelhante ao Flash mesmo. O que precisamos ter em mente é que, quando uma pessoa acessa o nosso sistema em Flex, o arquivo SWF é baixado para o computador da pessoa (Cache do Browser). Como o SWF está no cliente, não existe uma forma de conectar no banco de dados e realizar outras operações, que são exclusivas de um servidor.
A saída é utilizar uma linguagem que roda no servidor, tal como PHP, ASP, Java, etc. Com esta outra linguagem de script, rodando no lado do servidor, temos um grande ganho de interatividade com o usuário.
Formas de conexão com o servidor
Existem atualmente 3 meios de comunicação entre um aplicativo Flex (lembre-se, o swf que está na máquina do cliente) e o seu servidor, veja:
RemoteObjects: É a forma de conexão mais rápida. A comunicação entre o cliente e o servidor é realizada de forma binária, com os dados comprimidos. É utilizado um padrão de comunicação chamado AMF (Action Message Format), no qual o servidor deve estar preparado para “entender” tal padrão. Isso siginifica que somente uma linguagem de script ao lado de servidor não basta. Você precisa de algo a mais nela, como um plug-in (ou uma extensão).
Felizmente já existe um ótimo produto para o PHP, chamado de AMFPHP, no qual iremos utilizar em nossos artigos. Ele é simples de instalar e fácil de usar.
HTTPService: usa o protocolo HTTP para comunicação, deixando-o lento. Neste caso, o cliente somente irá ler o que o script do servidor fornecer. A maioria dos scripts em flash são feitos assim, com o servidor retornando algo do tipo “variavel1=valor1&variavel2=valor2…” Iremos fornecer um exemplo para melhor exemplificar este caso, em um próximo artigo.
WebService: estão ficando cada vez mais famosos na internet, por se tratar de um padrão de comunicação entre plataformas e aplicativos distintos. Mas os webservices não passam de um simples XML, lidos através do protocolo SOAP. Também são lentos e não serão utilizados em nossos artigos.
Iremos nos aprofundar muito no RemoteObject, utilizando o PHP com a extensão AMFPHP. As outras duas formas de comunicação serão abordadas superficialmente.
Preparando o nosso servidor web
Antes de continuarmos, iremos comentar rapidamente como criar de forma muito simples um servidor no seu computador, para que você possa trabalhar com o PHP.
Lembrando que, se você já tem um servidor php pronto para usar, não precisa ler este tópico.
Existe um software muito bom chamado XAMPP, que se trata de um conjunto de serviços para que você possa ter um servidor web rodando em sua máquina. Ele é tão simples que nem precisa de instalação, bastando apenas que você coloque a pasta do programa no seu diretório raiz, por exemplo, c:\.
Para baixar o XAMPP, acesse: http://www.apachefriends.org/en/xampp-windows.html e baixe o arquivo: XAMPP Lite X.X.X, onde o X é o número da versão. No desenvolvimento deste artigo, a versão era 1.5.4. Não se esqueça de baixar o arquivo ZIP e não o instalador.
Após baixar o ZIP, descompacte no seu diretório raiz “c:\” .
Após descompactar, rode o arquivo: “c:\XAMPPLITE\xampp-control.exe” que é um controlador com 4 serviços: Apache, MySql, FileZilla, Mercury.
Por enquanto, o único serviço que você precisa é o Apache, que já vem com o PHP. Clique no botão “Start” e verifique se a mensagem “Running” fica presente ao lado do botão.
Caso você clique no “Start” do Apache, e este não funcione, você precisará verificar o que fez o Apache cair. Acesse: “c:\XAMPPLITE\apache_start.bat” e veja o motivo.
Um dos erros mais prováveis é de outro servidor (outro apache, IIS, Xitami, etc) estar usando a porta 80. Você precisa parar estes serviços antes de continuar.
Se a mensagem “Running” continuar a ser mostrada, o apache foi iniciado com sucesso, então você já pode acessar o endereço: http://localhost.
Surge uma tela com diversas opções (menu a esquerda), entre elas o “phpinfo”. Basta clicar nela e verificar se seu PHP está funcionando.
Com o nosso servidor web funcionando, nós podemos começar nossos artigos e mostrar diversas funcionalidades do flex+php.
Abraços Pessoal!
Autor: Daniel Schmitz
Fonte: http://imasters.uol.com.br/artigo/4777