segunda-feira, 13 de agosto de 2007

Mudança de BLOG


Olá a todos, venho comunicar que alterei o local do meu BLOG. Criei um domínio www.rafaelcarneiro.org. Desculpem-me o transtorno, mas espero com esse novo BLOG ter mais motivação e espectativas.

domingo, 29 de julho de 2007

Café com Tapioca


No dia 04 de agosto (sábado) ocorrerá o próximo Café com Tapioca
do CEJUG (Ceará Java Users Groups). O local do evento será na FA7 e conta com a presença de Daniel de Oliveira, JUG Leader do DFJUG. O tema da palestra é: "A iniciativa JEDI, o ensino de Java livre e gratuito".
Se você mora em Fortaleza ou em estados vizinhos, não perca essa palestra com esse palestrante renomado.

Me ajude a lembrar: Scrum, XP, RUP, CMM, MPS.br.... esqueci de mais alguma metodologia?

Ao elaborar um projeto, tem-se um dilema: qual metodologia seguir? São tantas que temos de analisar qual irá atender melhor ao projeto. Por que resolvi criar um post com esse assunto? Tem certeza que você não sabe? Ora, atualmente está na moda dizer por aí que você faz parte de um projeto que utiliza uma metodologia ágil, seja qualquer uma delas, essa é a verdade. A maioria das empresas que não adotaram esse tipo de abordagem de gerência de projeto estão incluindo-a em seus escopos.

Segundo o pai dos burros (o dicionário), metodologia significa: subdivisão da lógica que estuda os métodos técnicos e científicos; ou ainda melhor: conjunto de regras para o ensino de uma ciência ou arte;

Eu acredito que focar na mão-de-obra, tornando-a capacitada e produtiva, ainda é melhor do que fazer com que passem por um conjunto de regras para poderem fazer algo. Então vamos consultar no dicionário o significado de outra palavra muito utilizada junto com metodologia: ágil. Segundo ele (o dicionário), a palavra ágil significa: leve, ligeiro. Logo, o termo metodologia ágil não seria para tornar o desenvolvimento mais rápido, mais produtivo? O Scrum está com esse pensamento, você pode ver nesse artigo da Caelum, nesse livro gratuito e também nessa palestra.

Não sou contra metodologias ágeis e nem estou fazendo propaganda para não utilizá-las em projetos, apenas quis enfatizar no parágrafo acima que é importante pensar muito antes de querer incluir alguma metodologia em um projeto. Claro que é bom para a empresa, colocar uma metodologia em seus projetos, estampar no peito e mostrar para os clientes que utiliza uma metodologia X, Y ou Z. Mas o importante mesmo é: entregar o projeto do jeito que o cliente pediu e no tempo que ele pediu.

Na minha pouca experiência profissional já vi casos de empresas que utilizam essas metodologias concluirem bem um projeto, mas em outros casos vi projetos atrasados e com clientes insatisfeitos. Mas será que a culpa é da metodologia ou será que a forma como foi aplicada não foi correta? Estou participando de um projeto que não utiliza nenhuma dessas metodologias citadas e ele está indo muito bem.

Não vou ser o primeiro, nem o segundo e muito menos o terceiro a falar sobre esse assunto. O grande lance é: fique atento ao mercado. Se o mercado exige que você conheça pelo menos uma dessas metodologias, então aprenda, o que importa é isso. Ou, se você for um daqueles que gosta de ler sempre, compre alguns livros e se atualize antes mesmo do mercado exigir.


domingo, 22 de julho de 2007

Atributos dinâmicos nas Tag files

Continuando a série sobre criação de Tag files, vamos conhecer um excelente tópico da especificação JSP 2.0, os atributos dinâmicos das Tag files. No exemplo do post (Criando uma Tag File), foram criados diversos atributos na tag file de nome text. Mas dessa forma, cada vez que quizéssemos colocar um atributo novo nessa tag teríamos que alterar o comportamento da mesma.

Com o dynamic-attributes da Tag File, os atributos podem ser escolhidos na codificação pelo programador.

Vamos aos códigos.

Tag File:




Na primeira linha temos a diretiva <%@tag, que informa algumas características da tag, como codificação, se terá conteúdo e outras opções. É nela que se encontra a configuração para utilizarmos os atributos dinâmicos, o atributo chamado dynamic-attributes. Como valor eu coloquei dynattrs, mas você pode colocar qualquer valor. A função dessa tag é criar uma tag HTML input.

