logo
  • Home
  • Acerca
  • Autores
  • Faq
  • Rede
  Twitter   Feed-me! RSS!
Mai 7

Acessando a camera do celular com Adobe AIR for Android

Escrito por Leonardo França em .NET, 1, 2.0, 4, 6, action, Actionscript, Actionscript3, Adobe, Adobe Air, Air, Android, api, app, AR, auto, BI, C#, class, classe, classes, configuração, Curso, Cursos, demo, Desktop, err, erro, error, event, EventListener, exemplo, filter, flash, flash media, Flash Media Server, Flex, for, function, Geral, Google, html, ide, IE, if, image, int, internet, live, mg, mobile, O, on, padrão, PHP, platform, pt, reference, Ria’s Geral, RoR, S+S, server, servidor, SmartPhone, streaming, string, UI, Ved, Vídeo, web, XML @ 05 7th, 2011 | 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 »



O Adobe AIR for Android pode acessar alguns recursos do hardware dos smartphones. Dentre alguns deles podemos citar o acesso a internet, ler o estado do telefone, o acesso da rede, o acesso da wifi, GPS, sensores etc. O Adobe AIR pode acessar também a camera do dispositivo, sendo que isso pode ser feito de duas maneiras.

O Adobe AIR está disponivel para dispositivos rodando Android a partir da versão 2.2(Froyo)

Temos duas classes para acessar a camera com Adobe AIR for Android:

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/media/Camera.html
A primeira maneira de acessar a câmera do celular é usando a classe Camera, clássica e já bastante conhecida de nossos trabalhos em ambiente web e desktop. Antes você pode usar o método Camera.isSupported, e para pegar as câmeras usando Camera.getCamera().

Geralmente essa classe é usada também para enviar o streaming de sua câmera para o servidor Flash Media Server(em conjunto com a classe NetStream) e transmitir para web, desktop ou mobile. Veja um exemplo de uso:

PLAIN TEXT
ACTIONSCRIPT3:

  1. var camera:Camera = Camera.getCamera();
  2. if (camera != null)
  3. video = new Video(camera.width * 2, camera.height * 2);
  4. video.attachCamera(camera);
  5. addChild(video);
  6. else
  7. trace(“You need a camera.”);

No getCamera, se não for passado nenhum parâmetro, acessará a camera principal do dispositivo, você pode acessar uma câmera especifica passando o índice dela como string:

PLAIN TEXT
ACTIONSCRIPT3:

  1. var arrCamera:Array = Camera.names;// todas as câmeras como array
  2. var camera:Camera = Câmera.getCamera(“1”);//acessando a câmera de indece 1

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/media/CameraUI.html
CameraUI é uma classe nova exclusiva para o Adobe AIR for Mobile Devices, permitindo que você capture a imagem ou vídeo do aplicativo padrão de câmera do celular. A imagem ou video fica disponivel no objeto MediaEvent. Veja um exemplo de uso:

PLAIN TEXT
ACTIONSCRIPT3:

  1. var deviceCameraApp:CameraUI = new CameraUI();
  2. var imageLoader:Loader;
  3. deviceCameraApp.addEventListener( MediaEvent.COMPLETE, imageCaptured );
  4. deviceCameraApp.addEventListener( Event.CANCEL, captureCanceled );
  5. deviceCameraApp.addEventListener( ErrorEvent.ERROR, cameraError );
  6. deviceCameraApp.launch( MediaType.IMAGE );
  7. function imageCaptured( event:MediaEvent ):void
  8. trace( “Media captured…” );
  9. var imagePromise:MediaPromise = event.data;
  10. if( imagePromise.isAsync )
  11. trace( “Asynchronous media promise.” );
  12. imageLoader = new Loader();
  13. imageLoader.contentLoaderInfo.addEventListener( Event.COMPLETE, asyncImageLoaded );
  14. imageLoader.addEventListener( IOErrorEvent.IO_ERROR, cameraError );
  15. imageLoader.loadFilePromise( imagePromise );
  16. else
  17. trace( “Synchronous media promise.” );
  18. imageLoader.loadFilePromise( imagePromise );
  19. showMedia( imageLoader );
  20. }
  21. function captureCanceled( event:Event ):void
  22. trace( “Media capture canceled.” );
  23. NativeApplication.nativeApplication.exit();
  24. function asyncImageLoaded( event:Event ):void
  25. trace( “Media loaded in memory.” );
  26. showMedia( imageLoader );
  27. function showMedia( loader:Loader ):void
  28. this.addChild( loader );
  29. function cameraError( error:ErrorEvent ):void
  30. trace( “Error:” + error.text );
  31. NativeApplication.nativeApplication.exit();

