logo
  • Home
  • Acerca
  • Autores
  • Faq
  • Rede
  Twitter   Feed-me! RSS!
Jul 14

[Flex & AIR] Swiz Framework – meus primeiros passos

Escrito por Erko Bridee em .NET, 1, 2009, 4, 6, Access, action, Actionscript, Adobe, Adobe Air, Adobe Flex, Air, api, aplicacao, app, AR, Artigo, as3, BI, Blazeds, blog, class, classe, código, código fonte, consultoria, control, demo, Desenvolvedor, desenvolvedores, Desenvolvimento, Desktop, Documentação, Download, empresas, event, Evento, Eventos, exemplo, explicação, facebook, flash, Flex, Flex 4, Flex4, Flexmania, fonte, for, framework, Frameworks, FullScreen, git, ide, IE, if, int, jandersonfc, jandersonfc.com, Java, Java Magazine, Links, lógica, loop, Mac, map, Mate, mg, mobile, O, on, oop, Oracle, padrão, Palestra, Partilha, pt, redeRIA, RIA, Ria’s Geral, screen, server, site, Sun, swf, Swiz Framework, tag, TAT, Tema, Tree, tv, Twitter, UI, UX, Ved, Vídeo, wave, web, XP @ 07 14th, 2010 | via http://blog.erkobridee.com | Sem comentários
Erko Bridee
? 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 »



Há certo tempo estava pensando em deixar de utilizar o Mate Framework devido a uma falta de suporte mais robusta ao desenvolvimento de aplicações em Adobe AIR, então durante o FlexMania 2010, um uma palestra que abordava o tema Flex 4 – Desenvolvendo com Portabilidade(Web, Desktop e Mobile), pude ver um uso prático e fácil do Swiz Framework que me motivou a iniciar meus estudos e uso deste framework para as futuras aplicações que serão desenvolvidas. Neste post irei compartilhar o que até aqui ajuntei de informações…


Swiz Framework: Site | @SwizFramework | Wiki


Segundo a definição do Wiki temos:

O Swiz é um framework para Adobe Flex, Flash e AIR para fornecer um completo suporte ao desenvolvimento de soluções RIA. O Swiz te proporciona:

  • Inversão de Controle
  • Injeção de Dependência
  • Tratamento de eventos e mediação
  • Um cliclo de vida simples para métodos remotos assíncronos
  • Um framework desaclopado do código da sua aplicação


Indo na contramão da maioria dos frameworks para Flex, o Swiz:

  • Não impõem o uso de nenhum padrão JEE no código da sua aplicação
  • Não repete estrutura de pastas
  • Não te força utilizar nenhuma estrutura de código predefinida
  • Não te obriga a estender nenhuma classe específica do framework

O Swiz representa o melhor das práticas aprendidas dos melhores desenvolvedores de RIA de algumas das melhoras empresas de consultoria da indústria, possibilitando assim que o Swiz seja, simples, leve e extremamente produtivo.

De início um ponto que me chamou a atenção e me agradou muito no Swiz, a documentação de como utilizar o Swiz disponível na Wiki é simples, fácil e clara, a qual recomendo a leitura. Após uma leitura, veja este exemplo de uso do Swiz [CafeTownsend-Flex4].


Links antigos que auxiliam na compreensão do Swiz Framework:

Adobe TV – Introducing Swiz [19/08/2008]

Possui uma explicação ampla sobre o framework.

Christophe Coenraets – uma aplicação simples usando o Swiz Framework e BlazeDS

Exemplo bem interessante, onde um ponto a ser observado foi como foi definido o acesso ao RemoteObject através do Swiz.

Using Swiz Part 1: Initial Setup

Conjunto de post sobre o uso do Swiz, atentar aos links relacionados do post.

Swiz in 20 minutes

Neste vídeo podemos te uma visão clara do poder e facilidade de uso do Swiz Framework e observar um detalhe que para mim é extremamente importante, nenhum código extra além da lógica da nossa aplicação, com isto o Swiz consegue ser fiel ao que se propõem…


Links recentes sobre Swiz Framework:

Jandersonfc

#flexmania 2010 – Flex 4 – Desenvolvendo com Portabilidade(Web, Desktop e Mobile)

Esta foi a palestra a qual me referi no início do post.

#flexmania 2010 – disponibilizando código fonte

Material da Palestra.

Swiz Framework

Publicações no blog abordando o assunto.

Flex & RIA  - Swiz Prototype

Swiz in Actionscript Projects (including Flash IDE projects)

Para quem tiver interesse em utilizar o Swiz Framework sem ser em um projeto Flex ou AIR é interessante a leitura desse post.



Veja também:

  • [Flex & AIR] Swiz Framework + Presentation Model : Exemplo de Projeto
  • Java Magazine 68 : Artigo sobre Adobe Flex e AIR
  • FlexMania 2010 – Adobe Flex + Oracle WebLogic 10.x
  • O que é o Adobe Flex?
  • Facebook : Aplicação desktop



