logo
  • Home
  • Acerca
  • Autores
  • Faq
  • Rede
  Twitter   Feed-me! RSS!
Jan 3

SharedObject com Flash Media Server

Escrito por Leonardo França em .NET, 1, 2.0, 4, 6, action, Actionscript, ActionScript 3, Actionscript 3.0, Actionscript3, Adobe, Air, Aplicativos, app, AR, BI, botão, browser, C#, class, cliente, código, Cookie, Curso, dados, demo, Download, err, event, EventListener, events, exemplo, Ferramenta, filter, flash, flash media, Flash Media Server, Flash Player, Flex, FMS, function, Geral, git, Google, handle, html, ide, IE, if, image, instalação, int, live, mg, O, on, Outros, Partilha, player, pt, referencia, RIA, Ria’s Geral, RTM, RTMP, S+S, server, servidor, swf, TAT, UI, uint, update, Ved, web, window @ 01 3rd, 2012 | via http://www.leonardofranca.com.br | Sem comentários
Leonardo França
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

SharedObject é um recurso que dar ao Flash Player a capacidade de salvar dados localmente para poder ser usado posteriormente em sua aplicação, a grosso modo é como um cookie. Com o Flash Media Server, foi introduzido a possibilidade de usar o SharedObject Remote, no qual os dados são salvos no servidor Flash Media Server e compartilhados para todas as instâncias de uma conexão entre o Flash Player e o Flash Media Server. Isso possibilita a criação de aplicativos em real time como Dashboards, chats e o que mais a imaginação permitir.

O uso do SharedObject Remote pode ser usado de duas maneiras em conjunto com o Adobe Flash Media Server.

  • Somente pelo lado cliente, através do Flash Player/AIR
  • Em conjunto com ActionScript Communication, linguagem de servidor do Flash Media Server

Vejamos o primeiro caso:

Através do lado cliente, através do Flash Player/AIR

Caso você não tenha conhecimento para usar a linguagem Server-side do Flash Media Server, é possível utilizar o SharedObject Remote somente pelo ActionScript 3.0. Vamos a um exemplo clássico sharedBall, onde o objetivo é compartilhar as posições da bolinha a atualizar nos outros clientes conectados a mesma instância.

  • Vá até o diretório de instalação do Flash Media Server e procure pela pasta “applications”, lá crie um diretório chamado “sharedBall”, dentro dele um arquivo chamado “main.asc”
  • Abra o main.asc no seu editor de textos de preferencia ou pelo próprio Flash e digite: trace(“sharedBall…”);
  • Vamos testar esse arquivo, abra o console do Flash Media Server, geralmente fica localizado no diretorio de instalação/webrrot/swfs. Você pode abrir pelo browser ou o swf diretamente.
  • Clique no botão “View Applications” e em seguida procure o nome “sharedBall” no combobox logo no canto inferior esquerdo onde está escrito “New Instance…”
  • Selecione “sharedBall” e deveremos ter na aba Live Log algo como na imagem abaixo:

  • No Flash, criei uma bola com as ferramentas de desenho e converti para MovieClip dando o nome de “mc_ball”.
  • Estamos prontos para começar a integração entre o Flash e o Flash Media Server. Crie um layer para o ActionScript e abra o editor apertando F9 ou “Window->Actions”
  • Nosso código começa com a conexão com o servidor Flash Media Server