Um ultimo detalhe para que funcione no smartphone, é necessario setar a permissão para que o aplicativo possa acessar a camera no Android. Isso é feito no xml de configuração do Adobe AIR:

PLAIN TEXT
XML:

  1. >
  2. >
  3. ]]>>
  4. >
Mai 6

Upload de arquivo com Servlet e Flex – Parte I

Escrito por Cognitiva Soluções em 1, 4, 6, Access, apache, AR, arte, blog, Blogs, boolean, browser, busca, business, case, catch, chrome, class, código, exemplo, firefox, Flex, for, function, Google, IE, if, image, int, Java, mg, Number, O, on, print, problema, pt, reference, RIA, Ria’s Geral, servidor, string, Sun, try, UI, utils, vs @ 05 6th, 2011 | via http://blog.cognitivasolucoes.com | Sem comentários
Cognitiva Soluções
? 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 »

Segue um exemplo de como desenvolver um Servlet para upload de arquivos realizando a integração com Flex. Confira a solução adotada para resolver o problema de perda de sessão do upload com Flex nos browsers Firefox e Chrome.


Segue o código java:

package com.xxx.business.services;

import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

import sun.misc.BASE64Decoder;

import com.xxx.commons.AccessProperties;
import com.xxx.core.exception.BusinessException;

public class ServletUploadFile extends HttpServlet {

 public ServletUploadFile() {
 }

 protected void doGet(HttpServletRequest request,
   HttpServletResponse response) throws ServletException, IOException {

  doPost(request, response);
 }

 protected void doPost(HttpServletRequest request,
   HttpServletResponse response) throws ServletException, IOException {
  try {
   // Verifica se é upload
   boolean isMultipart = ServletFileUpload.isMultipartContent(request);

   if (isMultipart) {
    FileItemFactory factory = new DiskFileItemFactory();

    ServletFileUpload upload = new ServletFileUpload(factory);

    List items = upload.parseRequest(request);

    Iterator iter = items.iterator();
    while (iter.hasNext()) {
     FileItem item = (FileItem) iter.next();

     if (item.isFormField()) {
      processFormField(item);
     } else {
      processUploadedFile(item, "arquivos");
     }
    }
   }

  } catch (Exception e) {
   e.printStackTrace();
   throw (new ServletException(e.getMessage()));
  }
 }

 private void processFormField(FileItem item) throws ServletException {
  String name = item.getFieldName();
  String value = item.getString();

  System.out.println("Item name: " + name + " ; value: " + value);
 }

 private void processUploadedFile(FileItem item, String caminho)
   throws Exception {
  String fileName = item.getName();

  AccessProperties prop = new AccessProperties();
  String path = prop.getCaminhoPadrao() + caminho + "/upload/";

  // Verifica a existencia da pasta e se não existir ja cria
  if (FileUtils.verificaSeExisteECriaPasta(path)) {
   File uploadedFile = new File(path + fileName);
   if (!uploadedFile.exists()) {
    uploadedFile.createNewFile();
   }
   item.write(uploadedFile);

  } else {
   throw (new BusinessException(
     "Não foi possível criar uma pasta no servidor para o arquivo do upload."));
  }
 }

}

Agora vamos ao Flex:

Note que passamos o atributo?jsessionid que é utilizado para a sessão não ser perdida.

public function executaUploadFTP( file:FileReference ):void{
   var mile:Number = new Date().getUTCMilliseconds();

   var params:URLVariables = new URLVariables();
   params.jsessionid = this.sessionId;
   params.cod = mile;

   var servletTarget:URLRequest = new URLRequest("/ServletUploadFile;jsessionid=" +
    this.sessionId + "?cod=" + mile);

   servletTarget.method = URLRequestMethod.POST;
   servletTarget.data = params;
   file.upload(servletTarget, "Filedata", true);

  }

Na ?Parte II será abordado como recuperar o?jsessionid?e a construção da Tela Flex com seus métodos de busca do arquivo a ser enviado entre outro detalhes.

Mai 5

Spring @Transactional Transações Java