A chave principal é varrer o atributo
dynattrs com um forEach da JSTL para obter os pares key/value para acrescentarmos no código HTML a ser gerado pela tag.

Após obtermos todos os atributos informados pelo programador na JSP, iremos colocá-los na tag HTML input através da variável atributos que foi preenchida pelo forEach.


JSP:


Quaisquer atributos que fazem parte da especificação HTML podem ser passados na JSP.

Resultado:


Note que desta forma temos uma Tag File visualmente melhor, mais fácil de dar manutenção e com mais vantagens sobre as tags que possuem atributos estáticos. Criamos uma tag genérica, ou seja, ela poderá ser um text, radio, hidden e etc.

Você pode ver nesse post como configurar as Tag Files (onde colocá-las, como chamá-las em JSPs...). Nesse exemplo você precisará das libs do JSTL.

Até a próxima.

sábado, 14 de julho de 2007

[CEJUG] Implementando MVC com AJAX

Está disponível para download os slides e códigos da palestra Implementando MVC com AJAX, um evento do Café com Tapioca (CEJUG), ministrada pelo Milfont, que ocorreu nesta quinta-feira, dia 12 de julho.

terça-feira, 10 de julho de 2007

Tratamento de NullPointer no Eclipse Europa

Continuando a série de posts sobre NullPointerException e as primeiras impressões do eclipse europa, hoje estava vendo as novas funcionalidades e um amigo do trabalho me alertou sobre uma nova configuração de Errors/Warnings nas preferências do eclipse.

No eclipse europa, foi adicionado um novo item nas configurações do compilador e agora você pode verificar possíveis erros em tempo de compilação. No menu, vá em Window – Preferences e marque a opção Potential null pointer access como Error.

Veja na imagem abaixo:

Crie uma classe de teste e adicione o método abaixo ou crie um se preferir.

Código:




Com essa opção marcada como Error, o compilador irá gerar um erro informando que a variável situacao poderá lançar um erro de NullPointerException. O compilador entende que esse if pode retornar false e a referência situacao não será instanciada e poderá ocorrer um erro de NullPointerException na chamada do método add da interface List.

Você também pode marcar essa funcionalidade como Warning, para não gerar erros em todos os seus projetos e ainda ficar informado de possíveis erros.

Tem mais funcionalidades interessantes, como: classes serializaveis sem o serialVersionUID, atribuições sem efeitos, blocos catch sem conteúdo e vários outros.

segunda-feira, 9 de julho de 2007

Primeiras impressões do Eclipse Europa

Hoje descompactei o Eclipse Europa para desenvolvedores JEE e fiquei muito satisfeito com essa nova versão. O WTP 2.0 foi lançado e já está disponível nessa versão. Possibilita a criação de vários projetos como: JPA, EJB, J2EE, Web Services e outros. E o melhor, já cria toda a estrutura de diretórios. Possui também auto-complete para as Annotations. A partir de amanhã já irei trabalhar utilizando o Eclipse Europa!

Links relacionados

Snap Shots para Firefox


Está disponível para download o plugin do Snap Shots para visualizações em sites de pesquisas, blogs e outros sites. Mais um excelente plugin dentre vários outros para o Firefox.

quarta-feira, 4 de julho de 2007

Café com Tapioca


No próximo dia 12 (quinta-feira) na Fortes Informática em Fortaleza será realizada uma palestra no Café com Tapioca com o tema Implementando MVC com AJAX que será ministrada pelo Christiano Milfont.

Essa é uma boa oportunidade para você aprimorar os seus conhecimentos, não deixe de participar.

Mais informações

segunda-feira, 2 de julho de 2007

Então você quer se atualizar?


Você quer se atualizar, ver as últimas notícias sobre java e não sabe onde? O site do CEJUG (Ceará Java Users Groups) está sendo atualizado diariamente, com muitas notícias sobre liberações de versões, lançamentos de ferramentas e frameworks e outras notícas sobre o mundo java. Mantenha-se informado e atualizado!

sábado, 30 de junho de 2007

Eclipse Europa

Finalmente o tão esperado Eclipse Europa foi lançado. Já fazia um tempo que a comunidade java estava anciosa e voltada para esse lançamento, esperando as novas funcionalidades.

