Olá Pessoal,
Hoje vou começar algo que estou prometendo há um bom tempo! A integração dos seguintes frameworks:
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://blog.digows.com/?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:
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.
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:
*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.
Com o projeto criado, vamos adicionar as libs necessárias para a execução do BlazeDS, para isso abra o blazeds.war (Com um Winrar da vida) e copie todos os Jars contidos na pasta WEB-INF\lib para o nosso projeto na pasta WebContent\WEB-INF\lib.
Com as Libs adicionadas, vamos criar um serviço no java que servirá como exemplo de como o Flex pode acessar uma classe java através do BlazeDS.
Para isso na pasta src_java, crie uma estrutura de pacotes, por exemplo:
com/digows/artigos/JavaFlex/model/service/
com/digows/artigos/JavaFlex/model/entity/
Dentro do package entity crie uma classe java com o nome de Cargo com o seguinte conteúdo:
Cargo.java
-
package com.digows.artigos.JavaFlex.model.entity;
-
-
public class Cargo {
-
-
private long idCargo;
-
private String dsCargo;
-
-
public long getIdCargo() {
-
return idCargo;
-
}
-
public void setIdCargo(long idCargo) {
-
this.idCargo = idCargo;
-
}
-
return dsCargo;
-
}
-
this.dsCargo = dsCargo;
-
}
-
}
Entities (ou Entidades, nenhuma relação com Entity Beans) são objetos que possuem uma identidade única.
Um carrinho de compras numa loja virtual web não é igual a outro, não importa que possuam os mesmos produtos, o carrinho A é o carrinho do usuário A, o carrinho B é do usuário B. Mesmo que contenham os mesmos produtos você não pode exibir o carrinho B ao usuário A, eles são diferentes! O carrinho neste exemplo segue o Padrão Entity, ele é uma entidade de negócios única.
Dentro do package services crie uma classe java com o nome de CargoService com o seguinte conteúdo:
CargoService.java
-
package com.digows.artigos.JavaFlex.model.service;
-
-
import java.util.ArrayList;
-
import java.util.List;
-
-
import com.digows.artigos.JavaFlex.model.entity.Cargo;
-
-
public class CargoService {
-
-
public Cargo save(Cargo p_cargo) {
-
return p_cargo;
-
}
-
-
public void remove(Cargo p_cargo) {
-
}
-
-
public List<cargo> getList() {
-
return new ArrayList<cargo>();
-
}
-
-
public Cargo findByPrimaryKey() {
-
return new Cargo();
-
}
-
}
Services são classes que não implementam diretamente as regras de negócio da aplicação, apenas coordenam a interação entre os componentes, elas são quase sempre beans gerenciados pelo Spring. É muito importante que as classes do tipo Services não implementem as regras de negócio, elas apenas atuam como Façades coordenando as interações.
O CargoService claro não proverá persistência a um banco de dados, os sysouts ali são apenas para abstração da intragração.
Com as classes javas feitas, vamos a configuração dos channels do BlazeDS, para isso no web.xml contido dentro da pasta WebContent\WEB-INF\web.xml, deixe como mostrado abaixo:
web.xml
-
<?xml version="1.0" encoding="UTF-8"?>
-
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
-
"http://java.sun.com/dtd/web-app_2_3.dtd">
-
<web-app>
-
<display-name>ArquiteturaJavaFlex</display-name>
-
-
<!-- MessageBroker Servlet -->
-
<servlet>
-
<servlet-name>MessageBrokerServlet</servlet-name>
-
<display-name>MessageBrokerServlet</display-name>
-
<servlet-class>
-
flex.messaging.MessageBrokerServlet
-
</servlet-class>
-
<init-param>
-
<param-name>services.configuration.file</param-name>
-
<param-value>/WEB-INF/flex/services-config.xml</param-value>
-
</init-param>
-
<init-param>
-
<param-name>flex.write.path</param-name>
-
<param-value>/WEB-INF/flex</param-value>
-
</init-param>
-
<load-on-startup>1</load-on-startup>
-
</servlet>
-
<servlet-mapping>
-
<servlet-name>MessageBrokerServlet</servlet-name>
-
<url-pattern>/messagebroker/*</url-pattern>
-
</servlet-mapping>
-
-
<welcome-file-list>
-
<welcome-file>index.html</welcome-file>
-
<welcome-file>index.htm</welcome-file>
-
<welcome-file>index.jsp</welcome-file>
-
</welcome-file-list>
-
</web-app>
Perceba que ao gerar a Servlet Java, é passado por parâmetro um arquivo dentro da pasta WebContent\WEB-INF\flex, crie um arquivo chamado services-config.xml como referênciado, este arquivo é o que contém Factorys, Channels, LogConfigs. Nós vamos usar apenas um tipo de serviço que o BlazeDS implementa, que o canal de AMF3 simples, para isso adicione o seguinte conteúdo:
services-config.xml
-
<?xml version="1.0" encoding="UTF-8"?>
-
<services-config>
-
<services>
-
<service-include file-path="remoting-config.xml" />
-
-
<default-channels>
-
<channel ref="my-amf"/>
-
</default-channels>
-
-
</services>
-
-
<channels>
-
<channel-definition id="my-amf" class="mx.messaging.channels.AMFChannel">
-
<endpoint url="http://{server.name}:{server.port}/{context.root}/messagebroker/amf" class="flex.messaging.endpoints.AMFEndpoint"/>
-
<properties>
-
<polling-enabled>false</polling-enabled>
-
</properties>
-
</channel-definition>
-
</channels>
-
-
<logging>
-
<!-- You may also use flex.messaging.log.ServletLogTarget -->
-
<target class="flex.messaging.log.ConsoleTarget" level="Error">
-
<properties>
-
<prefix>[BlazeDS] </prefix>
-
<includeDate>false</includeDate>
-
<includeTime>false</includeTime>
-
<includeLevel>true</includeLevel>
-
<includeCategory>false</includeCategory>
-
</properties>
-
<filters>
-
<!--<pattern>Endpoint.*</pattern>-->
-
<!--<pattern>Service.*</pattern>-->
-
<pattern>Message.*</pattern>
-
<pattern>DataService.*</pattern>
-
<pattern>Configuration</pattern>
-
</filters>
-
</target>
-
</logging>
-
-
<system>
-
<redeploy>
-
<enabled>true</enabled>
-
<watch-interval>20</watch-interval>
-
<watch-file>{context.root}/WEB-INF/flex/services-config.xml</watch-file>
-
<watch-file>{context.root}/WEB-INF/flex/remoting-config.xml</watch-file>
-
<touch-file>{context.root}/WEB-INF/web.xml</touch-file>
-
</redeploy>
-
</system>
-
</services-config>
Perceba que é feito um include em um arquivo chamado: remoting-config.xml, então crie um arquivo com este nome na pasta WebContent\WEB-INF\flex\. Este arquivo contém alguns adapters, e nossos destinations, que nada mais é que o mapeamento das nossas classes de serviços no java. Para isso adicione o seguinte conteúdo:
remoting-config.xml
-
<?xml version="1.0" encoding="UTF-8"?>
-
<service id="remoting-service"
-
class="flex.messaging.services.RemotingService">
-
-
<adapters>
-
<adapter-definition id="java-object"
-
class="flex.messaging.services.remoting.adapters.JavaAdapter"
-
default="true" />
-
</adapters>
-
-
<default-channels>
-
<channel ref="my-amf" />
-
</default-channels>
-
-
<destination id="cargoService">
-
<properties>
-
<source>
-
com.digows.artigos.JavaFlex.model.service.CargoService
-
</source>
-
</properties>
-
</destination>
-
-
</service>
A estrutura deverá ficar igual apresentado abaixo:
Para testar se tudo está ok, de um botão direito sobre o Projeto JavaFlex, e clique em Run As -> Run on Server. Na proxima janela aberta, em server runtime deixe seleciona o "Apache Tomcat v6.0" e clique em finish, o Servidor irá iniciar, observer a aba Console para verificar possíveis erros. Se alguma Exception tiver ocorrida, verifique os passos e faça novamente.
Acessando o serviço Java através do remoting do BlazeDS
Como nosso serviço já foi levantado, basta gerarmos um form simples para testar nosso serviço, para isso na pasta src_flex, crie a seguinte estrutura de pastas:
com/digows/artigos/JavaFlex/view/entity/
com/digows/artigos/JavaFlex/view/screen/
Dentro do package Entity crie uma Classe ActionScript com o nome de Cargo com o seguinte conteúdo:
Cargo.as
-
package com.digows.artigos.JavaFlex.view.entity
-
{
-
[RemoteClass(alias="com.digows.artigos.JavaFlex.model.entity.Cargo")]
-
[Bindable]
-
public class Cargo
-
{
-
public var idCargo:Number;
-
public var dsCargo:String;
-
}
-
}
A Classe Cargo do Flex, é nada mais nada menos do que o espelho do Entity do java, nesta classe não realizei get's set's. Para fazer o espelho dos objetos usei a metatag [RemoteClass] mapeando a localização exata (Com package e nome da Classe) da mesma classe no java. A metatag Bindable é uma annotation muito importante, mais agora vamos apenas abstrair ela.
E dentro do package Screen, crie um arquivo MXML com o nome de CargoForm com o seguinte conteúdo:
CargoForm.mxml
-
<?xml version="1.0" encoding="utf-8"?>
-
<mx:TitleWindow xmlns:mx="http://www.adobe.com/2006/mxml"
-
layout="vertical" width="424" height="234">
-
-
<mx:Form width="100%" height="100%" defaultButton="{btSalvar}">
-
<mx:FormHeading label="Gerenciamento de Cargos" width="100%"/>
-
<mx:FormItem label="ID:" width="127">
-
<mx:TextInput width="100%" id="txtIdCargo"/>
-
</mx:FormItem>
-
<mx:FormItem label="Cargo:" width="345">
-
<mx:TextInput width="100%" id="txtDsCargo"/>
-
</mx:FormItem>
-
</mx:Form>
-
-
<mx:ControlBar horizontalAlign="center">
-
<mx:Button label="Salvar" id="btSalvar" click="save()" textAlign="center"/>
-
</mx:ControlBar>
-
-
<mx:RemoteObject id="cargoService"
-
fault="onFault(event)" destination="cargoService"/>
-
-
<mx:Script>
-
<![CDATA[
-
import com.digows.artigos.JavaFlex.view.entity.Cargo;
-
import mx.rpc.events.ResultEvent;
-
import mx.rpc.events.FaultEvent;
-
import mx.controls.Alert;
-
-
private var cargo:Cargo;
-
-
public function save():void
-
{
-
this.cargo = new Cargo();
-
this.cargo.idCargo = new Number(txtIdCargo.text);
-
this.cargo.dsCargo = txtDsCargo.text;
-
-
cargoService.addEventListener(ResultEvent.RESULT,
-
//No flex toda requisicao é assincrona,
-
//Entao devo programar um funcao quando
-
//a requisicao terminar de executar
-
function(event:ResultEvent):void
-
{
-
status = "Salvo com Sucesso!"; //Status do TitleWindow
-
}
-
);
-
//Chama o metodo Save do servico "cargoService"
-
cargoService.save(cargo);
-
}
-
-
public function remove():void{}
-
-
public function getList():void{}
-
-
public function findByPrimaryKey():void{}
-
-
public function onFault(event:FaultEvent):void
-
{
-
//Ocorreu uma falha ao chamar o servico.
-
Alert.show(event.fault.message);
-
}
-
]]>
-
</mx:Script>
-
</mx:TitleWindow>
Perceba que acoplei muito código neste arquivo, isto não é uma boa prática, nos próximos artigos irei desaclopar as responsabilidades em camadas.
Para testar se tudo está ok, no arquivo JavaFlex.mxml que está na raiz da pasta src_flex renomeie para index.mxml, de um botão direito e clique em Set as Default Application, e deixe ele com o seguinte conteúdo:
index.mxml
-
<?xml version="1.0" encoding="utf-8"?>
-
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
-
layout="vertical" verticalAlign="middle" horizontalAlign="center"
-
xmlns:screen="com.digows.artigos.JavaFlex.view.screen.*">
-
-
<screen:CargoForm/>
-
-
</mx:Application>
E para finalizar vamos dizer ao compilador do Flex que existe um servidor de AMF levantado, para isso de um botão direito no projeto JavaFlex -> Properties -> Selecione Flex Compiler -> em Additional compiler arguments adicione a linha e ok:
-services "../WebContent/WEB-INF/flex/services-config.xml"
Para Executar, de um botão direito sobre o projeto JavaFlex, e clique em Run As -> Run on Server e Finish.
Se tudo correr bem, você verá a descrição que você digitou no flex aparecerá no console do Tomcat.
Bom finalizo aqui a primeira parte desta poderosa integração, logo logo posto o resto.
Link do Source do Projeto:
Download
Abraço Pessoal!!
\o/
Te Amuh Liz!! =******
Rodrigo Parabéns cara…
Com atitudes assim que nossa comunidade vai crescer cada vez mais, espero que esse artigo venha a incentivar todos aqueles que usam o Flex com outras tecnologias de back-end.
Parabéns…
muito obrigado =]
já estou divulgando o link desse material ![]()
[]’s
ah esqueci de algo
a compatibilidade do BlazeDS com versões do tomcat 5.x, funciona?
ps.: muita gente questiona isso ![]()
Olá,
Na documentação, está assim:
Application Servers
Tomcat 6.0.14
JBoss 4.2.2
WebLogic 10 MP1
WebSphere 6.1.0.13
Perceba que ele fala somente em Tomcat 6,
não testei por que não tenho o tomcat 5.x aqui mas…
acredito que pegando as libs que vem com o tomcat que vem junto ao blaze, também irá funcionar.
21 de janeiro de 2008
galera, seguindo o screncast, fiz como ele, mais me da esse error, alguem da uma força ?
unable to open ‘C:\eclipse\plugins\com.adobe.flexbuilder.project_2.0.155577\resources\frameworks/flex-config.xml’
21 de janeiro de 2008
Provavelmente o plugin do FlexBuilder não foi devidamente instalado, lembrando também que o exemplo faz uso do flex builder 3.
21 de janeiro de 2008
Mal posso esperar para ver esse exemplo completo.
Parabens pela iniciativa.
VELO
é!…bom…o FLex…ele…bem,ele…=X! não …vou começar falando do Java! é melhor!…bom o Java…oQ é isto mesmO??…o.O! ah! não seii…e nem kero saber!!
na verdade só entendi uma frase! a parte que me toca: “Te amuh Liz =***”, e essa na minha opinião é a melhor linguagem de todas…não tem pra Java,não tem pra ninguém!! HIUihihiahh…:P! e o melHOr…tOdO mundo sabe!;)!
Te amoo minHa vidah!
mtooooo!;***
de tdOo meu coraçãoO!(L)
vocÊ é o melhoor!
22 de janeiro de 2008
Rapaz,
era tudo q tava precisando.
show de bola…
22 de janeiro de 2008
Boa!!!
As férias rendeu.. huahuehahu
abraços.
22 de janeiro de 2008
Parabéns mais uma vez rodrigo, através do seu blog tenho aprendido muito coisa do adobe flex, mais posso te pedir um favor
, considero o Flex a grande aposta para o novo modelo de web (3.0), mais não sai da minha cabeça que o adobe Air é também o futuro do dekstop (2.0), será que tem como demostrar no seu blog como faria este mesmo exemplo que está bem sugestivo usando o adobe Air, eu preciso muito de um exemplo do adobe air com backend java, já procurei mais não consigo achar, desde de já obrigado.
25 de janeiro de 2008
Muito interessante o exemplo.
Estudo a algum tempo Flex, e sempre usei Java , com EJB3 e Hibernate.
Uma duvida que sempre tive integrando essas tecnologias é como funciona a esse mapeamento de objetos java para flex, quando o objeto java possui instrumentacao, mais especificamente, as colecoes lazy do hibernate. O BlazeDS tem a inteligencia de voltar ao java, abrir uma sessao do hibernate e puxar a colecao lazy? Como resolver essa situacao?
25 de janeiro de 2008
Olá George, isso realmente é um problema na verdade não só com o flex mas de aplicações WEB em geral.
Com html, (Request, Response) o pessoal usa o Pattern “OpenSessionInView” com o hibernate então consegue um workaround (contorno do problema).
Com o LCDS, é possível fazer tais manipulações com o banco de dados, pois ele tem um módulo excluisivo para trabalhar com os Dados (Data Manager se não me engano.)
Já com o BlazeDS, esse módulo não foi disponibilizado, logo trabalhar com coleções usando o Lazy do hibernate é um pouco complicado. Existem workarounds para isso, aqui nesse link já abri uma discussão sobre isso -> http://tech.groups.yahoo.com/group/flexcoders/message/98655
Ali há algumas idéias de como você pode resolver isso. Eu na verdade ainda não defini um jeito bacana de usar Lazy.
Mas acredito que ainda assim, dá para implementar uma espécie de “OpenSessionInViewFlex” heehehee
Se achar outra solução, me avise.
Obrigado.
25 de janeiro de 2008
Obrigado Rodrigo ,
Na verdade o OpenSessionInView ate seria facil de implementar com o Spring, mas o problema eh outro, eh questao que com Flex eh feito uma requisicao e vem os objetos. Numa segunda requisicao eh que iriamos andar nas relacoes, ai nem o OpenSessionInVIew resolve, porque o objeto que tinhamos, esta em outra conexao do banco de dados. Teriamos que ressussitar o objeto na nova conexao do banco/hibernate. Vou estudar o assunto. Obrigado
27 de janeiro de 2008
[...] lugar, quero agradecer a todos pelo feedback do post anterior, isto é motivante e me dá ânimo em concluir este, e outros que [...]
[...] Parte 1 Parte 2 [...]
Amigo, por que se torna tão difícil a fusão entre o BladeDS + Java no Flex Builder 2?
28 de janeiro de 2008
Mas qual a dificuldade?
O Flex Builder é somente uma IDE, o BlazeDS é apenas um Framework que roda no back-end, resumindo… não tem muito a ver..
=)
31 de janeiro de 2008
Parabens pela atitute!
Mas estou tentando seguir a risca mas não consigo, que plugin vc usa no eclipse para criar um projeto web dinamico?
Estou usando eclipse 3.3.1.1.
31 de janeiro de 2008
1 de fevereiro de 2008
Blz..
Estava usando Eclipse o classic.
Coisas de iniciante.
Valeu!
7 de fevereiro de 2008
Valew kra pelo feedback!
10 de fevereiro de 2008
Vlw Rodrigo, parabéns mais uma vez pelo artigo, muito bom. Fiz o exemplo como o artigo e funcionou legal, tentei adptar ao modelo que uso sem spring, usando hibernate annotation e o flex acessando minha classe controladora, aí no flex deu um erro que não acha o hibernate:
“[BlazeDS] [ERROR] Root cause: java.lang.NoClassDefFoundError: org/hibernate/cfg/AnnotationConfiguration”
será que alguém pod eme ajudar? vlw
10 de fevereiro de 2008
Olá Janderson,
Ao que parece vc está usando Annotations no hibernate,
Então verifique se os jars:
hibernate-annotations.jar;
hibernate-commons-annotations.jar;
ejb3-persistence.jar;
Estão no classpath do projeto.
Abraços
\o/
10 de fevereiro de 2008
Rodrigo, se eu usar uma classe main(String[] args) para testar o hibernate ele grava normal no mysql, mais quando tento no flex parece que ele não acha o meu hibernate, estou 1 semana já tentando colocar o hibernate.cfg.xml em tudo que é lugar e nada. Já não sei mais o que pode ser, conseguir criar um modelo que não precisa do VO e está funcionado mais para minha infelicidade o hibernate não colabora agora. De qualquer forma Muito obrigado pela sua atenção!
10 de fevereiro de 2008
Amigo, crie um tópico no forum -> http://forum.flexbrasil.com.br/
E poste seu código, e detalhes sobre sua infra, para que possa te ajudar!
Blza?
Abraços
\o/
10 de fevereiro de 2008
blz, vou fazer issso agora, obrigado
12 de fevereiro de 2008
Olá!
Neste exemplo, como eu faria para estar integrando com o banco de dados oracle ?
14 de fevereiro de 2008
Rodrigo, sou iniciante e gostaria de saber que domumentação você usou para montar este projeto? Gostaria de saber o caminho das pedras, para que eu consiga montar meu raciocinío.
Valeu..
Olá Rodrigo!
Parabéns pelo artigo.
Você conheçe algum software similar ao Flex Builder que seja opensource (ou free)?
Obrigado
17 de fevereiro de 2008
@Roberto,
Tenta o FlashDevelop -> http://forum.flexbrasil.com.br/viewtopic.php?f=5&t=25
É free tem um bom autocomplete para o action script! porém não tem o modo “Desing”
Abraços!
\o/
17 de fevereiro de 2008
@Ricardo,
Amigo, depende do que! eheheh
Pois na verdade quase tudo o que foi utilizado, também apresentei a documentação, tipo do Spring, Blaze, Hibernate…
Só não falei do DomainDrivenDesing, este é muito complexo para ser abordado aqui.
Abraços!
\o/
4 de março de 2008
Olá Rodrigo, primeiro de tudo, gostaria de parabenizá-lo pelo tutorial que sem dúvida é top de linha. Bom, eu tentei seguir o tutorial mas por conta de ser bastante imaturo ainda na tecnologia Flex devo ter cometido algumas barbaridades…
Aqui exibe a seguinte mensagem de erro:[faultCode:Client.Error.MessageSend faultString:'Send failed' faultDetail:'Channel.Connect.Failed error NetConnection.Call.Failed: HTTP: Failed: url: 'http://localhost:8080/JavaFlex/messagebroker/amf'']
Alguma sugestão??
Saudações Respeitosas.
4 de março de 2008
Olá,
Obrigado pelo feed-back Araújo.
NetConnection.Call.Faile








58 Comentários