Escrito por Felipe Borella em 1, action, apache, app, AR, back, Banco de Dados, class, control, dados, Desenvolvedor, Documentação, for, Java, O, on, Outros, Pessoal, problema, problemas, pt, Ria’s Geral, servidor, Spring, tag, TAT, UI, Ved @ 05 5th, 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 »

E ai pessoal blza?
Uma coisa que as vezes eu vejo por ai são aplicações sem o uso do controle de transações. Descobri a poucos dias que isso pode ser tornar uma dor de cabeça para o desenvolvedor. Então se você usa o Spring ( que é o meus caso ) basta incluir no seu ApplicationContext essa tag abaixo:

<tx:annotation-driven transaction-manager="transactionManager"/>

Depois nos seus services basta fazer isso:

@Transactional(propagation=Propagation.REQUIRED,rollbackFor=Exception.class)

Isso pode evitar alguns indesejáveis problemas no banco de dados, inconsistências e até mesmo a quedra do servidor ( apache tomcat, jboos etc ).

ps – Esse controle de aplicação aplica-se para outros, não apenas no Spring ( veja a documentação )

Att
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 29

Experimentando Flex Mobile #screencast

Escrito por Jose Carlos Fiel em 1, 4, 6, Adobe, Adobe Flex, Android, api, app, apple, AR, BI, blog, builder 4, class, classe, classes, demo, err, flash, flash builder, Flash Builder 4, Flex, for, framework, html, IE, if, image, iphone, mg, mobile, O, on, PHP, Ria’s Geral, screen, Screencast, serviço, servidor, UI, web, XP, zend, Zend Framework @ 04 29th, 2011 | via http://blog.josecarlosfiel.com.br | Sem comentários
Jose Carlos Fiel
? 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 »



Essa semana estou no desafio de construir uma app mobile usando Flex.

Algo bem simples até então, já que estou usando uma versão da prerelease do Flash Builder 4.5 for PHP.

O mais legal é simplicidade de conectar ao servidor, utilizando as mesmas classes de serviço do Zend usadas na app existente rodando hoje na web (Flex + PHP usando Zend Framework).

Muita gente já me adianta falando: “Vai funcionar só no Android né, já que o iPhone e iPad não tem Flash!”.

Maior engano destes ou de você que já pensou o mesmo.

Agora podemos compilar um arquivo APK para plataforma Android e um arquivo IPA para plataforma iOS. Fora as duas grandes plataformas ainda posso gerar para o BlackBerry PlayBook.

Assistam e confiram abaixo a breve experiência:

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.

Abr 13

Silverlight 5 Beta disponível para download

Escrito por Kelps Sousa em .NET, 1, 2.0, 3.5, 4, 6, AR, Asp.Net, Beta, BI, Blend, blog, Blogs, break, C#, Desenvolvedor, Desenvolvimento, developer, Download, expression, Expression Blend, for, Google, IE, Mac, map, mg, Microsoft, MIX, mudanças, News, O, on, Review, Ria’s Geral, runtime, S+S, SDK, Service Pack, servidor, silverlight, tool, UI, Ved, Visual Studio, Visual Studio 2010, web, window, windows, XP @ 04 13th, 2011 | via http://kelps-sousa.blogspot.com/ | Sem comentários
Kelps Sousa
? 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 »

No MIX11, Scott Guthrie anunciou a disponibilização da versão beta do Silverlight 5 para download. Abaixo estão alguns link para os downloads relacionados a essa versão beta:

  • Visual Studio 2010 SP1 ou Visual Web Developer Express 2010 SP1 (é necessário ter o Service Pack 1 do Visual Studio para poder usar o Silverlight 5)
  • Silverlight 5 Tools for Visual Studio
  • Expression Blend Preview for Silverlight 5
  • Silverlight 5 SDK CHM
  • Runtime de desenvolvimento: Windows ed Mac – não é necessário se você instalar o tools. Só é necessário se for testar aplicações feitas em Silverlight 5 em computadores sem o tools do SL5 instalado.
  • Silverlight 5 SDK – para servidores de build. O tools já instala o sdk no computador do desenvolvedor
  • Documento de mudanças (breaking changes)



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.

Mar 6

TraceTarget – Usando a API de Log do Flex