Jul 13

[Vídeo] NOUS – Plataforma Social em Flex

Escrito por João Augusto em .NET, 1, 4, 6, Access, api, app, AR, AUG, blog, class, Desenvolvimento, Download, encontro, flash, Flex, for, FullScreen, ide, if, int, loop, Mac, Melhores Práticas, mg, Negócios, O, on, oop, pt, redeRIA, RIA, Ria’s Geral, screen, server, social, Software, swf, UI, uint, Vídeo, Vídeos, wave @ 07 13th, 2010 | via http://blog.joaoaugusto.com.br | Sem comentários
João Augusto
? 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 »



A título de curiosidade, abaixo está um dos vídeos promocionais do NOUS, uma plataforma social de negócios desenvolvida em Flex, que permite a adoção das melhores práticas de inovação.

Seu desenvolvimento foi iniciado em meados de 2008 e semana passada foi lançada a versão 4.0. Além disso, esse é o projeto no qual venho trabalhando nos últimos 1 ano e meio.

Quinta-feira, 15/07/10, no encontro do FUGSC, estarei falando dos desafios que enfrentamos no desenvolvimento do NOUS e como passamos por esses obstáculos.

Para saber mais sobre o NOUS, acesse www.noussoftware.com.

Jul 8

50% do software é design

Escrito por Daniel Lopes em 1, 4, 6, app, apple, AR, arte, bar, BI, blog, Botões, camp, Censo, class, cliente, código, Cotidiano, Curso, Desenvolvedor, desenvolvedores, Design, designer, egenial, Empreendimento, Emprego, empresas, exemplo, explicação, falha, flash, for, Formulário, frontend, FullScreen, gmail, ide, IE, if, int, interface, iphone, lógica, loop, Mac, Mate, Mercado, mg, O, on, oop, Pessoal, produto, Projetos, RIA, Ria’s Geral, screen, server, Software, swf, TAT, Tecnologia, Tema, Teste, UI, Ved, Vídeo, web, XP, zend @ 07 8th, 2010 | via http://blog.areacriacoes.com.br/ | Sem comentários
Daniel Lopes
? 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 »

Esta semana eu estava dando uma olhada na grade do curso de Frontend da Egenial que vai começar neste sábado. Lendo sobre o curso veio novamente aquela lembrança de como o mercado, principalmente brasileiro, é fraco em produtos agradáveis de serem usados.

Por exemplo, eu não conheço nada semelhante ao Shopify em português, muito menos algo como o Basecamp. Que existem concorrentes brasileiros existem, mas por que todos são extremamente inferiores e conseguem até gerar ódio dos usuários?

Não entendo e nem quero entender nada de design

Muitos desenvolvedores criam seus projetos, abrem empresas, montam startups ou entregam produtos para clientes sem ter a consciência que talvez o seu código suado não tenha valor nenhum.

Alegando o contrário, você vai dizer que fez a analise do que era necessário, possui testes, empregou as melhores tecnologias, conversou com o cliente em todas as etapas e agora está tudo exatamente como combinado.

Porém existe uma coisa que a grande maioria das pessoas da área de TI não se preocupa. A interface, ou seja, como será usado seu sistema.

Amor a primeira vista

Em um produto material (não virtual) várias coisas contam, por exemplo a textura, como as coisas funcionam, a matéria prima empregada, como foi empregada, os encaixes e etc. O contato com o produto é físico e apenas por tocar um produto você consegue dizer se ele é uma porcaria ou não e se tem utilidade ou não.

No caso de produtos virtuais esse contato não existe e o mais próximo que temos da situação acima é contato com a interface do sistema.

Agora imagine o seu código lindo e maravilhoso embrulhado em telas cinzas e com 50 campos de formulário sem nenhuma lógica ou explicação?

Qual reação o usuário terá? Com um único olhar ele vai entender isso tudo como uma grande porcaria que é obrigado a usar pois faz parte do seu cotidiano. Quantas vezes você não vê pessoas reclamando que é uma falha no sistema? A grande maioria das vezes são apenas dificuldades que esta pessoa está tendo para entender como as coisas devem fluir naquele emaranhado de botões e campos.

Pensar como as telas vão ser desenvolvidas, quais são os passos lógicos que o usuário deve tomar, quais telas devem existir e quais não devem é sim parte do trabalho do desenvolvedor.

Para entregar um produto de real qualidade para quem vai usar seu sistema todos os dias é necessário que todas as pessoas da equipe entendam que a interface e o design são no mínimo 50% do produto e que o usuário deve abrir seu sistema e se sentir confortável. É assim que você se sente ao ligar seu Macbook ou seu iPhone. Você também não usa seu Gmail com medo de fazer uma bobeira por não saber onde está clicando. No seu produto não deve ser muito diferente.

Você não precisa se tornar um exímio desenhista e criar logos e ícones mas você precisa ter o censo crítico para identificar que seu produto é uma porcaria ou uma maravilha. Também deve ser capaz de conversar com os designers da sua equipe de igual para igual se aquela barreia que existe na maioria das empresas.