Confira as melhorias e funcionalidades
  • Melhor suporte a debugging, incluindo hyperlink stepping
  • Uma nova funcionalidade de Quick Access (ctrl-3) para melhorar a navegação na IDE
  • Refactoring adicional e "Quick Fix/Assist"
  • Task-focused development (Mylyn)
Confira a lista completa de funcionalidades

Download

Mais um livro da série Head First

Vai ser lançado mais um livro dos amantes da série Head First. Em agosto será disponibilizado para vendas o livro Head First SQL (HFSQL). No início de suas publicações, a série tinha o intuito de se focar no java, porém já lançou diversos livros direcionados a outros assuntos, como PMP, HTML e CSS, AJAX e outros. Será se vai ser mais um excelente livro dessa série?

Pré-lançamento do livro

sexta-feira, 29 de junho de 2007

Passei na Sun Certified Web Component Developer


Hoje fiz a prova SCWCD e passei com o escore de 73%. Achei a nota boa, por ter tido pouco tempo para estudar.

Achei essa prova mais fácil do que a SCJP, justamente por não ter cascas de banana e pegadinhas. Essa prova é bastante direta, ou você sabe ou não sabe. A matéria é maior do que a de programador, com bastante coisa para decorar. O tempo é muito justo, fiz a prova em 1 hora e a revisei em 15 minutos. O único simulado que fiz foi o do livro (HFSJ) , que é mais difícil do que a prova. O que achei mais impressionante foi a semelhança entre as questões da prova e as do simulado do livro, tinha uma questão na prova idêntica a do livro.

A prova

Nº de questões: A prova consta de 69 questões e você tem que acertar no mínimo 44 questões
Tempo: 2h e 15 minutos

Tipo de Questões

  • Múltipla escolha (2 e 3 opções)
  • Drag and drop
  • Uma resposta

Resumo da prova

  • Design Patterns - caiu umas 6 questões, com foco em Intercepting Filter
  • Segurança - foi um dos tópicos que caiu mais e um dos que mais errei, justamente por ter bastante configuração no deployment descriptor (web.xml)
  • EL e Standards Actions - várias questões sobre sua utilização
  • Filtros - teve umas 4 questões, bem fácil
  • Custom Tags - para a minha sorte, caíram poucas questões
  • Tecnologia Servlet - bem fáceis
  • Session Management - foi o assunto que mais caiu na minha prova, foram mais de 10 questões sobre sessões
  • Distribuição de aplicações web - caiu bastante também, questões sobre configuração de servlets, filtros, listeners, ejbs, páginas de erro, welcome file...

Recomendações

Livro: Head First Servlets & JSP
Especificações: Servlet 2.4, JSP 2.0 e JSTL 1.1
Simulados: JWebplus e Whislabz
Fóruns: JavaRanch (excelente), Portal Java e GUJ

Downloads

Resumos
Web.xml completo

quarta-feira, 27 de junho de 2007

NullPointerException não devia se chamar ErrorOfProgrammerException?


Recentemente no trabalho fui chamado por um Analista para tirar uma dúvida no seu código. Adivinha qual era o erro? Claro que o erro era de NullPointerException, mais conhecido como "erro do programador". O Phillip Calçado escreveu um excelente artigo, chamado Contratos Nulos, onde ele explica claramente e absurdamente bem como evitar esse erro, utilizando boas práticas de programação.

Mas a questão é, por que os programadores não evitam esse tipo de erro?

Um exemplo bem comum desse erro:

Método algumaCoisa


Método main





Se por algum motivo o método algumaCoisa receber por parâmetro um objeto String que aponta para null, esse método irá lançar uma NullPointerException. O erro se dá por conta do objeto param chamar o método equals sem ter uma referência.

Então, para evitar esse erro faça:

Método algumaCoisa





Com certeza deve existir outras formas de evitar vários erros de NullPointerException, mas a principal falha é dos programadores, por não "visualizarem" esses erros nos seus códigos.

segunda-feira, 25 de junho de 2007

Jazoon 2007


Começou neste domingo (24/06) a maior conferência sobre Java da Europa, o Jazoon 2007. O evento tem lugar em Zurique, na Suiça, e conta com dois representantes do CEJUG (Ceará Java Users Group): Felipe Gaúcho e Hildeberto Mendonça. O Jazoon teve início no domingo, com vários tutoriais sobre a plataforma Java. A conferência propriamente dita começará na segunda-feira e se estenderá até quinta-feira.

