Vous êtes sur la page 1sur 20

08/01/13

Edson Gonalv es Tomcat

Skip to content Skip to menu

Edson Gonalves
Tecnologia e Conhecimento ao Alcance de Todos Pesquisar search...

Incio Livros Sobre abr 11 2012

Se o servidor seu, porque o problema meu?


Category: Off-Topic,Servidores Java Edson Gonalves @ 15:43 Quero comear este ano, em meu blog, falando um pouco sobre administrao em aplicativos e servidores Java, que serve tambm no geral para outros servios. Desde que assumi a gerncia da Integrator na parte de hospedagem, vejo e-mails que so direcionados ao suporte e recebo tambm, muitos pedidos que, sinceramente, no deveriam vir de um desenvolvedor Java. A critica que fao aqui construtiva e, de certa forma, um puxo 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 comea com a sua criao. Voc, profissional desenvolvedor, recebeu a rdua tarefa de criar aquele sistema maravilhoso que algum 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 mquina de desenvolvimento?

Do desenvolvimento at a produo
Muitos desenvolvedores se acostumaram com a automao das ferramentas de desenvolvimento e, claro, com tanta facilidade, parar e iniciar o servio Java ali simples. Entretanto, o desenvolvedor java no pode apenas saber como operar uma ferramenta de desenvolvimento.
www.edsongoncalv es.com.br/tag/tomcat/ 1/20

08/01/13

Edson Gonalv es Tomcat

O profissional de Java precisa, na realidade necessita, conhecer o servidor Java que executa seus aplicativos. No apenas o bsico de instalar, configurar, iniciar e parar. Tambm no vale dizer que sabe ler logs. Vai alm. O profissional Java precisa saber como o servidor Java, que escolheu usar, opera. Isso vai desde as suas caractersticas bsicas de configurao, at como ele pode ser modificado e otimizado para melhorar o desempenho do que desenvolveu. Est bem, voc vai dizer que no 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 vrias tarefas diferentes. E no seu caso, o servidor Java a extenso 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, no somente em sua mquina. Usar o framework XYZ no a etapa final do que criou. no momento que ele vai para produo, que onde aparecero os problemas. O que mais vejo e escuto a frase: na minha mquina funciona. Ora, se voc desenvolve corretamente, sem nenhum problema oculto, nada personalizado especificamente para sua mquina, que causaria erros online, tambm funciona em qualquer lugar. Estes so os problemas mais comuns do desenvolvimento para a produo so: 1) Nome do banco de dados criar a conexo usando um nome local, onde na produo se modifica, bate o recorde em erros de acesso pelo usurio; 2) Nome do usurio do banco de dados segundo problema mais comum, o usurio diferente e gera erro de acesso negado; 3) Permisses de acesso em arquivos o terceiro mais comum, quem usa o Windows est muito acostumado a ter permisso para tudo. Mas online, servidores seguros tem permisses para escrita e execuo, que precisam ser dadas em arquivos e diretrios; 4) Erro no local onde est o banco de dados conhecer a regra de como acessar o banco de dados no servidor de produo o mnimo, vai desde do host at a porta. No sair colocando o que acha ser o correto. Na dvida, sempre perguntar a quem administra o sistema operacional para evitar erros e mudar, principalmente, no cdigo que foi compilado para colocar em produo; 5) Problemas de memria usar o framework XYZ porque ele foi indicado na comunidade como bacana timo. Mas saber o que ele consome de sua mquina melhor ainda. No adianta achar que sabe como usar o Tomcat, que localmente tudo funciona, que online no vai dar problemas, se voc nem sabe localmente o quanto o Tomcat necessita de memria para executar seu aplicativo. Mquina de desenvolvimento possuem vrios GIGAS de memria RAM e muitas vezes o desenvolvedor nem se preocupou em limitar o servio em um X de memria. Online, voc ter configurado uma limitao no servidor Java. importante saber se, dentro desta limitao, seu aplicativo executa com conforto; 6) Envio de email O SMTP tem regras em qualquer lugar. Saber a porta correta, parmetros bsicos mnimos necessrios importante para que, em produo, o envio seja feito sem erros. 7) Erro 404 O deploy no funcionou, logo, tem algo de errado e precisa ver nos logs o que est ocorrendo;
www.edsongoncalv es.com.br/tag/tomcat/ 2/20

08/01/13

Edson Gonalv es Tomcat