Design de UI NÃO É ARTE!

Design de software é quase nada de trabalho artístico e muito, mas muito, trabalho racional. Se ainda está relutante se deve entender algo sobre design ou não eu recomendo fortemente este vídeo para você entender porque um negrito em local é mais importante que um itálico:

<object height=”360″ width=”540″><param /><param /><param /><embed src=”http://vimeo.com/moogaloop.swf?clip_id=6702766&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=0&amp;show_portrait=0&amp;color=b30000&amp;fullscreen=1″ height=”360″ width=”540″></embed></object>

Por onde começo?

Com tudo isto em mente, se tornar um “Devgner” (como costuma dizer Lee Brimelow) é extremamente complexos (se ainda não viu o vídeo acima veja logo).

Voltando ao começo deste post, este curso de Frontend é algo que venho sugerindo ao pessoal da Egenial e conversando com eles a bastante tempo por todos estes motivos acima. Recomendo que você comece fazendo os seus softwares melhores através deste primeiro passo com o curso.

Jun 18

MultiDraggable Gesture API

Escrito por Mauro Martins em .NET, 1, 1009, 4, 6, Access, Adobe, api, app, AR, blog, class, Dica, Download, email, exemplo, Experiências, facebook, flash, Flash / Flex, for, FullScreen, gmail, Google, ide, IE, image, Inspiração, int, Java, Javascript, linkedin, Links e sugestões, loop, Mac, map, mg, multitouch, O, on, oop, PHP, pt, RIA, Ria’s Geral, screen, server, social, swf, TAT, Tech, Twitter, UI, uint, UX, Vídeo, wave, window, windows, windows 7, XP, yahoo @ 06 18th, 2010 | via http://imauro.com/blog/ | Sem comentários
Mauro Martins
? 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 Lee Brimelow colocou um vídeo no seu blog sobre uma nova API de Flash que permite interpretar múltiplos gestos em computadores que utilizem o Windows 7. Muito interessante, uma vez que é notória a fluidez e a framerate a que corre o exemplo no vídeo seguinte:

Sequence 01 from Lee Brimelow on Vimeo.

  • Blog this on Blogger
  • Subscribe to the comments for this post?
  • Share this on del.icio.us
  • Digg this!
  • Share this on Facebook
  • Email this via Gmail
  • Post on Google Buzz
  • Share this on LinkedIn
  • Email this to a friend?
  • Post this to MySpace
  • Share this on Reddit
  • Stumble upon something good? Share it on StumbleUpon
  • Share this on Technorati
  • Tweet This!
  • Buzz up!
  • Email this via Yahoo! Mail



Mai 13

Vencedor da bolsa do Imersão

Escrito por Daniel Lopes em 1, 4, 6, AR, class, Design, FullScreen, loop, mg, O, oop, Pessoal, rails, RIA, Ria’s Geral, ruby, Ruby e Rails, screen, server, swf, Vídeo, web @ 05 13th, 2010 | via http://blog.areacriacoes.com.br/ | Sem comentários
Daniel Lopes
? 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, segue o vídeo com o resultado do sorteio:

Mai 12

O Que é um Loop?

Escrito por Eduardo Kraus em AR, explicação, Flex, for, loop, O, on, oop, problema, RIA, Ria’s Geral, UI, XP @ 05 12th, 2010 | via http://blog.mxml.com.br | Sem comentários
Eduardo Kraus
? 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 »

Para quem não conhece o conceito de LOOP, trata-se de uma terminologia assim nomeada por estudiosos de informática para definir uma confusão criada e que não possui uma explicação concreta para solução do problema.
Bem, vou tentar explicar em poucas palavras esta famosa terminologia:
Diz-se que um programa de computação “entrou em [...]

Mai 2

Flash e Multitouch

Escrito por Mauro Martins em .NET, 1, 4, 6, Access, action, Actionscript, ActionScript 3, Actionscript 3.0, app, AR, BI, blog, class, Design, Dica, efeito, facebook, flash, Flash / Flex, Flash 10, for, FullScreen, Google, IE, Inspiração, int, Java, Javascript, linkedin, Links e sugestões, loop, map, menu, mg, multitouch, O, on, oop, PHP, player, problema, problemas, programação, pt, Review, RIA, Ria’s Geral, screen, server, social, social media, swf, TAT, Touch, Twitter, UI, Vídeo, wave, yahoo @ 05 2nd, 2010 | via http://imauro.com/blog/ | Sem comentários
Mauro Martins
? 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 »

Já faz algum tempo desde que escrevo no blog! Tenho estado com muitos problemas e a estudar não tanto a plataforma Flash mas sim arquitecturas de aplicações, modelos de programação etc.