PLAIN TEXT
ACTIONSCRIPT3:

  1. import flash.net.NetConnection;
  2. import flash.events.NetStatusEvent;
  3. var nc:NetConnection;
  4. function init():void
  5. nc = new NetConnection();
  6. nc.addEventListener(NetStatusEvent.NET_STATUS, handlerNetStatus);
  7. nc.connect(“rtmp://localhost/sharedBall”);
  8. function handlerNetStatus(evt:NetStatusEvent):void
  9. trace(evt.info.code);
  10. init();

Feito isso, podemos testar o swf apertando Ctrl+Enter, se tudo correr bem, deveremos ter a seguinte mensagem no output do Flash:

NetConnection.Connect.Success

Com a conexão feita, podemos instanciar o nosso SharedObject Remote para compartilhar as posições de x e y da bolinha.

PLAIN TEXT
ACTIONSCRIPT3:

  1. if(evt.info.code == “NetConnection.Connect.Success”)
  2. so = SharedObject.getRemote(“so”,nc.uri,false);
  3. so.addEventListener(NetStatusEvent.NET_STATUS, handlerNetStatus);
  4. so.addEventListener(SyncEvent.SYNC, handlerSync);
  5. so.connect(nc);

O handlerSync é responsável por atualizar os dados de x e y pegaremos do SharedObject Remote:

PLAIN TEXT
ACTIONSCRIPT3:

  1. function handlerSync(evt:SyncEvent):void
  2. mc_ball.x = so.data.x;
  3. mc_ball.y = so.data.y;

Daremos a opção de ao clicar na bolinha, que ela possa ser arrastável, em seguida atualizaremos as posições de x e y no SharedObject Remote:

PLAIN TEXT
ACTIONSCRIPT3:

  1. mc_ball.addEventListener(MouseEvent.MOUSE_DOWN, handlerSharedBall);
  2. mc_ball.addEventListener(MouseEvent.MOUSE_UP, handlerSharedBallOut);
  3. function handlerSharedBall(evt:MouseEvent):void
  4. this.addEventListener(Event.ENTER_FRAME, update);
  5. mc_ball.startDrag();
  6. function handlerSharedBallOut(evt:MouseEvent):void
  7. mc_ball.stopDrag();
  8. function update(evt:Event=null):void
  9. so.setProperty(“x”,mc_ball.x);
  10. so.setProperty(“y”,mc_ball.y);

Segue o código completo:

PLAIN TEXT
ACTIONSCRIPT3:

  1. import flash.net.NetConnection;
  2. import flash.events.NetStatusEvent;
  3. import flash.net.SharedObject;
  4. import flash.events.SyncEvent;
  5. import flash.events.MouseEvent;
  6. import flash.events.Event;
  7. var nc:NetConnection;
  8. var so:SharedObject;
  9. function init():void
  10. nc = new NetConnection();
  11. nc.addEventListener(NetStatusEvent.NET_STATUS, handlerNetStatus);
  12. nc.connect(“rtmp://localhost/sharedBall”);
  13. function handlerNetStatus(evt:NetStatusEvent):void
  14. {
  15. trace(evt.info.code);
  16. if(evt.info.code == “NetConnection.Connect.Success”)
  17. so = SharedObject.getRemote(“so”,nc.uri,false);
  18. so.addEventListener(NetStatusEvent.NET_STATUS, handlerNetStatus);
  19. so.addEventListener(SyncEvent.SYNC, handlerSync);
  20. so.connect(nc);
  21. }
  22. function handlerSync(evt:SyncEvent):void
  23. mc_ball.x = so.data.x;
  24. mc_ball.y = so.data.y;
  25. mc_ball.addEventListener(MouseEvent.MOUSE_DOWN, handlerSharedBall);
  26. mc_ball.addEventListener(MouseEvent.MOUSE_UP, handlerSharedBallOut);
  27. function handlerSharedBall(evt:MouseEvent):void
  28. this.addEventListener(Event.ENTER_FRAME, update);
  29. mc_ball.startDrag();
  30. function handlerSharedBallOut(evt:MouseEvent):void
  31. mc_ball.stopDrag();
  32. function update(evt:Event=null):void
  33. so.setProperty(“x”,mc_ball.x);
  34. so.setProperty(“y”,mc_ball.y);
  35. init();

Veja uma demostração em funcionamento:

Download sharedBall

Ago 27

Flex, Grails e BlazeDS

Escrito por DanielPedrinha em 1, 2.0, AR, back, BI, Blazeds, blog, C#, configuração, Exemplos, Flex, IE, instalação, Java, lite, O, on, rails, Ria’s Geral, S+S, Tutorial @ 08 27th, 2011 | via http://www.flexbrasilia.com.br/ | Sem comentários
DanielPedrinha
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Bom, como sou basicamente um programador Flex, preciso de coisas que facilitem minha vida com relação ao back-end. Conheci o Grails e estou gostando bastante da praticidae. Já havia tentado trabalhar com Java outras vezes mas desisti antes de começar a produzir só pela complexidade dos ambientes. Até que o Grails apareceu pra resolver esse [...]

(Read more…)

Ago 24

Atualizando seu Android Milestone para a ROM MIUI BR

Escrito por Stefan Horochovec em 1, 2.0, 4, 6, Android, Aplicativos, app, AR, Beta, BI, blog, botão, Botões, busca, C#, cache, class, comunicação, custom, development, Dica, Diversos, Download, err, erro, for, Google, ide, IE, if, instalação, lista, lite, mg, NaN, O, on, Pessoal, processo, procura, prova, RIA, Ria’s Geral, S+S, site, SmartPhone, Software, TAT, Teste, UI, update @ 08 24th, 2011 | via http://www.horochovec.com.br/blog | Sem comentários
Stefan Horochovec
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Olá pessoal,

Que tal mudar radicalmente seu Android? Hoje eu instalei a ROM Android MIUI BR em meu Motorola Milestone. Fiz a instalação na curiosidade de ver uma grande customização, já que a grande maioria das ROMs disponíveis atualizam as versões, mas a concepção do Android é mantida. Já os chineses que estão por traz da MIUI não, eles simplesmente mudaram MUITO a UI do Android. A base da mudança foi buscar uma semelhança grande com o iOS. Particularmente não achei isso muito bacana, mas o trabalho foi muito bem feito e vale um post.

Bom, primeiramente quero deixar claro que eu não testei essa ROM em nenhum outro aparelho, apenas em meu Motorola Milestone, mas segundo o site americano da ROM, diversos aparelhos já podem testar a versão beta da ROM.

O processo de atualização é bastante simples, mas será necessário baixar uma série de softwares para isso. Vale lembrar que esse processo pode estragar seu celular, portanto, faça por sua conta e risco, não dou garantia que irá ocorrer tudo bem. Caso algo de errado, provavelmente seu celular terá que ser enviado para a Motorola, portanto, tenha certeza que a bateria do seu celular está bem carregada, uma falta de energia no meio do processo seria catastrófico.

Vale lembrar que, os aplicativos terão que ser re-instalados, pois basicamente o processo consiste em você formatar seu celular e instalar tudo novamente.

Mão a obra, primeiro, faça o download dos softwares abaixo:

  • USB Drivers
  • Open recovery
  • RSD Lite
  • SBF Milestone
  • MIUI ROM Chinesa
  • Tradução da MIUI ROM Chinesa para o Português Brasileiro

1º Passo
Instale os drivers USB caso ainda não tenha instalado os mesmos em seu computador;

2º Passo
Instale o RSD Lite

3º Passo
Descompacte o Open Recovery. Copie a pasta OpenRecovery que será criada na descompactação para a raiz do cartão de memória. Repita a operação para o arquivo update.zip que também foi descompactado no arquivo anterior.

4º Passo
Copie para a pasta /OpenRecovery/updates/ os arquivos que você baixou da MUIU ROM Chinesa e Tradução da MIUI (miuibrasil_Milestone-2.3.4a_deodexed.zip e? TRAD_1C_MIUI-Bra-Milestone_2.3.4a.0.zip)

Nesse momento, temos uma diferença na instalação. Você já instalou alguma vez uma outra ROM customizada a partir da versão 2.2.1 do Android (Shadowmodbr, Cyanogem, etc) ? Se sim, vá para a segunda etapa. Caso contrário, faça a primeira também.

Primeira Etapa (Essa etapa é um pouco complicada para marinheiros de primeira viagem. Tenha calma, qualquer dúvida, envie no contato abaixo do post. Um erro aqui será crucial para o seu processo)

  • Desligue seu celular;
  • Descompacte o arquivo SBF Milestone em algum local em seu computador;
  • Pressione o botão de reduzir o volume e o botão de tirar a foto em sua câmera, mantenha-os pressionados enquanto o smartphone é ligado;
  • Ao invés de abrir uma tela com a logomarca do Android que você está acostumado, deve ter surgido uma tela escrita BootLoader e alguns números. Caso seja esse o resultado, ligue o celular em seu computador com os cabos USB, caso contrário, repira a operação.
  • Quando conectar os cabos, o seu computador irá se preparar para a comunicação com o dispotivo, aguarde;
  • Finalizada essa etapa, instale o RSD Lite;
  • Depois de instalado, abra o RSD Lite, aguarde uns instantes para que o seu dispositivo apareça na lista de aparelhos;
  • Depois de aparecer na lista, selecione seu aparelho e no ícone “Procurar”, selecione o arquivo da SBF Milestone, e pressione o start. Após isso, você deverá aguardar a instalação da SBF. Nesse período seu celular irá estar fora do ar e ele irá se reiniciar diversas vezes.
  • Quando finalizar, o telefone irá se reiniciar e irá travar o logo da Motorola, nesse momento, desligue e ligue seu aparelho novamente.
  • Fim da primeira etapa;

Segunda Etapa (Instalação da MIUI BR)

  • ? Ligue seu dispositivo pressionando o botão X do teclado ou o botão da câmera. Sim, depende de cada modelo, dá para entender?
  • Quando o aparelho estiver ligando, irá aparecer um triangulo vermelho, ? muito semelhante a um triangulo de avisos no trânsito. Feito isso, aperte simultaneamente os botões de aumentar o volume e o da câmera junto;
  • Selecione a opção: “apply sdcard:update.zip”;
  • Selecione a opção: Limpar cache partition;
  • Selecione a opção: Limpar Data / Factory Reset (Na próxima tela, selecione a opção SIM);
  • Selecione: Aplicar Atualizações;
  • Selecione o arquivo:? miuibrasil_Milestone-2.3.4a_deodexed.zip ;
  • Selecione o arquivo:? TRAD_1C_MIUI-Bra-Milestone_2.3.4a.0.zip;
  • Selecione: Voltar;
  • Selecione: Reiniciar;
Se tudo correr bem, seu celular estará com a MIUI funcionando perfeitamente. Abaixo algumas telas retiradas do meu aparelho:

01
02
03
04
05
06
07

Um abraço pessoal,? até a próxima!

Jun 20

PHP + BDD

Escrito por Fábio Batista da Silva em 1, 2.0, 4, 6, Air, app, AR, arte, BI, C#, Componente, Componentes, dados, demo, Desenvolvedor, desenvolvedores, Desenvolvimento, Design Patterns, development, Documentação, email, err, Ferramenta, Flex, for, framework, function, git, gmail, html, IE, if, instalação, int, LOB, Mate, mg, O, on, PHP, pt, quick, rails, rest, RIA, Ria’s Geral, S+S, Software, Sun, TAT, Tema, Teste, UI, Ved, zend @ 06 20th, 2011 | via http://www.flexria.com.br/home | Sem comentários
Fábio Batista da Silva
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Olá,

Nesse Post vou mostrar um pouco de desenvolvimento PHP usando BDD (Behaviour-Driven Development).
O BDD é uma prática ágil que tem como objetivo facilitar o desenvolvimento orientado a testes,
onde o software é direcionados por comportamentos, trazendo para o contexto de destes os casos de uso ou historias da aplicação.

Enquanto em TDD (Test Driven Development) testamos a aplicação de forma granular em um ambiente micro
no BDD os testes são globais voltados para a Funcionalidade, Casos de uso, Comportamentos, etc..

Como se em TDD testamos a aplicação de dentro para fora e já em BDD a aplicação é testada de fora para dentro.
Existe muito material sobre esse assunto p ai e muita gente mais preparada que eu para abordar esse assunto de forma teorica,
Então nesse Post vou mostrar na pratica um pouco de desenvolvimento PHP usando o Behat

Behat

Behat é um framework BDD em PHP 5.3 construindo sobre de componentes do Symfony2.
Behat foi inspirado no Cucumber do Rails e especialmente a parte da sintaxe das features.

A instalação do Behat pode ser feita baixando diretalente pelo git diretamente pelo do git: http://github.com/Behat/Behat
Ou instalando através do pear :

$ pear channel-discover pear.behat.org
$ pear install behat/behat

Se tudo der certo o Behat esta instalado
A versão atualmente disponível no pear é a 1.1.9
Para verificar se esta correto e ver a versão instalada execute :

$ behat -V
Behat version 1.1.9

Depois de concluir a instalação o Behat esta pronto para ser usado.
para isso vamos inicializar o projeto de testes com o Behat

$ cd path-to-my-app
$ behat --init

O comando behat –init vai criara a estruturar de diretórios usada p organizar os teste do Behat

|-- features
   |-- steps            ##Diretório dos arquivos que contem os cenários de testes
       |-- steps.php
   |-- support          ##Configurações, requires e configs de ambiente
       |-- bootstrap.php
       |-- env.php

A definição de um historias e cenários de teste é bem simples.
Utilizando algumas palavras chaves : Feature, Scenario, Given, When, Then, But or And
Os cenários são escritos em arquivos .feature que serão interpretados pelo Behat

features/contacts.feature

Feature: Contacts Registration
    In order to demonstrate the framework
    As a SouDev using BDD
    I want to register contacts

  Scenario: Add new contact
    Given a contact named "Fabio B. Silva" using the email "fabio.bat.silva@gmail.com"
      And the phone "xx xxxx-xxxx"
     When press save
     Then everything will be saved

Com a historia escrita podemos executar o Behat dentro da aplicação
O Behat vai interpretar os arquivos .feature
e mostrar quais funções vc tem que implementar para poder rodas o teste

$ cd path-to-my-app
$ behat
1 scenario (1 undefined)
4 steps (4 undefined)
0m0.03s

You can implement step definitions for undefined steps with these snippets:

$steps->Given('/^a contact named "([^"]*)" using the email "([^"]*)"$/', function($world, $arg1, $arg2) 
    throw new BehatBehatExceptionPending();
);
$steps->And('/^the phone "([^"]*)"$/', function($world, $arg1) 
    throw new BehatBehatExceptionPending();
);
$steps->When('/^press save$/', function($world) 
    throw new BehatBehatExceptionPending();
);
$steps->Then('/^everything will be saved$/', function($world) 
    throw new BehatBehatExceptionPending();
);

Essa definição dos steps que o Behat lançou pode ser copiada para um arquivo de steps.php o que facilita bastante a implementação dos teste..
Porem escrever historias em inglês pode ser meio confuso, mais o tem suporte a i18n oq nos permite escrever as historias em português.
para isso basta adicionar # language: pt_BR no inicio do arquivo .feature
com isso ganhamos as palavras chaves em português : Funcionalidade,Cenario, Scenario, Quando, Então, Entao, Dado, Mas, E

features/contacts.feature

# language: pt_BR
Funcionalidade: Cadastro de contatos
    Para demostrar o funcionamento do framework
    Como SouDev que usa BDD
    Desejo cadastrar contatos

  Cenario: Adicionar um novo contato
    Dado um usuário chamado "Fabio B. Silva" usando o email "fabio.bat.silva@gmail.com"
      E com o telefone "xx xxxx-xxxx"
     Quando pressionar salvar
     Entao os dados serão salvos

E ao executar novamente o Behat a implementação dos teste agora também vem em português :

$ cd path-to-my-app
$ behat
1 scenario (1 undefined)
4 steps (4 undefined)
0m0.03s

You can implement step definitions for undefined steps with these snippets:

$steps->Dado('/^um usuário chamado "([^"]*)" usando o email "([^"]*)"$/', function($world, $arg1, $arg2) 
    throw new BehatBehatExceptionPending();
);
$steps->E('/^com o telefone "([^"]*)"$/', function($world, $arg1) 
    throw new BehatBehatExceptionPending();
);
$steps->Quando('/^pressionar salvar$/', function($world) 
    throw new BehatBehatExceptionPending();
);
$steps->Entao('/^todos os dados serão salvos$/', function($world) 
    throw new BehatBehatExceptionPending();
);

Com essa definição a implementação dos testes para essa feature pode ser feita
features/contacts_steps.php

use AppEntitiesContact, AppEntitiesPhone, AppServicesContactService;

$steps->Dado('/^um usuário chamado "([^"]*)" usando o email "([^"]*)"$/', function($world, $arg1, $arg2) 
    $contact = new Contact();
    $contact->setName($arg1);
    $contact->setEmail($arg2);

    $world->contact = $contact;
);

$steps->E('/^com o telefone "([^"]*)"$/', function($world, $arg1) 
    $world->contact->addPhone(new Phone($arg1));
);

$steps->Quando('/^pressionar salvar$/', function($world) 
    $world->saveReturn = ContactService::getInstance()->save($world->contact);
);

$steps->Entao('/^todos os dados serão salvos$/', function($world) 
     assertTrue($world->saveReturn);
);

O BDD e TDD são ferramentas essenciais para um software bem feito,
Infeliz mente muitos “desenvolvedores” ainda tem resistência a aderir ao teste e por achar perda de tempo, tedioso, etc..
O fato é que uma suite de testes bem feita vai tornar sua aplicação muito mais estável e vai lhe economizar tempo e cabelos ao longo do projeto. rsrs

Gostei bastante do Behat é um projeto muito bem estruturado e em constante evolução a versão 2.0 esta prestes a sair
Vale apena dar uma conferida na Documentação do Behat

E Para quem tiver o interesse deixei a app no git
https://github.com/FabioBatSilva/bdd-php-behat

Abraço e até a próxima….

Jun 20

PHP com BDD

Escrito por Ebercom em 1, 2.0, 2009, 4, 6, Air, app, AR, arte, BI, C#, Componente, Componentes, dados, demo, Desenvolvedor, desenvolvedores, Desenvolvimento, development, Diversos, Documentação, email, err, Ferramenta, Flex, for, framework, function, git, gmail, html, IE, if, instalação, int, LOB, Mate, mg, O, on, PHP, pt, quick, rails, rest, RIA, Ria’s Geral, S+S, Software, Sun, TAT, Tema, Teste, UI, Ved, zend @ 06 20th, 2011 | via http://www.flexdev.com.br/home | Sem comentários
Ebercom
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Olá,

Nesse Post vou mostrar um pouco de desenvolvimento PHP usando BDD (Behaviour-Driven Development).
O BDD é uma prática ágil que tem como objetivo facilitar o desenvolvimento orientado a testes,
onde o software é direcionados por comportamentos, trazendo para o contexto de destes os casos de uso ou historias da aplicação.

Enquanto em TDD (Test Driven Development) testamos a aplicação de forma granular em um ambiente micro
no BDD os testes são globais voltados para a Funcionalidade, Casos de uso, Comportamentos, etc..

Como se em TDD testamos a aplicação de dentro para fora e já em BDD a aplicação é testada de fora para dentro.
Existe muito material sobre esse assunto p ai e muita gente mais preparada que eu para abordar esse assunto de forma teorica,
Então nesse Post vou mostrar na pratica um pouco de desenvolvimento PHP usando o Behat

Behat

Behat é um framework BDD em PHP 5.3 construindo sobre de componentes do Symfony2.
Behat foi inspirado no Cucumber do Rails e especialmente a parte da sintaxe das features.

A instalação do Behat pode ser feita baixando diretalente pelo git diretamente pelo do git: http://github.com/Behat/Behat
Ou instalando através do pear :

$ pear channel-discover pear.behat.org
$ pear install behat/behat

Se tudo der certo o Behat esta instalado
A versão atualmente disponível no pear é a 1.1.9
Para verificar se esta correto e ver a versão instalada execute :

$ behat -V
Behat version 1.1.9

Depois de concluir a instalação o Behat esta pronto para ser usado.
para isso vamos inicializar o projeto de testes com o Behat

$ cd path-to-my-app
$ behat --init

O comando behat –init vai criara a estruturar de diretórios usada p organizar os teste do Behat

|-- features
   |-- steps            ##Diretório dos arquivos que contem os cenários de testes
       |-- steps.php
   |-- support          ##Configurações, requires e configs de ambiente
       |-- bootstrap.php
       |-- env.php

A definição de um historias e cenários de teste é bem simples.
Utilizando algumas palavras chaves : Feature, Scenario, Given, When, Then, But or And
Os cenários são escritos em arquivos .feature que serão interpretados pelo Behat

features/contacts.feature

Feature: Contacts Registration
    In order to demonstrate the framework
    As a SouDev using BDD
    I want to register contacts

  Scenario: Add new contact
    Given a contact named "Fabio B. Silva" using the email "fabio.bat.silva@gmail.com"
      And the phone "xx xxxx-xxxx"
     When press save
     Then everything will be saved

Com a historia escrita podemos executar o Behat dentro da aplicação
O Behat vai interpretar os arquivos .feature
e mostrar quais funções vc tem que implementar para poder rodas o teste

$ cd path-to-my-app
$ behat
1 scenario (1 undefined)
4 steps (4 undefined)
0m0.03s

You can implement step definitions for undefined steps with these snippets:

$steps->Given('/^a contact named "([^"]*)" using the email "([^"]*)"$/', function($world, $arg1, $arg2) 
    throw new BehatBehatExceptionPending();
);
$steps->And('/^the phone "([^"]*)"$/', function($world, $arg1) 
    throw new BehatBehatExceptionPending();
);
$steps->When('/^press save$/', function($world) 
    throw new BehatBehatExceptionPending();
);
$steps->Then('/^everything will be saved$/', function($world) 
    throw new BehatBehatExceptionPending();
);

Essa definição dos steps que o Behat lançou pode ser copiada para um arquivo de steps.php o que facilita bastante a implementação dos teste..
Porem escrever historias em inglês pode ser meio confuso, mais o tem suporte a i18n oq nos permite escrever as historias em português.
para isso basta adicionar # language: pt_BR no inicio do arquivo .feature
com isso ganhamos as palavras chaves em português : Funcionalidade,Cenario, Scenario, Quando, Então, Entao, Dado, Mas, E

features/contacts.feature

# language: pt_BR
Funcionalidade: Cadastro de contatos
    Para demostrar o funcionamento do framework
    Como SouDev que usa BDD
    Desejo cadastrar contatos

  Cenario: Adicionar um novo contato
    Dado um usuário chamado "Fabio B. Silva" usando o email "fabio.bat.silva@gmail.com"
      E com o telefone "xx xxxx-xxxx"
     Quando pressionar salvar
     Entao os dados serão salvos

E ao executar novamente o Behat a implementação dos teste agora também vem em português :

$ cd path-to-my-app
$ behat
1 scenario (1 undefined)
4 steps (4 undefined)
0m0.03s

You can implement step definitions for undefined steps with these snippets:

$steps->Dado('/^um usuário chamado "([^"]*)" usando o email "([^"]*)"$/', function($world, $arg1, $arg2) 
    throw new BehatBehatExceptionPending();
);
$steps->E('/^com o telefone "([^"]*)"$/', function($world, $arg1) 
    throw new BehatBehatExceptionPending();
);
$steps->Quando('/^pressionar salvar$/', function($world) 
    throw new BehatBehatExceptionPending();
);
$steps->Entao('/^todos os dados serão salvos$/', function($world) 
    throw new BehatBehatExceptionPending();
);

Com essa definição a implementação dos testes para essa feature pode ser feita
features/contacts_steps.php

use AppEntitiesContact, AppEntitiesPhone, AppServicesContactService;

$steps->Dado('/^um usuário chamado "([^"]*)" usando o email "([^"]*)"$/', function($world, $arg1, $arg2) 
    $contact = new Contact();
    $contact->setName($arg1);
    $contact->setEmail($arg2);

    $world->contact = $contact;
);

$steps->E('/^com o telefone "([^"]*)"$/', function($world, $arg1) 
    $world->contact->addPhone(new Phone($arg1));
);

$steps->Quando('/^pressionar salvar$/', function($world) 
    $world->saveReturn = ContactService::getInstance()->save($world->contact);
);

$steps->Entao('/^todos os dados serão salvos$/', function($world) 
     assertTrue($world->saveReturn);
);

O BDD e TDD são ferramentas essenciais para um software bem feito,
Infeliz mente muitos “desenvolvedores” ainda tem resistência a aderir ao teste e por achar perda de tempo, tedioso, etc..
O fato é que uma suite de testes bem feita vai tornar sua aplicação muito mais estável e vai lhe economizar tempo e cabelos ao longo do projeto. rsrs

Gostei bastante do Behat é um projeto muito bem estruturado e em constante evolução a versão 2.0 esta prestes a sair
Vale apena dar uma conferida na Documentação do Behat

E Para quem tiver o interesse deixei a app no git
https://github.com/FabioBatSilva/bdd-php-behat

Abraço e até a próxima….

Click aqui para ver o post Original
Fábio B. Silva
Fabio B. Silva
http://www.flexria.com.br

Jun 16

Flex com Multilinguagem (internacionalização)

Escrito por SamuelFacchinello em 1, 2.0, 2009, 4, 6, Adobe, Adobe Flex, app, AR, BI, Bindable, blog, Blogs, botão, C#, DataProvider, exemplo, Flex, fonte, for, framework, Frameworks, function, Google, html, ide, idiomas, IE, image, instalação, int, label, layout, library, Links, mg, MXML, O, on, opensource, PMP, pt, RIA, Ria’s Geral, S+S, SDK, spark, string, SVN, TAT, Tema, TextInput, UI, uint, Vários, XML @ 06 16th, 2011 | via http://desenvolvendoemflex.blogspot.com/ | Sem comentários
SamuelFacchinello
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Olá!!

Hoje vou mostrar como fazer um sistema Multilinguagem (alterando locales) no Flex. Conforme o exemplo:

*Para ver o fonte, clique com o botão direito do mouse e ViewSource.

Para isso você precisa ter os locales das linguagens. Os locales podem ser baixados nesses links:

  • 3.x (pt_BR)
  • 4.x (vários)

Estes locales devem ser colocados no diretório: “instalaçãodoflex/sdks/versaodosdk/frameworks/locale/”.

Configurando o projeto
Clique com o botão direito do mouse no projeto, vá em “properties” depois em “Flex Compiler”, em “Additional compiler arguments:” coloque o seguinte:
-locale en_US pt_BR -source-path+=../locale/locale


Ficando assim:

Após configurar o locale do seu projeto, você deve criar as pastas “projeto/locale/en_US” e “projeto/locale/pt_BR” e adicionar o arquivo “localization.properties” dentro de cada pasta.

en_US

label_selecione_linguagem=Select your language
label_nome=Name
label_sobrenome=Last Name
send_btn=Send

pt_BR

label_selecione_linguagem=Selecione a linguagem
label_nome=Nome
label_sobrenome=Sobrenome
send_btn=Enviar

Para ler estes arquivos faz assim:



    
        
    

    
        

    
  [ResourceBundle('localization')]
 

    
        
            
        

        
            
        

        
            
        

        
    

sendo a variável LOCALIZATION o nome do arquivo criado (pode ter vários).
para ler cada linha do arquivo utiliza-se:

resourceManager.getString(LOCALIZATION, 'string')

Por hoje é isso!!

Comente!

Mai 6

Flash Builder 4.5 Eclipse

Escrito por Felipe Borella em 1, 2.0, 4, 6, Adobe, AR, BI, builder 4, C#, Desenvolvimento, Eclipse, flash, flash builder, Flash Builder 4, Flex, html, instalação, int, iphone, mobile, O, on, Plugin, Ria’s Geral, S+S, Teste, UI, uint, XP @ 05 6th, 2011 | via http://www.fborella.com.br/blog/ | Sem comentários
Felipe Borella
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Opa.

Fiz alguns testes com o Flash Builder 4.5 e fiquei impressionado com o desenvolvimento para mobile. Show de bola mesmo.
Bom para instalar o Eclipse juntamente com o Flash Builder é fácil.

Depois do Flash Builder instalado va ate a página http://kb2.adobe.com/cps/890/cpsid_89021.html que é bem fácil a instalação.

Tradução é +- isso:

Flash Builder 4,5 suporta a instalação de um plugin para o Eclipse uma instância existente. Para fazer isso:

Navegue até o local de instalação instalado o Flash Builder e abra a pasta Utilitários.
Execute o executável do Adobe Flash Builder 4,5 Plug-in Utility.exe.
Selecione o idioma e clique em OK.
Selecione o local de instalação do Flash Builder, se solicitado.
Selecione a pasta do Eclipse para o qual deseja Flash Builder 4.5 para ser conectado e clique em Avançar. (Nota: A cópia do Eclipse deve ser versão 3.6.1 ou posterior, de 32 bits e deve conter uma pasta chamada “dropins”)
Reveja a pré-instalação de resumo e clique em Install
Após a instalação, é recomendável que você edite o arquivo eclipse.ini para a instância do Eclipse, para que ele inclui as seguintes definições:

-Vmargs-Xms256m-Xmx512m-XX: MaxPermSize = 256m-XX: PermSize = 64m

E isso ai

Felipe.

Abr 29

PHP + MongoDB

Escrito por Fábio Batista da Silva em 1, 4, 6, apache, api, app, AR, auto, Banco de Dados, BI, class, classe, classes, cliente, código, collection, comparação, Curso, dados, demo, desempenho, Desenvolvedor, desenvolvedores, Dica, Documentação, Download, email, Flex, for, git, gmail, ide, IE, if, image, instalação, int, Java, Javascript, lista, mg, mysql, O, on, Partilha, PHP, pt, quick, RIA, Ria’s Geral, servidor, UI, uint, update, Ved, web, XP @ 04 29th, 2011 | via http://www.flexria.com.br/home | Sem comentários
Fábio Batista da Silva
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Olá.

Ultimamente me tenho dedicado bastante a melhora da performance das aplicações que desenvolvo.
Resolvi compartilhar aqui um pouco do que aprendi sobre NoSql.
Esses bancos de dados seguem uma abordagem diferente para o armazenamento de dados em comparação com o modelo relacional tradicional.
E estão rapidamente se popularizando entre os desenvolvedores da Web, devido à sua flexibilidade, simplicidade e fácil integração.

Neste Post vou falar um pouco sobre o MongoDB e a integração com o php.
MongoDB é um banco de dados orientado a documentos uma solução escalável, de alto desempenho e código aberto.

Você vai encontrar nesse link instruções sobre como instalar o MongoDB no seu ambiente : http://www.mongodb.org/display/DOCS/Quickstart

Se você assim como eu estiver usando o Ubuntu, você pode instalar MongoDB usando apt-get.
Para fazer isso, adicione a seguinte linha ao seu arquivo /etc/apt/sources.list:

deb http://downloads-distro.mongodb.org/repo/debian-sysvinit dist 10gen

Em seguida, instale o pacote com apt-get executando os seguintes comandos:

sudo apt-get update
sudo apt-get install mongodb-10gen

Se tudo der certo depois de concluir a instalação você pode acessar o MongoDB via linha de comando, como abaixo:

mongo
> show dbs
admin	(empty)
my_db	0.0625GB

Agora pode enviar comandos para o servidor, assim como faria em cliente mysql, porem utilizando a sintaxe do javascript.
A documentação do mongo é bem completa, la você pode encontrar mais detalhes sobre sua utilização : http://www.mongodb.org/display/DOCS/Home

?
// Exibe a versão banco de dados
> db.version()
1.8.1
?
// Cria uma nava coleção
> db.createCollection("contacts")
?
// Lista todas as coleções
> db.getCollectionNames()
[ "contacts", "system.indexes" ]
?
// Insere um novo item na coleção
> db.contacts.insert({"name" : "Fabio B. Silva", "email" : "fabio.bat.silva@gmail.com"})
?
// Lista todos os itens da coleção
> db.contacts.find()
{ "_id" : ObjectId("4db82c83a6510c5c77d67ebe"), "name" : "Fabio B. Silva", "email" : "fabio.bat.silva@gmail.com" }

Observe que quando você adiciona um novo registro a coleção o MongoDB anexa automaticamente um identificador único ( _id ).
Esse identificador pode ser usado para recuperar ou modificar um documento específico, similar a um id auto-increment em um banco de dados relacional.

Agora vamos partir para o código php.
existe uma extensão/drive para o php que fornece uma API completa para acessar o MongoDB, Ela está disponível gratuitamente a partir do PECL.
A extensão é estável e permite que você execute a maioria das tarefas comuns relacionadas ao acesso e utilização de um banco de dados MongoDB partir de uma aplicação PHP.

Para instalar você precisa ter o pear/pecl previamente instalados e executar o comando

pecl install mongo

E então adicionar a extensão no seu php.ini e reiniciar o seu apache

extension=mongo.so

Se tudo der certo na instalação você terá as classes do mongo disponíveis no php, as principais são:
* Mongo
* MongoDB
* MongoCollection
* MongoCursor

Mongo – Usado para interagir com o MongoDB

// Conexão com o banco de dados
 $mongo  = new Mongo();
?
// Conecta ao MongoDB
$mongo->connect();
?
// Remove um esquema
$mongo->dropDB("my_db_copy");
?
// Seleciona um esquema
$mongo->selectDB("my_db");
?
// Lista esquemas  
$list   = $mongo->listDBs();
?
// Fecha conexão
$mongo->close();

MongoDB – Usado para interagir com um esquema

?
// Seleciona um esquema
$db = $mongo->selectDB("my_db");
?
// Cria uma nova coleção
$db->createCollection("contacts");
?
// Seleciona uma coleção
$db->selectCollection ("contacts");
?
// Remove uma coleção
$db->dropCollection("contacts");
?
// Lista todas as coleções
$db->listCollections();

MongoCollection – Representa uma coleção

// Novo registro
$data = array(
    'name'  => 'Fabio B. Silva',
    'email' => 'fabio.bat.silva@gmail.com',
);
$contacts->insert($data);  // Insere um novo registro na coleção
$id = $data['_id'];        // O índice '_id' é anexado automaticamente pelo MongoDB
?
?
$data['name']  = 'Fábio Silva';         // Alterar o atributo
$criteria      = array('_id'=>$id);     // Critério do update|
$contacts->update($criteria, $data);    // Altera registro na coleção
?
?
$criteria  = array('_id'=>$id); // Critério para remoção
$contacts->remove($criteria);   // remove registro da coleção
?
?
?
$contacts->find();     // Lista todos os registros da coleção

MongoCursor – Resultado de uma consulta a uma coleção

?
// Lista todos os registros da coleção
$cursor = $contacts->find();
?
// Numero de registros encontrados
$cursor->count();
?
foreach ($cursor as $item)
{
    echo $item['name'];
}

Existem varias outras funcionalidades e classes que podem ser exploradas no MongoDB,
Essa é apenas uma pequena demostração do que ele pode fazer por você. ;-)
Para quem tiver o interesse deixei uma pequena app no git que demonstra algumas outras funcionalidades do MongoDB
https://github.com/FabioBatSilva/mongo-demo

Abraço e até a próxima….

Abr 18

Membase – Banco de dados “chave-valor” distribuído

Escrito por Igor Musardo em .NET, 1, 4, 6, abas, Adobe, apache, Aplicativos, app, AR, Asp.Net, back, Banco de Dados, BI, browser, busca, cache, class, cliente, código, configuração, couchdb, dados, Desenvolvedor, desenvolvedores, Dica, dll, Download, empresas, exemplo, Exemplos, Flex, for, IE, if, image, instalação, int, Java, library, mg, Microsoft, monitor, MSDN, O, on, painel, Partilha, Password, PHP, POO, programação, pt, relatório, Relatórios, RIA, Ria’s Geral, ruby, SDK, server, serviço, servidor, socket, Software, SQL Server, Sun, Tech, Tecnologia, Tema, Teste, UI, uint, Vários, Ved, Visual Studio, web, window, windows, XML, XP @ 04 18th, 2011 | via http://www.igormusardo.com.br | Sem comentários
Igor Musardo
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

O Membase é um sistema de gerenciamento de banco de dados chave-valor distribuído, otimizado para aplicações web interativas.

O Membase é utilizado em produção em milhares de aplicativos no mundo, entre as grandes empresas que utilizam temos Zynga e NHN. E já também disponível no host compartilhado Heroku.

Infelizmente hoje os hosts brasileiros nos planos compartilhados é dificil encontrar suporte à tecnologias noSQL como o Membase, CouchDb, MongoDb, etc, e com isso forçam os desenvolvedores fazerem software utilizando bancos de dados relacionais que não são aderentes à programação orientada a objetos.

Banco de dados relacional é muito recomendado para persistência de dados que não são utilizados com muita frequência e também para aplicações cujo objetivo é gerar relatórios. Então uma ótima sacada é utilizar as duas tecnologia juntas. Para os dados que são constantemente utilizados por sua aplicação utilize o Membase, para os dados utilizados com menos frequencia use banco de dados relacional.

Porém adotar o modelo chave-valor traz consigo uma pequena “dor”, pois você será forçado a mudar a forma como os dados serão gravados e buscados em sua aplicação, pois o Membase é uma estrutura de dicionário, ou seja, as operações de busca e remoção dependem diretamente de você saber de ante-mão a chave de onde está o registro.

Download

Escolha a versão que mais se adequa a sua necessidade: Enterprise Edition ou Community Edition, eu recomendo a versão Enterprise.

Disponível para Windows, Red Hat e Ubuntu.

O arquivo de instalação tem em média 80MB.

http://www.couchbase.com/downloads

Instalação

A instalação é bem simples seguindo o modelo AVANÇAR, AVANÇAR, …, CONCLUIR.

Após a conclusão da instalação o browser é aberto com a página de SETUP do Servidor Membase.

Membase01

A primeira etapa da configuração do servidor é definir o local onde serão persistidos os dados, escolher se essa instância será um novo cluster ou se juntará a um cluster existente.

Caso for criar um novo cluster, defina a quantidade máxima de memória você deixará disponível para o Membase utilizar. Ele só alocará a memória quando necessário.

Membase02

Agora é hora de criar o Bucket Default, container isolado de dados, a área onde ficarão os dados.

Você pode escolher entre os tipos Memcached e Membase as diferenças entre os dois são muitas, mas as mais importantes são: Membase persiste no disco e Memcached não, o Memcached possui o limite de 1MB por valor em cada registro, no Membase o limite são 20MB.

Uma dica, como você pode criar vários Buckets, sugiro você separar os assuntos de dados do seu sistema em Buckets distintos, isso facilitará sua vida quando precisar definir qual o modelo de chave utilizar para guardar os dados, acredite em mim. :-)