Escrito por DClick Team em 1, 2009, 4, 6, Actionscript, Adobe, api, app, Apresentação, AR, arte, BI, bug, class, classe, classes, Componente, components, control, custom, Debug, demo, Desenvolvimento, Diversos, encode, err, erro, error, esporte, event, events, exemplo, filter, filtra, flash, Flex, Flex Data Services, for, Formação, function, handle, HTTPService, IE, if, instalação, int, interface, library, lista, live, LOB, Messaging, MXML, O, on, padrão, player, problema, problemas, pt, rest, RIA, Ria’s Geral, RoR, rss, SDK, Sem categoria, servidor, spark, string, strings, TAT, Twitter, UI, XML, XP @ 03 6th, 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 »

Neste post vou explicar como usar a API de Log para mostrar os logs de execução da aplicação e também como usar o componente TraceTarget, que é muito útil para poder recuperar as informações das chamadas para o servidor, facilitando a resolução de problemas.

No Flex temos duas opções para recuperar informações ou logs de execução de uma aplicação. Uma primeira maneira e a mais utilizada, é usar a função global trace(”) para mostrar informações no console do FlashBuilder. Essa abordagem sempre requer que a aplicação esteja sendo executada em modo de debug, o que exige a instalação de um FlashPlayer versão de debug. Lógico que para o ambiente de desenvolvimento isso não é um problema, já que a instalação do FlashBuilder já inclui a versão correta do FlashPlayer versão debug. Mais e quando a aplicação está em produção, ou seja, quando não contamos com a versão de debug do FlashPlayer? Ai que entra a segunda opção.Na segunda opção vamos usar a API de Logging do Flex, que vai nos permitir delegar para uma classe a função de logar informações, seja usando o trace(”), primeira abordagem, ou até mesmo customizando a forma de apresentação. Esta abordagem também nos permite controlar o que é exibido, utilizado categorias e nível de log.

A API de Logging do Flex é muito simples de ser usada. Toda vez que queremos usa-la, estaremos envolvendo duas partes:

  1. O Logger, que possui os meios para enviar informações em diversos níveis (all, debug, info, warn, error e fatal) em uma determinada categoria para o Log Target. O Logger sempre irá implementar a interface ILogger, iremos utilizar a classe mx.logging.LogLogger, que já vem no SDK;
  2. O Log Traget, que será responsável por registrar a informação usando o trace(”) ou outra implementação. Iremos utilizar a classe mx.logging.targets.TraceTarget.

Para ficar mais fácil de entender como usar a API, vamos imaginar que queremos logar quando a aplicação é pré-inicializado, inicializado e criado.Inicialmente iremos usar a função global trace(”) e depois usar as classes de Log.

Ler o resto…

Mar 3

Spring WEBMVC – Annotations

Escrito por DClick Team em 1, 2.0, 4, 6, app, Apresentação, AR, Arquitetura, arte, BI, blog, busca, camp, class, classe, classes, configuração, control, custom, dados, demo, Desenvolvimento, Design, Design Pattern, dispatch, err, exemplo, Ferramenta, for, framework, Google, IE, if, image, int, interface, j2ee, Java, lógica, map, Mercado, mg, mvc, NaN, Negócios, O, on, Outros, padrão, pattern, procura, programação, pt, reference, rest, RIA, Ria’s Geral, screen, Screencast, server, serviço, servidor, site, Spring, SpringFramework, string, Sun, tag, TAT, Tema, Teste, Twitter, UI, uint, UX, validação, web, XML, XP, zend @ 03 3rd, 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 »

Criando a camada WEB com Spring-WEBMVC – @Annotation


Spring WebMVC é uma ferramenta poderosa para criação de aplicação com uma camada web muito utilizada no mercado.
Algumas de suas características incluem uma separação clara entre camada de apresentação, negócios e modelo, e também uma distinção clara de papéis de controllers, validators, commands, forms, models, views etc. Também é um framework altamente customisável e adaptável, disponibilizando ferramentas para controle de todo o fluxo entre as páginas e se adaptando bem a maioria dos modelos de negócio. Outra característica que é quase obrigatória em todos os módulos do Spring, é o padrão Spring de se organizar e configurar as classes de negócio como beans gerenciados pelo container.
Além das características básicas, ainda estão disponíveis bibliotecas de JSP muito úteis no dia-a-dia de desenvolvimento que facilitam a contrução de interfaces. E ainda existe a possibilidade de configurar os escopos dos beans da aplicação de acordo com o lifecycle do HTTP request que está sendo feito para a aplicação.