Deixo aqui um vídeo que vi e que achei extremamente interessante sobre as novas capacidades do Flash 10.1 e a sua capacidade multitouch. Não é nada de novo, uma vez que já tínhamos visto várias bibliotecas escritas em ActionScript 3.0 para este efeito. No entanto, desta vez, o novo motor já vem inserido no player e não é necessário nada exterior às bibliotecas core.

Isto vem após uma brilhante (mais uma) infundada acusação do Steve Jobs “Flash was designed for PCs using mice, not for touch screens using fingers.”

É esta a melhor forma dos programadores de Flash defenderem a sua plataforma! Mostrando que 90% das acusações que andam a ser atribuidas à plataforma são, de facto, de pessoas que estão mal informadas.

Sim, Steve, o Flash TEM multitouch!

PepsiCo Social Media Visualization from StruckAxiom on Vimeo.

  • Share this on del.icio.us
  • Digg this!
  • Stumble upon something good? Share it on StumbleUpon
  • Share this on Facebook
  • Tweet This!
  • Subscribe to the comments for this post?
  • Share this on LinkedIn
  • Share this on Reddit
  • Post this to MySpace
  • Share this on Tumblr
  • Buzz up!
  • Share this on FriendFeed
  • Post this to Posterous
  • Clip this to Evernote
  • Promote this on Orkut
  • Blog this on Blogger



Abr 16

Criando um componente de paginação – Parte 02

Escrito por Fabiel Prestes em 1, 4, 6, abas, action, Actionscript, Actionscript3, AR, arte, Artigo, Banco de Dados, bar, BI, Bindable, blog, boolean, catch, class, classe, classes, código, código fonte, collection, Componente, configuração, dados, DataProvider, demo, Design, Design Pattern, email, err, erro, error, eval, event, EventListener, finally, flash, flash builder, Flex, Flex Fast Code, fonte, for, function, game, gmail, ide, IE, if, image, int, Java, lista, loop, map, mapa, mg, MXML, mysql, Number, O, on, oop, override, pattern, Pessoal, print, Projetos, pt, rest, RIA, Ria’s Geral, RoR, SDK, server, serviço, servidor, state, string, TAT, Tema, try, Tutorial, UI, uint, update, UX, XML, zend @ 04 16th, 2010 | via http://www.fabielprestes.com.br | Sem comentários
Fabiel Prestes
? 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 »

Salve salve pessoal,

Depois de um enorme jejum aqui no blog estou vontanto trazendo a segunda parte do componente de paginação. Recebi alguns email indagando o porque da demora da continuação do artigo. Então pessoal nestes ultimos meses fiquei meio ocupado com o trabalho peguei uns projetos e estes me tomaram grande parte do meu tempo.

Mas deixando o blá blá blá de lado vamos realmente no que interessa ;)

Na primeira parte do artigo desenvolvemos um componente de paginação estremamente estático, este apenas simulava uma paginação, ou seja, recebia uma lista completa do server-side e ficava então didindo a lista na memória. Todos sabemos que isto é realmente inviável em grande aplicações, pois imaginemos receber uma lista com mais de 1000 registros, com certeza o server-side ou o client iria lançar algum erro.

Nesta situação temos de fazer com que o server-side tenha toda a responsabilidade de paginar e retornar apenas os dados que informamos no filtro, é isso que irei abordar nesta segunda parte do artigo.

Requisitos:

* Ter Flex/Flash Builder ou outra IDE.
* Ter SDK 3 ou superior.
* Conhecimento em ActionScript e Mxml.
* Mysql Instalado e conhecimento básico
* Jdk 5 ou superior

Nível de dificuldade: 8.0

Passo 1:

Iremos criar um projeto Java e suas configurações básica para se conectar com o Flex, não irei demonstrar isso passo a passo já que este tema já foi abordado em um artigo anterior.

Passo 2:

Com o projeto criado e configurado iremos criar as seguintes classes de configuração e conexão com o banco de dados Mysql.
A única responsábilidade desta classe é de abrir e fechar uma conexao com o banco de dados.

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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
package com.imaster;
 
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
 
/**
 *
 * @author Fabiel Prestes
 *
 */
public class ConnectionManager {
 
	private static final String dburl = "jdbc:mysql://localhost:3306/imaster_paginacao";
    private static final String dbdriver = "com.mysql.jdbc.Driver";
    private static final String usuario = "root";
    private static final String senha = "root";
 
 
    public static Connection getConexao() throws Exception {
        try {
        	Connection conn = null;
            // carregamento do driver
            Class.forName(dbdriver);
            // Obtendo a conexao
            conn = DriverManager.getConnection(dburl, usuario, senha);
            System.out.println(" <<< Obtendo conexao >>>");
            return conn;
 
        } catch (ClassNotFoundException e) {
            String errorMsg = "Driver nao encontrado";
            throw new Excecoes(errorMsg, e);
        } catch (SQLException e) {
            String errorMsg = "Erro ao obter a conexao";
            throw new Excecoes(errorMsg, e);
        }
    }
 
