20
08/01/13 Edson Gonçalv es » Tomcat 1/20 www.edsongoncalv es.com.br/tag/tomcat/ Skip to content Skip to menu Edson Gonçalves Tecnologia e Conhecimento ao Alcance de Todos Pesquisar search... Início Livros Sobre abr 11 2012 Se o servidor é seu, porque o problema é meu? Category: Off-Topic ,Servidores Java — Edson Gonçalves @ 15:43 Quero começar este ano, em meu blog, falando um pouco sobre administração em aplicativos e servidores Java, que serve também no geral para outros serviços. Desde que assumi a gerência da Integrator na parte de hospedagem, vejo e-mails que são direcionados ao suporte e recebo também, muitos pedidos que, sinceramente, não deveriam vir de um desenvolvedor Java. A critica que faço aqui é construtiva e, de certa forma, um puxão de orelha, para que os profissionais que trabalham com desenvolvimento, comecem a se preocupar mais com o que criaram e assumam o problema. Criei meu aplicativo e agora? Tudo começa com a sua criação. Você, profissional desenvolvedor, recebeu a árdua tarefa de criar aquele sistema “maravilhoso“ que alguém idealizou ou, por motivos pessoais, quis aprender algo ou desenvolver o sistema de seus sonhos. Depois de muita luta, você desenvolveu e foi aprovado por seu cliente, a diretoria da empresa onde trabalha ou por você. Mas e agora? Como executar isto fora de minha máquina de desenvolvimento? Do desenvolvimento até a produção Muitos desenvolvedores se acostumaram com a automação das ferramentas de desenvolvimento e, claro, com tanta facilidade, parar e iniciar o serviço Java ali é simples. Entretanto, o desenvolvedor java não pode apenas saber como operar uma ferramenta de desenvolvimento.

Edson Gonçalves » Tomcat

Embed Size (px)

Citation preview

Page 1: Edson Gonçalves » Tomcat

08/01/13 Edson Gonçalv es » Tomcat

1/20www.edsongoncalv es.com.br/tag/tomcat/

Skip to content

Skip to menu

Edson Gonçalves

Tecnologia e Conhecimento ao Alcance de Todos

Pesquisar search...

Início

Livros

Sobre

abr 11 2012

Se o servidor é seu, porque o problema é meu?

Category: Off-Topic,Servidores Java — Edson Gonçalves @ 15:43

Quero começar este ano, em meu blog, falando um pouco sobre administração em aplicativos e servidores

Java, que serve também no geral para outros serviços.

Desde que assumi a gerência da Integrator na parte de hospedagem, vejo e-mails que são direcionados aosuporte e recebo também, muitos pedidos que, sinceramente, não deveriam vir de um desenvolvedor Java.

A critica que faço aqui é construtiva e, de certa forma, um puxão de orelha, para que os profissionais que

trabalham com desenvolvimento, comecem a se preocupar mais com o que criaram e assumam o problema.

Criei meu aplicativo e agora?

Tudo começa com a sua criação. Você, profissional desenvolvedor, recebeu a árdua tarefa de criar aquele

sistema “maravilhoso“ que alguém idealizou ou, por motivos pessoais, quis aprender algo ou desenvolver o

sistema de seus sonhos.

Depois de muita luta, você desenvolveu e foi aprovado por seu cliente, a diretoria da empresa onde trabalha

ou por você.

Mas e agora? Como executar isto fora de minha máquina de desenvolvimento?

Do desenvolvimento até a produção

Muitos desenvolvedores se acostumaram com a automação das ferramentas de desenvolvimento e, claro,

com tanta facilidade, parar e iniciar o serviço Java ali é simples. Entretanto, o desenvolvedor java não podeapenas saber como operar uma ferramenta de desenvolvimento.

Page 2: Edson Gonçalves » Tomcat

08/01/13 Edson Gonçalv es » Tomcat

2/20www.edsongoncalv es.com.br/tag/tomcat/

O profissional de Java precisa, na realidade necessita, conhecer o servidor Java que executa seus aplicativos.Não é apenas o básico de instalar, configurar, iniciar e parar. Também não vale dizer que sabe ler logs. Vai

além. O profissional Java precisa saber como o servidor Java, que escolheu usar, opera. Isso vai desde as

suas características básicas de configuração, até como ele pode ser modificado e otimizado para melhorar o

desempenho do que desenvolveu.

Está bem, você vai dizer que não quer ser administrador, mas sim é um desenvolvedor, certo? Errado! Isto é

comum no governo, onde um carimba e outro coloca a folha. Se olhar para fora, verá que muitos fazem

várias tarefas diferentes. E no seu caso, o servidor Java é a extensão do seu aplicativo.

O aplicativo precisa funcionar em qualquer lugar

Se você é o desenvolvedor, logo, é importante saber como fazer para que o seu aplicativo funcione em

qualquer lugar, não somente em sua máquina. Usar o framework XYZ não é a etapa final do que criou. É nomomento que ele vai para produção, que é onde aparecerão os problemas.

O que mais vejo e escuto é a frase: na minha máquina funciona. Ora, se você desenvolve corretamente, sem

nenhum problema oculto, nada personalizado especificamente para sua máquina, que causaria erros online,também funciona em qualquer lugar.

Estes são os problemas mais comuns do desenvolvimento para a produção são:

1) Nome do banco de dados – criar a conexão usando um nome local, onde na produção se modifica,

bate o recorde em erros de acesso pelo usuário;

2) Nome do usuário do banco de dados – segundo problema mais comum, o usuário é diferente e geraerro de acesso negado;

3) Permissões de acesso em arquivos – o terceiro mais comum, quem usa o Windows está muito

acostumado a ter permissão para tudo. Mas online, servidores seguros tem permissões para escrita eexecução, que precisam ser dadas em arquivos e diretórios;

4) Erro no local onde está o banco de dados – conhecer a regra de como acessar o banco de dados no

servidor de produção é o mínimo, vai desde do host até a porta. Não sair colocando o que “acha” ser ocorreto. Na dúvida, sempre perguntar a quem administra o sistema operacional para evitar erros e mudar,principalmente, no código que foi compilado para colocar em produção;

5) Problemas de memória – usar o framework XYZ porque ele foi indicado na comunidade como bacana

é ótimo. Mas saber o que ele consome de sua máquina é melhor ainda. Não adianta achar que sabe comousar o Tomcat, que localmente tudo funciona, que online não vai dar problemas, se você nem sabe

localmente o quanto o Tomcat necessita de memória para executar seu aplicativo. Máquina dedesenvolvimento possuem vários GIGAS de memória RAM e muitas vezes o desenvolvedor nem se

preocupou em limitar o serviço em um X de memória. Online, você terá configurado uma limitação noservidor Java. É importante saber se, dentro desta limitação, seu aplicativo executa com conforto;

6) Envio de email – O SMTP tem regras em qualquer lugar. Saber a porta correta, parâmetros básicos

mínimos necessários é importante para que, em produção, o envio seja feito sem erros.

7) Erro 404 – O deploy não funcionou, logo, tem algo de errado e precisa ver nos logs o que estáocorrendo;

Page 3: Edson Gonçalves » Tomcat

08/01/13 Edson Gonçalv es » Tomcat

3/20www.edsongoncalv es.com.br/tag/tomcat/

8) Bibliotecas – As bibliotecas que usa no desenvolvimento precisam estar em produção. Se exportou oWAR file, EAR file, e nenhum está com as bibliotecas, ou falta alguma, porque foram colocadas diretamente

no servidor Java, precisa fazer o mesmo em produção. Algumas bibliotecas também costumam dar problemaquando existem duas do mesmo tipo, mas com versões diferentes.

9) Localização – Não deveria estar nesta lista, mas infelizmente, é um erro também comum. É possível

configurar o Locale em seu aplicativo ou diretamente no servidor Java. Não é porque na sua máquina oLocale é em pt-br que online vai ser também. Saber modificar isso no servidor Java que seja, não é difícil e

lhe salva de dores de cabeça com uma configuração muito simples.

10) Erro na descompactação do arquivo WAR – Probleminha comum quando você sobe por FTP oaplicativo com o Tomcat ligado, por exemplo, causando um hot deploy sem o arquivo ter finalizado

totalmente o seu envio. Alternativamente, ocorreu alguma queda de pacote no envio e ocorreu uma falha,deixando o arquivo impossibilitado de ser operado e, consequentemente, o servidor Java lançará um erro na

descompactação.

11) Assumir o problema – É, eu sei, isto não se trata de erro de produção. Mas pensar é um ato importantepara resolver problemas. Sair culpando outro, sendo que o problema é seu, não faz parte do meio queescolheu como profissão. Se assumiu um cargo como desenvolvedor, assuma também que o que fizer,

desenvolver, pode ter falhas e que elas são corrigíveis. Assumir o problema é o primeiro passo em direçãoda solução.

Os logs são a chave para a solução dos problemas

Todos os problemas, que relatei acima, sempre lançam exceções. Claro que, muitas vezes, o desenvolvedor

sai reclamando antes de pensar, que é sua maior tarefa, do porque essas exceções estão sendo lançadas. Agrande vantagem do java é que ele aponta o dedo para o problema. E de tantos que usam no mundo, é

muito fácil descobrir uma resposta para o problema. Mas fica mais difícil se quiser que resolvam o SEU

problema para você, acredite.

Indo além dos servidores Java

Em produção, não basta apenas saber como operar um servidor Java. Você desenvolveu o aplicativo e,

como conhecedor do que fez, deve também saber que o seu uso pode crescer. Mas, muitas vezes, se

esqueceu de que o comportamento com 10 pessoas testando é um e com centenas online, é outro.

Um belo dia, seu servidor Java caiu, se não caiu, deu um erro estranho em seu aplicativo ou aconteceu algo

que não havia previsto, claro. Mas a culpa não é sua, certo? Funcionava antes e não mexi em nada. Errado!

Totalmente sua culpa. Só de dar a resposta de que não mexeu em nada já implica que não está cuidando do

que fez. Se não observar por um tempo o que desenvolveu, a evolução do que fez, não vai ter correções e,como consequência, erros. Saiba estes princípios básicos no desenvolvimento:

1) Bibliotecas e frameworks mudam – se mudam de versão, é porque a anterior não era perfeita. Erros são

reportados e precisam ser atualizados para evitar que no seu, uma hora ocorra o que outro já teve.

2) Servidores Java mudam – mesma situação que citei acima, se mudou a versão do servidor Java, pode