8) Bibliotecas As bibliotecas que usa no desenvolvimento precisam estar em produo. Se exportou o WAR file, EAR file, e nenhum est com as bibliotecas, ou falta alguma, porque foram colocadas diretamente no servidor Java, precisa fazer o mesmo em produo. Algumas bibliotecas tambm costumam dar problema quando existem duas do mesmo tipo, mas com verses diferentes. 9) Localizao No deveria estar nesta lista, mas infelizmente, um erro tambm comum. possvel configurar o Locale em seu aplicativo ou diretamente no servidor Java. No porque na sua mquina o Locale em pt-br que online vai ser tambm. Saber modificar isso no servidor Java que seja, no difcil e lhe salva de dores de cabea com uma configurao muito simples. 10) Erro na descompactao do arquivo WAR Probleminha comum quando voc sobe por FTP o aplicativo 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 lanar um erro na descompactao. 11) Assumir o problema , eu sei, isto no se trata de erro de produo. Mas pensar um ato importante para resolver problemas. Sair culpando outro, sendo que o problema seu, no faz parte do meio que escolheu como profisso. Se assumiu um cargo como desenvolvedor, assuma tambm que o que fizer, desenvolver, pode ter falhas e que elas so corrigveis. Assumir o problema o primeiro passo em direo da soluo.

Os logs so a chave para a soluo dos problemas


Todos os problemas, que relatei acima, sempre lanam excees. Claro que, muitas vezes, o desenvolvedor sai reclamando antes de pensar, que sua maior tarefa, do porque essas excees esto sendo lanadas. A grande vantagem do java que ele aponta o dedo para o problema. E de tantos que usam no mundo, muito fcil descobrir uma resposta para o problema. Mas fica mais difcil se quiser que resolvam o SEU problema para voc, acredite.

Indo alm dos servidores Java


Em produo, no basta apenas saber como operar um servidor Java. Voc desenvolveu o aplicativo e, como conhecedor do que fez, deve tambm 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 no caiu, deu um erro estranho em seu aplicativo ou aconteceu algo que no havia previsto, claro. Mas a culpa no sua, certo? Funcionava antes e no mexi em nada. Errado! Totalmente sua culpa. S de dar a resposta de que no mexeu em nada j implica que no est cuidando do que fez. Se no observar por um tempo o que desenvolveu, a evoluo do que fez, no vai ter correes e, como consequncia, erros. Saiba estes princpios bsicos no desenvolvimento: 1) Bibliotecas e frameworks mudam se mudam de verso, porque a anterior no era perfeita. Erros so reportados e precisam ser atualizados para evitar que no seu, uma hora ocorra o que outro j teve. 2) Servidores Java mudam mesma situao que citei acima, se mudou a verso do servidor Java, pode
www.edsongoncalv es.com.br/tag/tomcat/ 3/20

08/01/13

Edson Gonalv es Tomcat

ser que, algum possvel bug pode causar problemas em seu aplicativo. 3) Profiler Usar um profiler vai lhe orientar como seu aplicativo se comporta e ver possveis picos de memria/CPU que possam lhe causar problemas, mais adiante, com muitos usurios acessando.

Atacando o problema de frente


Evidentemente muitas so as situaes que ocorrem em aplicativos. Nem todos os problemas so simples de serem solucionados. Mas alguns podem ser de simples resoluo se, de fato, voc realmente quiser resolver a situao. 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 tambm saber otimizar a estrutura 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 no quer mexer no que estava funcionando bem nos primeiros 10.000 registros/acessos. Mas agora no est mais. Muita gente acessando, muitos erros sendo lanados, memria, velocidade. Precisa modificar o comportamento, voltar para a prancheta do desenvolvimento e replanejar. Se no 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 no estar dando conta do recado como outro daria. hora de conhecer novos servidores Java e testar, seja o Jetty, JBoss ou GlassFish. Algumas pequenas mudanas, como a troca de servidor Java, podem trazer benefcios 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, algum arrumou alguma soluo que fez melhorar o desempenho do aplicativo com aquela tecnologia XYZ que escolheu e deu a dica. Busque alternativas e dicas.

Empurro ou puxo de orelha?


Minha inteno dar a vocs, leitores deste blog, um empurro no sentido certo. Existem vrias etapas no desenvolvimento e todas envolvem o que criou. Vai desde o sistema operacional que ir trabalhar em produo, at o que acessado pelo seu aplicativo. Estes detalhes precisam ser todos analisados, mesmo que 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


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

08/01/13

Edson Gonalv es Tomcat