    public static void closeAll(Connection conn) {
        try {
            if (conn != null) {
                conn.close();
            }
        } catch (Exception e) {
            String errorMsg = "Nao foi possivel fechar a conexao com o banco";
            Excecoes.print(e, errorMsg);
        }
    }
 
    public static void closeAll(Connection conn, Statement stmt) {
        try {
            if (stmt != null) {
                stmt.close();
            }
        } catch (Exception e) {
            String errorMsg = "Nao foi possivel fechar o Statement";
            Excecoes.print(e, errorMsg);
        }
        closeAll(conn);
    }
 
    public static void closeAll(Connection conn, Statement stmt, ResultSet rs) {
        try {
            if (rs != null) {
                rs.close();
            }
        } catch (Exception e) {
            String errorMsg = "Nao foi possivel fechar o Resultset";
            Excecoes.print(e, errorMsg);
        }
        closeAll(conn, stmt);
    }
 
}

Passo 3:

Iremos criar a classe AlunoDAO, está irá ter três métodos: Um para inserir alunos, um para listar os alunos e um outro para contar o total de alunos.

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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
package com.imaster;
 
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
 
/**
 *
 * @author Fabiel Prestes
 *
 */
public class AlunoDAO {
 
	private Connection conn = null;
	private Statement stmt = null;
	private ResultSet rs = null;
 
	public void salvar(Aluno aluno) throws Exception {
		try {
			// criando Conexao
			conn = ConnectionManager.getConexao();
			stmt = conn.createStatement();
 
			// comando sql
			String sql = "insert into aluno (nome, email) values ('"+aluno.getNome()+"', '"+aluno.getEmail()+"')";
 
			stmt.executeUpdate(sql);
 
			System.out.println(" <<< aluno inserido com sucesso >>>");
		} catch (SQLException e) {
			Excecoes.print(e,"Nao foi possivel salvar o aluno na base de dados.");
		} finally {
			// Finalizar o statement e a conexao usando a classe ConnectionManager
			ConnectionManager.closeAll(conn, stmt);
		}
	}
 
	public int getTotalAlunos() throws Exception {
		int totalAlunos = 0;
 
		try{
			// comando sql
			String sql = "SELECT COUNT(*) FROM aluno";
 
			// criando Conexao
			conn = ConnectionManager.getConexao();
			stmt = conn.createStatement();
			rs = stmt.executeQuery(sql);
 
			while(rs.next()){
				totalAlunos = rs.getInt(1);
			}
		} catch (SQLException e) {
			Excecoes.print(e,"Nao foi possivel recuperar o total de alunos na base de dados.");
		} finally {
			// Finalizar o statement e a conexao usando a classe ConnectionManager
			ConnectionManager.closeAll(conn, stmt);
		}
		return totalAlunos;
	}
 
	public List<Aluno> listarAlunos(int pagina, int totalRegistros) throws Exception {
		List<Aluno> alunos = new ArrayList<Aluno>();
 
		try{
			// comando sql
			String sql = "SELECT * FROM aluno LIMIT "+pagina+","+totalRegistros;
 
			// criando Conexao
			conn = ConnectionManager.getConexao();
			stmt = conn.createStatement();
			rs = stmt.executeQuery(sql);
 
			Aluno aluno = null;
 
			while(rs.next()){
				aluno = new Aluno();
				aluno.setId(rs.getInt("id"));
				aluno.setNome(rs.getString("nome"));
				aluno.setEmail(rs.getString("email"));
 
				alunos.add(aluno);
			}
		} catch (SQLException e) {
			Excecoes.print(e,"Nao foi possivel recuperar o total de alunos na base de dados.");
		} finally {
			// Finalizar o statement e a conexao usando a classe ConnectionManager
			ConnectionManager.closeAll(conn, stmt);
		}
		return alunos;
	}
}

Passo 4:

Com o DAO criado necessitamos de uma classe para acessar e chamar os metodos e devolve-los ao Client. Esta classe realmente simples apenas recebe uma requisição do Flex e retorna o resultado da paginação.

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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
package com.imaster;
 
/**
 *
 * @author Fabiel Prestes
 *
 */
public class PaginacaoService {
 
	private AlunoDAO alunoDAO;
 
	public AlunoDAO getAlunoDAO(){
		if(alunoDAO == null){
			alunoDAO = new AlunoDAO();
		}
		return alunoDAO;
	}
 
	public Paginacao listarDadosPaginados(int pagina, int totalRegistros) throws Exception {
		try {
			Paginacao paginacao = new Paginacao();
			paginacao.setTotalDados(getAlunoDAO().getTotalAlunos());
			paginacao.setListaDados(getAlunoDAO().listarAlunos(pagina, totalRegistros));
			return paginacao;
		} catch (Exception e) {
			throw e;
		}
	}
 