Page 4: Edson Gonçalves » Tomcat

08/01/13 Edson Gonçalv es » Tomcat

4/20www.edsongoncalv es.com.br/tag/tomcat/

ser que, algum possível bug pode causar problemas em seu aplicativo.

3) Profiler – Usar um profiler vai lhe orientar como seu aplicativo se comporta e ver possíveis picos dememória/CPU que possam lhe causar problemas, mais adiante, com muitos usuários acessando.

Atacando o problema de frente

Evidentemente muitas são as situações que ocorrem em aplicativos. Nem todos os problemas são simples de

serem solucionados. Mas alguns podem ser de simples resolução se, de fato, você realmente quiser resolver

a situação. Vale citar alguns:

1) Otimize o banco de dados – Conhecer queries lindas com subqueries é muito bom. Mas saber o que

elas causam, ao serem chamadas em bancos de dados, com muitos dados, é melhor ainda. Otimizar queries

é importante para melhorar o desempenho. Claro que, em meio a isto, entram também saber otimizar aestrutura das tabelas, criar índices corretos e até mesmo criar caches de queries de pesquisas, as mais

comuns, para melhorar o seu desempenho no acesso ao aplicativo.

2) Modificar o comportamento falho do aplicativo – Sim, sei que você não quer mexer no que estavafuncionando bem nos primeiros 10.000 registros/acessos. Mas agora não está mais. Muita gente acessando,

muitos erros sendo lançados, memória, velocidade. Precisa modificar o comportamento, voltar para a

“prancheta” do desenvolvimento e replanejar. Se não fizer isto, seu projeto vai falhar, mais dia ou menos dia.

3) Mude de servidor Java – Sei que você aprendeu agora, e muito bem, aquele servidor chamado Apache

Tomcat. Mas ele pode não estar dando conta do recado como outro daria. É hora de conhecer novos

servidores Java e testar, seja o Jetty, JBoss ou GlassFish. Algumas pequenas mudanças, como a troca deservidor Java, podem trazer benefícios ao que desenvolveu, mesmo que isto lhe traga de volta ao “be a bá”

de como tudo funciona.

4) Buscar alternativas – Sempre , em algum lugar deste planeta imenso do desenvolvimento, alguémarrumou alguma solução que fez melhorar o desempenho do aplicativo com aquela tecnologia XYZ que

escolheu e deu a dica. Busque alternativas e dicas.

Empurrão ou puxão de orelha?

Minha intenção é dar a vocês, leitores deste blog, um empurrão no sentido certo. Existem várias etapas no

desenvolvimento e todas envolvem o que criou. Vai desde o sistema operacional que irá trabalhar em

produção, até o que é acessado pelo seu aplicativo. Estes detalhes precisam ser todos analisados, mesmoque você diga que é apenas um mero desenvolvedor Java.

Tags: Java EE 6, Off-Topic, Servidores Java, Tomcat

Comments (3)

set 22 2011

O que estou fazendo no momento

Page 5: Edson Gonçalves » Tomcat

08/01/13 Edson Gonçalv es » Tomcat

5/20www.edsongoncalv es.com.br/tag/tomcat/

Category: Off-Topic — Edson Gonçalves @ 21:46

Olá Pessoal, tudo bom? Como vão vocês?

Sei que estou sumido do blog. Muitos leitores estão, nestes meses, me mandando comentários pedindo acontinuação de alguns artigos, de séries, que comecei e ainda não terminei. Quero informar a todos que,

neste momento, estou renovando meus livros, por isso parei um pouco de postar no blog.

Muitas pessoas já sabem, outras nem fazem muita ideia, mas escrever toma muito tempo. Quem possuipouco tempo livre, como eu, no caso, é deixar os finais de semana com a família e o descanso das noites,

para nos dedicar a escrita.

Os escritores que sempre apoio em meu blog, até mesmo outros que desejarem aparecer no mural, só entrarem contato comigo. Sei o quanto é difícil divulgar um livro e ter um pouco de reconhecimento. Muita gente

acha que ganhamos dinheiro com livros, que ficamos ricos, mas estou aqui para desmentir. Na área de

informática, quem escreve é para ter o prazer de ajudar aqueles que estão com as mesmas dificuldades que,

com certeza, passamos um dia.

Quero deixar aqui os meus sinceros agradecimentos a todos aqueles que postam comentários elogiando,

criticando e pedindo mais tutoriais no blog. Para aqueles que não liberei os comentários, fiquem tranquilos

que eu os li. Só não os liberei, muitas vezes, porque não tive tempo ou, por serem pedidos e perguntasrelacionadas diretamente a mim, sobre o assunto, não me permiti o tempo necessário para responde-los.

Assim que terminar o meu primeiro objetivo, que é a completa reformulação e atualização, do livro“Desenvolvendo Aplicações Web com JSP, SERVLETS, JAVASERVER FACES, HIBERNATE, EJB 3

PERSISTENCE E AJAX”, voltarei a postar os diversos tutoriais, que já os tenho quase prontos, no blog.

Deixo aqui o espaço aberto, neste tópico, para que comentem o que acham interessante de estar neste livroque estou trabalhando. Já garanto que muitas criticas e pedidos, vindos de algumas centenas de leitores, não

serão ignorados. Professores de universidades, faculdades e escolas técnicas do Brasil e alguns países de