Category: Off-Topic Edson Gonalves @ 21:46 Ol Pessoal, tudo bom? Como vo vocs? Sei que estou sumido do blog. Muitos leitores esto, nestes meses, me mandando comentrios pedindo a continuao de alguns artigos, de sries, que comecei e ainda no 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 possui pouco tempo livre, como eu, no caso, deixar os finais de semana com a famlia 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 entrar em contato comigo. Sei o quanto difcil 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 informtica, quem escreve para ter o prazer de ajudar aqueles que esto com as mesmas dificuldades que, com certeza, passamos um dia. Quero deixar aqui os meus sinceros agradecimentos a todos aqueles que postam comentrios elogiando, criticando e pedindo mais tutoriais no blog. Para aqueles que no liberei os comentrios, fiquem tranquilos que eu os li. S no os liberei, muitas vezes, porque no tive tempo ou, por serem pedidos e perguntas relacionadas diretamente a mim, sobre o assunto, no me permiti o tempo necessrio para responde-los. Assim que terminar o meu primeiro objetivo, que a completa reformulao e atualizao, do livro Desenvolvendo Aplicaes 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 espao aberto, neste tpico, para que comentem o que acham interessante de estar neste livro que estou trabalhando. J garanto que muitas criticas e pedidos, vindos de algumas centenas de leitores, no sero ignorados. Professores de universidades, faculdades e escolas tcnicas do Brasil e alguns pases de lngua portuguesa, que tambm me procuraram para deixar seus pedidos e criticas, quero manter meu compromisso de que todos sero levados em considerao. Agradeo a compreenso de todos. Bons cdigos! 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 relatrios JasperReports na Web com Fontes embebidas


Category: iReport,JasperReports Edson Gonalves @ 5:43 Ol Pessoal, tudo bom? Como vo vocs?
www.edsongoncalv es.com.br/tag/tomcat/ 5/20

08/01/13

Edson Gonalv es Tomcat

Em 2011 quero comear com um artigo ensinando uma dvida muito frequente aos usurios de hospedagem da Integrator Host: embeber as fontes desktop no relatrio JasperReports para serem usadas no aplicativo Web. No geral, relatrios so criados no desktop, onde usamos uma ferramenta visual, arrastando, modificando e, claro, gerando uma aparncia agradvel. Se a aparncia ento for feita por um Designer, este pouco se importa onde vai ser gerado tal relatrio, o importante o VISUAL. neste momento que comea o problema. Um relatrio pode usar fontes desktop que no esto disponveis 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 mquina servidora, toda vez que voc estiver com um relatrio enfeitadinho. Se instalar, tambm no ser na hora. O que fazer neste caso ento? Como obter independncia? Pensando nesta questo, a equipe de desenvolvimento do JasperReports incluiu a capacidade de adicionar as fontes desktop em seu aplicativo, para que estejam disponveis quando aquele seu belo relatrio for gerado para o cliente. O que veremos neste artigo como executar tal tarefa, partindo de um relatrio 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 relatrio foi criado usando o assistente do iReport 4, onde o resultado final, aps minhas pequenas alteraes, o que mostra a Figura 2.

Figura 2 Relatrio gerado pelo assistente com pequenas modificaes Tenham em mente que este artigo no vai ensin-los a criar relatrios e sim como contornar um problema comum entre os desenvolvedores Java. Caso queiram dominar a arte de desenvolver relatrios
www.edsongoncalv es.com.br/tag/tomcat/

JasperReports com o iReport, vejam a minha seo de livros clicando aqui.

6/20

08/01/13

Edson Gonalv es Tomcat

JasperReports com o iReport, vejam a minha seo de livros clicando aqui.

Trabalhando com fontes personalizadas no relatrio


Aps desenhar o relatrio, chega o momento de finalizar a arte com alguns toques e, em meio as mudanas, eis que surge a ideia de personalizar a fonte tambm do texto contido no relatrio. No exemplo que fiz, os textos fixos foram todos personalizados com uma fonte que possuo em minha mquina, chamada Impact.

Figura 3 A fonte escolhida para o texto esttico Produtos do relatrio Embora esta fonte seja importante para o design do meu relatrio, no tenho garantias que ela exista no servidor onde hospedo meus aplicativos. Logo, o que parece simples, pode se tornar um pesadelo se no for eu o responsvel pela administrao do sistema operacional.

Adicionando a fonte ao aplicativo


Graas ao problema de ausncia de fontes em servidores de hospedagem, muitos desenvolvedores no podiam depender da empresa ou administrador que fornece a mquina 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 relatrio em produo. Adicionando e exportando a fonte no iReport V no menu Tools >Options (menu iReport>Preferences no Mac OS X) e, na janela Options, em iReport, selecionem a aba Fonts. Atravs do boto Install Font selecionamos as fontes que desejamos importar no iReport. Depois de importadas, podemos selecionar todas elas e export-las atravs do boto Export as extension.

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

7/20

08/01/13

Edson Gonalv es Tomcat

Figura 4 A fonte escolhida e usada no relatrio pronta para ser exportada No exemplo que explico, chamei o arquivo que exportei de font.jar. justamente este arquivo que vou adicionar 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 de dilogo Properties, vamos em Java Build Path, na aba Libraries. Para adicionarmos a biblioteca font.jar, vamos no boto Add External JARs.

Figura 5 O JAR font.jar adicionado nas bibliotecas do meu projeto Claro que eu no poderia deixar de comentar uma particularidade do Eclipse IDE na verso Helios. Para projetos Java EE. Nesta verso, 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 sero exportadas ao executarmos o servidor Java.

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