	public static void main(String[] args) throws Exception {
		PaginacaoService ps = new PaginacaoService();
		System.out.println(ps.getAlunoDAO().getTotalAlunos());
//		ps.getAlunoDAO().salvar(new Aluno("Fabiel Prestes", "fabiel.prestes@gmail.com"));
//		ps.getAlunoDAO().salvar(new Aluno("Joao Prestes Neto", "joao.prestes@gmail.com"));
//		ps.getAlunoDAO().salvar(new Aluno("Dom Pedro I", "domI@gmail.com"));
//		ps.getAlunoDAO().salvar(new Aluno("Dom Pedro II", "donII@gmail.com"));
//		ps.getAlunoDAO().salvar(new Aluno("Luiz Inacio", "luiz@inacio.com"));
//		ps.getAlunoDAO().salvar(new Aluno("Ana Carolina", "ana@gmail.com"));
//		ps.getAlunoDAO().salvar(new Aluno("Ana Beatriz", "anabeatriz@gmail.com"));
//		ps.getAlunoDAO().salvar(new Aluno("Antonio Carlos", "antonio@gmail.com"));
//		ps.getAlunoDAO().salvar(new Aluno("Aline B. R.", "aline@gmail.com"));
//		ps.getAlunoDAO().salvar(new Aluno("Cecilia Duarte", "cecilia@gmail.com"));
//		ps.getAlunoDAO().salvar(new Aluno("Maria Isabel", "mariaisabel@gmail.com"));
//		ps.getAlunoDAO().salvar(new Aluno("Carlos Renato", "carlosrenato@gmail.com"));
//		ps.getAlunoDAO().salvar(new Aluno("Susana", "susana@gmail.com"));
//		ps.getAlunoDAO().salvar(new Aluno("Monica", "monmica@gmail.com"));
//		ps.getAlunoDAO().salvar(new Aluno("Cebolinha", "cebolinha@gmail.com"));
//		ps.getAlunoDAO().salvar(new Aluno("Chico Bento", "chicobento@gmail.com"));
//		ps.getAlunoDAO().salvar(new Aluno("Magali", "magali@gmail.com"));
//		ps.getAlunoDAO().salvar(new Aluno("Anginho", "anginho@gmail.com"));
//		ps.getAlunoDAO().salvar(new Aluno("Cascao", "cascao@gmail.com"));
//		ps.getAlunoDAO().salvar(new Aluno("zeca Urubu", "eca@gmail.com"));
//		ps.getAlunoDAO().salvar(new Aluno("Pica Pau", "picapau@gmail.com"));
//		ps.getAlunoDAO().salvar(new Aluno("zé Carioca", "cariona@gmail.com"));
//		ps.getAlunoDAO().salvar(new Aluno("Tio Patinhas", "tiopatinhas@gmail.com"));
//		ps.getAlunoDAO().salvar(new Aluno("Xuxa", "xuxa@gmail.com"));
//		ps.getAlunoDAO().salvar(new Aluno("Sheila", "sh@gmail.com"));
//		ps.getAlunoDAO().salvar(new Aluno("Hebe Camargo", "hebe@gmail.com"));
//		ps.getAlunoDAO().salvar(new Aluno("Jonas", "jonas@gmail.com"));
//		ps.getAlunoDAO().salvar(new Aluno("Igor", "@gmail.com"));
//		ps.getAlunoDAO().salvar(new Aluno("Magnum", "@gmail.com"));
//		ps.getAlunoDAO().salvar(new Aluno("Princila", "@gmail.com"));
//		ps.getAlunoDAO().salvar(new Aluno("Maria Cecilia", "@gmail.com"));
 
 
	}
}

Passo 5:

Com a nossa classe de serviço pronta precisamos criar um DTO/VO que represente a paginação em si. Neste DTO iremos ter apenas duas propriedades: totalDados e listaDados. O flex irá utilizar os dados contidos neste DTO para montar toda a estrutura de paginação.

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
38
39
40
41
42
43
44
package com.imaster;
 
import java.util.List;
 
/**
 *
 * @author Fabiel Prestes
 *
 */
public class Paginacao {
 
	private int totalDados;
	private List<? extends Object> listaDados;
 
	public Paginacao(){
 
	}
 
	/**
	 * @return the totalDados
	 */
	public int getTotalDados() {
		return totalDados;
	}
	/**
	 * @param totalDados the totalDados to set
	 */
	public void setTotalDados(int totalDados) {
		this.totalDados = totalDados;
	}
	/**
	 * @return the listaDados
	 */
	public List<? extends Object> getListaDados() {
		return listaDados;
	}
	/**
	 * @param listaDados the listaDados to set
	 */
	public void setListaDados(List<? extends Object> listaDados) {
		this.listaDados = listaDados;
	}
 
}

Passo 6:

Segue a classe Aluno que é simplesmente um DTO/Bean e a classe Excecoes que apenas realiza um tratamento nas Exceptions geradas.

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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
package com.imaster;
 
public class Aluno {
 
	private Integer id;
 
	private String nome;
 
	private String email;
 
	public Aluno(){
 
	}
 