língua portuguesa, que também me procuraram para deixar seus pedidos e criticas, quero manter meu

compromisso de que todos serão levados em consideração.

Agradeço a compreensão de todos.

Bons códigos!

Tags: AJAX, Eclipse IDE, EclipseLink, Java EE 6, JPA 2.0, JSF 2.0, livro, Livros, MVC, MySQL,

NetBeans, Off-Topic, RichFaces, Tomcat

Comments (24)

jan 28 2011

Gerando relatórios JasperReports na Web com Fontesembebidas

Category: iReport,JasperReports — Edson Gonçalves @ 5:43

Olá Pessoal, tudo bom? Como vão vocês?

Page 6: Edson Gonçalves » Tomcat

08/01/13 Edson Gonçalv es » Tomcat

6/20www.edsongoncalv es.com.br/tag/tomcat/

Em 2011 quero começar com um artigo ensinando uma dúvida muito frequente aos usuários de hospedagem

da Integrator Host: embeber as fontes desktop no relatório JasperReports para serem usadas no aplicativo

Web.

No geral, relatórios são criados no desktop, onde usamos uma ferramenta visual, arrastando, modificando e,

claro, gerando uma aparência agradável. Se a aparência então for feita por um Designer, este pouco se

importa onde vai ser gerado tal relatório, o importante é o VISUAL. É neste momento que começa oproblema.

Um relatório pode usar fontes desktop que não estão disponíveis no servidor online. Pior, se o seu aplicativo

roda em um servidor compartilhado, raramente uma empresa de hospedagem vai ficar instalando suas fontes

desktop na máquina servidora, toda vez que você estiver com um relatório “enfeitadinho”. Se instalar,

também não será na hora. O que fazer neste caso então? Como obter independência?

Pensando nesta questão, a equipe de desenvolvimento do JasperReports incluiu a capacidade de adicionar

as fontes desktop em seu aplicativo, para que estejam disponíveis quando aquele seu belo relatório for

gerado para o cliente.

O que veremos neste artigo é como executar tal tarefa, partindo de um relatório já gerado no iReport.

Para acompanhar este artigo

Criei um banco de dados simples, com uma tabela chamada produtos, contendo os campos selecionados

como mostra a Figura 1.

Figura 1 – A tabela

usada

O relatório foi criado usando o assistente do iReport 4, onde o resultado final, após minhas pequenasalterações, é o que mostra a Figura 2.

Figura 2 – Relatório gerado pelo assistente com

pequenas modificações

Tenham em mente que este artigo não vai ensiná-los a criar relatórios e sim como contornar um problema

comum entre os desenvolvedores Java. Caso queiram dominar a arte de desenvolver relatórios

JasperReports com o iReport, vejam a minha seção de livros clicando aqui.

Page 7: Edson Gonçalves » Tomcat

08/01/13 Edson Gonçalv es » Tomcat

7/20www.edsongoncalv es.com.br/tag/tomcat/

JasperReports com o iReport, vejam a minha seção de livros clicando aqui.

Trabalhando com fontes personalizadas no relatório

Após desenhar o relatório, chega o momento de finalizar a “arte” com alguns toques e, em meio as

mudanças, eis que surge a ideia de personalizar a fonte também do texto contido no relatório.

No exemplo que fiz, os textos fixos foram todos personalizados com uma fonte que possuo em minhamáquina, chamada Impact.

Figura 3 – A fonte escolhida

para o texto estático Produtos

do relatório

Embora esta fonte seja importante para o design do meu relatório, não tenho garantias que ela exista noservidor onde hospedo meus aplicativos. Logo, o que parece simples, pode se tornar um pesadelo se não

for eu o responsável pela administração do sistema operacional.

Adicionando a fonte ao aplicativo

Graças ao problema de ausência de fontes em servidores de hospedagem, muitos desenvolvedores não

podiam depender da empresa ou administrador que fornece a máquina onde disponibilizam se encontram

aplicativos, principalmente quando se trata de uma hospedagem compartilhada. É nisto que o JasperReports

inclui a possibilidade de ter todas as fontes que usou em seu relatório em produção.

Adicionando e exportando a fonte no iReport

Vá no menu Tools >Options (menu iReport>Preferences no Mac OS X) e, na janela Options, emiReport, selecionem a aba Fonts.

Através do botão Install Font selecionamos as fontes que desejamos importar no iReport. Depois de

importadas, podemos selecionar todas elas e exportá-las através do botão Export as extension.

Page 8: Edson Gonçalves » Tomcat

08/01/13 Edson Gonçalv es » Tomcat

8/20www.edsongoncalv es.com.br/tag/tomcat/

Figura 4 – A fonte escolhida e usada no relatório

pronta para ser exportada

No exemplo que explico, chamei o arquivo que exportei de font.jar. É justamente este arquivo que vouadicionar em meu projeto.

A fonte como uma biblioteca no seu aplicativo Web pelo Eclipse IDE

No Eclipse, basta clicar com o direito do mouse sobre o projeto, selecionar o item Properties. Na caixa dediálogo Properties, vamos em Java Build Path, na aba Libraries. Para adicionarmos a biblioteca font.jar,

vamos no botão Add External JARs.

Figura 5 – O JAR font.jar adicionado nas

bibliotecas do meu projeto

