sábado, 2 de abril de 2011

Introdução a Bancos NOSQL e Apache Cassandra

Olá Pessoal;

Hoje, escrevo este post para falar de uma tecnologia um tanto quanto polêmica ainda, porém que vem tendo crescimento na sua utilização em aplicativos WEB, principalmente com alta escabilidade, estou falando de NoSQL Databases.

NoSQL é uma alternativa aos bancos RDBMS para tentar resolver problemas de escabilidade (para RDBMS pode ser caro ou bastante complexo) e desempenho entre outras caracteristicas. A idéia principal é armazenar dados de uma forma denormalizada, utilizando um padrão chamado key-value, ou seja um valor está sempre associado a uma chave.
Um outro conceito é que cada linha armazenada pode possuir seu próprio esquema, isso facilita a replicação dos dados em vários outros servidores NoSQL.

Empresas como: Facebook, Google, Twitter, Digg, Yahoo utilizam em suas aplicações e são entusiastas de soluções NoSQL.

Eu quero falar especificamente sobre um banco de dados NoSQL que vem crescendo bastante, é o Apache Cassandra que foi desenvolvido primeiramente pelo Facebook que depois entregou o código fonte para a Apache dar continuidade. Escrito em Java e bastante leve, ganhou bastante espaço porque uniu a arquitetura de um banco da Amazon, chamado de Dynamo com o modelo de dados baseado no BigTable do Google e o resultado final ficou bem interessante.

A Estrutura de dados do Apache Cassandra trabalha da seguinte forma:
  • Keyspaces: Comparando com um banco RDBMS é como se fosse um schema, ou seja, em um keyspace, guardamos todas a estrutura de ColumnFamily da nossa aplicação.
  • ColumnFamily: Comparado com um banco RDBMS, seria como uma tabela, ou seja irá guardar várias linhas de dados. Cada linha irá possuir uma chave, essa chave serve de identificador da linha e poderá ter colunas ou sub-colunas para guardar suas informações.
  • Column: Uma coluna é a menor informação possível, é um valor baseado em uma chave. Pode estar associado a um ColumnFamily ou um SuperColumn.
  • SuperColumn: É um conjunto de colunas, ou seja, para cada linha da ColumnFamily, podemos ter SuperColumns que possuam várias colunas.
Para exemplificar, vou demonstrar a estrutura de uma Livraria usando Apache Cassandra, fica assim:

Nessa estrutura, temos:

  • Keyspace Livraria: que irá guardar as informações sobre livros e autores.
  • ColumnFamily Autores: Guarda os dados dos autores, aonde a chave de cada linha é o nome do autor.
  • Column Email: Coluna que armazena o email para cada autor.
  • Column Biografia: Coluna que armazena a biografia para cada autor.
  • ColumnFamily Livros: Guarda os dados dos livros, aonde a chave de cada linha é o nome do livro.
  • Column ISQN: Coluna que armazena um código qualquer do livro chamado de ISQN.
  • Column Autor: Coluna que identifica o autor do livro.
E nossa introdução a respeito de bancos NoSQL e Apache Cassandra fica por aqui, o intuito foi dar de fato apenas uma breve introdução, porque existem materiais muito bons na internet falando a respeito disso.

O motivo dessa introdução é que no proxímo post, irei demonstrar a criação de um CRUD em Java com NoSQL e o banco escolhido foi o Apache Cassandra. No CRUD darei continuidade a está introdução para realizar um cadastro de uma livraria.

Até a proxíma.

Fontes:
pt.wikipedia.org/wiki/Apache_Cassandra
blog.caelum.com.br/bancos-de-dados-nao-relacionais-e-o-movimento-nosql/
http://imasters.com.br/artigo/17043/bancodedados/nosql_voce_realmente_sabe_do_que_estamos_falando/

sexta-feira, 18 de março de 2011

Novidades do Swing no Java 7

Olá Pessoal;