8/20

08/01/13

Edson Gonalv es Tomcat

Figura 6 Adicionando os arquivos JARs do projeto no aplicativo Web Ao clicarmos no boto Add, a caixa de dilogo New Assembly Directive surge. Esta caixa de dilogo a responsvel 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 relatrio JasperReports devem estar presentes finalizando no boto Finish.

Figura 8 Arquivos JARs selecionados Retornando ao dilogo Properties, no item Deployment Assembly, temos todas as bibliotecas que sero
www.edsongoncalv es.com.br/tag/tomcat/ 9/20

08/01/13

Edson Gonalv es Tomcat

adicionadas ao diretrio lib do projeto, incluindo font.jar.

Figura 9 As bibliotecas que sero exportadas para o diretrio /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 sero exportadas para o diretrio /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 relatrio gerado, em formato PDF, sem a fonte no diretrio lib do projeto. Note a diferena com a Figura 12 em relao ao formato da fonte, principalmente do ttulo Produtos.

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

10/20

08/01/13

Edson Gonalv es Tomcat

Figura 11 Arquivo PDF gerado como relatrio sem a fonte no diretrio lib do projeto

Figura 12 Arquivo PDF gerado como relatrio com a fonte no diretrio lib do projeto

O projeto para download


Clique aqui para baixar o projeto e alter-lo como desejar. Tags: Eclipse IDE, ireport, jasperreports, NetBeans, relatrios, Tomcat Comments (9) out 24 2010

Spring MVC 3 na Prtica com Bean Validation


Category: Spring,Spring MVC 3.0 Edson Gonalves @ 20:56 Ol Pessoal, tudo bom? Como vo vocs? Este o terceiro artigo da srie Spring MVC 3.0. Se vocs no 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, dvidas e crticas so bem vindas.

Alterando o CRUD criado com o Spring MVC


O projeto neste artigo o mesmo do segundo artigo da srie. Entretanto, faremos algumas alteraes para que passe a utilizar validaes do Bean Validation.
www.edsongoncalv es.com.br/tag/tomcat/ 11/20

08/01/13

Edson Gonalv es Tomcat

Adicionando as bibliotecas ao projeto utilizando o Maven


Mais uma vez, recorreremos ao Maven para adicionar as bibliotecas que necessitamos. Neste caso, teremos que baixar o Hibernate Validator. Para utilizar o Bean Validation, utilizaremos dois JARs: hibernatevalidator-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 as configuraes que necessitamos. Criando a propriedade Na aba Overview, em Properties, cliquem no boto Create. Na caixa de dilogo Add property, preencham como na Figura 1.

Figura 1 - Criao da property da verso do hibernate validator Criando a dependncia Com a propriedade definida para informar qual verso desejamos utilizar, no qual o Maven dever baixar, resta configurar as dependncias. Na aba Dependencies, cliquem no boto Create e preencham conforme a Figura 2 ilustra.

Figura 2 - A dependncia do Hibernate Validator

Alterando a entidade Contato


A entidade do artigo, chamada de Contato, ser a primeira coisa que iremos modificar no projeto. Graas a JSR 303, chamada de Bean Validation, podemos anotar as entidades com validaes. Com as anotaes de Bean Validation na entidade, concentramos a validao em um nico local, de forma padronizada, tornando possvel portar estas validaes para as classes controladoras do Spring MVC.
www.edsongoncalv es.com.br/tag/tomcat/ 12/20

08/01/13

Edson Gonalv es Tomcat

A Listagem 1 exibe a entidade Contato modificada. Note as anotaes de validao onde colocamos as mensagens de erro embutidas. Mais adiante iremos captur-las para exibir o problema ao usurio. Listagem 1. A entidade Contato com anotaes Bean Validation. 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1 2 2 2 3 pcaeb.o.nertr akg rcmitgao; ipr jvxpritne* mot aa.essec.; ipr jvxvldto.osrit.; mot aa.aiaincntans* @niy Ett @al(ae="ott" Tbenm cnao) pbi casCnao{ ulc ls ott @d I @eeaeVlesrtg =GnrtoTp.DNIY Gnrtdau(taey eeainyeIETT) @ounnm ="d) Clm(ae i" piaeLn i; rvt og d @oNl Ntul @iemn5 msae" nm nopd trmnsqe5 Sz(i=, esg=O oe oe e eo u crcee!) aatrs" piaeSrn nm; rvt tig oe @oNl Ntul @atr(eep="[\\-+\.\w\])@[-az-Ptenrgx ^\w\](\[\\-+*(AZ-09 ]\.+AZ-]24$,msae"-alcmfraoicreo" +\)[-az{,}" esg=Emi o omt nort.) piaeSrn eal rvt tig mi; @atr(eep="\?\(09{}\)[.](09{}[. Ptenrgx \(\b[-]2)\?- ?[-]4)](09{}\b,msae"eeoee fraoicreo) ?[-]4)\" esg=Tlfn m omt nort" piaeSrn tlfn; rvt tig eeoe } /gtesestes /etr etr