Claro que eu não poderia deixar de comentar uma particularidade do Eclipse IDE na versão Helios. Para

projetos Java EE. Nesta versão, temos um item de nome diferente para adicionarmos as bibliotecas do

projeto no aplicativo Web. Este item está na janela Properties, em Deployment Assembly. É neste local

que determinamos quais bibliotecas serão exportadas ao executarmos o servidor Java.

Page 9: Edson Gonçalves » Tomcat

08/01/13 Edson Gonçalv es » Tomcat

9/20www.edsongoncalv es.com.br/tag/tomcat/

Figura 6 – Adicionando os arquivos JARs doprojeto no aplicativo Web

Ao clicarmos no botão Add, a caixa de diálogo New Assembly Directive surge. Esta caixa de diálogo é a

responsável por selecionarmos as bibliotecas do projeto em Java Build Path Entries.

Figura 7 – Obtendo os arquivos JARs de Java

Build Path

Ao clicarmos em Next, veremos todas as bibliotecas que dispomos em Java Build Path. Selecionem todas

– as bibliotecas para executar o relatório JasperReports devem estar presentes – finalizando no botão

Finish.

Figura 8 – Arquivos JARs selecionados

Retornando ao diálogo Properties, no item Deployment Assembly, temos todas as bibliotecas que serão

Page 10: Edson Gonçalves » Tomcat

08/01/13 Edson Gonçalv es » Tomcat

10/20www.edsongoncalv es.com.br/tag/tomcat/

adicionadas ao diretório lib do projeto, incluindo font.jar.

Figura 9 – As bibliotecas que serão exportadas

para o diretório /lib do projeto Web

A fonte como uma biblioteca no seu aplicativo Web pelo NetBeans IDE

No NetBeans IDE, basta adicionar em Libraries, clicando com o direito do mouse e selecionando, no menu

de contexto, o item Add JAR / Folder.

Figura 10 – As bibliotecas que serão

exportadas para o diretório /lib do projeto

Web

Antes e depois da fonte adicionada ao projeto

Para satisfazer a curiosidade do que será visto, temos a Figura 11 que mostra um relatório gerado, em

formato PDF, sem a fonte no diretório lib do projeto. Note a diferença com a Figura 12 em relação ao

formato da fonte, principalmente do título “Produtos”.

Page 11: Edson Gonçalves » Tomcat

08/01/13 Edson Gonçalv es » Tomcat

11/20www.edsongoncalv es.com.br/tag/tomcat/

Figura 11 – Arquivo PDF gerado como relatório

sem a fonte no diretório lib do projeto

Figura 12 – Arquivo PDF gerado como relatório

com a fonte no diretório lib do projeto

O projeto para download

Clique aqui para baixar o projeto e alterá-lo como desejar.

Tags: Eclipse IDE, ireport, jasperreports, NetBeans, relatórios, Tomcat

Comments (9)

out 24 2010

Spring MVC 3 na Prática com Bean Validation

Category: Spring,Spring MVC 3.0 — Edson Gonçalves @ 20:56

Olá Pessoal, tudo bom? Como vão vocês?

Este é o terceiro artigo da série Spring MVC 3.0. Se vocês não tiveram um contato inicial com o framework,recomendo ver este artigo primeiro.

Para acompanhar esta terceira parte, recomendo ter criado o projeto do segundo artigo.

Como sempre, dúvidas e críticas são bem vindas.

Alterando o CRUD criado com o Spring MVC

O projeto neste artigo é o mesmo do segundo artigo da série. Entretanto, faremos algumas alterações paraque passe a utilizar validações do Bean Validation.

Page 12: Edson Gonçalves » Tomcat

08/01/13 Edson Gonçalv es » Tomcat

12/20www.edsongoncalv es.com.br/tag/tomcat/

Adicionando as bibliotecas ao projeto utilizando o Maven

Mais uma vez, recorreremos ao Maven para adicionar as bibliotecas que necessitamos. Neste caso, teremosque baixar o Hibernate Validator. Para utilizar o Bean Validation, utilizaremos dois JARs: hibernate-validator-4.0.2.GA.jar e validation-api-1.0.0.GA.jar.

Abram o arquivo pom.xml , encontrado na view Package Explorer para que possamos adicionar asconfigurações que necessitamos.

Criando a propriedade

Na aba Overview, em Properties, cliquem no botão Create. Na caixa de diálogo Add property,

preencham como na Figura 1.

Figura 1 - Criação da property da versão dohibernate validator

Criando a dependência

Com a propriedade definida para informar qual versão desejamos utilizar, no qual o Maven deverá baixar,

resta configurar as dependências.

Na aba Dependencies, cliquem no botão Create e preencham conforme a Figura 2 ilustra.

Figura 2 - A dependência do Hibernate Validator

Alterando a entidade Contato

A entidade do artigo, chamada de Contato, será a primeira coisa que iremos modificar no projeto.

Graças a JSR 303, chamada de Bean Validation, podemos anotar as entidades com validações. Com as

anotações de Bean Validation na entidade, concentramos a validação em um único local, de formapadronizada, tornando possível portar estas validações para as classes controladoras do Spring MVC.

Page 13: Edson Gonçalves » Tomcat

08/01/13 Edson Gonçalv es » Tomcat

13/20www.edsongoncalv es.com.br/tag/tomcat/