Mantenha-se atualizado sobre o evento no site do CEJUG!

domingo, 24 de junho de 2007

Evitando códigos java na JSP


Hoje em dia todo programador sabe que é uma boa prática de programação não colocar scriptlets, expressões e declarações em páginas JSPs. Mas você é um gerente de projeto ou líder de uma equipe antenado e atualizado e pediu formalmente
para seus programadores não colocarem esses códigos nas páginas. Mas e se eles continuarem colocando esses códigos, mesmo sabendo que não é permitido no projeto? Você poderá tomar algumas providências drásticas caso isso ocorra, como por exemplo dar um grande puxão de orelha na pessoa que fez isso.

Então, para evitar coisas como essa:




Por favor, no Deployment Descriptor (web.xml) da sua aplicação coloque esse código abaixo :



Se você colocar esse código na JSP:

<% Object object = new Object(); %>

Você irá ver esse bonito erro:

Scripting elements ( <%!, <%=, <jsp:expression, <%, <jsp:scriptlet ) are disallowed here.

Então, mesmo pedindo para seus programadores não utilizarem esses códigos, não custa nada garantir a não utilização desses códigos de uma forma mais segura.

sexta-feira, 22 de junho de 2007

Mais um framework MVC made in Brasil

Foi lançado mais um framework MVC brazuca, o Neo Framework. A moda já pegou e a comunidade java brasileira está cada vez mais centralizada em criar seus próprios frameworks. Pessoalmente eu acho isso muito bom, pois observo que a cada dia que passa as pessoas estão caindo na real de que nós não podemos "viver presos à outras nações", ou seja, presos aos idiomas e documentações. Não estou sendo radical, é bom e essencial para a nossa área saber inglês e outras línguas, pelo contrário, gosto muito de inglês e de bandas com letras nesse idioma. Apenas estou querendo dizer que esse lado é bom, pois valoriza a comunidade java brasileira.

Outro exemplo de framework brasileiro é o Mentawai, que está sendo bastante utilizado e eu tive o prazer de conhecer o seu funcionamento, criando alguns testes. Ele é baseado em configuração programática, sem a utilização de arquivos XML, Annotations ou qualquer outro tipo de metadata. Informo aos meus conterrâneos da terra da luz (Fortaleza) que o site/sistema do Tribunal de Contas do Estado do Ceará utiliza o Mentawai como framework MVC. A sua documentação é bastante rica, com diversos exemplos de utilização e webapps de exemplos e possui um fórum para tirar dúvidas.

Como framework MVC tem ainda o VRaptor, criado pelo pessoal da Caelum e pelos administradores do GUJ. A versão atual do GUJ, chamada de GUJ2, foi feita utilizando esse framework para a camada de controller. Sua configuração é baseada em Annotations, sua lógica é baseada em POJOs, tem integração com displaytag e suporte à frameworks de apresentação, como velocity e sitemesh.

Para o Swing, tem o framework SwingBean, de autoria do Eduardo Guerra, atual editor-chefe e colunista da revista Mundo Java. O seu intuito é simplificar a vida dos programadores desktop. Confira mais características e funcionalidades no site do projeto.

A edição número 21 da Mundo Java tem como matéria principal esses frameworks citados acima (também fala sobre o JSenna, antigo JBanana), com exceção do Neo. A edição 23 fala sobre o JSpider, outro framework brasileiro.

E não acaba por aí, tem também o Spring Annotations, uma biblioteca criada pelo Rodrigo Urubatan com o intuito de configurar toda a sua aplicação em Spring utilizando annotations. Na próxima edição da revista Mundo Java terá um artigo sobre essa biblioteca. Clique aqui para conferir a documentação em português.


Comparação NetBeans versus Produtividade

O Handerson Frota postou no seu blog uma comparação entre NetBeans e produtividade, vale a pena ler o artigo.

quinta-feira, 21 de junho de 2007

Quem avisa amigo é