Membase03

Defina um usuário e senha para acessar o serviço, esses dados também serão utilizados para acessar o painel administrativo do Membase.

Membase04

Esse é o painel administrativo do Membase.

Membase05

Assim concluimos a etapa de instalação e configuração do Membase. Simples né?!

Cliente

Agora vamos trabalhar com a integração entre o .NET e o Membase, para isso antes de mais nada é necessário utilizar um client para a linguagem que a sua aplicação foi ou será escrita, no nosso caso .NET.

Hoje as linguagens que já possuem cliente são:

  • .NET
  • Java
  • Perl
  • PHP
  • Ruby
  • C

Para fazer o download do cliente acesse: http://techzone.couchbase.com/downloads

Como configurar sua aplicação para usar o Membase

Primeiro copie as DLL’s Enyim.Caching.dll e Membase.dll para a pasta BIN do seu projeto e adicione a referência dessas DLL’s no projeto.

No web.config ou app.config da sua aplicação acrescente as seguintes configurações:



  

Código de exemplo

Client

Para utilizar o Membase você precisa criar uma instância do MembaseClient passando como prâmetros o nome e senha do bucket:

var membaseClient = new MembaseClient("default", "senha_bucket");

Set

Para armazenar os dados no Membase utilize o método SET:

membaseClient.Set(StoreMode.Set, “key01”, “value01”);