Neste post veremos o básico de spring-webmvc e sua configuração feita por anotações, aprendendo os conceitos base do módulo e entendendo melhor como configurar e organizar seus beans de acordo com suas necessidades. Por fim veremos um screencast com um exemplo de aplicação web feita do zero e seguindo todo o caminho desde o modelo, passando pelo controller e terminando na view.

Entendendo o DispatcherServlet


O DispatcherServlet é de fato um servlet Java que é o ponto de entrada para as aplicações Web.

É encarregado de encaminhar as chamadas feitas a aplicação para seu respectivo controller, e uma vez que a resposta do controller foi recebida, encaminhas a resposta para a view correta. Mas como DispatcherServlet faz parte do Spring, para ele e seus beans, nesse caso controllers e suas dependências, estão disponíveis todas as outras features que o container disponibiliza, como gerenciamento de beans e injeção de dependências.

O DispatcherServlet seguem um Design Pattern conhecido como Front Controller. No site do spring está disponível o seguinte diagrama exemplificando o pattern:





No diagrama fica claro o papel do DispatcherServlet.
Uma chamada que acabou de chegar na aplicação, passa pelo DispatcherServlet, que por sua vez escolhe o controller correto para tratar a chamada e delega a mesma. Feito isso o controller devolve o resultado da operação para o DispatcherServlet que dessa vez se encarrega de encontrar a view correta para tratar a resposta. Após a view ter renderizado a página de resposta, o DispatcherServlet devolve para o dono da requisição a resposta.


Configurando o DispatcherServlet



Agora que entendemos que o DispatcherServlet é peça fundamental para nossa aplicação, precisamo configurá-lo. Para isso basta adicioná-lo ao seu arquivo web.xml da seguinte forma:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
-app xmlns=“http://java.sun.com/xml/ns/j2ee” xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”
? ? version=“2.4″ xsi:schemaLocation=“http://java.sun.com/xml/ns/j2ee web-app_2_4.xsd”>

? ?
? ? >

? ? ? ? -name>servletName-name>
? ? ? ? -class>org.springframework.web.servlet.DispatcherServlet-class>
? ? ? ? -on-startup>1-on-startup>
? ? >