Estou estudando o Struts2 e antes de iniciar vários posts sobre o assunto irei logo adiantar que junto com o pacote completo ou o pacote de apps, de nomes struts-2.0.8-all e struts-2.0.8-apps respectivamente, possui um showcase, é isso mesmo que você leu, você poderá fazer o deploy no seu gato véi (tomcat) preferido e visualizar imagens e códigos fontes sobre o Struts2 feito em Struts2, isso não é maravilhoso? Você verá como construir cruds, utilizar AJAX, irá conhecer as tabpanels (abas), interceptors, principais tags, integrações com SiteMesh, temas e muito mais.

terça-feira, 19 de junho de 2007

Coletânea de material de JavaEE

Encontrei (www.4shared.com) na web uma coletânea compactada contendo várias apresentações, artigos e PDFs. Os assuntos são: JSF, Struts, Spring, AJAX, Web services, JINI, Hibernate e Ant. Vale a pena conferir!

Por sinal o 4shared é um excelente repositório de arquivos, possui uma excelente ferramenta de busca e você ainda vê o conteúdo do arquivo antes de baixá-lo.

Download da coletânea

segunda-feira, 11 de junho de 2007

Criando uma Tag File

A Tag File faz parte da especificação JSP 2.0 e muita gente não sabe quais os benefícios que ela traz no desenvolvimento de aplicações para a web. Uma Tag File nada mais é do que um pequeno código de arquivo JSP. A sua função é justamente criar pequenos fragmentos de códigos para um determinado fim. Ela ajuda na orgazinação e design da sua aplicação, retirando uma fatia de códigos comuns e repetitivos das suas páginas JSPs. Suporta EL, JSTL e quaisquer tag libs, incluindo tags de frameworks, como por exemplo as tags do Struts.

No exemplo utilizei apenas JSTL. No final do post você encontrará o caminho para baixar o jar.

Onde colocar as tag files

A especificação determina que as tags sejam criadas em um .jar no diretório META-INF/tags. Para essa configuração é necessário criar arquivos tlds que contêm a configuração necessária para o funcionamento das tags.

Para ser mais fácil e rápido, no exemplo iremos colocar a tag file no diretório WEB-INF/tags, com isso não precisamos ficar gerando o jar a cada alteração na tag.

Principais tags

- tag

Tag inicial que informa qual o encoding da tag file. Seu principal atributo é o pageEncoding.

- attribute

Essa tag é encarregada de informar para o desenvolvedor quais os atributos que a tag file disponilizida. Seus principais atributos são:

name: determina um nome para o atributo

type: define um tipo (Object, String, Boolean, Integer e etc)

required: informa se o atributo é obrigatório

rtexprvalue: informa se o valor do atributo pode ser uma expressão JSP. Ela deve ser processada antes de ser enviada para a tag.


Codificando

Vamos criar uma tag file simples, de nome text, que tem como lógica renderizar um input do tipo text ou password, dependendo do valor do atributo tipoInput passado.

Tag File

<%@tag pageEncoding="UTF-8"%>

<%-- Importando a JSTL --%>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<%-- Atributos --%>

<%@attribute name="tipoInput" type="java.lang.Boolean"%>

<%@attribute name="tituloCampo"%>

<%@attribute name="id"%>

<%@attribute name="name"%>

<%-- Tags condicionais da JSTL --%>

<c:choose>

<c:when test="${tipoInput}">

${tituloCampo} <input type="text" name="${name}" id="${id}">

</ when>

<c:otherwise>

${tituloCampo} <input type="password" name="${name}" id="${id}">

</ otherwise>

</ choose>


JSP

<%@taglib prefix="tag" tagdir="/WEB-INF/tags" %>

<html>
<
head>
<title>Exemplo Tag File</ title>
<head>

<body>

<tag:text tituloCampo="Campo" id="text" name="text" />

</ body>
</ html>


Considerações Finais

Ao executar esses códigos numa aplicação web o resultado será a renderização de um campo na tela do tipo input text ou password, dependendo da opção que você escolher.

O valor default de um objeto do tipo Boolean é null, então para podermos mostrar na tela um input do tipo text precisaremos passar o valor true no atributo tipoInput na JSP.

Note que não precisei configurar o Deployment Descriptor (web.xml) e nem criar um arquivo de configuração de tag libs (.tld).

Portanto, a utilização de tag files traz grandes benefícios para o desenvolvedor e para quem precisar refatorar ou modificar os códigos das JSPs da aplicação no futuro, por diminuir a quantidade de códigos repetidos e trazer simplicidade e dinamismo.


