Olá Pessoal, Este artigo faz uso do Framework OpenAMF que já foi desecontinuado.
Recomendo a leitura deste artigo -> http://blog.digows.com/?p=103
Que faz uso da solução OpenSource da Própria Adobe, o BlazeDS.
Porém, se você está aprendendo, ainda sim o tutorial abaixo é válido.
EDITADO DIA 13/10/2007
ATENCÃO!
O código fonte disponibilizado, foi melhorado e atualizado.
Para fazer o Download do mesmo clique aqui**:
Projeto JavaFlex com OpenAMF
Para utilização, apenas extraia o arquivo TutuJavaFlex.rar na pasta webapps do tomcat, ficando:
..\Tomcat\webapps\JavaFlex\*.*
Após isso, gere um banco de dados através do script dentro da Pasta JavaFlex: javaflexBD.sql
Feito isso, acesse: http://localhost:8080/JavaFlex/bin
Para edições , importe o projeto no Eclipse com o plugin do FlexBuilder instalado.
Lembrando que a apresentação abaixo apenas esclarece cada passo realizado.(...)
(...)
Mais então, um dos assuntos mais comentados pela net, é como deixar o Flex, como Camada de Apresentação para o Java,
realmente, se tem poquissimo material sobre este assunto, e o pouco que tem, meio complicado de entender,
eu mesmo já apanhei muito no começo, quem me deu uma mão na roda foi o "Mindu" do Grupo Google (FlexDev), hoje até já montei uma arquitetura usando Java, Flex, Hibernate, e OpenAMF trocando somente objetos!
Mas então, vamos lá?!
=====================================================
Requerimentos:
-- Ambiente configurado com Flex Builder, Java e TomCat ou similar;
--Conhecimentos Básicos de Java e Flex;
--MySQL® Connector/Java;
(Download: Link)
--OpenAMF RC12 - Java Flash Remoting;
(Download: Link)
1- Abra seu Eclipse, com Plugin do FlexBuilder, e crie um novo projeto Java com o nome de TutuJavaFlex (File=>New=>Project=>JavaProject).
O Projeto tem que ficar na pasta webapps do TomCat normalmente: "C:\tomcat\webapps\"
Ficando: "C:\tomcat\webapps\JavaFlex"
2- Vá até o a pasta "JavaFlex" pelo o explorer, e dentro dela, crie uma pasta chamada de
"WEB-INF" e dentro desta pasta, adicione os esses arquivos:
- Bibliotecas do OpenAmf e o driver do MySql utilizadas na aplicação
- ant.jar
- astranslator-1.5.9.jar
- axis.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
- dom4j-1.6.jar
- log4j-1.2.9.jar
- mysql-connector-java-xxx-bin.jar
- openamf.jar
- wsdl4j.jar
- O Arquivo de configuração openamf-config.xml não sofreu alteração, basta copiá-lo do arquivo openamf-xxx.zip e adicionar na pasta WEB-INF da sua aplicação.
- Arquivo web.xml da aplicação com a configuração do OpenAmf se encontra no .rar baixado.
/WEB-INF/lib/"OS JARS";
/WEB-INF/"openamf-config.xml" e "web.xml";
/WEB-INF/classes/"Futuras Classes Javas";
Volte ao FlexBuilder e de um F5 para Atualizar o projeto, e depois de um botão direito sobre a pasta raiz do projeto(TutuJavaFlex), e vá até properties =>Java Builder Path =>Libraries => ADDJars , navegue até a pasta lib, e selecione todos os Jars disponiveis, OK;
Em Source, vá até "default output folder" e navegue até a pasta classes dentro de WEB-INF
("WEB-INF/classes") OK.
3- Vamos Criar uma Tabela 'pais' em um banco qualquer para o exemplo:
CREATE TABLE `pais` (
`id` int(10) unsigned NOT NULL auto_increment,
`pais` varchar(255) NOT NULL default '',
PRIMARY KEY (`id`)
) ENGINE=InnoDB;
4- Volte ao FlexBuilder, e crie uma pasta src no diretório raiz do projeto, e dentro dela, uma chamada java;
5- Dentro da pasta java, crie uma classe Java chamada Pais.java, dentro dela crie uma bean java normal:
package src.java;
public class Pais{
public int id;
public String pais;
public int getId(){
return id;
}
public void setId(int id){
this.id = id;
}
public String getPais(){
return pais;
}
public void setPais(String pais){
this.pais = pais;
}
}
6- Ainda Dentro da pasta Java, crie uma classe chamada PaisDAO.java que se encontra no projeto
baixado.
Esta é uma classe java normal, aonde tem os Sqls, e a conexão com o banco;
No método:
public Connection getConnection()throws Exception {
if(conn == null){
Class.forName("org.gjt.mm.mysql.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost/test?user=root&password=");
conn.setAutoCommit(false);
}
return conn;
}
Altere, o "test" para o nome do Banco que Você irá usar, assim como "user" e "password".
7- Crie mais uma nova classe java, chamada PaisService.java, e adicione os códigos igual ao do rar baixado.
8- Agora, dentro da pasta src, crie uma pasta chamada flex, até agora, já criamos todos os arquivos java necessários para este exemplo;
9- Já que o java já esta criado, de um Botão direito sobre o projeto e vá em
Flex Project Nature -> Add Flex Project Nature
10- Agora vá até a pasta flex e crie uma classe ActionScript chamada RemotingConnection.as
iguamente ao que se encontrar no aquivo rar baixado.
Perceba a que exite essa linha:
public var sURL:String = "http://localhost:8080/JavaFlex/gateway";
Se Voce Não mudou o nome do diretório, deixe como está.
Esta é a classe principal, é ela que faz a conexão entre o Flex(Flash) e o Java, isto é, ela cria um
gateway (Ponto de Acesso) , entre os 2.
11- Belza!! agora vamos ao mais divertido, criar telas! +)
para isso, automaticamente deve ter criado um arquivo chamado: JavaFlex.mxml na raiz do projeto, e adicione códigos iguamente ao que se encontrar no aquivo rar baixado.
O código esta bem comentado, está bem fácil de entender! =)
Pronto!! Sua Aplicação Já está Feita!! +)
Vamos Executar?
Vá ao menu:
Project=>Clean
(Depois em desenvolvimento, gosto de deixar marcado a opção "Build Automatically")
Start o TomCat e
acesse: http://localhost:8080/JavaFlex/bin/JavaFlex.html
se vc fez tudo correto, funcionará!! +)
bom pessoal, para entender melhor como funciona a comunicação entre essas 2 poderosas linguagens, bacana seria ler a documentação do OpenAMF, Vale a pena!
Abraço Pessoal!!!! \o/
Download do Projeto Completo: Link
(Para utilizar, é só importar para o eclipse e dar um Clean)
26 comentários:
Cara, segui seu tutorial a risca...
mas ele não esta conectando ao banco ! Apresenta alguns erros
Eu preciso compilar as classes antes de rodar o FLEX ?
Ou eu compilo via prompt !?
Valeu pelo bisu !
abraços
Olá Filipe,
acredito que o tutorial está ok!
pois fui fazendo e escrevendo ele.
Melhor vc especifiicar o erro, para que eu possa estar te auxiliando!
Qualquer coisa kra! tem o projeto pronto no final do post!
Blza kra?!
Abraço! \o/
De:
------------------------------
| Rodrigo Pereira Fraga|
http://e-digows.blogspot.com
e-mails: rpffoz@hotmail.com
rfraga@itaipu.gov.br
------------------------------
Post Revisado e aprimorado
De:
------------------------------
| Rodrigo Pereira Fraga|
http://e-digows.blogspot.com
e-mails: rpffoz@hotmail.com
rfraga@itaipu.gov.br
------------------------------
Ola! Eu tenho pouca experiencia em desenvolvimento WEB e menos ainda em Flex.
Segui todo o seu tutorial, funcionou quase tudo perfeitamente. Exceto que a conexao com o mysql nao funcionou!
Nao sei se estou fazendo algo errado, nao sei como testar se a conexao com o BD esta funcionando corretamente, ou se o driver esta corretamente instalado.
Sei que a aplicacao nao apresenta nenhum resultado, nao aparece nada em tela, nenhuma informacao.
Como posso saber se o driver esta funcionando? Ou como testo se a conexao com o BD esta correta?
Obrigado!
Rodrigo
Oi, eu acabei de postar uma duvida neste blog, mas acabei confirmando que o conector esta funcionando corretamente.
Quando acessei o "site" localmente (ou seja, na maquina que desenvolvi e disponibilizei com o TomCat) o BD foi acessado corretamente. MAS, quando acesso o "site" de outra maquina na rede, o BD nao eh acessado.
Como posso resolver este problema?
Obrigado!
Rodrigo
Olá, se você concluiu que localmente está funcionando, então está ok!
Observe que no arquivo: RemotingConnection.as
existe essa linha: public var sURL:String = "http://localhost:8080/TutuJavaFlex/gateway";
Troque pelo nome da máquina, exemplo:
public var sURL:String = "http://pcDigows:8080/TutuJavaFlex/gateway";
assim como PaisDAO.java na linha:
DriverManager.getConnection("jdbc:mysql://localhost/test?user=root&password=");
ok?
Abraço!
Por Favor! deixem no mínimo seu e-mail, se não, não terá como auxiliar vocês! +)
Ola!! Desculpe, na semana passada deixei as msgs e acabei esquecendo de deixar meu e-mail (rpg_ufv@yahoo.com.br)
Eu comecei a desenvolver agora WEB e, principalmente, a usar flex. Mas, como qq outro, jah quero comecar a desenvolver alguma coisa, ate para aprender mais rapido.
A minha duvida agora é qual arquitetura uilizar. Tenho pouca experiencia em arquiteturas, principalmente para WEB (sei pouco ainda de JavaBeans, JBoss, WebServices).
Se vc puder me ajudar, gostaria de saber como implementar/definir os arquivos de forma padronizada?
Tenho pesquisado framework, design patterns, para facilitar o desenvolvimento. Se vc souber de algo para ajudar, te agradeco!!
Abraco!
Rodrigo
Cara, muito bom seu tutorial, segui passo a passo e tudo ok, também consegui usar o mesmo tutorial com o Apollo, e também deu certo.
Há, meu nome é Ricardo, e to usando Flex e Java no meu tce, seu tutorial será de muita ajuda.
Vlw...Até...
Rodrigo
Rodrigo, aqui eh o Rodrigo tb!
Bom, eu ate te mandei um mail para saber sobre essa troca de objetos entre Flex e Java. Pelo seu tutorial vi objetos prmitivos sendo trocados, como int, String, ... . Mas e objetos nao primitivos como ProdutoVO, Pessoa VO, ... ?
Eu preciso de instalar o Flex Data Service, ou o MX Remoting!??
Valew!
rpg
Opa Rodrigo, blz?
Cara eu segui o seu tutorial do começo ao fim, mas não tá funcionando aqui =(
Quando a aplicação carrega, um pop-up eh aberto dizendo "Falha: [object Object]".
Olhei o log do Tomcat, e o erro eh este:
- Error in service, detail=[AMFBody: {serviceName=src.java.PaisService, serviceMethodName=list, response=/1, type=ARRAY, value=[]}], AMFBody=[AMFBody: {serviceName=src.java.PaisService, serviceMethodName=list, response=/1, type=ARRAY, value=[]}]
org.openamf.invoker.ServiceInvocationException: java.lang.Exception: No service for 'src.java.PaisService'
at org.openamf.DefaultGateway.invokeBody(DefaultGateway.java:203)
at org.openamf.DefaultGateway.processMessage(DefaultGateway.java:190)
at org.openamf.DefaultGateway.service(DefaultGateway.java:95)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:667)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.Exception: No service for 'src.java.PaisService'
Vc saberia o que está acontecendo? E como faço para concertar isso?
[]'s
Ronaldo
ronaldoagra@gmail.com
Opa Blz...
Rodrigo.
Sou iniciante em flex.
Gostaria de saber se tem como criar um formulario em flex que carregue 2 combobox com dados do mysql, em que uma combobox carrega a tabela cidades e a outra a tabela tipo cliente, tudo mesmo formulario.
D!gOW's
Parabéns é o melhor tutorial que trata da Integração do Flex com Java.
Só dúvida: sobre qual versão do MySql vc utilizou? ou qual devo utilizar?
Um Abraço
Sidnei Custodio
sidneicustodio@gmail.com
Olá Rodrigo!
Parabens pelo tutorial, muito bem elaborado... O melhor que achei até o momento na Web.
Estou tendo problemas em executar o aplicativo na minha máquina, tanto para o script baixado do seu site quanto para o que eu segui a risca...
Meu problema é o seguinte, ele abre a tela para o cadastro, mas não puxa os dados cadastrados no banco de dados MySQL... vc tem alguma sugestão do que pode ser????
Eu estou usando o Tomcat 5.5 e o MySQL 3.23
Obrigado pela atenção...
Um Abraço,
Jean - jcainelli@gmail.com
Olá Rodrigo
Primeiro muito bom tutorial, e segundo estou com o mesmo problema do Ronaldo, se vc poder me dar uma força ficaria grato.
Igor - igoroliveiracosta@gmail.com
Olá,
Consegui fazer o Tutorial funcionar, ficou blz! Mas eu estou tentando adicionar novas funcionalidades como enviar um objeto ActionScript para o Java receber e utilizar os dados recebidos do flex.
Bem, eu criei essa classe em flex pra ser o objeto:
class src.flex.FuncionarioVO {
public var nome: String;
public var email: String;
public var endereco: String;
public var telefone: String
}
-----
Dai eu envio o objeto ActionScript nessa funcação ActionScript:
// SALVAR
public function salvar():FuncionarioVO{
// Criação do objeto VO - instância da classe FuncionarioVO.
var funcionarioVO:FuncionarioVO = new FuncionarioVO();
funcionarioVO.nome = "Jonas"; funcionarioVO.email = "jonasxxxx@gmail.com";
funcionarioVO.endereco = "POA";
funcionarioVO.telefone = "Telefone";
// Envia o objeto funcinarioVO ao Java
service.call( "src.java.VeiculoService.salvar", new Responder(SalvarResult, resultFault),funcionarioVO);
}
-----
E estou recebendo esse objeto com a seguinte classe lá no Java. Nessa classe o ArrayList chega Vazio!
public static boolean salvar (ArrayList obj){
System.out.println("|| Tamanho ||: "+obj.size());
}
----
Não sei como receber isto no Java, talvez o objeto não esteja chegando.
Abraço,
Francisco - 52715@lci.upf.tche.br
***Francisco
Algumas perguntas:
-Você está cahamando no Flex o Métodod no Java "VeiculoService.salvar", isto está correto? não era pra ser FuncionarioService?
- No Java:
public static boolean salvar
eu nunca testei com métodos static,
Faça um teste sem.
-Pelo que eu entendi, você queria gerar uma lista de funcionários e mandar para o Java..
aonde está esta implementação?
-No método:
public static boolean salvar (ArrayList obj){
faça um debug, trocando o ArrayList por Object.
Por favor deixe seu e-mail para facilitar a comunicação.
Olá digows otimo tutorial,
os links nao funcionam brother,
queria muito estudar seu exemplo,
por favor, coloca outros links
um abraço e até mais
Olá Rodrigo
parabéns pela sua iniciativa, isto só parte de pessoas grandes!!!
[usei o tomcat6, mysql 6]
Segui o tutorial a risca, mas me deparei com o seguinte erro:
java.lang.NullPointerException
at dao.PaisDAO.list(PaisDAO.java:83)
at service.PaisService.listar(PaisService.java:18)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.openamf.invoker.RankedMethod.invoke(RankedMethod.java:71)
at org.openamf.invoker.JavaServiceInvoker.invokeServiceMethod(JavaServiceInvoker.java:108)
at org.openamf.invoker.JavaServiceInvoker.invokeService(JavaServiceInvoker.java:52)
at org.openamf.DefaultGateway.invokeBody(DefaultGateway.java:210)
at org.openamf.DefaultGateway.processMessage(DefaultGateway.java:190)
at org.openamf.DefaultGateway.service(DefaultGateway.java:95)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Unknown Source)
se puder me ajudar !!!
da uma bola ae mano!!
Rogerio.
rog3r007@gmail.com
Cara, parabens pela iniciativa. Obrigado mesmo
Mas para mim esta aparecendo o seguinte erro na tela ao lado do flex, o que pode ser ?
java.lang.Exception: No service for 'service.PaisService'
at org.openamf.DefaultGateway.invokeBody(DefaultGateway.java:203)
at org.openamf.DefaultGateway.processMessage(DefaultGateway.java:190)
at org.openamf.DefaultGateway.service(DefaultGateway.java:95)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:595)
?????
Cara, parabens pela iniciativa. Obrigado mesmo
Mas para mim esta aparecendo o seguinte erro na tela ao lado do flex, o que pode ser ?
java.lang.Exception: No service for 'service.PaisService'
at org.openamf.DefaultGateway.invokeBody(DefaultGateway.java:203)
at org.openamf.DefaultGateway.processMessage(DefaultGateway.java:190)
at org.openamf.DefaultGateway.service(DefaultGateway.java:95)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:595)
?????
Parabéns Rodrigo pelo tutorial, ainda mais por estar disponibilizando os fontes, pois este assunto é questionado por muitas pessoas.
Abraços.
intiresno muito, obrigado
bom comeco
proctor far-off this parole [url=http://www.casinoapart.com]casino[/url] baby something at the weighty [url=http://www.casinoapart.com]online casino[/url] signal with 10's of credulous [url=http://www.casinoapart.com]online casinos[/url]. bear a become to pieces at [url=http://www.casinoapart.com/articles/play-roulette.html]roulette[/url], [url=http://www.casinoapart.com/articles/play-slots.html]slots[/url] and [url=http://www.casinoapart.com/articles/play-baccarat.html]baccarat[/url] at this [url=http://www.casinoapart.com/articles/no-deposit-casinos.html]no ruin casino[/url] , www.casinoapart.com
the finest [url=http://de.casinoapart.com]casino[/url] to UK, german and all during the world. so owing the treatment of the worst clock off [url=http://es.casinoapart.com]casino en linea[/url] corroborate us now.
[url=http://kaufenviagragenerika50mg.net/]viagra bestellen[/url] viagra kaufen [url=http://achat-viagra-pascher.net/]prix viagra[/url] commander viagra france [url=http://comprarviagragenerico100mg.net/]viagra[/url] viagra espana [url=http://comprareviagragenerico50mg.net/]viagra[/url] viagra in farmacia
Postar um comentário