A infra-estrutura definida pela JSR 303 nos permite descrever as restries, usando anotaes no modelo de classes de persistncia, como definir se um campo aceitar uma quantidade mnima de caracteres ou se no aceitar nulo, por exemplo. Cada anotao associada a uma validao, verificando se a instncia da entidade anotada obedece regra ou no. A Tabela 1 apresenta todas as anotaes possveis de serem usadas e suas funcionalidades. Annotation @AssertFalse @AssertTrue @DecimalMax(value=) O que faz? Checa se a propriedade anotada falsa. Checa se a propriedade anotada verdadeira. A propriedade anotada precisa ser um nmero, cujo valor deve estar menor ou igual ao valor mximo previsto. O parmetro value a representao em string do valor mximo aceito de acordo com o formato representado em BigDecimal. Suporta tipos como BigDecimal, BigInteger, String, byte, short, int, long e os respectivos wrappers de tipos primitivos. A propriedade anotada precisa ser um nmero, cujo valor deve estar maior ou igual ao valor mnimo previsto. O parmetro value a representao em string do valor mnimo de acordo com a representao de sequncia de BigDecimal. Suporta tipos como BigDecimal, BigInteger, String, byte, short, int, long e os
13/20

@DecimalMin(value=)

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

08/01/13

Edson Gonalv es Tomcat

@Digits(integer=, fraction=)

@Future @Max(value=)

@Min(value=)

respectivos wrappers de tipos primitivos. Verifica se a propriedade possui a quantidade de dgitos antes e depois do separador de casa decimal. Por exemplo: @Digits(integer=9, fraction=2) significa que espera-se 9 dgitos inteiros e 2 dgitos fracionrios. Suporta os tipos: BigDecimal, BigInteger, String, byte, short, int, long e os respectivos wrappers de tipos primitivos. Checa se a data est no futuro. Suporta os tipos java.util.Date e java.util.Calendar. Verifica se o valor menor ou igual ao valor anotado. Suporta os tipos: BigDecimal, BigInteger, String, byte, short, int, long e os respectivos wrappers de tipos primitivos. 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 no 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 e java.util.Calendar. @Pattern(regex=, flag=) Checa se a propriedade obedece expresso regular. @Size(min=, max=) Confere se a quantidade de elementos est entre o mnimo e o mximo, suportando tipos como: Strings, Collections, Maps e arrays. @Valid Impe uma validao recursiva aos objetos associados. Digamos que, no bean Post, houvesse a anotao @Valid no atributo comments. J na classe Comment, temos um atributo de validao anotado. Se um valor transmitido a comments, de Post, no estiver de acordo com a validao existente na classe Comment, de acordo com o atributo anotado, um erro ser gerado em tempo de execuo. A notao @Valid est sendo usada no PostController para validar os erros existentes em Post ou Comment. Tabela 1. Anotaes e regras para criar restries (Constraints).

Alterando o controlador
Alteraremos a classe ContatoController, criada no pacote br.com.integrator.web, de acordo com o mostrado na Listagem 2. Listagem 2. A classe ContatoController alterada. 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 1 0 1 1 1 2 pcaeb.o.nertrwb akg rcmitgao.e; ipr jvxvldto.ai; mot aa.aiainVld ipr ogsrnfaeokbasfcoyantto.uoie; mot r.pigrmwr.en.atr.noainAtwrd ipr ogsrnfaeokseetp.otolr mot r.pigrmwr.troyeCnrle; ipr ogsrnfaeoku.oeMp mot r.pigrmwr.iMdla; ipr ogsrnfaeokvldto.idnRsl; mot r.pigrmwr.aiainBnigeut ipr ogsrnfaeokwbbn.noain* mot r.pigrmwr.e.idantto.; ipr b.o.nertrdoCnaoA; mot rcmitgao.a.ottDO ipr b.o.nertrCnao mot rcmitgao.ott;
14/20

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

08/01/13

1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 3 0 3 1 3 2