Download do .jar da JSTL

quinta-feira, 7 de junho de 2007

Novo livro da série Head First

Vem aí mais um livro da série Head First: Software Development (Desenvolvimento de Software). Todos já sabem o quanto essa série está fazendo sucesso para os mais diversificados grupos de desenvolvedores Java, sejam iniciantes ou avançados.

A didática e a explanação dos livros da série são excelentes, prendendo e chamando a atenção dos leitores. Eu já li em algum fórum (provavelmente no Portal Java ou GUJ), uma pessoa dizendo que estava louca para chegar logo em casa para ler o seu livro da série (não lembro qual era). Quando comecei a conhecer Java, comprei o livro Java como Programar dos irmãos Deitel que na época era o livro mais recomendado na comunidade. Mas hoje em dia quando alguém me pergunta um bom livro pra aprender Java ou outras tecnologias relacionadas, indico um dos livros da série.

Lista dos livros da série Head First:

  • Head First PMP
  • Head First OOA&D
  • Head Rush Ajax
  • Head First HTML with CSS & XHTML
  • Head First Design Patterns
  • Head First Java (2nd edition)
  • Head First Servlets & JSP
  • Head First EJB

Não estou fazendo marketing dos livros da série Head First e nem querendo que vocês leiam todos esses livros, apenas relatando o meu grau de satisfação com a série. No blog do Phillip Calçado tem excelentes recomendações de livros, vale a pena ler.

quinta-feira, 31 de maio de 2007

Conhecendo as teclas de atalho do eclipse

Todo bom programador conhece as vantagens de utilizar o eclipse, dentre elas as teclas de atalho. Com o conhecimento das principais teclas de atalho a produtividade e rapidez nos códigos irá aumentar exponencialmente, pois evitará que o programador busque outras formas para resolver o problema.

Para visualizar todos os atalhos disponíveis no eclipse basta pressionar Ctrl + Shift + L. Abaixo segue as principais teclas de atalho usadas no dia-a-dia de um programador e no final do post a versão para impressão de todos os atalhos.

Tecla de Atalho | Função

Ctrl + Shift + O = Organiza os imports (limpa os imports que não estão sendo utilizados ou adiciona caso não exista)
Ctrl + Shift + F = Formata o código de acordo com a configuração nas preferências
Ctrl + Shift + R = Procura qualquer tipo de recurso em qualquer projeto
Ctrl + 1 = Assistência para correções do código
Ctrl + 2,R = Renomeia uma variável em todo o escopo onde está inserida
Ctrl + espaço = Assistente de código
Ctrl + M = Máximiza/Minimiza uma view
Ctrl + O = Visualização completa da classe (métodos, variáveis, construtores...)

A matéria da capa da revista Mundo Java número 09, de autoria do Paulo Silveira, trata exatamente desse assunto, vale a pena conferir.

Downloads: Versão para impressão | Imagens

quarta-feira, 23 de maio de 2007

A Importância da Gerência de Configuração

Acredito que a grande maioria das empresas desconhecem ou não estão atentas à importância do papel do gerente de configuração para os projetos. Esses profissionais se encontram principalmente em empresas que possuem ou almejam o modelo CMMI.

Já participei de projetos que não existiam esses profissionais e vi que a dificuldade é imensa. Assim como é importante nos projetos possuírem programadores, analistas de sistemas e de testes, arquitetos, gerentes e etc, também é muito importante ter um gerente de configuração, pois o mesmo possui um grande conhecimento e experiência sobre as ferramentas de controle de mudanças (JIRA, Mantis, Bugzilla e etc) e versões (CVS, Subversion, Tortoise, Winmerge e etc).

A presença desse profissional agilizará várias etapas nos processos do projeto. Essa área possui uma grande carência de profissionais qualificados, então é uma boa para aqueles que estão em dúvida em que ramo partir na área de T.I.

Links interessantes sobre Gerência de Configuração:

http://www.pronus.eng.br/artigos_tutoriais/gerencia_configuracao/gerencia_configuracao.php
http://www.cin.ufpe.br/~gfn/qualidade/gc.html
http://pt.wikipedia.org/wiki/Ger%C3%AAncia_de_Configura%C3%A7%C3%A3o_de_Software

domingo, 20 de maio de 2007

Iniciando com JPA