A Listagem 1 exibe a entidade Contato modificada. Note as anotações de validação onde colocamos asmensagens de erro embutidas. Mais adiante iremos capturá-las para exibir o problema ao usuário.

Listagem 1. A entidade Contato com anotações Bean Validation.

A infra-estrutura definida pela JSR 303 nos permite descrever as restrições, usando anotações no modelo declasses de persistência, como definir se um campo aceitará uma quantidade mínima de caracteres ou se não

aceitará nulo, por exemplo.

Cada anotação é associada a uma validação, verificando se a instância da entidade anotada obedece à regraou não.

A Tabela 1 apresenta todas as anotações possíveis de serem usadas e suas funcionalidades.

Annotation O que faz?

@AssertFalse Checa se a propriedade anotada é falsa.

@AssertTrue Checa se a propriedade anotada é verdadeira.

@DecimalMax(value=) A propriedade anotada precisa ser um número, cujo valor deve estar menor ou

igual ao valor máximo previsto. O parâmetro value é a representação em string dovalor máximo aceito de acordo com o formato representado em BigDecimal.

Suporta tipos como BigDecimal, BigInteger, String, byte, short, int, long e osrespectivos wrappers de tipos primitivos.

@DecimalMin(value=) A propriedade anotada precisa ser um número, cujo valor deve estar maior ouigual ao valor mínimo previsto. O parâmetro value é a representação em string do

valor mínimo de acordo com a representação de sequência de BigDecimal.Suporta tipos como BigDecimal, BigInteger, String, byte, short, int, long e os