Para o valor o membase aceita qualquer tipo de objeto. O método SET adiciona uma chave inexistente ou substitui uma chave existente.

Get

Para resgatar um valor amazenado utilize o método GET:

var valor = membaseClient.Get(“key01”); // Retorna “value01”

Agora que você foi apresentado ao Membase pode já começar a brincar a fazer testes para aumentar o throughput e a escalabilidade da sua aplicação.

Até o próximo post.

Divita-se.

Mar 7

BlazeDS – do básico ao avançado – Parte 1

Escrito por DClick Team em 1, 2009, 4, 6, action, Actionscript, Adobe, AMF, apache, app, AR, arte, auto, BI, Blazeds, blog, botão, class, classe, cliente, código, código fonte, Componente, componente flex, Componentes, comunicação, configuração, control, Controls, Crossdomain, custom, dados, demo, developer, Diversos, Documentação, Download, Eclipse, err, erro, event, Evento, events, exemplo, Exemplos, falha, flash, Flex, fonte, for, framework, Frameworks, function, Galileo, git, handle, Hibernate, HTTPService, ide, IE, if, image, instalação, int, Java, library, LOB, Messaging, mg, MXML, NaN, O, on, opensource, Outros, Plugin, problema, problemas, pt, reference, referencia, Remoting, RIA, Ria’s Geral, runtime, screen, Screencast, screencasts, Segurança, Sem categoria, server, serviço, Serviços, servidor, site, spark, Spring, string, tag, TAT, Tecnologia, Twitter, UI, uint, web, Webservice, window, XML @ 03 7th, 2011 | via http://blog.dclick.com.br/pt/ | Sem comentários
DClick Team
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