@otolr Cnrle @eusMpig"cnao*" Rqetapn(/ott/*) pbi casCnaootolr{ ulc ls ottCnrle @uoie Atwrd piaeCnaoA cnaoa; rvt ottDO ottDo @eusMpigvle="cnao{d" mto = Rqetapn(au /ott/i}, ehd RqetehdGT eusMto.E) pbi Srn so(PtVral(i" Ln i,Mdla ulc tig hw@ahaibe"d) og d oeMp mdla){ oeMp mdla.dAtiue"ott" cnaoa.idi); oeMpadtrbt(cnao, ottDofn(d) rtr "ott/hw; eun cnaoso" } @eusMpigvle="cnao,mto =RqetehdGT Rqetapn(au /ott" ehd eusMto.E) pbi Srn ls(oeMpmdla){ ulc tig itMdla oeMp mdla.dAtiue"otts,cnaoa.idl() oeMpadtrbt(cnao" ottDofnAl); rtr "ott/it; eun cnaols" } @eusMpigvle="cnao{d" mto = Rqetapn(au /ott/i}, ehd RqetehdDLT) eusMto.EEE pbi Srn dlt(PtVral(i" Ln i){ ulc tig eee@ahaibe"d) og d cnaoa.eoecnaoa.idi); ottDormv(ottDofn(d) rtr "eiet/ott" eun rdrc:cnao; }

3 3 3 4 3 5 3 6 3 7 3 @eusMpigvle="cnaofr" mto = 8 Rqetapn(au /ott/om, ehd RqetehdGT eusMto.E) 3 pbi Srn fr(oeMpmdla){ 9 ulc tig omMdla oeMp 4 mdla.dAtiue"ott" nwCnao); 0 oeMpadtrbt(cnao, e ott() 4 rtr "ott/rae; 1 eun cnaocet" 4 } 2 4 3 4 @eusMpigvle="cnao,mto =RqetehdPS) 4 Rqetapn(au /ott" ehd eusMto.OT 4 pbi Srn cet(VldCnaocnao Bnigeut 5 ulc tig rae@ai ott ott, idnRsl rsl){ eut 4 i (euthsros) 6 f rsl.aErr() 4 rtr "ott/rae; 7 eun cnaocet" 4 8 4 cnaoa.ess(ott) 9 ottDopritcnao; 5 rtr "eiet/ott" 0 eun rdrc:cnao; 5 } 1 5 2 5 @eusMpigvle="cnao{d/om,mto = 3 Rqetapn(au /ott/i}fr" ehd RqetehdGT eusMto.E) 5 pbi Srn udtFr(PtVral(i" Ln i,Mdla 4 ulc tig paeom@ahaibe"d) og d oeMp mdla){ oeMp 5 mdla.dAtiue"ott" cnaoa.idi); 5 oeMpadtrbt(cnao, ottDofn(d) 5 rtr "ott/pae; 6 eun cnaoudt" 5 } 7 5 8 5 @eusMpigmto =RqetehdPT 9 Rqetapn(ehd eusMto.U) 6 pbi Srn udt(VldCnaocnao Bnigeut 0 ulc tig pae@ai ott ott, idnRsl rsl){ eut 6 i (euthsros) 1 f rsl.aErr()
www.edsongoncalv es.com.br/tag/tomcat/

rtr "ott/pae; eun cnaoudt"

15/20

08/01/13

Edson Gonalv es Tomcat

6 2 6 3 6 4 6 5 6 6 6 7 6 8

rtr "ott/pae; eun cnaoudt" cnaoa.eg(ott) ottDomrecnao; rtr "eiet/ott" eun rdrc:cnao; } }

Como visto na Listagem 1, as anotaes @Size e @Pattern possuem o atributo message, que capturamos pelo Spring MVC na classe ContatoController (Listagem 2) - atravs da classe javax.validation.Valid (anotao @Valid). Assim como a anotao @Controller, as anotaes pertencentes a Bean Validation so obtidas graas a adio do elemento <mvc:annotation-driven />. Isto permite que as informaes anotadas sejam injetadas onde a validao necessria na sua aplicao.Caso haja um erro, o mtodo hasErrors(), de org.springframework.validation.BindingResult, retorna true, nos possibilitando conduzir a navegao da pgina, com seus respectivos erros, inclusive paralisando a ao ao qual se encontra. A utilizao de hasErrors() ocorre em ContatoController, nos mtodos create() e update() com o seguinte if:
i (euthsros) f rsl.aErr() /eeuauaa pr cnui apgn cmo ersa uuro /xct m o aa odzr ia o s ro o si

As informaes recebidas da validao pela classe Controller so transmitidas para o formulrio e capturadas. Veja como isto ocorre na descrio da Listagem 3.

Alterando as views
Temos trs pginas que representam nosso CRUD feitas. Estas pginas foram criadas dentro do diretrio chamado 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 formulrio de cadastro Abra o arquivo create.jsp e altere como na Listagem 3, adicionando as tags <form:errors />. Listagem 3. A pgina create.jsp. 0 <@tgi pei=srn" 1 % alb rfx"pig ui"tp/wwsrnfaeokogtg"> r=ht:/w.pigrmwr.r/as% 0 <@tgi pei=fr" 2 % alb rfx"om ui"tp/wwsrnfaeokogtg/om % r=ht:/w.pigrmwr.r/asfr" > 0 <@tgi pei=c ui"tp/jv.u.o/s/slcr"% 3 % alb rfx"" r=ht:/aasncmjpjt/oe > 0 <@tgi pei=ft ui"tp/jv.u.o/s/slft % 4 % alb rfx"m" r=ht:/aasncmjpjt/m" > 0 <@tgi pei=f" 5 % alb rfx"n ui"tp/jv.u.o/s/slfntos % r=ht:/aasncmjpjt/ucin" > 0 6 0 <DCYEhm PBI "/WC/T HM 40 Tastoa/E" 7 !OTP tl ULC -/3/DD TL .1 rniinl/N "tp/www.r/Rhm4loedd> ht:/w.3ogT/tl/os.t" 0 <tl 8 hm> 0 <ed 9 ha> 1 <eaht-qi=CnetTp"cnet"ethm;castIO 0 mt tpeuv"otn-ye otn=tx/tl hre=S85-" 891> 1 1 <tl tp=tx/s"mda"cen> sye ye"etcs ei=sre"
www.edsongoncalv es.com.br/tag/tomcat/

@motul"culvle"sai/tlssyecs/"; ipr r(<:r au=/ttcsye/tl.s">)

16/20

08/01/13

Edson Gonalv es Tomcat

ipr r(<:r au=/ttcsye/tl.s">) 1 2 @motul"culvle"sai/tlssyecs/"; 1 3 <sye /tl> 1 <il>aata<tte 4 tteCdsrr/il> 1 5 1 <ha> 6 /ed 1 <oy 7 bd> 1 8 <i i=wa" dv d"rp> 1 9 2 0 <i i=mn" dv d"eu> 2 1 <@icuefl=/eujp % % nld ie"mn.s" > 2 2 <dv /i> 2 3 <i i=mi" dv d"an> 2 4 <i i=bd" dv d"oy> 2 5 <:r vr"r"vle"cnao / cul a=ul au=/ott" > 2 6 <omfr ato=$ul"mto=PS" fr:om cin"{r} ehd"OT mdltrbt=cnao> oeAtiue"ott" 2 7 <i> dv 2 8 <ae fr"oe>oe<lbl lbl o=nm"Nm:/ae> 2 9 <omerr pt=nm"csls=err">b / fr:ros ah"oe sCas"ros/<r > 3 0 <omiptcstl=wdh20x mxegh"0 pt=nm" fr:nu sSye"it:5p" alnt=3" ah"oe sz=3"> ie"0/ 3 1 3 2 <dv /i> 3 3 <r> b/ 3 4 <i> dv 3 5 <ae fr"mi"Eal<lbl lbl o=eal>mi:/ae> 3 6 <omerr pt=eal csls=err">b / fr:ros ah"mi" sCas"ros/<r > 3 7 <omiptcstl=wdh20x mxegh"0 pt=eal fr:nu sSye"it:5p" alnt=3" ah"mi" sz=3"> ie"0/ 3 8 3 9 <dv /i> 4 0 <r> b/ 4 1 <i> dv 4 2 <ae fr"eeoe>eeoe<lbl lbl o=tlfn"Tlfn:/ae> 4 3 <omerr pt=tlfn"csls=err">b / fr:ros ah"eeoe sCas"ros/<r > 4 4 <omiptcstl=wdh20x mxegh"0 fr:nu sSye"it:5p" alnt=3" pt=tlfn"sz=2"> ah"eeoe ie"0/ 4 <dv 5 /i> 4 6 <r>dv b/<i> 4 7 <nu i=cir tp=sbi"vle"ra Cnao/ ipt d"ra" ye"umt au=Cir ott"> 4 8 <dv /i> 4 9 <fr:om /omfr> 5 0 <dv /i> 5 1 <dv /i> 5 2 <dv /i> 5 <bd> 3 /oy 5 <hm> 4 /tl A tag <form:errors /> foi utilizada na Listagem 3 com dois parmetros: path e cssClass. No parmetro path transmitimos o atributo da classe Contato, validada pelas anotaes de Bean Validation, onde receber a mensagem.

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

17/20

08/01/13

Edson Gonalv es Tomcat

Figura 3 Processo de validao partindo da anotao no JavaBean Contato Podemos ter uma idia de como ficar a pgina create.jsp depois das alteraes visualizando a Figura 4.

Figura 4 Validao transmitida para a pgina de JSP Alterando a pgina de atualizao de dados Como feito na pgina create.jsp, a pgina update.jsp tambm receber as tags <form:errors />. A Listagem 4 exibe a pgina com as mudanas, na ntegra. Listagem 4. A pgina update.jsp. 0 <@tgi pei=srn" 1 % alb rfx"pig ui"tp/wwsrnfaeokogtg"> r=ht:/w.pigrmwr.r/as% 0 <@tgi pei=fr" 2 % alb rfx"om ui"tp/wwsrnfaeokogtg/om % r=ht:/w.pigrmwr.r/asfr" > 0 <@tgi pei=c ui"tp/jv.u.o/s/slcr"% 3 % alb rfx"" r=ht:/aasncmjpjt/oe > 0 <@tgi pei=ft ui"tp/jv.u.o/s/slft % 4 % alb rfx"m" r=ht:/aasncmjpjt/m" > 0 <@tgi pei=f" 5 % alb rfx"n ui"tp/jv.u.o/s/slfntos % r=ht:/aasncmjpjt/ucin" > 0 6 0 <DCYEhm PBI "/WC/T HM 40 Tastoa/E" 7 !OTP tl ULC -/3/DD TL .1 rniinl/N "tp/www.r/Rhm4loedd> ht:/w.3ogT/tl/os.t" 0 <tl 8 hm> 0 <ed 9 ha> 1 <eaht-qi=CnetTp"cnet"ethm;castIO 0 mt tpeuv"otn-ye otn=tx/tl hre=S85-" 891> 1 1 <tl tp=tx/s"mda"cen> sye ye"etcs ei=sre" 1 2 @motul"culvle"sai/tlssyecs/"; ipr r(<:r au=/ttcsye/tl.s">) 1 3 <sye /tl> 1 <il>taia<tte 4 tteAulzr/il> 1 <ha> 5 /ed 1 <oy 6 bd> 1 7 <i i=wa" dv d"rp>
www.edsongoncalv es.com.br/tag/tomcat/ 18/20

1 8 1 9 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 3 0 3 1 3 2 3 3 3 4 3 5 3 6 3 7 3 8 3 9 4 0 4 1 4 2 4 3 4 4 4 5 4 6 4 7 4 8 4 9 5 0 5 1 5 2

<i i=mn" dv d"eu> <@icuefl=/eujp % % nld ie"mn.s" > <dv /i> <i i=mi" dv d"an> <i i=bd" dv d"oy> <:r vr"r"vle"cnao$cnaoi} / cul a=ul au=/ott/{ott.d" > <omfr ato=$ul"mto=PT fr:om cin"{r} ehd"U" mdltrbt=cnao> oeAtiue"ott" <i> dv <ae fr"oe>oe<lbl lbl o=nm"Nm:/ae> <omerr pt=nm"csls=err">b / fr:ros ah"oe sCas"ros/<r > <omiptcstl=wdh20x mxegh"0 pt=nm" fr:nu sSye"it:5p" alnt=3" ah"oe sz=3"> ie"0/ <dv /i> <r> b/ <i> dv <ae fr"mi"Eal<lbl lbl o=eal>mi:/ae> <omerr pt=eal csls=err">b / fr:ros ah"mi" sCas"ros/<r > <omiptcstl=wdh20x mxegh"0 pt=eal fr:nu sSye"it:5p" alnt=3" ah"mi" sz=3"> ie"0/ <dv /i> <r> b/ <i> dv <ae fr"eeoe>eeoe<lbl lbl o=tlfn"Tlfn:/ae> <omerr pt=tlfn"csls=err">b / fr:ros ah"eeoe sCas"ros/<r > <omiptcstl=wdh20x mxegh"0 fr:nu sSye"it:5p" alnt=3" pt=tlfn"sz=2"> ah"eeoe ie"0/ <dv /i> <r> b/ <i> dv <nu i=aulzr tp=sbi"vle"taia Cnao/ ipt d"taia" ye"umt au=Aulzr ott"> <dv /i> <omhde pt=i"> fr:idn ah"d/ <fr:om /omfr> <dv /i> <dv /i> <dv /i> <bd> /oy <hm> /tl

O projeto para download


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

Consideraes finais
Com as validaes, boa parte dos problemas iniciais de um desenvolvimento usando o Spring MVC foram resolvidos. Mas vejam s: o comeo. Caso haja interesse do leitor em aprender um exemplo mais complexo, a revista JavaMagazine #78 publicou, um artigo meu com o Spring MVC 3 na criao de um blog, do comeo ao fim. um bom incio para se desenvolver um projeto mais completo e complexo. Para os que acompanham o blog, o assunto Spring MVC no para por aqui. Veremos em breve um site completo, feito com o framework, unindo vrias caractersticas do Spring, de seu framework MVC e a parte de segurana com Spring Security.

08/01/13

Edson Gonalv es Tomcat

Tags: Eclipse IDE, Hibernate, Java EE 6, JPA, JPA 2.0, MySQL, Spring, Spring MVC, Tomcat Comments (12) Prxima Pgina 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) maro 2010 (2) fevereiro 2010 (4) janeiro 2010 (3) Categorias Android 2.1 (1) Certificaes (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 certificao

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 relatrios RichFaces scjp Servidores Java smartphones Spring Spring MVC Spring Security T elefonia Tomcat
top Powered by WordPress and Stardust Created by Tommaso Baldovino

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

20/20

Vous aimerez peut-être aussi