01 package br.com.integrator;02 03 import javax.persistence.*;04 import javax.validation.constraints.*;05 06 @Entity07 @Table(name = "contato")08 public class Contato {09 @Id10 @GeneratedValue(strategy = GenerationType.IDENTITY)11 @Column(name = "id")12 private Long id;13 @NotNull14 @Size(min=5, message="O nome não pode ter menos que 5

caracteres!")15 private String nome;16 @NotNull17 @Pattern(regexp = "̂[\\w\\-]+(\\.[\\w\\-]+)*@([A-Za-z0-9-

]+\\.)+[A-Za-z]{2,4}$", message="E-mail com formato incorreto.")18 private String email;19 @Pattern(regexp = "\\(?\\b([0-9]{2})\\)?[-. ]?([0-9]{4})[-.

]?([0-9]{4})\\b", message="Telefone em formato incorreto")20 private String telefone;21 22 //getters e setters23 }

Page 14: Edson Gonçalves » Tomcat

08/01/13 Edson Gonçalv es » Tomcat

14/20www.edsongoncalv es.com.br/tag/tomcat/

respectivos wrappers de tipos primitivos.

@Digits(integer=,

fraction=)

Verifica se a propriedade possui a quantidade de dígitos antes e depois do

separador de casa decimal. Por exemplo: @Digits(integer=9, fraction=2) significaque espera-se 9 dígitos inteiros e 2 dígitos fracionários. Suporta os tipos:

BigDecimal, BigInteger, String, byte, short, int, long e os respectivos wrappers detipos primitivos.

@Future Checa se a data está no futuro. Suporta os tipos java.util.Date e java.util.Calendar.

@Max(value=) Verifica se o valor é menor ou igual ao valor anotado. Suporta os tipos:BigDecimal, BigInteger, String, byte, short, int, long e os respectivos wrappers detipos primitivos.

@Min(value=) Verifica se o valor é maior ou igual ao valor anotado. Suporta os tipos:BigDecimal, BigInteger, String, byte, short, int, long e os respectivos wrappers de

tipos primitivos.

@NotNull Checa se o valor anotado não é nulo (null). Uma String cujo valor seja vazio (“”)vai passar.

@Null Checa se o valor anotado é nulo (null).

@Past Checa se uma data está no passado. Suporta os tipos java.util.Date ejava.util.Calendar.

@Pattern(regex=, flag=) Checa se a propriedade obedece à expressão regular.

@Size(min=, max=) Confere se a quantidade de elementos está entre o mínimo e o máximo,suportando tipos como: Strings, Collections, Maps e arrays.

@Valid Impõe uma validação recursiva aos objetos associados. Digamos que, no beanPost, houvesse a anotação @Valid no atributo comments. Já na classe Comment,

temos um atributo de validação anotado. Se um valor transmitido a comments, dePost, não estiver de acordo com a validação existente na classe Comment, deacordo com o atributo anotado, um erro será gerado em tempo de execução. A

notação @Valid está sendo usada no PostController para validar os errosexistentes em Post ou Comment.

Tabela 1. Anotações e regras para criar restrições (Constraints).

Alterando o controlador

Alteraremos a classe ContatoController, criada no pacote br.com.integrator.web, de acordo com omostrado na Listagem 2.

Listagem 2. A classe ContatoController alterada.

01 package br.com.integrator.web;02 03 import javax.validation.Valid;04 05 import org.springframework.beans.factory.annotation.Autowired;06 import org.springframework.stereotype.Controller;07 import org.springframework.ui.ModelMap;08 import org.springframework.validation.BindingResult;09 import org.springframework.web.bind.annotation.*;10 11 import br.com.integrator.dao.ContatoDAO;12 import br.com.integrator.Contato;

Page 15: Edson Gonçalves » Tomcat

08/01/13

15/20www.edsongoncalv es.com.br/tag/tomcat/

13 14 @Controller15 @RequestMapping("/contato/**")16 public class ContatoController {17 @Autowired18 private ContatoDAO contatoDao;19 20 @RequestMapping(value = "/contato/{id}", method =

RequestMethod.GET)21 public String show(@PathVariable("id") Long id, ModelMap

modelMap) {22 modelMap.addAttribute("contato", contatoDao.find(id));23 return "contato/show";24 }25 26 @RequestMapping(value = "/contato", method = RequestMethod.GET)27 public String list(ModelMap modelMap) {28 modelMap.addAttribute("contatos", contatoDao.findAll());29 return "contato/list";30 }31 32 @RequestMapping(value = "/contato/{id}", method =

RequestMethod.DELETE)33 public String delete(@PathVariable("id") Long id) {34 contatoDao.remove(contatoDao.find(id));35 return "redirect:/contato";36 }37 38 @RequestMapping(value = "/contato/form", method =

RequestMethod.GET)39 public String form(ModelMap modelMap) {40 modelMap.addAttribute("contato", new Contato());41 return "contato/create";42 }43 44 @RequestMapping(value = "/contato", method = RequestMethod.POST)45 public String create(@Valid Contato contato, BindingResult

result) {46 if (result.hasErrors())47 return "contato/create";48 49 contatoDao.persist(contato);50 return "redirect:/contato";51 }52 53 @RequestMapping(value = "/contato/{id}/form", method =

RequestMethod.GET)54 public String updateForm(@PathVariable("id") Long id, ModelMap

modelMap) {55 modelMap.addAttribute("contato", contatoDao.find(id));56 return "contato/update";57 }58 59 @RequestMapping(method = RequestMethod.PUT)60 public String update(@Valid Contato contato, BindingResult

result) {61 if (result.hasErrors())

return "contato/update";

Page 16: Edson Gonçalves » Tomcat

08/01/13 Edson Gonçalv es » Tomcat

16/20www.edsongoncalv es.com.br/tag/tomcat/

Como visto na Listagem 1, as anotações @Size e @Pattern possuem o atributo message, que capturamospelo Spring MVC na classe ContatoController (Listagem 2) - através da classe javax.validation.Valid(anotação @Valid). Assim como a anotação @Controller, as anotações pertencentes a Bean Validation

são obtidas graças a adição do elemento <mvc:annotation-driven />. Isto permite que as informaçõesanotadas sejam injetadas onde a validação é necessária na sua aplicação.Caso haja um erro, o método

hasErrors(), de org.springframework.validation.BindingResult, retorna true, nos possibilitandoconduzir a navegação da página, com seus respectivos erros, inclusive paralisando a ação ao qual se

encontra. A utilização de hasErrors() ocorre em ContatoController, nos métodos create() e update() como seguinte if:

if (result.hasErrors())

//executa uma ação para conduzir a página com os erros ao usuário

As informações recebidas da validação pela classe Controller são transmitidas para o formulário e

capturadas. Veja como isto ocorre na descrição da Listagem 3.

Alterando as views

Temos três páginas que representam nosso CRUD feitas. Estas páginas foram criadas dentro do diretóriochamado WEB-INF/jsp/contato(fisicamente na ferramenta: src/main/webapp/WEB-INF/jsp/contato).Teremos que alterá-las para permitir que os erros sejam exibidos.

O formulário de cadastro

Abra o arquivo create.jsp e altere como na Listagem 3, adicionando as tags <form:errors />.

Listagem 3. A página create.jsp.

62 return "contato/update";63 64 contatoDao.merge(contato);65 return "redirect:/contato";66 }67 68 }

01 <%@ taglib prefix="spring"uri="http://www.springframework.org/tags"%>

02 <%@ taglib prefix="form"uri="http://www.springframework.org/tags/form" %>

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

uri="http://java.sun.com/jsp/jstl/functions" %>06 07 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"

"http://www.w3.org/TR/html4/loose.dtd">08 <html>09 <head>10 <meta http-equiv="Content-Type" content="text/html; charset=ISO-

8859-1">11 <style type="text/css" media="screen">

@import url("<c:url value="/static/styles/style.css"/>");

Page 17: Edson Gonçalves » Tomcat

08/01/13 Edson Gonçalv es » Tomcat

17/20www.edsongoncalv es.com.br/tag/tomcat/

A tag <form:errors /> foi utilizada na Listagem 3 com dois parâmetros: path e cssClass. No parâmetro

path transmitimos o atributo da classe Contato, validada pelas anotações de Bean Validation, ondereceberá a mensagem.

12 @import url("<c:url value="/static/styles/style.css"/>");13 </style>14 <title>Cadastrar</title>15 16 </head>17 <body>18 <div id="wrap">19 20 <div id="menu">21 <%@ include file="/menu.jsp" %>22 </div>23 <div id="main">24 <div id="body">25 <c:url var="url" value="/contato" />26 <form:form action="${url}" method="POST"

modelAttribute="contato">27 <div>28 <label for="nome">Nome:</label>29 <form:errors path="nome" cssClass="errors"/><br />30 <form:input cssStyle="width:250px" maxlength="30" path="nome"

size="30"/>31 32 </div>33 <br/>34 <div>35 <label for="email">Email:</label>36 <form:errors path="email" cssClass="errors"/><br />37 <form:input cssStyle="width:250px" maxlength="30" path="email"

size="30"/>38 39 </div>40 <br/>41 <div>42 <label for="telefone">Telefone:</label>43 <form:errors path="telefone" cssClass="errors"/><br />44 <form:input cssStyle="width:250px" maxlength="30"

path="telefone" size="20"/>45 </div>46 <br/><div>47 <input id="criar" type="submit" value="Criar Contato"/>48 </div>49 </form:form>50 </div>51 </div>52 </div>53 </body>54 </html>

Page 18: Edson Gonçalves » Tomcat

08/01/13 Edson Gonçalv es » Tomcat

18/20www.edsongoncalv es.com.br/tag/tomcat/

Figura 3 – Processo de validação partindo da

anotação no JavaBean Contato

Podemos ter uma idéia de como ficará a página create.jsp depois das alterações visualizando a Figura 4.

Figura 4 – Validação transmitida para a página deJSP

Alterando a página de atualização de dados

Como feito na página create.jsp, a página update.jsp também receberá as tags <form:errors />. A

Listagem 4 exibe a página com as mudanças, na íntegra.

Listagem 4. A página update.jsp.

01 <%@ taglib prefix="spring"uri="http://www.springframework.org/tags"%>

02 <%@ taglib prefix="form"uri="http://www.springframework.org/tags/form" %>

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

uri="http://java.sun.com/jsp/jstl/functions" %>06 07 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"

"http://www.w3.org/TR/html4/loose.dtd">08 <html>09 <head>10 <meta http-equiv="Content-Type" content="text/html; charset=ISO-

8859-1">11 <style type="text/css" media="screen">12 @import url("<c:url value="/static/styles/style.css"/>");13 </style>14 <title>Atualizar</title>15 </head>16 <body>17 <div id="wrap">

Page 19: Edson Gonçalves » Tomcat

O projeto para download

Clique aqui para baixar o projeto e alterá-lo como desejar.

Considerações finais

Com as validações, boa parte dos problemas iniciais de um desenvolvimento usando o Spring MVC foram

resolvidos. Mas vejam só: é o começo. Caso haja interesse do leitor em aprender um exemplo maiscomplexo, a revista JavaMagazine #78 publicou, um artigo meu com o Spring MVC 3 na criação de um

blog, do começo ao fim. É um bom início para se desenvolver um projeto mais completo e complexo.Para os que acompanham o blog, o assunto Spring MVC não para por aqui. Veremos em breve um site

completo, feito com o framework, unindo várias características do Spring, de seu framework MVC e a partede segurança com Spring Security.

18 <div id="menu">19 <%@ include file="/menu.jsp" %>20 </div>21 <div id="main">22 <div id="body">23 <c:url var="url" value="/contato/${contato.id}" />24 <form:form action="${url}" method="PUT"

modelAttribute="contato">

25 <div>26 <label for="nome">Nome:</label>27 <form:errors path="nome" cssClass="errors"/><br />28 <form:input cssStyle="width:250px" maxlength="30" path="nome"

size="30"/>29 </div>30 <br/>31 <div>32 <label for="email">Email:</label>33 <form:errors path="email" cssClass="errors"/><br />34 <form:input cssStyle="width:250px" maxlength="30" path="email"

size="30"/>35 </div>36 <br/>37 <div>38 <label for="telefone">Telefone:</label>39 <form:errors path="telefone" cssClass="errors"/><br />40 <form:input cssStyle="width:250px" maxlength="30"

path="telefone" size="20"/>41 </div>42 <br/>43 <div>44 <input id="atualizar" type="submit" value="Atualizar Contato"/>45 </div>46 <form:hidden path="id"/>47 </form:form>48 </div>49 </div>50 </div>51 </body>52 </html>

Page 20: Edson Gonçalves » Tomcat

08/01/13 Edson Gonçalv es » Tomcat

20/20www.edsongoncalv es.com.br/tag/tomcat/

Tags: Eclipse IDE, Hibernate, Java EE 6, JPA, JPA 2.0, MySQL, Spring, Spring MVC, Tomcat

Comments (12)

Próxima Página »

Arquivos

abril 2012 (1)setembro 2011 (1)

agosto 2011 (1)janeiro 2011 (1)outubro 2010 (1)

agosto 2010 (2)junho 2010 (2)

maio 2010 (3)abril 2010 (3)

março 2010 (2)fevereiro 2010 (4)janeiro 2010 (3)

CategoriasAndroid 2.1 (1)

Certificações (1)Hibernate (1)

Inicio (1)iReport (1)JasperReports (1)

JPA 2.0 (4)JSF 2.0 (4)

Off-Topic (4)RichFaces (1)

Servidores Java (2)Spring (3)Spring MVC 3.0 (3)

Tags

AJAX Celulares certificado java certificação Eclipse IDE EclipseLink exame GlassFish Google Android

Hibernate ireport jasperreports Java EE 6 JavaServer Faces JPA JPA 2.0 JPA

Project JSF 1.2 JSF 2.0 livro Livros MVC MySQL NetBeans Off-Topic relatórios RichFaces scjp

Servidores Java smartphones Spring Spring MVC Spring Security Telefonia Tomcat

top

Powered by WordPress and Stardust

Created by Tommaso Baldovino