BlazeDS é uma aplicação Java opensource mantida pela Adobe, sob licensa GNU Lesser General Public License, Version 3 (LGPL v3), que fornece um conjunto de serviços, todos sobre o protocolo HTTP(Hyper Text Transfer Protocol), para permitir uma aplicação Flex fazer chamadas a serviços remotos Java, retornando os dados tanto de forma assíncrona como em tempo real.

Por utilizar o formato de dados binário chamado AMF(Action Message Format) para a serialiazação e deserialização de dados, a comunicação entre uma aplicação Flex e o servidor Web se torna muito otimizada. Existem estudos feitos comparando as diversas tecnologias, como o Jamesward, mostrando o potencial do AMF.

Outra grande vantagem quando usamos o BlazeDS é a facilidade de ter classe Java automaticamente convertida para uma classe ActionScript e vice-versa.

O BlazeDS pode ser baixado do site da Adobe em dois formatos:

  1. Turnkey – Versão que já vem com exemplos e servidor tomcat pré configurado
  2. Binary – Versão com os binários

Você pode optar também por fazer o download do código fonte. A documentação também está disponível neste link.


Entendendo os arquivos de configuração do BlazeDS
A estrutura de arquivos do BlazeDS é bem simples, quando descompactamos o blazeds.war, presente na versão binária, podemos ver a seguinte estrutura:

Devemos nos atentar a duas pastas. A pasta lib, que contém todos os jars necessários, e a pasta flex, que contém todos os arquivos de configuração do BlazeDS. Vamos ver o que cada arquivo significa:

  1. services-config.xml: É neste arquivo que estão as principais configurações do BlazeDS como segurança, logging, serviços disponíveis (Canais), fábricas para a integração com Frameworks Java como Spring e EJB3 e as referências para os outros três arquivos de configuração.
  2. remoting-config.xml: É nesse arquivo que iremos configurar os serviços Java para serem “consumidos” pela aplicação Flex. Sempre quando configuramos este arquivo, iremos trabalhar com o componente Flex chamado RemoteObject.
  3. message-config.xml: Aqui é configurado tudo o que for relacionado com mensageria, sempre necessário quando trabalhamos com os componentes Flex Consumer e Producer. Um exemplo da utilização desta tecnologia seria fazer um bate bapo, ou até mesmo aplicações colaborativas, onde é desejável a iteração simultânea de diversos usuários.
  4. proxy-config.xml: Além da possibilidade de utilizarmos o componente RemoteObject, o Flex disponibiliza mais duas formas de integração: O HTTPService e o WebService. Porém, por questões de segurança, os serviços só podem ser chamados quando os mesmos estão no mesmo domínio que a aplicação, ou que exista uma configuração específica que permita um cliente Flex fazer a consulta (esta configuração é feita por um arquivo chamado crossdomain.xml e está sempre no servidor onde está o serviço chamado). Caso uma das duas condições acima não seja satisfeita, deveremos utilizar o BlazeDS como proxy , e é ai que configuração deste arquivo se torna necessário.