Enquanto aguardamos anciosamente a espera da versão final do Java 7 (que está prevista para este ano de 2011), e virá com algumas novidades na linguagem.
Mas queria falar sobre as funcionalidades que virão para incrementar o desenvolvimento desktop em Java. Por isso vamos dar uma olhada em algumas das novidades do Swing que estarão presentes na nova versão do Java.

  • JLayer: O JLayer iniciou do projeto JXLayer (mais os dois seguem caminhos independentes), que serve para desenhar camadas sobre os seus componentes visuais. O que eu achei legal é que você pode registrar eventos em que o JLayer esteja interessado e repintar a camada como você bem entender quando o evento for disparado. Um exemplo disso seria você adicionar um desenho na tela toda a vez que o mouse se mova por exemplo. Alguns exemplos visuais do JLayer:





  • Criação de Janelas e desenhos translucidos: Essa é uma funcionalidade que estará disponivel no Java 7 que é para deixar suas janelas translucidas, ou seja, aquele efeito de transparência, você poderá definir o grau de transparência e também o gradiente que deseja e "tha-ram", veja como sua janela pode ficar:




  • The Nimbus Look & Feel: Outra novidade é que será adicionado mais um Look & Feel, o Nimbus que estará disponivel também no javax.swing a partir da versão 7. Uma tela com esse look & Feel fica assim:


Outra novidade anunciada será uma maior facilidade em trabalhar com a mistura de componentes tanto AWT e Swing em uma mesma tela.

Estou aguardando a versão final do Java 7, enquanto isso, "brincamos" com as versões betas.



Abraços e até a proxíma.


terça-feira, 15 de março de 2011

Algumas formas de melhorar o tempo de compilação do GWT

Olá Pessoal;

Nest post, estou aqui para dizer que nem tudo é maravilha ao se utilizar o GWT. Como o GWT compila o código Java, gerando código Javascript otimizado para cada browser, pode ser que algum módulo tenha um tempo de compilação nada performático.

Trabalho em uma aplicação que tem em torno de 300 módulos GWT e alguns demoram quase 10 minutos para serem compilados (Por erros de design patterns) , imagina se quanto tempo demora a compilação do projeto.

Por isso, disponibilizo para vocês esse link em que o autor se preocupa em demonstrar a importância e dicas para melhorar o tempo de compilação do seu módulo.

link: http://supplychaintechnology.wordpress.com/2010/06/04/gwt_compile_times/

Uma outra dica (que eu acho muito importante) é diminuir os "permutations", ou seja quando o GWT compila um módulo ele compila para cada browser e cada locale, por exemplo, se o seu módulo for compilado para 5 browsers e 10 locales diferentes, irá gerar 50 "permutations" e consequentemente uma demora a mais na compilação.

A dica é definir os browsers que realmente serão utilizados pela aplicação (se for uma aplicação disponivel para web esqueça) e definir o locales de sua aplicação (se sua aplicação é mult-linguagem).

As dicas para diminuir os permutations: http://bazoud.free.fr/post/2008/07/31/Can-I-speed-up-the-GWT-compiler/

Fica a Dica

Abraços

Criando seu primeiro aplicativo com GWT e Netbeans

Pessoal;

Dando continuidade ao artigo sobre introdução ao GWT, e conforme prometido, vou demonstrar como criar um aplicativo GWT usando o Netbeans (No proximo post vou mostrar como criar no Eclipse xD).

Para habilitar o suporte do GWT no netbeans, será necessário a instalação do plugin GWT4NB, que você pode fazer o download a partir do site do projeto: https://gwt4nb.dev.java.net/, a partir dai é só instalar o plugin que irá aparecer a opção de utilizar o Google Web Toolkit nos projetos web.

Com o plugin instalado, vamos começar a desenvolver o nosso primeiro aplicativo GWT, o primeiro passo é criar um novo projeto WEB, como mostra na imagem:

A partir dai, é só configurar o nome do projeto, selecionar qual o servidor será instalado, e na ultima etapa, selecionar o plugin do Google Web Toolkit, como mostra na imagem:

Nesse passo, nos precisamos informar o diretório de instalação do GWT, se não estiver instalado, você pode fazer o download em http://code.google.com/intl/pt-BR/webtoolkit/ ou clicar em "You can download the GWT SDK here"  na tela de configuração.

Também definimos o caminho para nosso primeiro modulo, no caso eu preenchi: com.javacomfarinha.gwt.login.Login (Login será o nome do nosso primeiro modulo GWT).

Pronto, o netbeans irá criar o nosso projeto com a seguinte estrutura:


Com isso, temos criado o nosso primeiro modulo GWT criado pelo Netbeans, agora vou explicar o que são esses arquivos:

Cada modulo GWT, possui essa estrutura, na raiz do pacote do projeto, possui um arquivo gwt.xml com o nome do modulo que e guardam as configurações do modulo, o mais importante para você sobre esse arquivo é que nele nós definimos, quando esse modulo for iniciado, qual tela (que é um EntryPoint no GWT) que será carregada e quais outros modulos criados no seu projeto serão utilizados nesse modulo. Também podemos definir várias outras configurações, mais veremos isto em outros posts.


 Todo modulo GWT também tem essa pacote "client", neste pacote temos todas as classes a respeito da criação das telas/componentes visuais e TODAS as classes que estiverem nesse pacote serão compilados para um código JavaScript.

A Classe LoginEntryPoint é a classe que foi gerada pelo plugin irá exibir nossos componentes na tela do browser, essa classe implementa a interface do GWT chamada EntryPoint. Uma classe EntryPoint será exibida para o usuário quando o modulo for carregado, pois o modulo irá chamar o metodo onModuleLoad que é definido nessa interface, no exemplo gerado pelo plugin, ficou assim:
Nesse exemplo, está sendo adicionado uma label e um botão direto a pagina WEB que irá chamar esse modulo GWT.

O Plugin também criou uma pagina HTML (welcomeGWT.xml) que será responsavel por chamar esse modulo GWT, o código HTML fica assim:
Através da Tag Meta (utilizado nas versões 1.3 e anteriores do GWT e da chamada ao script nocache.js com o nome do módulo, será invocado o modulo Login do GWT.

Agora é só compilar o projeto que o plugin Gwt4Nb irá realizar a compilação do modulo GWT criado, rodar o projeto e chamar a página welcomeGWT.html o resultado final fica assim:


Quando você clica no botão o Label se exibe ou se esconde.

Pronto, um simples e bem abstrato exemplo está funcionando, vou ficar por aqui para deixar vocês criarem os seus primeiros "Hello World" e no proximo post vou continuar com esse mesmo exemplo para criar um exemplo de Login e Senha usando GWT.

Valeu Pessoal

terça-feira, 20 de julho de 2010

Dica Java - Como remover elementos nulo de uma coleção

Olá Pessoal;

Essa é uma dica que recebi de um amigo meu do trabalho, o Josivan (cara faz mestrado na UTFPR e também faz a revisão de vários livros técnicos) e achei interessante disponibilizar para todos que acessam o blog.

Já deparei algumas vezes com códigos para remover elementos nulo em uma lista por exemplo que fica mais ou menos assim:



Porém isso pode ser realizado com uma forma que economiza linhas de código além de manter um código mais limpo, e cumprindo o objetivo de remover os elementos nulos da coleção em apenas uma linha, o código fica assim:



É algo simples e bem cotidiano para um desenvolvedor Java.

Você tem alguma forma mais pratica? envie nos comentários!

Abraços e Até a proxíma!

domingo, 18 de julho de 2010

Introdução ao GWT

 Pessoal, como tenho bastante interesse em falar sobre o GWT e suas vantagens no Blog, vou começar com esse post falando um pouco sobre o que é o GWT e um pouco do que ele pode fazer, assim mais para frente nós podemos ir avançado sobre o assunto falando sobre componentes e criando GUI avançadas de forma bem pratica. Espero que gostem!

O que é GWT

O Google Web Toolkit é um framework para o desenvolvimento de interfaces ricas com Java. É algo drasticamente diferente desenvolver aplicados web, bem diferente de como usamos com JSP/JSF/Struts... Etc. Pois a idéia principal do GWT é escrever o código de nossas interfaces WEB em código Java, esse código será compilado para um código Javascript já otimizado pelo compilador e funcional para os navegadores utilizados no mercado (IE, Firefox, Safari, Opera ...etc) .

Isso facilita e agiliza bastante o desenvolvimento de aplicativos WEB, pois não precisamos ficar escrevendo Javascript  que tenha suporte em todos os navegadores e podemos usufruir de todas as funcionalidades presentes no Javascript e da reutilização de componentes de uma forma bem pratica, podemos utilizar também ferramentas de testes para verificar se uma interface está cumprindo o que prometeu.

Possui também um mecanismo de comunicação com o código cliente e servidor assíncrono, chamado de RPC (Remote Procedure Call) que pode trabalhar com vários protocolos como JSON ou XML é bem parecido com um código RMI de forma bem mais simples, que na pratica a pagina web gerada se comunica com o servidor utilizando o AJAX de forma transparente.

Você conferir a própria pagina do GWT, que está em Português e pode ajudar bastante: http://code.google.com/intl/pt-BR/webtoolkit/overview.html.

Casos de aplicativos que usam o GWT

Você pode ver alguns exemplos de aplicativos que foram feitos em GWT nesse link http://gwtgallery.appspot.com/

Alguns pontos positivos
  • Possui todos os componentes HTML como botões, input text, checkbox e alguns outros compoonentes como Tree, Menu e também já existem bastantes bibliotecas com vários recursos e componentes interessantes (mais para frente falo sobre eles).
  • Possui recursos de internacionalização
  • Suporte a analise de documentos XML.
  • Possui suporte a todos os tipos primitivos (byte, char, short, int) e suas classes wrappers (Byte, Char, Short, Integer), a única exceção é o long que é convertido para o tipo Double no javascript e por isso é recomendado a usar Int ao invés de long.
  • Pode se trabalhar diretamente com exceções, checadas e não checadas, as existentes na API do Java e também pode se criar novas exceções.
  • Plugin para as IDE´s do mercado como Eclipse, Netbeans, IntelliJ, você pode debugar, compilar, criar novos Widgtes de forma pratica e rápida em seu ambiente de desenvolvimento preferido.

Alguns pontos negativos

Como nem tudo é um mar de rosas, também possui algumas desvantagens:
  • Se estiver pensando em desenvolver um pagina WEB com foco em SEO, não use o GWT, pois o código gerado não é nenhum pouco entendível para os buscadores, pois trabalha com Javascript, existem algumas formas que pode ajudar mais irá perder bastante com relação a uma pagina com HTML bem semântico.
  • O processo de compilação do GWT ainda não é o mais performático, dependendo de como sua aplicação foi desenhada, a compilação pode ficar lenta.
  • O tamanho da aplicação (seu arquivo de distribuição .war ou .ear), é maior do que comparado com um aplicativo que utiliza JSF ou qualquer framework baseado em tag´s.

Por enquanto é isso, nos próximos posts vou demonstrar na pratica todo esse bla-bla-bla que foi dito ai em cima criando um exemplo simples utilizando o Netbeans e o Eclipse.

Abraços e até a próxima.

sábado, 10 de julho de 2010

O Java Com Farinha Voltou!!!

Pessoal;



É com grande prazer que quero comunicar que irei voltar a atualizar o Blog! Isso mesmo o Java Com Farinha está de volta, a pedidos de muitos (não são tantos assim ... rsrs).

E voltará melhor do que nunca, já que agora vamos abordar alguns posts interessantes a respeito do desenvolvimento Java & Afins.

Alguns dos temas que iremos abordar nos próximos postos são:
  • Java Com SEO - Isso mesmo, o Java também é bom para o SEO, vamos mostrar alguns artigos para ajudar no desenvolvimento de sites com Java e também pensando na otimização para os mecanismos de buscas.

  • GWT - Quem diria, eu que era contra a esse tal de Google Web Toolkit, fui rendido a ele. A produtividade para desenvolvimento de aplicativos WEB utilizando AJAX escrito em código Java com o Google Web Toolkit é muito interessante, e o resultado final é muito legal também, mais para frente vamos falar sobre isso.

  • JSF - O "queridinho" dos desenvolvedores Java para WEB não poderia ser esquecido. Vamos falar de algumas coisas legais como a sua novoa versão (2.0) e algumas coisas interessantes. Aguardem!

  • NOSQL Databases - Caraca!!! um assunto polêmico (pelo menos no meu trabalho e com pessoas que converso). Vamos falar também um pouco desse novo paradigma de banco de dados, no qual eu acho muito interessante e tem um futuro muito promissor, irei mostrar alguns dos principais bancos NOSQL utilizados hoje em dia e exemplos com clientes Java (é claro).

Espero que gostem, enquanto os novos posts não chegam, você pode responder a minha enquete (No canto direito) - Você usa ou já usou GWT? 

É Isso pessoal, fico por aqui e ja na próxima semana irei começar os posts!

Abraços e até a próxima!