By Felipe Saab

Algo um tanto quanto comum em aplicações de médio / grande porte é o agendamento de tarefas.
Exemplos: toda madrugada atualizar alguns registros que dependam de data (ex: contratos atrasados), todos os dias às 20:00h enviar e-mail para os clientes que façam aniversários no dia, todo domingo das 18:00h até 23:59h atualizar o data warehouse (DW) da empresa com as vendas da semana.
Surgem muitas e muitas idéias e possibilidades quando pensamos no agendamento de tarefas. Legal, na visão do cliente e do seu gerente é uma grande maravilha (de fato, realmente é) mas ai chega um requisito na tua mesa te falando pra magicamente fazer isso “pra ontem”.
E agora? Agora o Java Simples está aqui pra te ajudar!
Vamos criar um projeto utilizando o agendamento de tarefas provido pelo Spring pois é simples de usar e poderoso o suficiente para resolver a maioria das necessidades quando o assunto é agendamento.
Por que não utilizar o Quartz?
Pois é uma ferramenta incrivelmente robusta que provê funcionalidades como suporte para clusterização e transações JTA. Na boa, na maioria dos casos o Quartz é um ferrari pra comprar pão na esquina – como dizia uma professora que tive.
Vamos manter as coisas simples até que seja realmente necessário complicá-las!
* Mas eu confesso, a imagem do post é do site do Quartz… hehehe
Read more »
By Felipe Saab
![java-flash-icon[1]](http://www.javasimples.com.br/wp-content/uploads/2011/04/java-flash-icon1.png)
Hoje iremos abordar uma integração (que eu particularmente acho) fantástica: Java e FLEX (cuja versão mais atual se chama Flash Builder 4).
A primeira grande (super, ultra, …) vantagem que me vem na cabeça quando falo deste assunto é a facilidade para criar belas interfaces. Eu sou uma negação quando o assunto é criar interfaces, design me dá arrepios…
Outro ponto que é um grande vantagem é que toda a interface roda em cima do Flash, ou seja, basta ter o flash instalado no navegador e é certeza que o programa vai abrir exatamente do jeito que você o projetou! Não dá pau de navegador pra navegador!!!! Quem meche com CSS sabe do que eu estou falando, tua página está perfeita no Firefox e quando abre ela no IE dá até medo. Hahahaha quem nunca passou por isso que atire a primeira pedra.
Enfim, veremos como é possível ter uma interface fácil de desenvolver e ao mesmo tempo amigável para o usuário final com um backend poderosíssimo rodando o nosso bom e (não tão) velho Java e todos os frameworks que estamos acostumados a usar, como Spring e Hibernate.
Read more »
By Felipe Saab
Antes de começarmos mais um post da série de tutoriais sobre o Spring Framework eu sugiro a leitura dos posts anteirores (caso você ainda não tenha conhecimento dos assuntos abordados):
Assumindo então que agora você já sabe sobre o Spring, vamos ver como ele facilita o uso do framework de mapeamento objeto-relacional Hibernate (versão 3.x).
OBS: Irei comentar detalhadamente apenas coisas relacionadas ao Spring, ou seja, espero que você já possua o conhecimento necessário do Hibernate.
Apenas para lembrarmos como o Spring tenta padronizar o acesso a dados em uma base de dados vamos dar uma olhada na imagem do post anterior (retirada do livro Spring in Action 2, Manning 2008):

Interpretando a figura a gente consegue chegar em algo assim: o nosso objeto responsável pelas operações de manipulação de dados irá utilizar um template (fornecido pelo Spring) que saiba interagir com o Hibernate (que conste no classpath e cuja versão seja 3.x) e que irá utilizar um DAO que saiba se comunicar com a base de dados (um data source).
Read more »
By Felipe Saab
Bem vindo leitor a mais um post da série Spring Framework.
Caso você ainda não leu os posts anteriores, por favor dê um pulinho bem rápido neles:
Vamos ao nosso próximo assunto então: JDBC e como o Spring facilita esse cara pra gente!

Tirando essa imagem do livro Spring in Action 2 (Manning, 2008) nós já conseguimos ver bem por cima como que o Spring pretende acessar de maneira padronizada a base de dados (Hitting the database) através de um objeto de acesso aos dados (DAO), um template (provido pelo próprio Spring) e caso nós quiséssemos, o Spring também oferece suporte padrão para alguns frameworks de persistência (será um dos próximos artigos desta série).
Tudo muito legal, muito bonito! Vamos tentar seguir este modelinho porque ele é bem bonitinho e vai nos ajudar um pouco. Apenas avisando que o jeito que descreverei neste tutorial não é o único jeito de acessar os dados através do seu driver JDBC, porém é um jeito que eu achei bem interessante e que vale a pena todos sabermos um pouquinho… =]
Read more »
By Felipe Saab
Quem é dessa área e nunca ouviu falar de Spring Framework por favor levante a mão………….. Ótimo, todo mundo pelo menos já ouviu falar desse tal de Spring.
Durante esta série de tutoriais eu vou demonstrar o que é, pra que server e como vc pode utilizar o Spring para facilitar seus projetos.
Primeiramente, o que é esse tal de Spring afinal de contas? Spring é um framework que propicia um container para sua aplicação, ou seja, sua aplicação roda em cima do container do Spring. Tal container provê principalmente a Injeção de Dependência (ou Inversão de Controle, como era conhecido anteriormente) e a Programação Orientada a Aspectos.
Nesta primeira parte eu vou falar sobre o padrão Injeção de Dependência e os benefícios que ele provê. Vamos lá então:
Read more »
By Felipe Saab
Antes que alguém venha dizer: ‘Olha o título, esse cara num sabe nada!’ ou ‘DefaultTableModel extends AbstractTableModel!! Asshole!!!’ eu já vou dizendo: Eu sei que DefaultTableModel herda de AbstractTableModel, a ideia do título é abandonar a DefaultTableModel e criar suas próprias classes utilizando os métodos da AbstractTableModel do jeito que nos servir melhor.
Dito isso, vamos ao assunto de hoje: ‘DefaultTableModel e o porque de não utilizá-la’.
Quem já programou utilizando a API Swing e nunca utilizou a JTable que atire a primeira pedra.
Agora, quem já usou JTable e nunca utilizou a DefaultTableModel pode atirar pedras a vontade!
Aqui no blog mesmo… Eu já utilizei DefaultTabelModel em alguns posts. Mas pois bem, vamos abolir essa má prática. Seguem alguns motivos do porque não devemos utilizar a DefaultTableModel:
1. É mais difícil que escrever seu próprio TableModel;
2. É mais lento (usa classes sincronizadas);
3. Ocupa mais espaço em memória (duplica seus dados);
4. Deixa o código mais confuso e difícil de manter;
5. Usa casts inseguros;
6. Força que você tenha que exibir informações desnecessárias (como o ID) na tabela, ou controlar o ID numa lista separada;
7. Faz a sua mulher te deixar, o leite da sua geladeira azedar, e pessoas apontarem o dedo para você na rua.
Motivos muito bem explicados pelo ViniGodoy neste post do GUJ.
Mas se a DefaultTableModel é tão ruim assim, o que devemos fazer? Tudo se resume a uma classe: AbstractTableModel.
Read more »
By Felipe Saab
Web Services (Serviços Web) são softwares que ficam esperando requisições de outros softwares. Uma vez que essas requisições são recebidas, é identificado o serviço que está sendo requisitado, o serviço é executado e finalmente a resposta é devolvida para quem pediu.
Em um resumo bem grosso, isso é um web service. Um programa que executa um método e devolve a resposta pra outro programa que pediu.
Por que eles são tão famosos? Uma das vantagens é a independência de linguagem, ou seja, um web service implementado em Java pode muito bem ser consumido (termo comum quando se fala em web services, equivalente a “usar”) por um outro software implementado em C# ou Python ou qualquer outra linguagem, pois o XML é adotado para garantir a comunicação padronizada.
Existem alguns tipos diferentes de web services onde, dentre eles, os que utilizam SOAP/ WSDL e os baseados no modelo arquitetural REST são os mais conhecidos. Neste post eu irei explicar como criar e consumir web services que utilizam SOAP e WSDL, e irei assumir que você já tenha pelo menos uma ideia do que estas siglas significam.
Eu poderia escrever uns dois ou três posts só sobre a teoria e aplicações, mas ficaria meio chato… Como o legal é a prática, vamos imaginar uma situação problema e criar um web service para resolver esse problema.
Read more »
By Felipe Saab
Annotations… recurso interessante.
Sempre tive a curiosidade de saber como funcionavam, então fui perguntar pro Google.
Pretendo demonstrar aqui o que eu aprendi nas minhas pesquisas.
Annotations são… advinhem… anotações! É um jeito que você tem de fazer alguma marcação em um atributo, método, classe, entre outros.
Elas sempre devem ser digitadas antes do objeto que você queira anotar (método, atributo…) e o nome das anotações são sempre precedidos de @ (arroba). Ex:
@MinhaAnotacao
class MinhaClasse{
}
Até ai tudo bem, mas você deve estar se perguntando: “Pra que diabos eu vou usar isso? Pra que ficar enfeitando meu código?”. Calma. Tudo tem seu propósito.
Read more »
By Felipe Saab
Tudo bem, eu admito. Esse nome é muito grande e chato de pronunciar (porém muito útil!).
Imagine que você desenvolveu um super software (em Java é claro…) para atender um determinado nicho de mercado, levou 1 ano da sua vida para fazer isso. Quando você começou a vendê-lo foi o maior sucesso, seus clientes falaram bem do seu software pra todo mundo. Cada dia apareciam mais clientes, maravilha!
Até que um certo dia um americano ouviu falar do seu software e diz que paga um preço 5x maior do que você está acostumado a cobrar, porém o software tem que ser totalmente em Inglês…
E agora José???? Vai copiar o projeto e sair mudando todas as strings? Boa sorte…
Se tivesse pensado nisso antes, você teria planejado melhor o seu software e teria utilizado as facilidades que o Java oferece para Internacionalizar seu programa.
Mais chega de história, vamos a algo um pouco mais prático. Vamos criar uma pequena aplicação apenas para demonstrar como é fácil e útil internacionalizar seu programa em Java.
Read more »
By Felipe Saab
Tempo é um troço foda… Só falta… nunca tem sobrando…
Depois de muito tempo sem um post, aqui estamos nós.
Hoje a gente vai desvendar a classe Robot, muito útil para testes automáticos, criação de bots e outros.
Em resumo, a classe Robot simula eventos do teclado, mouse e outros.
É tudo muito fácil, vamos ao código:
Read more »