Criando o seu primeiro projeto com o BlazeDS

Para criar o projeto iremos precisar de:

  1. Eclipse Galileo JEE
  2. FlashBuilder Plugin
  3. BlazeDS 4 Binary
  4. Tomcat 6



Feito os downloads e a instalação do Eclipse e FlashBuilder, vamos iniciar o FlashBuilder para criar o projeto.
Antes de criar o projeto, vamos configurar o Tomcat:

  1. Nas preferências do Eclipse, vá em Server — Runtime Environments e clique em Add…
  2. Na pasta Apache selecione Apache Tomcat v6.0 e clique em Next
  3. Selecione a pasta onde você descompactou o Tomcat e clique em Finish

Feito a configuração do Tomcat, vamos criar o projeto:

  1. Vá em File – New – Flex Project
  2. Preencha os dados do primeiro passo como na imagem abaixo e clique em Next
  3. Neste passo vamos configurar os dados do servidor. Deixe tudo configurado como na imagem e clique em Next


    Para selecionar o “Target Runtime”, clique em New e depois escolha o Apache Tomcat 6, como na imagem abaixo.
  4. No último passo não será necessário mudar nada, clique em Finish

Agora vamos criar a classe Java que terá o serviço para retornar a string “HelloBlazeDS”

  1. Crie uma classe Java br.com.dclick.service.RemotingService
  2. Crie o serviço:
    1
    2
    3
    4
    5
    6
    7
    8
    package br.com.dclick.service;
    public class RemotingService {

    ? ? public String sayHello() {
    ? ? ? ? return “HelloBlazeDS”;
    ? ? }
    ? ?
    }