	public Aluno(String nome, String email){
		this.nome = nome;
		this.email = email;
	}
 
	/**
	 * @return the id
	 */
	public Integer getId() {
		return id;
	}
 
	/**
	 * @param id the id to set
	 */
	public void setId(Integer id) {
		this.id = id;
	}
 
	/**
	 * @return the nome
	 */
	public String getNome() {
		return nome;
	}
 
	/**
	 * @param nome the nome to set
	 */
	public void setNome(String nome) {
		this.nome = nome;
	}
 
	/**
	 * @return the email
	 */
	public String getEmail() {
		return email;
	}
 
	/**
	 * @param email the email to set
	 */
	public void setEmail(String email) {
		this.email = email;
	}
 
}
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
/**
 *
 */
package com.imaster;
 
/**
 * @author Fabiel
 *
 */
public class Excecoes extends Exception{
 
	private static final long serialVersionUID = 1L;
 
	public Excecoes(String mensagem, Exception e) {
        super(mensagem, e);
    }
 
    public Excecoes(String mensagem) {
        super(mensagem);
    }
 
    public static void print(Exception e, String mensagem) {
        System.out.println("==============Exception===============");
        System.out.println(mensagem);
        System.out.println("PrintStackTrace: ");
        e.printStackTrace();
        System.out.println("============End Exception=============");
    }
 
    public void print() {
        System.out.println("==============Exception===============");
        System.out.println(getMessage());
        System.out.println("PrintStackTrace: ");
        getCause().printStackTrace();
        System.out.println("============End Exception=============");
    }
}

Chegamos ao final da configuração do servidor, neste não irei me apegar a nenhum design pattern e nem a bons modos de implentação já que o foco aqui é apenas mostrar como se faz para utilizar a paginação via sql.

Agora no projeto Flex que foi criado na parte I não iremos alterar muita coisa, iremos alterar apenas a classe Paginacao.as e criar uma classe chamada PaginacaoVO.as que é o espelho do nosso DTO Paginacao.java.

Na classe paginação inseri algumas anotations:

  • @Novo quando tive de criar metodos e variaveis
  • @Alterado quando apenas alterei um algoritimo de algum método
  • @Removido quando exlcui alguma variável ou método

Abaixo irei colocar alguns trechos que tive que modificar para a segunda parte do arqtigo. Mais já irei adiantando que apenas modifiquei uma ou outra coisa.