JPA, acrônimo de Java Persistence API, que veio junto com o Java EE 5, trouxe diversas funcionalidades que ajudam e muito a vida dos desenvolvedores. A JPA faz parte da especificação EJB 3.0, porém à rumores de que na versão 6 do Java EE ela seja retirada dessa especificação.

A JPA é caracterizada em três áreas:
  • Java Persistence API
  • Query Language
  • Mapeamento Objeto/Relacional
Logo abaixo irei dar exemplos de como inserir uma entidade no banco de dados, utilizando as annotations do EJB 3.0, os objetos do JPA , o banco de dados MySQL 5.0 e o Oracle TopLink como provider.

Iremos precisar de algumas libs para este exemplo, no final do post tem um link para você baixar o exemplo completo, com as classes e as libs necessárias.

- Criando a entidade
Iremos criar a nossa classe de entidade chamada Usuario, que irá possuir os seguintes atributos: id, login, password e nome.
Ela nada mais é do que um simples POJO (Plain Old Java Ob
ject) com alguns atributos, métodos acessores e não herda de nenhuma classe. Em aplicações coorporativas que utilizam toda a especificação EJB é necessário que essas classes possuam mais características, como serialização por exemplo.

Vamos aos códigos:


Figura 1

Na linha 10 eu informo que esse objeto será uma entidade, marcando com a annotation @Entity.
Na linha 11 informo o nome da tabela, atráves da annotation @Table, usando o atributo name da mesma.

Já na linhas 14 e 15, indico que este atributo será um id (marcado com a annotation @Id) e que a sua estratégia de geração de valores no banco será IDENTITY (para o Oracle usa-se SEQUENCE).
Os demais atributos são marcados com @Column, porém não é necessário fazê-lo, a menos que você quizesse utilizar alguns dos atributos dessa annotation, como name, que indica qual vai ser o nome da coluna no banco.

- Criando a classe UsuarioDAO para persistência

Como este post é apenas um exemplo simples de persistência utilizando JPA, criei apenas uma classe DAO (padrão de projeto Data Access Object) que contém o código principal para a persistência.

Figura 2

Na linha 18 eu crio meu objeto factory, recebendo a instância do provider, que irá encontrar o nome do persistence-unit no arquivo persistence.xml.

Em seguinda, na linha 19 eu crio o objeto EntityManager, que é o principal objeto para a persistência na JPA.

O método inserirUsuario utiliza o objeto EntityTransaction, para transações.

Na linha 35 o objeto eu chamo o método persist do objeto EntityManager, passando a entidade para ser gravada no banco.

Existem vários outros métodos relacionados a persistência, como o find, delete, merge e outros. Aconselho dar uma lida na especificação para conhecer estes métodos, quais seus propósitos e suas funcionalidades.

- Arquivo de configuração (persistence.xml)

Esse é o arquivo de configuração, que configura o nome da unidade de persistência, o tipo de transação, as configurações de banco, o provider, as classes de entidades e etc.

Figura 3

Atenção para a linha 15, essa propriedade informa o tipo de geração das tabelas do banco. Na primeira vez que você rodar o exemplo, o provider irá criar as tabelas no schema exemplojpa.

Se você tentar rodar novamente o exemplo sem comentar ou tirar essa linha, irá gerar um erro informando que já existe uma tabela criada no banco, mas os dados irão ser persistidos. Então ao rodar a primeira vez, comente essa linha ou troque o tipo de geração.


Abaixo você poderá fazer o download do exemplo, com as classes, as libs e o persistence.xml (arquivo de configuração).

Este exemplo foi bastante simples e a JPA é bastante vasta, portanto baixe as especificações e estude mais afundo sobre esse excelente meio de persistência!

Download do exemplo
Screencast excelente sobre JPA

sábado, 19 de maio de 2007

Primeiro Post

Olá a todos!

Finalmente criei meu blog, depois de tentar várias vezes criar um nome como eu queria, com meu primeiro e segundo nome, respectivamente. Acho que o título que escolhi tem tudo a ver com uma das principais características de um blog: o de compartilhar conhecimento.

Espero contribuir bastante, expondo as principais tecnologias do momento e o que está acontecendo na atualidade.

No momento, estou estudando para a certificação SCWCD (Sun Certified Web Component Developer), então durante esse período irei demorar um pouco para postar.

Abraços!