Agora vamos configurar o BlazeDS para disponibilizar o serviço que acabamos de criar.

  1. Abra o arquivo remoting-config.xml que está na pasta WebContent/WEB-INF/flex
  2. Para que seja possível chamar os métodos da classe Java, precisamos configurar um destination. Isso é necessário para cada classe Java.
    O arquivo fica assim:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    xml version=“1.0″ encoding=“UTF-8″?>
    “remoting-service” class=“flex.messaging.services.RemotingService”>
    ? ?
    ? ? ? ? “java-object”
    ? ? ? ? ? ? class=“flex.messaging.services.remoting.adapters.JavaAdapter”
    ? ? ? ? ? ? default=“true” />
    ? ?

    ? ?
    ? ? ? ? “my-amf” />
    ? ?

    ? ? “blazeServices”>
    ? ? ? ? ? ? ? ? ? ? br.com.dclick.service.RemotingService
    ? ? ? ?
    ? ?

Vamos colocar na aplicação a chamada para o servidor.

  1. A primeira coisa que precisamos fazer é configurar o RemoteObject. Fazer isso é muito simples:
    1
    2
    3
    4
    5
    ? ? ? ?
    ? ? ? ? “services” destination=“blazeServices”
    ? ? ? ? ? ? ? ? ? ? ? ? result=“services_resultHandler(event)”
    ? ? ? ? ? ? ? ? ? ? ? ? fault=“services_faultHandler(event)” />
    ? ?


    Alguns detalhes:

    * Perceba que a propriedade destination aponta para o destination que configuramos no arquivo remoting-config.xml

    * Precisamos declarar um id para poder referenciar o RemoteObject

    * Adicionamos um ResultHandler para tratar o resultdo do serviço

    * Adicionamos um FaultHandler para tratar a falha do serviço

  2. Os Handlers ficam assim:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    ? ? ? ?
    ? ? ? ? [CDATA[
    ? ? ? ? ? ? import mx.controls.Alert;
    ? ? ? ? ? ? import mx.rpc.events.FaultEvent;
    ? ? ? ? ? ? import mx.rpc.events.ResultEvent;

    ? ? ? ? ? ? protected function services_resultHandler(event:ResultEvent):void
    ? ? ? ? ? ? {
    ? ? ? ? ? ? ? ? Alert.show(event.result.toString());
    ? ? ? ? ? ? }

    ? ? ? ? ? ? protected function services_faultHandler(event:FaultEvent):void
    ? ? ? ? ? ? {
    ? ? ? ? ? ? ? ? Alert.show(event.fault.message);
    ? ? ? ? ? ? }

    ? ? ? ? ]]>
    ? ?


    Alguns detalhes:

    * A propriedade result do evento ResultEvent vai conter o resultado do serviço. No nosso caso o serviço retorna uma String “HelloBlazeDS”

    * A propriedade fault do evento FaultEvent contém os detalhes do erro.

  3. A última coisa é chamar o serviço. Vamos fazer isso no evento creationComplete, como segue:
    1
    2
    3
    4
    ? ? ? ? protected function application1_creationCompleteHandler(event:FlexEvent):void
    ? ? ? ? ? ? {
    ? ? ? ? ? ? ? ? services.sayHello();
    ? ? ? ? ? ? }
  4. A aplicação inteira fica assim:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    ? ? ? ? xml version=“1.0″ encoding=“utf-8″?>
    “http://ns.adobe.com/mxml/2009″
    ? ? ? ? ? ?? ? xmlns:s=“library://ns.adobe.com/flex/spark”
    ? ? ? ? ? ?? ? xmlns:mx=“library://ns.adobe.com/flex/mx” minWidth=“955″ minHeight=“600″
    ? ? ? ? ? ?? ? creationComplete=“application1_creationCompleteHandler(event)”>
    ? ?
    ? ? ? ? [CDATA[
    ? ? ? ? ? ? import mx.controls.Alert;
    ? ? ? ? ? ? import mx.events.FlexEvent;
    ? ? ? ? ? ? import mx.rpc.events.FaultEvent;
    ? ? ? ? ? ? import mx.rpc.events.ResultEvent;

    ? ? ? ? ? ? protected function services_resultHandler(event:ResultEvent):void
    ? ? ? ? ? ? {
    ? ? ? ? ? ? ? ? Alert.show(event.result.toString());
    ? ? ? ? ? ? }

    ? ? ? ? ? ? protected function services_faultHandler(event:FaultEvent):void
    ? ? ? ? ? ? {
    ? ? ? ? ? ? ? ? Alert.show(event.fault.message);
    ? ? ? ? ? ? }

    ? ? ? ? ? ? protected function application1_creationCompleteHandler(event:FlexEvent):void
    ? ? ? ? ? ? {
    ? ? ? ? ? ? ? ? services.sayHello();
    ? ? ? ? ? ? }

    ? ? ? ? ]]>
    ? ?
    ? ?
    ? ? ? ? “services” destination=“blazeServices”
    ? ? ? ? ? ? ? ? ? ? ? ? result=“services_resultHandler(event)”
    ? ? ? ? ? ? ? ? ? ? ? ? fault=“services_faultHandler(event)” />
    ? ?

Agora só falta fazer o deploy da aplicação e subir o servidor.

  1. Vá em Window – Show View – Other. Na janela que abrir, digite Servers e clique OK
  2. Na view Servers, clique com o botão direito em Tomcat v6.0 e selecione Add and Remove…
  3. Selecione a aplicação HelloBlazeDS e clique em Add e depois Finish
  4. Na view Servers, clique com o botão direito em Tomcat v6.0 e clique em Run

Agora é só executar a aplicação e ver o resultado:

Isso é tudo, guarde esse projeto configurado para ser usado nos próximos posts.

« Entradas anteriores |

ACERCA

O que é o RedeRIA ?

O redeRIA não é nada mais que um agregador de feed's que disponibiliza o conteudo de varios blogs e autores ao redor do mundo RIA, actualmente agregamos mais de 2755 entradas vindas de 53 blogs especializados em ria’s, pelo que só fica a ganhar em assinar o feed ou seguir a comunidade no twitter.

Se acha que o seu blog ou um blog de um amigo é interessante e util para os leitores o redeRIA, faça a sua submissão aqui.

Feed: assine já
Twitter: siga-nos

GOOGLE

Votação


Deveria o RedeRia agregar conteúdo em inglês?
Ver Resultados

AUTORES


Eduardo KrausAlexandre TadashiBindableCognitiva SoluçõesDaniel LopesDaniel SchmitzDanielPedrinhaDClick TeamEbercomEdgard DavidsonElvis FernandesErko BrideeFabiel PrestesFábio Batista da SilvaFabio da SilvaFabriccio BernardesFelipe BorellaFlavia MoreiraGabriel VersalliniGabriela T. PerryIgor MusardoJanderson CardosoJoão AugustoJose Carlos FielKelps SousaLeonardo FrançaLucas MarçalLuis MessiasLuiz TarabalMario JuniorMário SantosMauro MartinsPablo SouzaPedro ClaudioreneRia BrazilriaPTRicardo CerqueiraRobson FernandesRodrigo Pereira FragaSaintBrSamuelFacchinelloSergio SouzaSilva DeveloperStefan HorochovecTech CaffeTecinforThiago BuenoVedVinícius SandimWillian ManoXAML Cast

PUBLICIDADE








Powered by Wordpress & msdevstudio.com