1
2
/** @Novo */
private var remotePaginacao:RemoteObject;
1
2
3
/* @Removido
[Bindable]
private var _listaBaseAux:ArrayCollection; */
1
2
/** @Novo */
private var _atualizarBarraBotoes:Boolean = true;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/**
* @Alterado
*
*/
public function Paginacao() {
super();
 
remotePaginacao = new RemoteObject();
remotePaginacao.destination = destination;
remotePaginacao.addEventListener(FaultEvent.FAULT, function (event:FaultEvent):void{
Alert.show(event.toString());
});
 
this.addEventListener(FlexEvent.CREATION_COMPLETE, onCreate, false, 0, true);
}
1
2
3
4
5
6
7
8
/**
* @private
* @Novo
*
*/
private function onCreate(evt:FlexEvent):void{
this.remotePaginacao.listarDadosPaginados(0, totalPorPagina);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/**
* @private
* @Novo
* @param evt
*
*/
private function listarDadosPaginadosResult(evt:ResultEvent):void{
totalDados = PaginacaoVO(evt.result).totalDados;
listaBase = PaginacaoVO(evt.result).listaDados;
 
if(_atualizarBarraBotoes){
configurarBotoesPagina();
} else {
this.listaAlvo.dataProvider = listaBase;
}
}
1
2
3
4
5
6
7
8
9
10
/**
* @Removido
*
*/
override public function invalidateProperties():void{
super.invalidateProperties();
 
/* Inicializa a configuração da paginação */
configurarBotoesPagina();
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/**
* @private
* @Alterado
* Fica escutando quando o usuario trocou o total de interva de dados a ser amostrado na lista
* @param evt
*/
private function trateTrocaIntervalo(evt:ListEvent):void{
totalPorPagina = cbIntevalo.selectedItem.value;
 
/* INICIO: @Novo*/
_atualizarBarraBotoes = true;
 
this.remotePaginacao.listarDadosPaginados(0, totalPorPagina);
/* FIM: @Novo*/
}
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
38
39
40
41
42
43
/**
* @private
* @Alterado
* Configura e renderiza os dados Base para ser amostrado na tela levendo-se em consideração
* o intervalo passado.
* @param intervloIncial
*
*/
private function configurarListaNaPagina(bpAtual:BotaoPagina):void{
/* INICIO: @Removido
_listaBaseAux = new ArrayCollection();
 
//para cada Loop é copiado o objeto que se encontra no intervalo passado como parametro
 
for(var j:int = 0; j &lt; _totalPorPagina; j++){
if(bpAtual.intervaloInicial + j &lt; _totalDados)
_listaBaseAux.addItem(_listaBase.getItemAt(bpAtual.intervaloInicial + j));
}
FIM: @Removido */
 
/* Configurando os botoes de avançar e retornar */
if(bpAtual.pagina &gt; 1){
configBpPaginaAnterior();
} else {
configBpPaginaAnterior(false);
}
 
if(bpAtual.pagina == totalBotoes){
configBpProximaPagina(false);
} else {
configBpProximaPagina();
}
 
/* INICIO: @Removido
//Define o provider clonado e define na ListBase
this._listaAlvo.dataProvider = _listaBaseAux;
* FIM: @Removido */
 
/* INICIO: @Novo */
_atualizarBarraBotoes = false;
this.remotePaginacao.listarDadosPaginados((bpAtual.pagina - 1) * totalPorPagina, totalPorPagina);
/* FIM: @Novo */
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/**
* @Alterado
* Define a lista que será utilizada para exibir na paginacao
* @param value
*
*/
public function set listaBase(value:ArrayCollection):void{
_listaBase = value;
/*
_listaBase = value;
if(_listaBase){
_totalDados = _listaBase.length;
}
*/
}

É isso aí pessoal todas as alterações que tive que fazer para que o componente de paginação funciona-se junto ao server-side.

Estou disponibilizando o código fonte de ambos os projetos para vocês testarem.

Agora é só esperarem a terceira parte do tutorial, onde iremos refinar o componente, aplicar filtros e ordenação dos dados.

Código Fonte

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

Mar 2

Ganhador da promoção

Escrito por Daniel Lopes em 1, 4, 6, app, AR, BI, blog, class, comunicação, Curso, Design, egenial, FullScreen, loop, mg, O, on, oop, rails, RIA, Ria’s Geral, screen, server, swf, tag, TAT, Twitter, UI, vencedor, Vídeo, web @ 03 2nd, 2010 | via http://blog.areacriacoes.com.br/ | Sem comentários
Daniel Lopes
? 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 »

Ontem fiz o sorteio da promoção da bolsa para o curso de Rails. Veja o vídeo do sorteio e quem foi o premiado.

Ontem fiz o sorteio da promoção da bolsa para o curso de Rails. Para a realização do sorteio foi utilizado o Twicket, veja abaixo o vídeo com o resultado:

O vencedor foi o Rosano Cangussu com o tweet: http://bit.ly/dDePXO

A aplicação usada para o sorteio foi um pequeno projeto realizado em algumas horas utilizando o Sinatra. A app faz a comunicação com o Twitter e retorna o ganhador através dos tweets únicos do usuário com a hashtag escolhida.

Quem quiser conhecer a aplicação o link é: http://twicket.heroku.com/

Fev 26

Como deixar suas apps até 80% mais rápidas

Escrito por Daniel Lopes em .NET, 1, 2009, 4, 6, Apresentação, AR, class, código, código fonte, Curso, Design, Dica, Dicas, egenial, exemplo, Exemplos, fonte, for, frontend, FullScreen, gc, git, Gravação, ide, IE, int, loop, map, mg, O, on, oop, Otimização, problema, problemas, pt, rails, railsforkids, railsmg, RIA, Ria’s Geral, ruby, Ruby e Rails, screen, Screencast, server, swf, UI, Vídeo, web @ 02 26th, 2010 | via http://blog.areacriacoes.com.br/ | Sem comentários
Daniel Lopes
? 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 mês passado eu fiz uma apresentação no nosso grupo local de Ruby, o RailsMG, falando sobre otimização de frontend. As dicas da apresentação servem para qualquer linguagem, mas eu mostro como solucionar cada problema usando o Rails.

Como tive alguns problemas na gravação e para editar o que foi filmado no dia acabou não ficando muito legal eu resolvi regrar em formato de screencast. O vídeo tem por volta de 50 minutos e mostra os conceitas da otimização e como aplicar na prática em um projeto Rails.

Quem estiver interessado em entrar no mundo do Rails não deixe de participar do curso da eGenial que inicia agora dia 01/03. Para mais detalhes acesse: http://www.egenial.com.br/cursorails

No mês passado eu fiz uma apresentação no nosso grupo local de Ruby, o RailsMG, falando sobre otimização de frontend. As dicas da apresentação servem para qualquer linguagem, mas eu mostro como solucionar cada problema usando o Rails.

Como tive alguns problemas na gravação e para editar o que foi filmado no dia acabou não ficando muito legal eu resolvi regrar em formato de screencast. O vídeo tem por volta de 50 minutos e mostra os conceitas da otimização e como aplicar na prática em um projeto Rails.

A apresentação é bem parecida com a que apresentei no RailsForKids de 2009 mas com atualizações e novos slides (que você pode baixar separadamente aqui).

O código fonte dos exemplos está disponível no meu GitHub em github.com/danielvlopes/optimizing_rails_frontends e conta com uma versão usando o asset_packager e outra usando o jammit.

« 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