? ? -mapping>
? ? ? ? -name>servletName-name>
? ? ? ? -pattern>/*-pattern>
? ? -mapping>

-app>



O que fizemos foi dizer ao server, que ele deve instanciar um novo servlet, que nesse caso é o DispatcherServlet, assim que a aplicação subir no servidor. Também estamos dizendo que todas as chamadas para a aplicação, que forem feitas em / devem ser delegadas para o nosso servlet com o nome servletName. Nesse campo você pode escolher o nome que mais fizer sentido para sua aplicação, e perceba que você pode criar mais de um servlet para tratar suas chamadas.

Agora vamos à integração com o IoC do Spring.

Como eu havia dito, esse é um dos benefícios do Spring-WebMVC, e portanto vamos ver como usá-lo corretamente para tirar maior proveito do mesmo.

Todo DispatcherServlet está associado a um contexto de beans do Spring. Tal associação é feita através do nome do servlet e um arquivo de beans padrão do spring. No momento em que o DispatcherServlet for criado, o classpath será percorrido em procura de uma arquivo que, neste caso, deve se chamar /WEB-INF/servletName-servlet.xml. Neste arquivo devem estar definidos os beans específicos para que os seus controllers referentes a este servlet funcionem corretamente. Note que se estiver definido mais de um DispatcherServlet, será necessário definir um arquivo com tais beans para cada um deles.


Controllers



Controllers são parte fundamental da arquitetura MVC (se referem so ‘C’ da sigla), e no Spring-webmcv não é diferente. Saber configurá-los e atribuí-los a suas chamadas específicas é muito importante no desenvolvimento da aplicação. Pensando nisso o Spring disponibiliza várias implementações de controllers que pode ajudar no dia-a-dia e várias ferramentas para associar as chamadas a tais controllers. Como o objetivo do post é tratar da configuração por anotações, não entrarei no detalhe de tais implementações e de tais associações. Iremos utilizar um serviço qualquer da aplicação para servir de controller, e a associação será feita através das anotações.

Para tornar uma classe um controller do spring, basta anotá-lo com @Controller da seguinte forma:

1
2
3
4
? ? package br.com.dclick;

? ? @Controller
? ? public class ServicoComum {



Repare que não é necessário extender nem implementar nenhuma classe ou interface específica, o que colabora bastante para desacoplar a lógica de view de nosso sistema.

Para habilitar esse nosso controller e associá-lo ao servlet, basta pedirmos ao Spring para scannear esse pacote e deixar o bean disponível no contexto do servlet. Para fazer isso adicione o seguinte no arquivo de beans do servlet:

1
2
3
4
5
6
7
8
9
10
11
12
13
<?xml version=“1.0″ encoding=“UTF-8″?>
xmlns=“http://www.springframework.org/schema/beans”
? ? xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance” xmlns:context=“http://www.springframework.org/schema/context”
? ? xsi:schemaLocation=“http://www.springframework.org/schema/beans
? ? ? ? http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
? ? ? ? http://www.springframework.org/schema/context
? ? ? ? http://www.springframework.org/schema/context/spring-context-3.0.xsd”
>

? ? :annotation-config />

? ? :component-scan?base-package=“br.com.dclick” />

>



Perceba que coloquei a tag do contexto do spring que habilita a configuração por anotações.

Agora precisamos definir um método para que o spring faça a chamada quando o request chegar na aplicação. Para isso vamos entender o papel do ModelAndView.


ModelAndView



O ModelAndView é responsável por descrever o modelo e a view (intuitivo? ;) ) daquela chamada, portanto nele estão setados a view a qual a chamada está associada, e todos os atributos de modelo que devem chegar até a view. Tais atributos são guardados como em um Map associando chaves e valores. Veremos que esses valores ficam disponíveis em nossa view e podem ser usados nos JSPs da aplicação, mas agora vamos ao método do controller:

1
2
? ? @RequestMapping(value = “/chamada”, method = RequestMethod.GET)
? ? public ModelAndView trataChamada(@PathVariable(“var”) String var) {



Muita coisa acontecendo aqui, mas vamos por partes. A primeira coisa a se notar é que o método irá tratar todas as chamadas feitas em nomeDaAplicação/chamada, isso porque nosso servlet está associado em / e nosso método está associado com chamada. Nós poderíamos também ter definido o caminha básico para o controller ainda na anotação do controller, por exemplo:

1
2
? ? @Controller(“/base”)
? ? public class ServicoComum {



Assim nosso método trataria todas as chamadas feitas em nomeDaAplicação/base/chamada.

A segunda coisa a se notar é que nosso método só irá tratar requisições do tipo GET, podendo ser alterado para os outros tipos de requisição seguindo um modelo REST.

A terceira coisa a se notar é que nosso método devolve um ModelAndView, portanto saberemos a que view o DispatcherServlet irá direcionar, e também teremos alguns atributos do modelo disponíveis.

A última mas não menos importante, é que o método está esperando um parâmetro. Esse parâmetro foi anotado com @PathVariable, isso significa que a chamada ao controller deve esr da seguinte forma: nomeDaAplicação/chamada?var=teste e assim nosso método irá receber o valor teste. Faça alguns testes e repare que é possível configurar a obrigatoriedade do parâmetro, a validação do mesmo dentre outras coisas. Também poderíamos ter definido o parãmetro como @RequestParam, mas nesse caso a chamada deveria estar em um formato POST e o atributo deveria estar setado no request.


ViewResolver



A última configuração necessária para nossa aplicação funcionar é um ViewResolver. Vamos utilizar um bem simples para que possamos utilizar páginas em JSP em nossa aplicação. Para isso, basta adicionar o seguinte bean no contecto do servlet:

1
2
3
4
5
? ? id=“viewResolver”
? ? ? ?? ?class=“org.springframework.web.servlet.view.UrlBasedViewResolver”>

? ? ? ? name=“prefix” value=“/WEB-INF/jsp/”/>
? ? ? ? name=“suffix” value=“.jsp”/>
? ? >



O que fizemos, foi dizer ao view resolver, que ele deve buscar na pasta WEB-INF/jsp por nossos arquivos JSPs antes de renderizar as páginas de resposta. Também estamos dizendo, que ele deve procurar através do nome da view que o controller devolver, por exemplo, se nosso ModelAndView possuir uma view com nome pagina, o view resolver irá buscar por um arquivo com nome pagina.jsp para renderizá-lo com os atributos setados no ModelAndView.

Existem muitos tipos de view resolvers, e muitas maneiras de configurá-los, mas para uma primeira experiência com o framework essa configuração já é suficiente.

Por @Gust4v0_H4xx0r

« Entradas anteriores | Entradas recentes »

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 2791 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