<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Blog do Pablo Nóbrega</title>
	<atom:link href="http://pablonobrega.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://pablonobrega.wordpress.com</link>
	<description>Soluçoes em Análise de Sistemas, Programação Java e Gestão de T.I.</description>
	<lastBuildDate>Tue, 24 Jan 2012 12:06:32 +0000</lastBuildDate>
	<language>pt-br</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='pablonobrega.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Blog do Pablo Nóbrega</title>
		<link>http://pablonobrega.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://pablonobrega.wordpress.com/osd.xml" title="Blog do Pablo Nóbrega" />
	<atom:link rel='hub' href='http://pablonobrega.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Corrigindo o problema de Ajax no IE9 com JSF e Richfaces 3</title>
		<link>http://pablonobrega.wordpress.com/2011/11/16/corrigindo-o-problema-de-ajax-no-ie9-com-jsf-e-richfaces-3/</link>
		<comments>http://pablonobrega.wordpress.com/2011/11/16/corrigindo-o-problema-de-ajax-no-ie9-com-jsf-e-richfaces-3/#comments</comments>
		<pubDate>Wed, 16 Nov 2011 14:05:46 +0000</pubDate>
		<dc:creator>Pablo Nóbrega</dc:creator>
				<category><![CDATA[programação]]></category>
		<category><![CDATA[programação JSF]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[filter]]></category>
		<category><![CDATA[jsf]]></category>
		<category><![CDATA[richfaces]]></category>

		<guid isPermaLink="false">http://pablonobrega.wordpress.com/?p=365</guid>
		<description><![CDATA[Assim que saiu o Internet Explorer 9 começamos a ter inúmeros problemas com o RichFaces 3, especialmente com as requisições em Ajax. O problema está no javascript de terceiros usado pelo componente de interfaces ricas. Algumas pessoas mencionaram ter conseguido corrigir e divulgaram o método, entretanto outras fizeram o mesmo procedimento e não deu certo [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pablonobrega.wordpress.com&amp;blog=6421373&amp;post=365&amp;subd=pablonobrega&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Assim que saiu o Internet Explorer 9 começamos a ter inúmeros problemas com o RichFaces 3, especialmente com as requisições em Ajax. O problema está no javascript de terceiros usado pelo componente de interfaces ricas. Algumas pessoas mencionaram ter conseguido corrigir e divulgaram o método, entretanto outras fizeram o mesmo procedimento e não deu certo (como eu).</p>
<p>Segundo os desenvolvedores do RichFaces, eles estão muito atarefados com a versão 4.0 da biblioteca. Há previsão de sair uma versão 3.3.4 com as correções, mas sem prazo divulgado.</p>
<p>Dessa forma, a única solução que encontrei foi adicionar um filtro no web.xml para forçar o IE9 a trabalhar como a versão 8. O procedimento é muito simples e leva poucos minutos. Vamos a ele:</p>
<p><span id="more-365"></span></p>
<ol start="1">
<li>Crie uma classe Filter que adicione um header ao response forçando o IE9 a trabalhar como a versão 8. O arquivo <strong>.java</strong> pode ser o seguinte:</li>
</ol>
<p><pre class="brush: java;">

package br.com.projeto.filter;

import java.io.IOException;
import javax.servlet.*;
import javax.servlet.http.HttpServletResponse;

public class FiltroCorrecaoIE9 implements Filter {

   public void init(FilterConfig filterConfig) throws ServletException {
   }

   public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
      ((HttpServletResponse) response).setHeader(&quot;X-UA-Compatible&quot;, &quot;IE=EmulateIE8&quot;);
      chain.doFilter(request, response);
   }

   public void destroy() {
   }
}

</pre></p>
<ol start="2">
<li>Adicione o filter ao web.xml. Exemplo de código abaixo:</li>
</ol>
<p><pre class="brush: xml;">

&lt;filter&gt;
    &lt;filter-name&gt;filtroIE9&lt;/filter-name&gt;
    &lt;filter-class&gt;br.com.projeto.filter.FiltroCorrecaoIE9&lt;/filter-class&gt;
&lt;/filter&gt;

&lt;filter-mapping&gt;
    &lt;filter-name&gt;filtroIE9&lt;/filter-name&gt;
    &lt;url-pattern&gt;*.jsf&lt;/url-pattern&gt;
&lt;/filter-mapping&gt;

</pre></p>
<ol start="3">
<li>Rode a aplicação e teste as requisições Ajax no IE9 e em outros navegadores para ver se não quebrou nada.</li>
</ol>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pablonobrega.wordpress.com/365/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pablonobrega.wordpress.com/365/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/pablonobrega.wordpress.com/365/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/pablonobrega.wordpress.com/365/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/pablonobrega.wordpress.com/365/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/pablonobrega.wordpress.com/365/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/pablonobrega.wordpress.com/365/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/pablonobrega.wordpress.com/365/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/pablonobrega.wordpress.com/365/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/pablonobrega.wordpress.com/365/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/pablonobrega.wordpress.com/365/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/pablonobrega.wordpress.com/365/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/pablonobrega.wordpress.com/365/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/pablonobrega.wordpress.com/365/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pablonobrega.wordpress.com&amp;blog=6421373&amp;post=365&amp;subd=pablonobrega&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://pablonobrega.wordpress.com/2011/11/16/corrigindo-o-problema-de-ajax-no-ie9-com-jsf-e-richfaces-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/41ecae32d7775828b92ad47e10cb70ea?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">pablonobrega</media:title>
		</media:content>
	</item>
		<item>
		<title>Uece ganha quatro prêmios no Prêmio Ceará de Cidadani@ Eletrônica 2011 com seus sistemas Java</title>
		<link>http://pablonobrega.wordpress.com/2011/11/11/uece-ganha-quatro-premio-no-pemio-ceara-de-cidadani-eletronica-2011-com-seus-sistemas-java/</link>
		<comments>http://pablonobrega.wordpress.com/2011/11/11/uece-ganha-quatro-premio-no-pemio-ceara-de-cidadani-eletronica-2011-com-seus-sistemas-java/#comments</comments>
		<pubDate>Fri, 11 Nov 2011 13:48:21 +0000</pubDate>
		<dc:creator>Pablo Nóbrega</dc:creator>
				<category><![CDATA[miscelânea]]></category>
		<category><![CDATA[prêmio ceará cidadania]]></category>
		<category><![CDATA[siseventos]]></category>
		<category><![CDATA[t.i. verde]]></category>
		<category><![CDATA[uece]]></category>

		<guid isPermaLink="false">http://pablonobrega.wordpress.com/?p=350</guid>
		<description><![CDATA[O destaque da solenidade de entrega dos troféus aos vencedores do Prêmio Ceará de Cidadani@ Eletrônica de 2011, ocorrida na manhã desta terça-feira (09/11/2011), foi a Universidade Estadual do Ceará (Uece), agraciada com nada menos que quatro prêmios e uma menção honrosa, fato inédito nas quatro edições do Prêmio: Sistema de Eventos (SisEventos): 1º lugar [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pablonobrega.wordpress.com&amp;blog=6421373&amp;post=350&amp;subd=pablonobrega&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>O destaque da solenidade de entrega dos troféus aos vencedores do Prêmio Ceará de Cidadani@ Eletrônica de 2011, ocorrida na manhã desta terça-feira (09/11/2011), foi a Universidade Estadual do Ceará (Uece), agraciada com nada menos que quatro prêmios e uma menção honrosa, fato inédito nas quatro edições do Prêmio: Sistema de Eventos (SisEventos): 1º lugar na Categoria TI Verde; Sistema Web de Avaliação (Avalere): 2º lugar na Categoria Inovação; Aragatu – Kanban: 3º lugar na Categoria Governança de TI; Gerenciador de Identidade de Usuário (GIDU): 3º lugar na Categoria Software Livre e o Portal <a href="http://www.uece.br//">www.uece.br</a> (menção honrosa): 2º colocado no ranking dos melhores sites do Governo do Estado do Ceará.</p>
<p>Os projetos foram desenvolvidos pela área de gestão da universidade através do Departamento de Informática e atestam a qualidade do trabalho desempenhado por toda a equipe de T.I. da Universidade.</p>
<p>Para ler a notícia completa no site da Universidade acesse <a title="UECE: a grande vencedora" href="http://www.uece.br/uece/index.php/noticias/1972/1972" target="_blank">aqui</a>.</p>
<p>Fotos do Evento e da Premiação:</p>
<p><span id="more-350"></span></p>
<div id="attachment_356" class="wp-caption aligncenter" style="width: 560px"><a href="http://pablonobrega.files.wordpress.com/2011/11/01.jpg"><img class="size-full wp-image-356" title="Todos os Premiados da UECE" src="http://pablonobrega.files.wordpress.com/2011/11/01.jpg?w=600" alt="Imagem Todos os Premiados da UECE"   /></a><p class="wp-caption-text">Todos os Premiados da UECE exibindo seus troféus</p></div>
<div id="attachment_357" class="wp-caption aligncenter" style="width: 560px"><a href="http://pablonobrega.files.wordpress.com/2011/11/02.jpg"><img class="size-full wp-image-357" title="Equipe da UECE" src="http://pablonobrega.files.wordpress.com/2011/11/02.jpg?w=600" alt="Imagem Equipe da UECE"   /></a><p class="wp-caption-text">Representação da UECE</p></div>
<div id="attachment_360" class="wp-caption aligncenter" style="width: 560px"><a href="http://pablonobrega.files.wordpress.com/2011/11/05.jpg"><img class="size-full wp-image-360" title="Premiação do Primeiro Lugar" src="http://pablonobrega.files.wordpress.com/2011/11/05.jpg?w=600" alt="Imagem Recebimento da Premiação do Primeiro Lugar"   /></a><p class="wp-caption-text">Sistema de Eventos - 1º Colocado em T.I. Verde</p></div>
<div id="attachment_363" class="wp-caption aligncenter" style="width: 610px"><a href="http://pablonobrega.files.wordpress.com/2011/11/09112011236.jpg"><img class="size-full wp-image-363" title="Troféu do Prêmio de 1º Lugar" src="http://pablonobrega.files.wordpress.com/2011/11/09112011236.jpg?w=600&#038;h=800" alt="Troféu do Prêmio de 1º Lugar" width="600" height="800" /></a><p class="wp-caption-text">Troféu do Prêmio de 1º Lugar em T.I. Verde</p></div>
<div id="attachment_359" class="wp-caption aligncenter" style="width: 560px"><a href="http://pablonobrega.files.wordpress.com/2011/11/04.jpg"><img class="size-full wp-image-359" title="Reitor em seu pronunciamento" src="http://pablonobrega.files.wordpress.com/2011/11/04.jpg?w=600" alt="Imagem Reitor em seu pronunciamento"   /></a><p class="wp-caption-text">Reitor quebrou o protocolo e fez um discurso ressaltando o grande avanço da UECE e do Departamento de Informática</p></div>
<div id="attachment_358" class="wp-caption aligncenter" style="width: 560px"><a href="http://pablonobrega.files.wordpress.com/2011/11/03.jpg"><img class="size-full wp-image-358" title="Auditório Lotado Para Premiação" src="http://pablonobrega.files.wordpress.com/2011/11/03.jpg?w=600" alt="Auditório Lotado Para Premiação"   /></a><p class="wp-caption-text">Auditório Lotado na Seplag</p></div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pablonobrega.wordpress.com/350/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pablonobrega.wordpress.com/350/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/pablonobrega.wordpress.com/350/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/pablonobrega.wordpress.com/350/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/pablonobrega.wordpress.com/350/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/pablonobrega.wordpress.com/350/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/pablonobrega.wordpress.com/350/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/pablonobrega.wordpress.com/350/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/pablonobrega.wordpress.com/350/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/pablonobrega.wordpress.com/350/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/pablonobrega.wordpress.com/350/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/pablonobrega.wordpress.com/350/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/pablonobrega.wordpress.com/350/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/pablonobrega.wordpress.com/350/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pablonobrega.wordpress.com&amp;blog=6421373&amp;post=350&amp;subd=pablonobrega&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://pablonobrega.wordpress.com/2011/11/11/uece-ganha-quatro-premio-no-pemio-ceara-de-cidadani-eletronica-2011-com-seus-sistemas-java/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/41ecae32d7775828b92ad47e10cb70ea?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">pablonobrega</media:title>
		</media:content>

		<media:content url="http://pablonobrega.files.wordpress.com/2011/11/01.jpg" medium="image">
			<media:title type="html">Todos os Premiados da UECE</media:title>
		</media:content>

		<media:content url="http://pablonobrega.files.wordpress.com/2011/11/02.jpg" medium="image">
			<media:title type="html">Equipe da UECE</media:title>
		</media:content>

		<media:content url="http://pablonobrega.files.wordpress.com/2011/11/05.jpg" medium="image">
			<media:title type="html">Premiação do Primeiro Lugar</media:title>
		</media:content>

		<media:content url="http://pablonobrega.files.wordpress.com/2011/11/09112011236.jpg" medium="image">
			<media:title type="html">Troféu do Prêmio de 1º Lugar</media:title>
		</media:content>

		<media:content url="http://pablonobrega.files.wordpress.com/2011/11/04.jpg" medium="image">
			<media:title type="html">Reitor em seu pronunciamento</media:title>
		</media:content>

		<media:content url="http://pablonobrega.files.wordpress.com/2011/11/03.jpg" medium="image">
			<media:title type="html">Auditório Lotado Para Premiação</media:title>
		</media:content>
	</item>
		<item>
		<title>O que acontece na Internet em 60 segundos?</title>
		<link>http://pablonobrega.wordpress.com/2011/06/28/o-que-acontece-na-internet-em-60-segundos/</link>
		<comments>http://pablonobrega.wordpress.com/2011/06/28/o-que-acontece-na-internet-em-60-segundos/#comments</comments>
		<pubDate>Tue, 28 Jun 2011 20:27:32 +0000</pubDate>
		<dc:creator>Pablo Nóbrega</dc:creator>
				<category><![CDATA[miscelânea]]></category>
		<category><![CDATA[60 segundos]]></category>
		<category><![CDATA[internet]]></category>

		<guid isPermaLink="false">http://pablonobrega.wordpress.com/?p=322</guid>
		<description><![CDATA[<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pablonobrega.wordpress.com&amp;blog=6421373&amp;post=322&amp;subd=pablonobrega&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div id="attachment_339" class="wp-caption aligncenter" style="width: 610px"><a href="http://pablonobrega.files.wordpress.com/2011/04/60-seconds-online.jpg"><img class="size-full wp-image-339" title="60 segundos on-line" src="http://pablonobrega.files.wordpress.com/2011/04/60-seconds-online.jpg?w=600&#038;h=424" alt="60 segundos on-line" width="600" height="424" /></a><p class="wp-caption-text">60 segundos on-line</p></div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pablonobrega.wordpress.com/322/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pablonobrega.wordpress.com/322/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/pablonobrega.wordpress.com/322/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/pablonobrega.wordpress.com/322/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/pablonobrega.wordpress.com/322/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/pablonobrega.wordpress.com/322/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/pablonobrega.wordpress.com/322/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/pablonobrega.wordpress.com/322/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/pablonobrega.wordpress.com/322/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/pablonobrega.wordpress.com/322/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/pablonobrega.wordpress.com/322/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/pablonobrega.wordpress.com/322/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/pablonobrega.wordpress.com/322/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/pablonobrega.wordpress.com/322/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pablonobrega.wordpress.com&amp;blog=6421373&amp;post=322&amp;subd=pablonobrega&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://pablonobrega.wordpress.com/2011/06/28/o-que-acontece-na-internet-em-60-segundos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/41ecae32d7775828b92ad47e10cb70ea?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">pablonobrega</media:title>
		</media:content>

		<media:content url="http://pablonobrega.files.wordpress.com/2011/04/60-seconds-online.jpg" medium="image">
			<media:title type="html">60 segundos on-line</media:title>
		</media:content>
	</item>
		<item>
		<title>Como adicionar a classe String como opção de tipo de atributo no Enterprise Architect</title>
		<link>http://pablonobrega.wordpress.com/2011/04/28/como-adicionar-a-classe-string-como-opcao-de-tipo-de-atributo-no-enterprise-architect/</link>
		<comments>http://pablonobrega.wordpress.com/2011/04/28/como-adicionar-a-classe-string-como-opcao-de-tipo-de-atributo-no-enterprise-architect/#comments</comments>
		<pubDate>Fri, 29 Apr 2011 01:58:09 +0000</pubDate>
		<dc:creator>Pablo Nóbrega</dc:creator>
				<category><![CDATA[análise]]></category>
		<category><![CDATA[code datatype]]></category>
		<category><![CDATA[enterprise architect]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://pablonobrega.wordpress.com/?p=328</guid>
		<description><![CDATA[Quem trabalha com o Enterprise Architect sabe que o produto não mostra a opção String ao especificar o tipo do atributo de uma classe, como a imagem abaixo mostra. A solução é adicionar a opção ao projeto. O procedimento é muito simples, conforme mostrado abaixo: Primeiro acesse o menu Settings e clique em Code Datatypes; [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pablonobrega.wordpress.com&amp;blog=6421373&amp;post=328&amp;subd=pablonobrega&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Quem trabalha com o <strong>Enterprise Architect</strong> sabe que o produto não mostra a opção <strong>String</strong> ao especificar o tipo do atributo de uma classe, como a imagem abaixo mostra.</p>
<div id="attachment_329" class="wp-caption aligncenter" style="width: 610px"><a href="http://pablonobrega.files.wordpress.com/2011/04/imagem-blog-1.png" target="_blank"><img class="size-full wp-image-329 " title="Tipos de Atributos para Projeto Java sem a opção String" src="http://pablonobrega.files.wordpress.com/2011/04/imagem-blog-1.png?w=600&#038;h=337" alt="Tipos de Atributos para Projeto Java sem a opção String" width="600" height="337" /></a><p class="wp-caption-text">Tipos de Atributos para Projeto Java sem a opção String</p></div>
<p>A solução é adicionar a opção ao projeto. O procedimento é muito simples, conforme mostrado abaixo:</p>
<p><span id="more-328"></span></p>
<ol>
<li>Primeiro acesse o menu <strong>Settings</strong> e clique em <strong>Code Datatypes</strong>;</li>
</ol>
<div id="attachment_330" class="wp-caption aligncenter" style="width: 610px"><a href="http://pablonobrega.files.wordpress.com/2011/04/imagem-blog-2.png" target="_blank"><img class="size-full wp-image-330 " title="Acesso à opção Code Datatypes para adicionar tipo String ao projeto" src="http://pablonobrega.files.wordpress.com/2011/04/imagem-blog-2.png?w=600&#038;h=337" alt="Acesso à opção Code Datatypes para adicionar tipo String ao projeto" width="600" height="337" /></a><p class="wp-caption-text">Acesso à opção Code Datatypes para adicionar tipo String ao projeto</p></div>
<ol start="2">
<li>Em <strong>Product Name</strong> selecione a opção <strong>Java</strong>, digite <strong>String</strong> nos campos <strong>Datatype</strong> e <strong>Common Type</strong> e clique em <strong>Save</strong>;</li>
</ol>
<div id="attachment_331" class="wp-caption aligncenter" style="width: 610px"><a href="http://pablonobrega.files.wordpress.com/2011/04/imagem-blog-3.png" target="_blank"><img class="size-full wp-image-331 " title="Tela para adição do tipo para o produto Java" src="http://pablonobrega.files.wordpress.com/2011/04/imagem-blog-3.png?w=600&#038;h=337" alt="Tela para adição do tipo para o produto Java" width="600" height="337" /></a><p class="wp-caption-text">Tela para adição do tipo para o produto Java</p></div>
<ol start="3">
<li>Observe que a opção <strong>String</strong> aparece na lista e clique em <strong>Close</strong>;</li>
</ol>
<div id="attachment_332" class="wp-caption aligncenter" style="width: 610px"><a href="http://pablonobrega.files.wordpress.com/2011/04/imagem-blog-4.png" target="_blank"><img class="size-full wp-image-332 " title="Confirmação de tipo adicionado para o produto Java" src="http://pablonobrega.files.wordpress.com/2011/04/imagem-blog-4.png?w=600&#038;h=337" alt="Confirmação de tipo adicionado para o produto Java" width="600" height="337" /></a><p class="wp-caption-text">Confirmação de tipo adicionado para o produto Java</p></div>
<ol start="4">
<li>Agora ao acessar a classe e editar os atributos, o tipo <strong>String</strong> aparece entre as opções.</li>
</ol>
<div id="attachment_333" class="wp-caption aligncenter" style="width: 610px"><a href="http://pablonobrega.files.wordpress.com/2011/04/imagem-blog-5.png" target="_blank"><img class="size-full wp-image-333 " title="Opção String aparecendo como opção entre os tipos" src="http://pablonobrega.files.wordpress.com/2011/04/imagem-blog-5.png?w=600&#038;h=337" alt="Opção String aparecendo como opção entre os tipos" width="600" height="337" /></a><p class="wp-caption-text">Opção String aparecendo como opção entre os tipos</p></div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pablonobrega.wordpress.com/328/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pablonobrega.wordpress.com/328/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/pablonobrega.wordpress.com/328/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/pablonobrega.wordpress.com/328/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/pablonobrega.wordpress.com/328/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/pablonobrega.wordpress.com/328/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/pablonobrega.wordpress.com/328/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/pablonobrega.wordpress.com/328/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/pablonobrega.wordpress.com/328/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/pablonobrega.wordpress.com/328/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/pablonobrega.wordpress.com/328/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/pablonobrega.wordpress.com/328/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/pablonobrega.wordpress.com/328/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/pablonobrega.wordpress.com/328/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pablonobrega.wordpress.com&amp;blog=6421373&amp;post=328&amp;subd=pablonobrega&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://pablonobrega.wordpress.com/2011/04/28/como-adicionar-a-classe-string-como-opcao-de-tipo-de-atributo-no-enterprise-architect/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/41ecae32d7775828b92ad47e10cb70ea?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">pablonobrega</media:title>
		</media:content>

		<media:content url="http://pablonobrega.files.wordpress.com/2011/04/imagem-blog-1.png" medium="image">
			<media:title type="html">Tipos de Atributos para Projeto Java sem a opção String</media:title>
		</media:content>

		<media:content url="http://pablonobrega.files.wordpress.com/2011/04/imagem-blog-2.png" medium="image">
			<media:title type="html">Acesso à opção Code Datatypes para adicionar tipo String ao projeto</media:title>
		</media:content>

		<media:content url="http://pablonobrega.files.wordpress.com/2011/04/imagem-blog-3.png" medium="image">
			<media:title type="html">Tela para adição do tipo para o produto Java</media:title>
		</media:content>

		<media:content url="http://pablonobrega.files.wordpress.com/2011/04/imagem-blog-4.png" medium="image">
			<media:title type="html">Confirmação de tipo adicionado para o produto Java</media:title>
		</media:content>

		<media:content url="http://pablonobrega.files.wordpress.com/2011/04/imagem-blog-5.png" medium="image">
			<media:title type="html">Opção String aparecendo como opção entre os tipos</media:title>
		</media:content>
	</item>
		<item>
		<title>Cresce frustração dos desenvolvedores com sistema Android</title>
		<link>http://pablonobrega.wordpress.com/2011/04/27/cresce-frustracao-dos-desenvolvedores-com-sistema-android/</link>
		<comments>http://pablonobrega.wordpress.com/2011/04/27/cresce-frustracao-dos-desenvolvedores-com-sistema-android/#comments</comments>
		<pubDate>Wed, 27 Apr 2011 13:30:15 +0000</pubDate>
		<dc:creator>Pablo Nóbrega</dc:creator>
				<category><![CDATA[tecnologia]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[desenvolvedor]]></category>
		<category><![CDATA[google]]></category>

		<guid isPermaLink="false">http://pablonobrega.wordpress.com/?p=300</guid>
		<description><![CDATA[Saiu uma matéria no IDGNow! mostrando que os desenvolvedores estão menos interessados em desenvolver na plataforma da Google. O problema principal parece ser a utilização do S.O. em tablets, que atualmente é bastante pequena. Veja a matéria clicando aqui.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pablonobrega.wordpress.com&amp;blog=6421373&amp;post=300&amp;subd=pablonobrega&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Saiu uma matéria no IDGNow! mostrando que os desenvolvedores estão menos interessados em desenvolver na plataforma da Google. O problema principal parece ser a utilização do S.O. em tablets, que atualmente é bastante pequena.</p>
<p>Veja a matéria clicando <a title="Matéria do IDGNow!" href="http://idgnow.uol.com.br/computacao_corporativa/2011/04/26/desenvolvedores-estao-ficando-frustrados-com-a-plataforma-android/" target="_blank">aqui</a>.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pablonobrega.wordpress.com/300/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pablonobrega.wordpress.com/300/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/pablonobrega.wordpress.com/300/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/pablonobrega.wordpress.com/300/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/pablonobrega.wordpress.com/300/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/pablonobrega.wordpress.com/300/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/pablonobrega.wordpress.com/300/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/pablonobrega.wordpress.com/300/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/pablonobrega.wordpress.com/300/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/pablonobrega.wordpress.com/300/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/pablonobrega.wordpress.com/300/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/pablonobrega.wordpress.com/300/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/pablonobrega.wordpress.com/300/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/pablonobrega.wordpress.com/300/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pablonobrega.wordpress.com&amp;blog=6421373&amp;post=300&amp;subd=pablonobrega&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://pablonobrega.wordpress.com/2011/04/27/cresce-frustracao-dos-desenvolvedores-com-sistema-android/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/41ecae32d7775828b92ad47e10cb70ea?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">pablonobrega</media:title>
		</media:content>
	</item>
		<item>
		<title>Certificações em T.I. valem a pena?</title>
		<link>http://pablonobrega.wordpress.com/2011/03/28/certificacoes-em-t-i-valem-a-pena/</link>
		<comments>http://pablonobrega.wordpress.com/2011/03/28/certificacoes-em-t-i-valem-a-pena/#comments</comments>
		<pubDate>Mon, 28 Mar 2011 18:17:16 +0000</pubDate>
		<dc:creator>Pablo Nóbrega</dc:creator>
				<category><![CDATA[miscelânea]]></category>
		<category><![CDATA[tecnologia]]></category>
		<category><![CDATA[certificação]]></category>
		<category><![CDATA[tecnologia da informação]]></category>

		<guid isPermaLink="false">http://pablonobrega.wordpress.com/?p=303</guid>
		<description><![CDATA[Esse é assunto que sempre gera polêmica. A maioria dos profissionais de T.I. se sente atraída em tirar uma ou mais certificações como forma de comprovar sua competência, mas por qual motivo percebe-se um avanço significativo no número de especialistas das áreas de recrutamento e coaching que não aconselham a busca desenfreada por esse tipo [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pablonobrega.wordpress.com&amp;blog=6421373&amp;post=303&amp;subd=pablonobrega&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Esse é assunto que sempre gera polêmica. A maioria dos profissionais de T.I. se sente atraída em tirar uma ou mais certificações como forma de comprovar sua competência, mas por qual motivo percebe-se um avanço significativo no número de especialistas das áreas de recrutamento e <em>coaching</em> que não aconselham a busca desenfreada por esse tipo de teste?</p>
<p>A verdade é que o mercado mundial de certificações está cada vez mais aquecido e o diploma de proficiência em alguma área de T.I. pode ser considerado um diferencial pela maioria das empresas. Há inclusive algumas seleções que colocam como critério obrigatório possuir um ou mais títulos para concorrer à vaga.</p>
<p>Obviamente que essas duas visões de carreira geram uma grande dúvida no profissional: vale a pena se dedicar aos estudos e realizar as provas ou o diferencial de um empregado vai estar em outras habilidades?</p>
<p><span id="more-303"></span></p>
<p>No artigo &#8220;<a title="Artigo" href="http://idgnow.uol.com.br/carreira/2010/06/08/certificacoes-em-ti-uma-necessidade-ou-pura-invencionice/" target="_blank">Certificações em TI: uma necessidade ou pura invencionice?</a>&#8220;, George Tillmann &#8211; um consultor de negócios e de gerência em T.I. &#8211; não recomenda as certificações na área e afirma que os títulos são muito úteis na contabilidade e na engenharia por motivos que não se enquadram na informática. No caso da engenharia, ele explica que uma característica importante para esse sucesso é que a formação aponta de forma inequívoca qual especialidade o profissional seguirá, ou seja, um engenheiro civil nunca será o responsável por projetar o motor de um carro, por exemplo. Já com a contabilidade, o autor faz uma brincadeira ao dizer que as atribuições de um contador &#8220;mudaram tanto nos últimos 400 anos quanto a composição física do feldspato&#8221;.</p>
<p>A T.I. não possui nenhuma das duas características mencionadas acima. Todos sabemos que o profissional da área precisa se atualizar constantemente, dada a velocidade com que novas tecnologias surgem, e é trivial encontrar nas empresas do setor analistas de sistemas que se tornaram gerentes de projetos, programadores que gerenciam redes, entre outras situações semelhantes.</p>
<p>De certa forma, concordo parcialmente com a visão de Tillmann. Onde trabalho, por exemplo, o Diretor de T.I. tem formação em Engenharia Civil, Mestrado em Computação Aplicada com ênfase em Informática Educativa, já trabalhou como programador e recentemente tirou certificação PMP, fato que o credenciou a se tornar instrutor de Gerência de Projetos em cursos para o Governo do Estado. Essa dinâmica do mercado de T.I. não representa algo negativo, mas sim força a renovação das empresas e as coloca no topo das mais dinâmicas em termos de mercado.</p>
<p>Por outro lado, o Institute Data Corporation (IDC) Brasil divulgou que o salário de um profissional certificado pode ser até 100% maior do que o de um concorrente sem títulos. Em termos de seleção para vagas, aumentam em 53% as changes de um profissional com uma ou mais certificações conseguir um emprego, em relação àquele que não possui.</p>
<p>No Brasil há ainda uma particularidade: existe uma valorização acima do normal pelas certificações no mercado de trabalho. A explicação está na carência de trabalhadores na área de informática &#8211; o que na prática não é uma realidade somente do nosso país. Segundo Greg Astfalk, cientista chefe da HP, &#8220;a demanda por profissionais cresce cerca de duas vezes mais que o Produto Interno Bruto (PIB) dos países, o que gera a carência&#8221; por profissionais capacitados. Some-se a isso tudo os níveis de desemprego divulgados pelo IBGE nos últimos tempos, que cairam a valores consideravelmente baixos, chegando a bater algumas marcas históricas.</p>
<p>Tirar certificação, portanto, pode ser realmente um diferencial no currículo, aumenta consideravelmente as chances de entrada numa empresa, mas não garante sucesso na carreira. Diferenciar um profissional que realmente aprendeu para realizar as provas (seja através de curso ou como autodidata) daquele que apenas decorou um <em>Test Killer </em>para ser aprovado é questão de tempo quando se faz parte de uma equipe. O que as empresas precisam, na verdade, é de funcionários com iniciativa, versados em mais de uma área e que aprendam algo antes de ser lançada uma apostila sobre um determinado assunto.</p>
<p>Assim, busque capacitar-se constantemente &#8211; seja através das certificações ou não -, leia muito (não somente sobre T.I.), aprenda a trabalhar em grupo e a interagir, e se aprofunde nos estudos de algum idioma. Porém, se há um desejo de alcançar níveis mais altos na hierarquia da empresa, não esqueça de conhecer outras áreas de conhecimento além daquelas com as quais trabalha no dia-a-dia, pois os currículos dos CIO&#8217;s serão um grande exemplo do que você deve fazer para alcançar o posto mais alto da organização em que atua.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pablonobrega.wordpress.com/303/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pablonobrega.wordpress.com/303/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/pablonobrega.wordpress.com/303/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/pablonobrega.wordpress.com/303/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/pablonobrega.wordpress.com/303/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/pablonobrega.wordpress.com/303/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/pablonobrega.wordpress.com/303/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/pablonobrega.wordpress.com/303/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/pablonobrega.wordpress.com/303/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/pablonobrega.wordpress.com/303/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/pablonobrega.wordpress.com/303/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/pablonobrega.wordpress.com/303/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/pablonobrega.wordpress.com/303/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/pablonobrega.wordpress.com/303/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pablonobrega.wordpress.com&amp;blog=6421373&amp;post=303&amp;subd=pablonobrega&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://pablonobrega.wordpress.com/2011/03/28/certificacoes-em-t-i-valem-a-pena/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/41ecae32d7775828b92ad47e10cb70ea?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">pablonobrega</media:title>
		</media:content>
	</item>
		<item>
		<title>Como adicionar Captcha na aplicação JSF &#8211; solução com Recaptcha</title>
		<link>http://pablonobrega.wordpress.com/2011/02/23/como-adicionar-captcha-na-aplicacao-jsf-solucao-com-recaptcha/</link>
		<comments>http://pablonobrega.wordpress.com/2011/02/23/como-adicionar-captcha-na-aplicacao-jsf-solucao-com-recaptcha/#comments</comments>
		<pubDate>Wed, 23 Feb 2011 19:15:22 +0000</pubDate>
		<dc:creator>Pablo Nóbrega</dc:creator>
				<category><![CDATA[programação]]></category>
		<category><![CDATA[programação JSF]]></category>
		<category><![CDATA[captcha]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[jcaptcha]]></category>
		<category><![CDATA[jsf]]></category>
		<category><![CDATA[primefaces]]></category>
		<category><![CDATA[recaptcha]]></category>
		<category><![CDATA[tomahawk]]></category>

		<guid isPermaLink="false">http://pablonobrega.wordpress.com/?p=293</guid>
		<description><![CDATA[Aprenda a usar captcha em uma aplicação JSF baseado no Recaptcha, da Google.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pablonobrega.wordpress.com&amp;blog=6421373&amp;post=293&amp;subd=pablonobrega&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Um problema muito sério em aplicações que possuem acesso aberto na internet é o uso de softwares automatizados que enviam inúmeras requisições seguidas, normalmente com a pretensão de gerar <em><strong>spam</strong></em>, diminuindo o desempenho de sistemas e gerando prejuízo às empresas.</p>
<p>A técnica mais utilizada para evitar esse problema é o emprego de imagens com letras distorcidas, que em alguns casos pode ter a adição de uma seqüência obscurecida das letras ou dos dígitos que aparecem na tela. O objetivo é evitar o uso de robôs, já que eles não conseguem fazer a leitura de imagens. Essa solução é conhecida como <strong>Captcha</strong> (da sigla <em>Completely Automated Public Turing test to tell Computers and Humans Apart</em>) e embora tenha recebido esse nome, é visto como um <strong>Teste de Turing </strong>reverso, uma vez que é administrado pelo computador e não por humanos.</p>
<p>No meus testes em JSF consegui utilizar as soluções do Tomahawk, do PrimeFaces, do JCaptcha e do Recaptcha. Todos são muitos simples de adicionar à aplicação, mas o Tomahawk  e o JCaptcha integrado ao JSF usam, para fazer a validação, <strong>um atributo em escopo de sessão com o valor da chave, o que muitas vezes não é desejado a nível de arquitetura</strong>. Já o PrimeFaces tem como base o Recaptcha da Google, mas a maioria dos desenvolvedores (eu me incluo entre eles) usa o RichFaces como solução de biblioteca de interface rica, tornando-se impensável colocar o PrimeFaces na aplicação apenas para ter o componente Captcha.</p>
<p>Por fim, meu último teste foi o Recaptcha, da Google. Vamos às vantagens da solução:</p>
<ol>
<li><strong><span style="color:#800000;">Não utiliza a chave como atributo de sessão para validar a imagem;</span></strong></li>
<li>Ajuda a digitalizar livros e jornais (no momento estão sendo digitalizadas edições do The New York Times e livros do Google Books);</li>
<li>É acessível para deficientes visuais;</li>
<li>É popular: empresas como Facebook e TicketMaster utilizam;</li>
<li>Tem compatibilidade com várias linguagens e aplicações.</li>
</ol>
<p>Obviamente que nem tudo são flores. As desvantagens são:</p>
<ol>
<li>O serviço da Google está na <em>web</em>, portanto se ele cair (pouco provável), ou se o host onde a aplicação Java está não conseguir comunicação com ele, o componente não será exibido;</li>
<li>O componente possui uma visual mais complexo do que os outros, o que às vezes confunde o usuário;</li>
</ol>
<p>Pesando as desvantagens e as vantagens, decidimos optar pelo Recaptcha, que se mostrou com a melhor relação entre os dois aspectos. Vamos ao que interessa: como colocar na aplicação.</p>
<p><span id="more-293"></span></p>
<h2>A Solução</h2>
<ol>
<li>Cadastre-se no site do Recaptcha para receber as chaves pública e privada que serão utilizadas pelo componente. O Google obrigado o uso de um domínio para o emprego do captcha. O cadastro pode ser feito <a title="Cadastro no Recaptcha" href="https://www.google.com/recaptcha/admin/create" target="_blank">aqui</a>;</li>
<li>Coloque o jar do Recaptcha no classpath da sua aplicação. O download pode ser feito <a title="Download JAR Recaptcha" href="http://code.google.com/p/recaptcha/downloads/list?q=label:java-Latest" target="_blank">aqui</a>;</li>
<li>Em um componente <strong>h:outputText</strong> coloque o código HTML gerado dinamicamente pelo serviço da Google com o atributo <strong>escape=false</strong>. O <strong>value</strong> do componente deve apontar para um método do Managed Bean que gera o captcha, porque a cada requisição deve ser lançado um novo desafio;</li>
<p><pre class="brush: java;">

</pre></p>
<li>Implemente o método getCodigoHtmlRecaptcha(), conforme abaixo;</li>
<p><pre class="brush: java;">
/**
 * Gera o código HTML gerado pelo componente da Google.
 *
 * @return String - código HTML dinâmico
 */
   public String getCodigoHtmlRecaptcha() {
      ReCaptcha c = ReCaptchaFactory.newReCaptcha(&quot;chave pública fornecida pela Google&quot;, &quot;chave privada fornecida pela Google&quot;, false);

      return c.createRecaptchaHtml(null, null);
   }
</pre></p>
<li>Faça agora a validação do texto na Action chamada pelo commandButton ou commandLink, conforme métodos abaixo:</li>
<p><pre class="brush: java;">

public String processaImagem() {
   try {
      if (!validaTextoImagem()) {
         /**
	  *  COLOQUE AQUI A LÓGICA PARA A RESPOSTA ESTAR EM BRANCO OU INVÁLIDA.
	  */
        return null; // permanece na mesma tela
      }
   } catch (ValidacaoCaptchaException e) {
      /**
       *  COLOQUE AQUI A LÓGICA PARA O COMPONENTE NÃO TER SIDO EXIBIDO CORRETAMENTE.
       */
      e.printStackTrace();
      return null; // permanece na mesma tela
   }

   // COLOQUE AQUI A LÓGICA PARA A IMAGEM TER SIDO VALIDADA COM SUCESSO

   return &quot;sucessoCaptcha&quot;; // o texto foi validado corretamente
}

/**
 * Valida o texto da imagem digitado pelo usuário.
 *
 * @return boolean indicando se o texto foi validado ou não
 * @throws ValidacaoCaptchaException caso o componente não tenha sido exibido corretamente
 */
private boolean validaTextoImagem() throws ValidacaoCaptchaException {
   HttpServletRequest req = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
   String enderecoRemoto = req.getRemoteAddr();
   ReCaptchaImpl reCaptcha = new ReCaptchaImpl();
   reCaptcha.setPrivateKey(&quot;chave privada fornecida pela Google&quot;);

   String textoCriptografado = req.getParameter(&quot;recaptcha_challenge_field&quot;);
   String resposta = req.getParameter(&quot;recaptcha_response_field&quot;);

   /**
    *  Testa se o campo desafio está nulo ou vazio, ou se o campo resposta veio nulo (vem String
    *  vazia se o usuário não preencheu) e lança exception.
    */
   if (textoCriptografado == null || textoCriptografado.equals(&quot;&quot;) || resposta == null) {
      throw new ValidacaoCaptchaException(&quot;Dados submetidos não recuperados. Talvez exista um problema na exibição do componente captcha.&quot;);
   }

   ReCaptchaResponse reCaptchaResponse = reCaptcha.checkAnswer(enderecoRemoto, textoCriptografado, resposta);

   if (resposta.isEmpty() || !reCaptchaResponse.isValid()) {
      return false; // resposta em branco ou inválida
   } else {
      return true; // texto válido
   }
}

</pre></ol>
<p>Pronto! Somente isso. Quero ressaltar, antes que perguntem nos comentários, que ValidacaoCaptchaException é uma simples <strong>checked exception </strong>que extende Exception.</p>
<p>Seu componente será exibido na página conforme imagem abaixo:</p>
<div id="attachment_294" class="wp-caption aligncenter" style="width: 610px"><a href="http://pablonobrega.files.wordpress.com/2011/02/captcha1.jpg" target="_blank"><img class="size-full wp-image-294 " title="Recaptcha no JSF" src="http://pablonobrega.files.wordpress.com/2011/02/captcha1.jpg?w=600&#038;h=360" alt="Recaptcha no JSF" width="600" height="360" /></a><p class="wp-caption-text">Recaptcha no JSF</p></div>
<p>Obviamente que a solução proposta nesse artigo é a mais simples possível. O ideal é não colocar a lógica de geração do código HTML em um método <em>get</em>, como foi feito. Para facilitar a manutenção, a chave privada pode ser colocada no web.xml, já que ela é referenciada mais de uma vez no código. Outro detalhe é que o uso de um componente facelet ajudaria na reutilização do captcha em várias páginas e ajudaria na validação do texto informado no componente e na estruturação do código como um todo. Só que mostrarei essa abordagem, juntamente com as outras duas melhorias comentadas acima em um próximo post.</p>
<h3>Modificando o Idioma e a Cor</h3>
<p>O Recaptcha da Google permite que você escolha o idioma das mensagens que aparecem quando se coloca o mouse em cima dos botões do componente e da frase que pede para inserir o texto. Outro atributo que você pode modificar é o esquema de cores do componente. Os dois atributos podem ser modificados com o seguinte código javascript:</p>
<p><pre class="brush: jscript;">
&lt;script type=&quot;text/javascript&quot;&gt;
var RecaptchaOptions = {
   theme : 'cor_escolhida', // as opções são 'red' (default), 'white', 'blackglass' e 'clean'
   lang : 'pt'
};
&lt;/script&gt;
</pre></p>
<p>Caso você queira modificar apenas um dos atributos (o tema ou o idioma), coloque apenas a linha correspondente, sem a vírgula que separa as duas instruções. O resultado com o tema branco (white) e o idioma português pode ser visto abaixo:</p>
<p style="text-align:center;">
<div id="attachment_301" class="wp-caption aligncenter" style="width: 348px"><a href="http://pablonobrega.files.wordpress.com/2011/02/captcha2.jpg" target="_blank"><img class="size-full wp-image-301 " title="Recaptcha com skin branco e idioma português" src="http://pablonobrega.files.wordpress.com/2011/02/captcha2.jpg?w=600" alt="Recaptcha com skin branco e idioma português"   /></a><p class="wp-caption-text">Recaptcha com skin branco e idioma português</p></div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pablonobrega.wordpress.com/293/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pablonobrega.wordpress.com/293/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/pablonobrega.wordpress.com/293/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/pablonobrega.wordpress.com/293/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/pablonobrega.wordpress.com/293/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/pablonobrega.wordpress.com/293/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/pablonobrega.wordpress.com/293/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/pablonobrega.wordpress.com/293/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/pablonobrega.wordpress.com/293/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/pablonobrega.wordpress.com/293/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/pablonobrega.wordpress.com/293/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/pablonobrega.wordpress.com/293/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/pablonobrega.wordpress.com/293/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/pablonobrega.wordpress.com/293/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pablonobrega.wordpress.com&amp;blog=6421373&amp;post=293&amp;subd=pablonobrega&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://pablonobrega.wordpress.com/2011/02/23/como-adicionar-captcha-na-aplicacao-jsf-solucao-com-recaptcha/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/41ecae32d7775828b92ad47e10cb70ea?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">pablonobrega</media:title>
		</media:content>

		<media:content url="http://pablonobrega.files.wordpress.com/2011/02/captcha1.jpg" medium="image">
			<media:title type="html">Recaptcha no JSF</media:title>
		</media:content>

		<media:content url="http://pablonobrega.files.wordpress.com/2011/02/captcha2.jpg" medium="image">
			<media:title type="html">Recaptcha com skin branco e idioma português</media:title>
		</media:content>
	</item>
		<item>
		<title>Como desabilitar copiar e colar em Rich:Editor</title>
		<link>http://pablonobrega.wordpress.com/2011/02/15/como-desabilitar-copiar-e-colar-em-richeditor/</link>
		<comments>http://pablonobrega.wordpress.com/2011/02/15/como-desabilitar-copiar-e-colar-em-richeditor/#comments</comments>
		<pubDate>Tue, 15 Feb 2011 21:13:16 +0000</pubDate>
		<dc:creator>Pablo Nóbrega</dc:creator>
				<category><![CDATA[programação]]></category>
		<category><![CDATA[colar]]></category>
		<category><![CDATA[evitar colar]]></category>
		<category><![CDATA[rich:editor]]></category>
		<category><![CDATA[richfaces]]></category>

		<guid isPermaLink="false">http://pablonobrega.wordpress.com/?p=274</guid>
		<description><![CDATA[Aqui na UECE temos um sistema com um rich:editor e muitas vezes apareceram problemas na exibição de páginas internas por conta de o usuário que estava cadastrando a informação ter colado o texto dentro do componente ro RichFaces a partir do Word ou algum programa semelhante. O problema está no fato de que esses programas [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pablonobrega.wordpress.com&amp;blog=6421373&amp;post=274&amp;subd=pablonobrega&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Aqui na UECE temos um sistema com um <strong>rich:editor</strong> e muitas vezes apareceram problemas na exibição de páginas internas por conta de o usuário que estava cadastrando a informação ter colado o texto dentro do componente ro RichFaces a partir do Word ou algum programa semelhante. O problema está no fato de que esses programas geram uma grande carga de estilização antes da exibição da informação em si, e quando você vai mostrar o que o usuário digitou, o navegador não interpreta corretamente o HTML colado.</p>
<p><strong>Solução: <span style="text-decoration:underline;">evitar que o usuário cole dentro do rich:editor</span>.</strong> O procedimento é muito simples. Basta adicionar um evento onSetup no componente através do código abaixo:</p>
<p><pre class="brush: java;">

onsetup=&quot;event.onPaste.add( function(event, e, o) { alert('Não é possível copiar e colar dentro do componente.'); return tinymce.dom.Event.cancel(e); });&quot;

</pre></p>
<p><span id="more-274"></span></p>
<p>No caso do meu sistema, permito que o usuário cole dentro da janela de um plugin do próprio rich:editor que tira toda formatação e faz uma colagem como texto simples, portanto minha mensagem é:</p>
<p><pre class="brush: java;">

onsetup=&quot;event.onPaste.add( function(event, e, o) { alert('Não é possível copiar e colar dentro do componente. Para isso, clique no quarto ícone da esquerda para a direita (o que possui uma prancheta e um \'T\') no topo do campo resumo, cole o texto dentro da janela que surgir e depois em \'Inserir\''); return tinymce.dom.Event.cancel(e); });&quot;

</pre></p>
<p>Agora as telas abaixo mostram como ficou a solução e como formatei meu componente:</p>
<div id="attachment_277" class="wp-caption aligncenter" style="width: 610px"><a href="http://pablonobrega.files.wordpress.com/2011/02/colar1.jpg" target="_blank"><img class="size-full wp-image-277" title="Mensagem de Aviso Ao Tentar Colar" src="http://pablonobrega.files.wordpress.com/2011/02/colar1.jpg?w=600&#038;h=360" alt="Mensagem de Aviso Ao Tentar Colar" width="600" height="360" /></a><p class="wp-caption-text">Mensagem de Aviso Ao Tentar Colar</p></div>
<div id="attachment_278" class="wp-caption aligncenter" style="width: 610px"><a href="http://pablonobrega.files.wordpress.com/2011/02/colar2.jpg" target="_blank"><img class="size-full wp-image-278" title="Botão Colar Como Texto Simples" src="http://pablonobrega.files.wordpress.com/2011/02/colar2.jpg?w=600&#038;h=360" alt="Botão Colar Como Texto Simples" width="600" height="360" /></a><p class="wp-caption-text">Botão Colar Como Texto Simples</p></div>
<p>Observe que o título do botão está em português. No Rich:Editor basta que você forneça o atributo <strong>language </strong>com o valor <strong>&#8220;pt&#8221;</strong> para que os botões e as mensagens apareçam dessa forma.</p>
<div id="attachment_279" class="wp-caption aligncenter" style="width: 610px"><a href="http://pablonobrega.files.wordpress.com/2011/02/colar3.jpg" target="_blank"><img class="size-full wp-image-279" title="Colar na Janela de Texto Simples " src="http://pablonobrega.files.wordpress.com/2011/02/colar3.jpg?w=600&#038;h=360" alt="Colar na Janela de Texto Simples" width="600" height="360" /></a><p class="wp-caption-text">Colar na Janela de Texto Simples</p></div>
<p>Após clicar em Inserir, o texto ficou assim:</p>
<div id="attachment_276" class="wp-caption aligncenter" style="width: 610px"><a href="http://pablonobrega.files.wordpress.com/2011/02/colar4.jpg" target="_blank"><img class="size-full wp-image-276" title="Resultado da Colagem como Texto Simples" src="http://pablonobrega.files.wordpress.com/2011/02/colar4.jpg?w=600&#038;h=360" alt="Resultado da Colagem como Texto Simples" width="600" height="360" /></a><p class="wp-caption-text">Resultado da Colagem como Texto Simples</p></div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pablonobrega.wordpress.com/274/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pablonobrega.wordpress.com/274/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/pablonobrega.wordpress.com/274/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/pablonobrega.wordpress.com/274/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/pablonobrega.wordpress.com/274/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/pablonobrega.wordpress.com/274/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/pablonobrega.wordpress.com/274/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/pablonobrega.wordpress.com/274/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/pablonobrega.wordpress.com/274/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/pablonobrega.wordpress.com/274/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/pablonobrega.wordpress.com/274/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/pablonobrega.wordpress.com/274/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/pablonobrega.wordpress.com/274/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/pablonobrega.wordpress.com/274/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pablonobrega.wordpress.com&amp;blog=6421373&amp;post=274&amp;subd=pablonobrega&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://pablonobrega.wordpress.com/2011/02/15/como-desabilitar-copiar-e-colar-em-richeditor/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/41ecae32d7775828b92ad47e10cb70ea?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">pablonobrega</media:title>
		</media:content>

		<media:content url="http://pablonobrega.files.wordpress.com/2011/02/colar1.jpg" medium="image">
			<media:title type="html">Mensagem de Aviso Ao Tentar Colar</media:title>
		</media:content>

		<media:content url="http://pablonobrega.files.wordpress.com/2011/02/colar2.jpg" medium="image">
			<media:title type="html">Botão Colar Como Texto Simples</media:title>
		</media:content>

		<media:content url="http://pablonobrega.files.wordpress.com/2011/02/colar3.jpg" medium="image">
			<media:title type="html">Colar na Janela de Texto Simples </media:title>
		</media:content>

		<media:content url="http://pablonobrega.files.wordpress.com/2011/02/colar4.jpg" medium="image">
			<media:title type="html">Resultado da Colagem como Texto Simples</media:title>
		</media:content>
	</item>
		<item>
		<title>Os números de 2010</title>
		<link>http://pablonobrega.wordpress.com/2011/01/03/os-numeros-de-2010/</link>
		<comments>http://pablonobrega.wordpress.com/2011/01/03/os-numeros-de-2010/#comments</comments>
		<pubDate>Tue, 04 Jan 2011 02:29:17 +0000</pubDate>
		<dc:creator>Pablo Nóbrega</dc:creator>
				<category><![CDATA[miscelânea]]></category>
		<category><![CDATA[estatísticas]]></category>

		<guid isPermaLink="false">http://pablonobrega.wordpress.com/?p=264</guid>
		<description><![CDATA[Decidi compartilhar as informações abaixo geradas pelo WordPress. Os duendes das estatísticas do WordPress.com analisaram o desempenho deste blog em 2010 e apresentam-lhe aqui um resumo de alto nível da saúde do seu blog: O Blog-Health-o-Meter™ indica: Uau. Números apetitosos Um navio de carga médio pode transportar cerca de 4.500 containers. Este blog foi visitado [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pablonobrega.wordpress.com&amp;blog=6421373&amp;post=264&amp;subd=pablonobrega&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<h2><strong>Decidi compartilhar as informações abaixo geradas pelo WordPress.</strong></h2>
<hr />
<p>Os duendes das estatísticas do WordPress.com analisaram o desempenho deste blog em 2010 e apresentam-lhe aqui um resumo de alto nível da saúde do seu blog:</p>
<p><img style="border:1px solid #ddd;background:#f5f5f5;padding:20px;" src="http://s0.wp.com/i/annual-recap/meter-healthy5.gif" alt="Healthy blog!" width="250" height="183" /></p>
<p>O <em>Blog-Health-o-Meter™</em> indica: Uau.</p>
<h2>Números apetitosos</h2>
<p><a href="http://pablonobrega.files.wordpress.com/2009/08/erro_cpf.jpg"><img style="max-height:230px;float:right;border:1px solid #ddd;background:#fff;margin:0 0 1em 1em;padding:6px;" src="http://pablonobrega.files.wordpress.com/2009/08/erro_cpf.jpg?w=288" alt="Imagem de destaque" /></a></p>
<p>Um navio de carga médio pode transportar cerca de 4.500 <em>containers</em>. Este blog foi visitado <strong>18,000</strong> vezes em 2010.  Se cada visita fosse um <em>container</em>, o seu <em>blog </em>enchia cerca de 4 navios.</p>
<p>Em 2010, foram criados 8 novos <em>posts</em>, fazendo com que o número total atingisse o valor de 18. <strong>16</strong> imagens foram enviadas, ocupando um total de 1Mb. Isso equivale a cerca de uma imagem por mês.</p>
<p>O dia com mais visitas foi 20 de abril de 2010 com um total de 451 visualizações. O <em>post </em>mais popular nesse dia foi <a style="color:#08c;" href="http://pablonobrega.wordpress.com/2010/04/20/50-dicas-praticas-para-o-exame-scjp-java-6/">50 dicas práticas para o exame SCJP Java 6</a>.</p>
<p><span id="more-264"></span></p>
<h2>De onde vieram?</h2>
<p>Os <em>sites </em>que direcionaram mais tráfego para seu <em>blog</em> em 2010 foram <strong>guj.com.br</strong>, <strong>google.com.br</strong>, <strong>cejug.org</strong>, <strong>pt-br.wordpress.com</strong> e <strong>mail.yahoo.com</strong></p>
<p>Alguns visitantes vieram dos motores de busca, sobretudo pesquisando por <strong>scjp</strong>, <strong>restfaces</strong>, <strong>jasperreport tutorial</strong>, <strong>jasperreports tutorial</strong> e <strong>hibernate validator caelum stella não funciona</strong></p>
<h2>Atrações em 2010</h2>
<p>Estes são os artigos e páginas mais visitados em 2010.</p>
<div style="clear:left;float:left;font-size:24pt;line-height:1em;margin:-5px 10px 20px 0;">1</div>
<p><a style="margin-right:10px;" href="http://pablonobrega.wordpress.com/2010/04/20/50-dicas-praticas-para-o-exame-scjp-java-6/">50 dicas práticas para o exame SCJP Java 6</a> <span style="color:#999;font-size:8pt;">abril, 2010</span><br />
13 comentários</p>
<div style="clear:left;float:left;font-size:24pt;line-height:1em;margin:-5px 10px 20px 0;">2</div>
<p><a style="margin-right:10px;" href="http://pablonobrega.wordpress.com/2009/02/11/tutorial-tecnicas-de-geracao-de-relatorios-com-jasperreports/">Tutorial: Técnicas de Geração de Relatórios com JasperReports / iReport</a> <span style="color:#999;font-size:8pt;">fevereiro, 2009</span><br />
16 comentários</p>
<div style="clear:left;float:left;font-size:24pt;line-height:1em;margin:-5px 10px 20px 0;">3</div>
<p><a style="margin-right:10px;" href="http://pablonobrega.wordpress.com/2009/08/10/implementando-converter-e-validator-de-cpf/">Implementando converter e validator de CPF</a> <span style="color:#999;font-size:8pt;">agosto, 2009</span><br />
8 comentários</p>
<div style="clear:left;float:left;font-size:24pt;line-height:1em;margin:-5px 10px 20px 0;">4</div>
<p><a style="margin-right:10px;" href="http://pablonobrega.wordpress.com/2009/09/10/como-passar-a-consulta-dinamicamente-para-o-jasperreports-ireport/">Como passar a consulta dinamicamente para o JasperReports / iReport</a> <span style="color:#999;font-size:8pt;">setembro, 2009</span><br />
13 comentários</p>
<div style="clear:left;float:left;font-size:24pt;line-height:1em;margin:-5px 10px 20px 0;">5</div>
<p><a style="margin-right:10px;" href="http://pablonobrega.wordpress.com/2009/08/29/client-side-x-server-side-em-jsf-onde-salvar-o-estado/">Client-side X Server-side em JSF. Onde salvar o estado?</a> <span style="color:#999;font-size:8pt;">agosto, 2009</span><br />
2 comentários</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pablonobrega.wordpress.com/264/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pablonobrega.wordpress.com/264/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/pablonobrega.wordpress.com/264/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/pablonobrega.wordpress.com/264/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/pablonobrega.wordpress.com/264/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/pablonobrega.wordpress.com/264/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/pablonobrega.wordpress.com/264/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/pablonobrega.wordpress.com/264/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/pablonobrega.wordpress.com/264/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/pablonobrega.wordpress.com/264/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/pablonobrega.wordpress.com/264/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/pablonobrega.wordpress.com/264/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/pablonobrega.wordpress.com/264/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/pablonobrega.wordpress.com/264/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pablonobrega.wordpress.com&amp;blog=6421373&amp;post=264&amp;subd=pablonobrega&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://pablonobrega.wordpress.com/2011/01/03/os-numeros-de-2010/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/41ecae32d7775828b92ad47e10cb70ea?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">pablonobrega</media:title>
		</media:content>

		<media:content url="http://s0.wp.com/i/annual-recap/meter-healthy5.gif" medium="image">
			<media:title type="html">Healthy blog!</media:title>
		</media:content>

		<media:content url="http://pablonobrega.files.wordpress.com/2009/08/erro_cpf.jpg?w=288" medium="image">
			<media:title type="html">Imagem de destaque</media:title>
		</media:content>
	</item>
		<item>
		<title>Usando ResultTransformer personalizado na sua consulta com Hibernate</title>
		<link>http://pablonobrega.wordpress.com/2010/12/02/usando-resulttransformer-personalizado-na-sua-consulta-com-hibernate/</link>
		<comments>http://pablonobrega.wordpress.com/2010/12/02/usando-resulttransformer-personalizado-na-sua-consulta-com-hibernate/#comments</comments>
		<pubDate>Fri, 03 Dec 2010 01:52:45 +0000</pubDate>
		<dc:creator>Pablo Nóbrega</dc:creator>
				<category><![CDATA[hibernate]]></category>
		<category><![CDATA[programação]]></category>
		<category><![CDATA[AliasToBeanResultTransformer]]></category>
		<category><![CDATA[consulta]]></category>
		<category><![CDATA[HQL]]></category>
		<category><![CDATA[ResultTransformer]]></category>

		<guid isPermaLink="false">http://pablonobrega.wordpress.com/?p=256</guid>
		<description><![CDATA[No post &#8220;Como retornar e preencher apenas alguns atributos da entidade na consulta com Hibernate&#8221; mostrei como usar a classe AliasToBeanResultTransformer junto com HQL. A classe fornecida pelo próprio Hibernate é realmente muito útil, acontece que se você tem alguma consulta SQL através do método createSQLQuery (da classe org.hibernate.Session), pode ter passado pelo problema que tive [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pablonobrega.wordpress.com&amp;blog=6421373&amp;post=256&amp;subd=pablonobrega&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>No post &#8220;<a title="Como retornar e preencher apenas alguns atributos da entidade na consulta com Hibernate" href="http://pablonobrega.wordpress.com/2009/12/30/como-retornar-e-preencher-apenas-alguns-atributos-da-entidade-na-consulta-com-hibernate/" target="_blank">Como retornar e preencher apenas alguns atributos da entidade na consulta com Hibernate</a>&#8221; mostrei como usar a classe AliasToBeanResultTransformer junto com HQL. A classe fornecida pelo próprio Hibernate é realmente muito útil, acontece que se você tem alguma consulta SQL através do método createSQLQuery (da classe <strong>org.hibernate.Session</strong>), pode ter passado pelo problema que tive essa semana. Infelizmente a classe AliasToBeanResultTransformer não funciona com SQLQuery quando, entre os atributos retornados, há  Enumerations. Outro problema é quando temos atributos de entidades relacionadas. A reflexão empregada por essa classe auxiliar não consegue instanciar e preencher as dependências entre a classe principal e seus relacionamentos.</p>
<p>Vamos ao exemplo abaixo:</p>
<p><span id="more-256"></span></p>
<p><pre class="brush: java;">
public Bem pesquisaDadosDoBemParaPesquisa(Integer codigo) {
   Bem bem = new Bem();
   StringBuffer consulta = new StringBuffer(&quot;select b.cd_bem as codigo, b.ds_bem as descricao, b.tombamento, b.tipo_bem as \&quot;tipoBem\&quot;, l.ds_local as \&quot;local.descricao\&quot; from bem b inner join local l on l.cd_local = b.cd_local where b.cd_bem = ?&quot;);
   try {
      getHibernate().beginTransaction();
      Query query = getHibernate().getSession().createSQLQuery(consulta.toString());
      query.setParameter(0, codigo);
      query.setResultTransformer(new AliasToBeanResultTransformer());
      bem = (Bem) query.uniqueResult();
      getHibernate().commit();
   } catch (HibernateException e) {
      e.printStackTrace();
      getHibernate().rollback();
      throw e;
   } finally {
      getHibernate().close();
   }
   return bem;
}
</pre></p>
<p>Como dito anteriormente, essa query não vai funcionar. Vamos aos motivos: na consulta acima queremos trazer o tipo do Bem &#8211; atributo <strong>tipoBem</strong>, porém ele é um Enumeration e está armazenado no banco como String. A classe AliasToBeanResultTransformer não trabalha bem com Enumerations.  Outro problema está no fato de se tentar recuperar a descrição do local do Bem (alias <strong>local.descricao</strong>). A entidade Local tem relacionamento ManyToOne com a entidade Bem. Acontece que o ResultTransformer utilizado não realizará a instanciação de um Local, não setará sua descrição e, muito menos, irá associá-lo ao Bem corrente.</p>
<p><strong>Solução</strong></p>
<p>Uma saída é criar seu próprio ResultTransformer. No meu caso, <strong>criei uma classe chamada BemTransformer. </strong>Essa classe <strong>deve implementar a interface ResultTransformer</strong> que obriga  a declaração de dois métodos: transformList(lista) e transformTuple(valores, alias). Vamos ao código abaixo (observe principamente os comentários):</p>
<p><pre class="brush: java;">
public class BemTransformer implements ResultTransformer {
   private static final long serialVersionUID = 8767683063836706565L;

   @SuppressWarnings(&quot;rawtypes&quot;)
   @Override
   public List transformList(List list) {
      return list;
   }

   @Override
   public Object transformTuple(Object[] valores, String[] alias) {
      Bem bem = new Bem();
      bem.setCodigo((Integer) valores[0]); // alias codigo
      bem.setDescricao((String) valores[1]); // alias descricao
      bem.setTombamento((Integer) valores[2]); // coluna tombamento
      bem.setTipoBem(TipoBem.valueOf(valores[3].toString())); // alias tipoBem
      bem.setLocal(new Local()); // instancio um novo local e o associo ao bem
      bem.getLocal().setDescricao((String) valores[4]); // seto a descrição do local do bem

      return bem; // retorna o bem
   }
}
</pre></p>
<p>O método <strong>transformList </strong>é chamado somente uma vez, caso você queira fazer alguma operação sobre a listagem retornada pelo Hibernate. A operação mais importante, obviamente, está no método <strong>transformTuple</strong>. Ele é invocado para cada linha retornada na Query, devolve um Object e possui dois parâmetros: o primeiro é um Array de objetos com todos os valores retornados para cada linha da query; o outro são os alias de cada coluna.  É nesse método que vai acontecer todo o procedimento. No meu caso instancio um Bem, associo a um local e seto a descrição dele, retornando depois o bem recém alocado.</p>
<p>Aqui cabe uma observação: não é necessário usar os alias correspondendo aos atributos do objeto final quando se usa SQLQuery e o ResultTransform que você implementou. Não modifiquei a consulta apenas para não complicar.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/pablonobrega.wordpress.com/256/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/pablonobrega.wordpress.com/256/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/pablonobrega.wordpress.com/256/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/pablonobrega.wordpress.com/256/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/pablonobrega.wordpress.com/256/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/pablonobrega.wordpress.com/256/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/pablonobrega.wordpress.com/256/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/pablonobrega.wordpress.com/256/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/pablonobrega.wordpress.com/256/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/pablonobrega.wordpress.com/256/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/pablonobrega.wordpress.com/256/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/pablonobrega.wordpress.com/256/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/pablonobrega.wordpress.com/256/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/pablonobrega.wordpress.com/256/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pablonobrega.wordpress.com&amp;blog=6421373&amp;post=256&amp;subd=pablonobrega&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://pablonobrega.wordpress.com/2010/12/02/usando-resulttransformer-personalizado-na-sua-consulta-com-hibernate/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/41ecae32d7775828b92ad47e10cb70ea?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">pablonobrega</media:title>
		</media:content>
	</item>
	</channel>
</rss>
