<?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>Toca do Calango</title>
	<atom:link href="http://tocadocalango.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://tocadocalango.wordpress.com</link>
	<description>Aleatoriedades (geralmente) relacionadas ao desenvolvimento de software</description>
	<lastBuildDate>Sat, 29 Nov 2008 20:41:33 +0000</lastBuildDate>
	<language>pt-br</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='tocadocalango.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Toca do Calango</title>
		<link>http://tocadocalango.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://tocadocalango.wordpress.com/osd.xml" title="Toca do Calango" />
	<atom:link rel='hub' href='http://tocadocalango.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Editor do NetBeans travando?  Java7 nele!!</title>
		<link>http://tocadocalango.wordpress.com/2008/11/29/editor-do-netbeans-travando/</link>
		<comments>http://tocadocalango.wordpress.com/2008/11/29/editor-do-netbeans-travando/#comments</comments>
		<pubDate>Sat, 29 Nov 2008 20:41:33 +0000</pubDate>
		<dc:creator>Ricardo Wendell</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[groovy]]></category>
		<category><![CDATA[jruby]]></category>
		<category><![CDATA[netbeans]]></category>

		<guid isPermaLink="false">http://tocadocalango.wordpress.com/?p=16</guid>
		<description><![CDATA[No dia-a-dia utilizo o Eclipse para desenvolver aplicações em Java e estou bastante satisfeito com ele. Mas em relação às linguagens dinâmicas como Groovy ou JRuby (e seus respectivos frameworks web, Grails e Rails), ele infelizmente não é tão amigável assim. E apesar de serem linguagens ditas ágeis, desenvolver em um editor de textos simples [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=tocadocalango.wordpress.com&amp;blog=3602127&amp;post=16&amp;subd=tocadocalango&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>No dia-a-dia utilizo o <a href="http://www.eclipse.org/" target="_blank">Eclipse</a> para desenvolver aplicações em Java e estou bastante satisfeito com ele. Mas em relação às linguagens dinâmicas como <a href="http://groovy.codehaus.org/" target="_blank">Groovy</a> ou <a href="http://jruby.codehaus.org/">JRuby</a> (e seus respectivos frameworks web, <a href="http://grails.org/" target="_blank">Grails</a> e <a href="http://www.rubyonrails.org/" target="_blank">Rails</a>), ele infelizmente não é tão amigável assim. E apesar de serem linguagens ditas ágeis, desenvolver em um editor de textos simples não faz parte da minha definição de agilidade&#8230;</p>
<p>A falta de um (bom) suporte a estas linguagens no Eclipse me incentivou a buscar outras alternativas de IDEs para poder estudar e brincar um pouco com elas. Depois de algumas buscas no Google e experimentações, escolhi o <a href="http://www.netbeans.org/community/releases/65/" target="_blank">NetBeans 6.5</a> como o ambiente mais recomendado para mim (não, este notebook não é um Mac para usar o <a href="http://macromates.com/" target="_blank">TextMate</a>, aqui é <a href="http://www.ubuntu.com/" target="_blank">Ubuntu</a> mesmo&#8230;).</p>
<p>Então, com a nova versão saída do forno devidamente instalada, começo a brincar com Ruby e Rails:  suporte nativo a JRuby, wizards, migrations, sccafolding, autocompletação, generators, testes, suporte a instalação de plugins para ruby e rails, tudo lá!!</p>
<p>Uma maravilha!! E com os atalhos configurados para ficarem iguais aos do Eclipse então&#8230;</p>
<p>Isso se não fosse um &#8220;pequeno&#8221; e chato pra caramba (pra não usar outra palavra que exprima com mais força a raiva que isso causa) <strong>bug do NetBeans</strong>:<em> é comum o editor travar e o cursor fica lá sem você poder digitar nada&#8230;</em></p>
<p>Foi então que lembrei que foi por isso que deixei de usar uma versão beta há um tempo atrás: esse bug estava lá, e eu achava que era algum problema temporário na build que havia baixado. Não era!!</p>
<p>Pesquisando no <a href="http://www.google.com" target="_blank">Oráculo</a> descobri que não era o único com este problema e que havia um<a href="http://www.netbeans.org/issues/show_bug.cgi?id=119617" target="_blank"> bug aberto no Issue Tracker do NetBeans</a>. E o pior: com status ABERTO e sem previsão de uma solução&#8230; E agora?? Adeus NetBeans de novo??</p>
<p>Comecei a ler os comentários do problema e nada&#8230; Até que entre as dezenas de posts achei uma solução prática: <em>Rodar o NetBeans com o Java 7!!</em></p>
<p>Uma solução um tanto estranha a princípio, mas funciona: meus problemas se acabaram-se!!</p>
<h2>Um passo-a-passo, por favor?</h2>
<p>Abaixo estão os passos que fiz para me ver livre (até agora&#8230;) deste problema:</p>
<ol>
<li>Baixe o <a href="http://download.java.net/jdk7/binaries/" target="_blank">snapshot mais recente da JDK7</a></li>
<li>Execute o instalador, que apenas descompacta os arquivos na sua máquina</li>
<li>Altere o arquivo de configurações do NetBeans (<strong><code><em>&lt;caminho_do_netbeans&gt;</em>/etc/netbeans.conf</code></strong>), definindo o local da JDK que ele irá usar. Por exemplo, minha configuração ficou <strong><code>netbeans_jdkhome="/home/wendell/desenvolvimento/java/jdk1.7.0"</code></strong></li>
<li>Execute o NetBeans!</li>
</ol>
<p>Lembrando que não é necessário que seus projetos também passem a utilizar a JDK7 para serem compilados. Pode continuar normalmente também com a JDK6 na sua máquina&#8230;</p>
<p><em>(E eis que depois de um quase abandono, um suspiro de vida surge na Toca do Calango&#8230;)</em></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/tocadocalango.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/tocadocalango.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/tocadocalango.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/tocadocalango.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/tocadocalango.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/tocadocalango.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/tocadocalango.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/tocadocalango.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/tocadocalango.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/tocadocalango.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/tocadocalango.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/tocadocalango.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/tocadocalango.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/tocadocalango.wordpress.com/16/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=tocadocalango.wordpress.com&amp;blog=3602127&amp;post=16&amp;subd=tocadocalango&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://tocadocalango.wordpress.com/2008/11/29/editor-do-netbeans-travando/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/30c5d6bcda241fc0fed9e3833dee7a21?s=96&#38;d=identicon" medium="image">
			<media:title type="html">Ricardo Wendell</media:title>
		</media:content>
	</item>
		<item>
		<title>Aprendendo jQuery</title>
		<link>http://tocadocalango.wordpress.com/2008/06/04/aprendendo-jquery/</link>
		<comments>http://tocadocalango.wordpress.com/2008/06/04/aprendendo-jquery/#comments</comments>
		<pubDate>Wed, 04 Jun 2008 11:36:07 +0000</pubDate>
		<dc:creator>Ricardo Wendell</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://tocadocalango.wordpress.com/?p=15</guid>
		<description><![CDATA[Percebi que muitas pessoas ainda desconhecem a biblioteca jQuery, ou apenas ouviram falar&#8230; Então, para incentivar aqueles que ainda não passaram da fase da simples curiosidade, sugiro uma visita à página abaixo: Beginner jQuery Tutorials: http://webtecker.com/2008/06/02/beginner-jquery-tutorials/ Lá você encontrará uma coleção de links para tutoriais e fontes de informação (em inglês) para iniciar ou continuar [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=tocadocalango.wordpress.com&amp;blog=3602127&amp;post=15&amp;subd=tocadocalango&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Percebi que muitas pessoas ainda desconhecem a biblioteca <a href="http://jquery.com/" target="_blank">jQuery</a>, ou apenas ouviram falar&#8230; Então, para incentivar aqueles que ainda não passaram da fase da simples curiosidade, sugiro uma visita à página abaixo:</p>
<p><strong>Beginner jQuery Tutorials: </strong><a href="http://webtecker.com/2008/06/02/beginner-jquery-tutorials/" target="_blank">http://webtecker.com/2008/06/02/beginner-jquery-tutorials/</a></p>
<p>Lá você encontrará uma coleção de links para tutoriais e fontes de informação (em inglês) para iniciar ou continuar seus estudos desta excelente biblioteca&#8230;</p>
<p>Divirta-se!!</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/tocadocalango.wordpress.com/15/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/tocadocalango.wordpress.com/15/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/tocadocalango.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/tocadocalango.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/tocadocalango.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/tocadocalango.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/tocadocalango.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/tocadocalango.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/tocadocalango.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/tocadocalango.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/tocadocalango.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/tocadocalango.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/tocadocalango.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/tocadocalango.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/tocadocalango.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/tocadocalango.wordpress.com/15/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=tocadocalango.wordpress.com&amp;blog=3602127&amp;post=15&amp;subd=tocadocalango&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://tocadocalango.wordpress.com/2008/06/04/aprendendo-jquery/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/30c5d6bcda241fc0fed9e3833dee7a21?s=96&#38;d=identicon" medium="image">
			<media:title type="html">Ricardo Wendell</media:title>
		</media:content>
	</item>
		<item>
		<title>Mais um bookmarklet para a coleção: jQuerify</title>
		<link>http://tocadocalango.wordpress.com/2008/05/08/jquerify/</link>
		<comments>http://tocadocalango.wordpress.com/2008/05/08/jquerify/#comments</comments>
		<pubDate>Fri, 09 May 2008 01:48:10 +0000</pubDate>
		<dc:creator>Ricardo Wendell</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://tocadocalango.wordpress.com/?p=14</guid>
		<description><![CDATA[Como desenvolvedor Web estou sempre à procura de ferramentas que me auxiliem a criar, modificar ou entender a estrutura das páginas e assim obter como resultado uma interface melhor. E não custa lembrar que, além de linguagens, frameworks, IDEs e todo o resto, temos nessa área um outro importante personagem: o browser (ou navegador, se [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=tocadocalango.wordpress.com&amp;blog=3602127&amp;post=14&amp;subd=tocadocalango&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Como desenvolvedor Web estou sempre à procura de ferramentas que me auxiliem a criar, modificar ou entender a estrutura das páginas e assim obter como resultado uma interface melhor.</p>
<p>E não custa lembrar que, além de linguagens, frameworks, IDEs e todo o resto, temos nessa área um outro importante personagem: o <strong><em>browser</em> </strong>(ou navegador, se assim prefirirem). Ele pode ser ao mesmo tempo o vilão, ao forçar a caça a &#8220;recursos técnicos&#8221; para driblar bugs (não <strong>IE</strong> mesmo?), ou o mocinho, ao proporcionar mecanismos auxiliares para que o desenvolvedor tenha mais liberdade e poder para alcançar os resultados desejados. É preciso saber escolher&#8230; E para mim o <a href="http://www.getfirefox.com">Firefox</a> tem sido uma ótima escolha!</p>
<p>Disponibilizando <a href="https://addons.mozilla.org" target="_blank">vários</a> e interessantes plugins (ou complementos), este navegador é hoje o preferido da maioria dos programadores e geeks pelo mundo. E para quem necessita fazer manutenção em páginas web, o aclamado plugin <a href="http://www.getfirebug.com/" target="_blank">Firebug </a>(que em breve deverá receber um post mostrando suas funcionalidades) é praticamente obrigatório.</p>
<p>Mas além dos plugins, existem outras pequenas jóias personalizáveis que podem ser agregadas aos navegadores&#8230;</p>
<h2>Os <em>bookmarklets</em></h2>
<p>Resumindo a estória, <a href="http://http://en.wikipedia.org/wiki/Bookmarklet" target="_blank"><em>bookmarklets</em> </a>são pequenos trechos de código javascript que podem ser adicionados aos links favoritos e que proporcionam algum comportamento desejado para a página atual quando são executados. Geralmente estão disponíveis na Internet como links que podem ser arrastados diretamente para a barra de favoritos para que fiquem disponíveis sempre que necessários. Aproveito para avisar que alguns só funcionam no Firefox&#8230;</p>
<p>Dentre os que mantenho sempre à mão estão o <a href="http://turtle.dojotoolkit.org/~david/recss.html" target="_blank">CSS Reloader</a>, que recarrega as folhas de estilo da página sem que seja necessário um <em>refresh </em>completo, e o <a href="http://www.sprymedia.co.uk/article/Design" target="_blank">Design</a>, que auxilia na definição ou verificação de layouts.</p>
<p>E agora o motivo deste post&#8230; Apresento minha mais nova &#8220;aquisição&#8221;: o <a href="http://www.learningjquery.com/2006/12/jquerify-bookmarklet" target="_blank">jQuerify</a>.</p>
<p>Este <em>bookmarklet </em>possibilita disponibilizar em qualquer página o framework javascript <a href="http://jquery.com/" target="_blank">jQuery</a>, mesmo que ela não o importe inicialmente!!</p>
<p>Agora você pode perguntar: &#8220;Sim, e daí??&#8221;</p>
<p>E daí que o jQuery possibilita você manipular qualquer coisa em um documento HTML, e agora você tem todo esse poder em qualquer página que você precise! Executando o jQuerify e em seguida utilizando o console javascript disponível no Firebug, você tem inúmeras maneiras de modificar uma página que você esteja visitando.</p>
<p>Posso estar exagerando um pouco na minha empolgação, mas depois que você começa a usar o jQuery e percebe que o conhecimento sobre seletores CSS pode ser agregado a funções javascript com possibilidades infinitas (eita!!), quer ter isso sempre disponível&#8230; Mesmo que seja só para &#8220;ajustar&#8221; o site dos outros para ficar do jeito que você prefere&#8230;</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/tocadocalango.wordpress.com/14/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/tocadocalango.wordpress.com/14/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/tocadocalango.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/tocadocalango.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/tocadocalango.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/tocadocalango.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/tocadocalango.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/tocadocalango.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/tocadocalango.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/tocadocalango.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/tocadocalango.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/tocadocalango.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/tocadocalango.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/tocadocalango.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/tocadocalango.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/tocadocalango.wordpress.com/14/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=tocadocalango.wordpress.com&amp;blog=3602127&amp;post=14&amp;subd=tocadocalango&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://tocadocalango.wordpress.com/2008/05/08/jquerify/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/30c5d6bcda241fc0fed9e3833dee7a21?s=96&#38;d=identicon" medium="image">
			<media:title type="html">Ricardo Wendell</media:title>
		</media:content>
	</item>
		<item>
		<title>Hibernate e seus ResultTransformers</title>
		<link>http://tocadocalango.wordpress.com/2008/05/06/hibernate-e-seus-resulttransformers/</link>
		<comments>http://tocadocalango.wordpress.com/2008/05/06/hibernate-e-seus-resulttransformers/#comments</comments>
		<pubDate>Wed, 07 May 2008 01:35:06 +0000</pubDate>
		<dc:creator>Ricardo Wendell</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[hibernate]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://tocadocalango.wordpress.com/?p=12</guid>
		<description><![CDATA[Creio que a maioria dos desenvolvedores Java alguma vez se deparou com o trabalhoso problema de persistir informações em um banco de dados relacional. E muitos deles descobriram no Hibernate uma (relativamente) simples e eficiente solução. Este framework de mapeamento objeto-relacional tornou-se o padrão de facto para realizar o gerenciamento de entidades persistentes em aplicações [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=tocadocalango.wordpress.com&amp;blog=3602127&amp;post=12&amp;subd=tocadocalango&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Creio que a maioria dos desenvolvedores Java alguma vez se deparou com o trabalhoso problema de persistir informações em um banco de dados relacional. E muitos deles descobriram no <a href="http://www.hibernate.org/" target="_blank">Hibernate</a> uma (relativamente) simples e eficiente solução.</p>
<p>Este framework de <a href="http://en.wikipedia.org/wiki/Object-relational_mapping" target="_blank">mapeamento objeto-relacional</a> tornou-se o padrão <em>de facto</em> para realizar o gerenciamento de entidades persistentes em aplicações Java (depois do fiasco dos <em>Entity Beans</em>), tendo muitas de suas idéias adotadas na <a href="http://jcp.org/aboutJava/communityprocess/final/jsr220/index.html" target="_blank">especificação da JPA</a>.  Além da facilidade de definição dos mapeamentos e de uma completa API para a realização de consultas, um dos seus pontos fortes é a <a href="http://www.hibernate.org/hib_docs/reference/en/html/" target="_blank">ótima documentação</a> disponível.</p>
<p>Entretanto, existem algumas funcionalidades para as quais esta documentação é quase inexistente. E dentre elas temos os esquecidos, mas bastante úteis, <em>transformadores de resultados.</em></p>
<h2>O problema!</h2>
<p>Para entender a utilidade deste recurso, considere a seguinte consulta de alunos utilizando HQL (os detalhes podem ser abstraídos sem maiores problemas):</p>
<p><pre class="brush: java;">
...
List resultado = session.createQuery(&quot;select matricula, nome, curso.nome from Aluno&quot;).list();
...
</pre></p>
<p>Com esta simples projeção restringimos a busca e aumentamos a performance da consulta de todos os alunos persistidos. Entretanto, teremos como resultado final uma lista de <em>Object[]</em> que precisaria ser manipulada para extrair os diversos campos.</p>
<p>Esta manipulação podería ser um laço para percorrer a lista resultante e, para cada array de objetos, instanciar <a href="http://en.wikipedia.org/wiki/Data_Transfer_Object" target="_blank">DTOs</a> ou entidades. Simples, mas nada divertido&#8230;</p>
<p>Ou então poderíamos criar um construtor para aluno que aceite os parâmetros da consulta e substituir a query por <code> "select new Aluno(matricula, nome, curso.nome) from Aluno" </code>. Dessa forma  teríamos uma lista de alunos pronta, mas que necessitaria de novos construtores a cada novo parâmetro necessário.</p>
<p>Para resolver problemas deste tipo é que vamos em busca dos <em>ResultTransformers</em>.</p>
<h2>A interface <em>ResultTransformer</em></h2>
<p>Escondida na API do Hibernate existe uma interface que possibilita transformar o resultado de uma consulta, seja ela com <a href="http://www.hibernate.org/hib_docs/reference/en/html/querycriteria.html" target="_blank">Criteria</a>, <a href="http://www.hibernate.org/hib_docs/reference/en/html/queryhql.html" target="_blank">HQL </a>ou <a href="http://www.hibernate.org/hib_docs/reference/en/html/querysql.html" target="_blank">SQL</a> (o suporte aos dois últimos foi adicionado na versão 3.2) que utilize projeções em uma representação mais prática do que, por exemplo, uma lista de <em>Object[]</em>. Apresento então a pequena <em>ResultTransformer</em>:</p>
<p><pre class="brush: java;">
public interface ResultTransformer extends Serializable {
	public Object transformTuple(Object[] tuple, String[] aliases);
	public List transformList(List collection);
}
</pre></p>
<p>Os dois métodos especificados são aplicados em diferentes momentos para transformar o resultado de uma <em>query</em>: <code> transformTuple </code> é chamado durante o processamento inicial do resultado, com acesso às colunas retornadas pela consulta e aos <em>aliases</em> especificados para cada uma delas (se existirem); no caso de <code>transformList</code> a chamada é imediatamente antes do Hibernate retornar o resultado de uma consulta.</p>
<h2>Alguns transformadores prontos para usar</h2>
<p>Mas de que adianta uma interface sem implementações, não é? Felizmente o Hibernate disponibiliza algumas classes prontas para serem usadas em seus projetos.</p>
<p>Voltemos ao nosso problema: como não ter trabalho para manipular o resultado de consultas com projeção?</p>
<p>A primeira opção é o <strong><em>AliasToBeanResultTransformer</em>. </strong>Este transformador mapeia<em> aliases</em> (se você não sabe que o são <em>alias</em>, aguarde mais um pouco para entender com o exemplo) de colunas em atributos de objetos pertencentes à classe definida em seu construtor, populando-os através de <strong>métodos <em>setters </em></strong>(via <em>setter injection)</em>. A utilização pode ser vista no exemplo abaixo:</p>
<p><pre class="brush: java;">
...
List&lt;AlunoDTO&gt; alunos = session
    .createQuery( &quot;select matricula as matricula, nome as nomeAluno, curso.nome as nomeCurso from Aluno&quot; )
    .setResultTransformer(new AliasToBeanResultTransformer(AlunoDTO.class))
    .list();
...
</pre></p>
<p>Comparando com o código original vemos algumas diferenças. A primeira é a utilização da palavra-chave <strong>&#8220;as&#8221;</strong>. Esta é a forma de definir aliases (apelidos) para as colunas que serão utilizados para popular instâncias da classe <em>AlunoDTO</em> através de <em>setters</em> no estilo <code> setNomeAluno()</code> ou <code>setNomeCurso()</code>.</p>
<p>A segunda diferença é a chamada ao método <code> setResultTransformer() </code> da interface Query. Com ela é possível determinar uma estratégia de transformação de resultados de acordo com a necessidade da consulta. Neste caso, informamos uma instância de <em>AliasToBeanResultTransformer</em>, definido para transformar as colunas em objetos do tipo <em>AlunoDTO</em>.</p>
<p>Como alternativa para a criação de DTOs ou de métodos setters em entidades podemos utilizar o <strong><em>AliasToEntityMapResultTransformer</em>. </strong>Com ele a lista de tuplas será transformada em uma lista de mapas, onde cada cada um deles terá um conjunto de entradas <em>alias =&gt; valor_da_coluna</em>. Dessa forma temos uma representação mais fácil de ser manipulada do que a original.</p>
<p>Logo abaixo vê-se um exemplo de seu emprego:</p>
<p><pre class="brush: java;">
...
List&lt;Map&lt;String,Object&gt;&gt; mapaAlunos= session
    .createQuery( &quot;select matricula as matricula, nome as nomeAluno, curso.nome as nomeCurso from Aluno&quot; )
    .setResultTransformer(new AliasToEntityMapResultTransformer())
    .list();
...
</pre></p>
<p>Viram como este recurso pode ser útil? Além destes dois apresentados existem mais transformadores que podem ser utilizados em outros casos, como o <em>DistinctRootEntityResultTransformer</em>, empregado para evitar duplicidade de entidades no resultado. E se ainda não for suficente, sempre é possível criar novas estratégias implementando a interface <em>ResultTransformer</em>.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/tocadocalango.wordpress.com/12/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/tocadocalango.wordpress.com/12/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/tocadocalango.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/tocadocalango.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/tocadocalango.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/tocadocalango.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/tocadocalango.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/tocadocalango.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/tocadocalango.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/tocadocalango.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/tocadocalango.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/tocadocalango.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/tocadocalango.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/tocadocalango.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/tocadocalango.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/tocadocalango.wordpress.com/12/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=tocadocalango.wordpress.com&amp;blog=3602127&amp;post=12&amp;subd=tocadocalango&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://tocadocalango.wordpress.com/2008/05/06/hibernate-e-seus-resulttransformers/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/30c5d6bcda241fc0fed9e3833dee7a21?s=96&#38;d=identicon" medium="image">
			<media:title type="html">Ricardo Wendell</media:title>
		</media:content>
	</item>
		<item>
		<title>RichFaces e jQuery: tudo ao mesmo tempo agora</title>
		<link>http://tocadocalango.wordpress.com/2008/04/30/richfaces-e-jquery-tudo-ao-mesmo-tempo-agora/</link>
		<comments>http://tocadocalango.wordpress.com/2008/04/30/richfaces-e-jquery-tudo-ao-mesmo-tempo-agora/#comments</comments>
		<pubDate>Wed, 30 Apr 2008 03:01:57 +0000</pubDate>
		<dc:creator>Ricardo Wendell</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[jsf]]></category>
		<category><![CDATA[prototype]]></category>
		<category><![CDATA[richfaces]]></category>

		<guid isPermaLink="false">http://tocadocalango.wordpress.com/?p=6</guid>
		<description><![CDATA[A utilização dos componentes do RichFaces facilita bastante a incorporação de características de aplicações ricas a sistemas web que utilizam JavaServer Faces. A cada nova versão da biblioteca, mais e mais opções tornam-se disponíveis para incrementar sua aplicação e facilitar o desenvolvimento de interfaces mais complexas. Entretanto, é bom lembrar que, por trás de todas [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=tocadocalango.wordpress.com&amp;blog=3602127&amp;post=6&amp;subd=tocadocalango&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>A utilização dos componentes do <a href="http://www.jboss.org/jbossrichfaces/" target="_blank">RichFaces</a> facilita bastante a incorporação de características de aplicações ricas a sistemas web que utilizam <a href="http://java.sun.com/javaee/javaserverfaces/" target="_blank">JavaServer Faces</a>. A cada nova versão da biblioteca, mais e mais opções tornam-se disponíveis para incrementar sua aplicação e facilitar o desenvolvimento de interfaces mais complexas.</p>
<p>Entretanto, é bom lembrar que, por trás de todas estas maravilhas da praticidade moderna que o RichFaces oferece, ainda temos o bom e velho JavaScript por baixo dos panos. É esta incrível linguagem, que somente recentemente começou a ganhar o prestígio merecido, que move a maioria das funcionalidades mágicas dos componentes. Para tal, os desenvolvedores da biblioteca utilizaram-se de dois frameworks JavaScript bastante conhecidos: <a href="http://www.prototypejs.org/" target="_blank">Prototype</a> e <a href="http://script.aculo.us/" target="_blank">Script.aculo.us</a> (baseado no primeiro).</p>
<p>Estes dois já foram (e alguns ainda os consideram) os preferidos para auxiliar no desenvolvimento de soluções em JavaScript. Por causa disso vários outros projetos incorporaram estas bibliotecas para agregar comportamentos diversos a por exemplo: componentes JSF. E adivinha quem também fez essa escolha? o pessoal do RichFaces&#8230;</p>
<p>Muito bem, mas e o <a href="http://jquery.com/" target="_blank">jQuery</a>? Onde ele entra nessa história toda?</p>
<p>Acontece que o jQuery e seus <a href="http://plugins.jquery.com/" target="_blank">diversos plugins</a> estão cada vez mais na cabeça (e nos códigos) dos desenvolvedores web. Ele vai além do Prototype em vários aspectos: ganhou inúmeros admiradores e contribuidores, e é hoje uma opção mais conveniente para a adição de comportamentos à paginas web.</p>
<p>Resumindo então o cenário: temos os componentes prontos do RichFaces que encapsulam transparentemente códigos que utilizam Prototype e Script.aculo.us e, caso necessário, podemos adicionar outros comportamentos necessários com jQuery.</p>
<p>Qual o problema então?</p>
<p>O &#8220;problema&#8221; é que um importante método tanto do Prototype quanto do jQuery possuem nomes iguais!</p>
<p>A principal função do Prototype, e que é utilizada basicamente para reduzir o tamanho dos códigos de manipulação de elementos da árvore DOM, é a <span style="color:#229922;"> <code> <strong>$()</strong></code></span>. Esta pequena função substitui o longo método original para a busca de elementos da página por seu id: <span style="color:#229922;"> <code> <strong>document.getElementById()</strong></code></span>.</p>
<p>No jQuery, a função  <span style="color:#229922;"> <code> <strong>$()</strong></code></span> é o grande coringa: serve para buscar elementos da página através de seletores CSS, para criar novos elementos para serem adicionados à página ou para definir funções que devem ser executadas assim que a árvore de elementos tiver sido carregada pelo navegador (depois providencio um post mais detalhado sobre esta função tão versátil).</p>
<p>Então não é possível usar as duas ao mesmo tempo? E já que RichFaces utiliza Prototype, não posso usar jQuery quando empregar seus componentes? Mas é claro que pode!!</p>
<p>É possível utilizar as funcionalidades das duas bibliotecas com uma pequena adaptação: definindo um nome alternativo para a função  <span style="color:#229922;"> <code> <strong>$()</strong></code></span>do jQuery e utilizando-a sem a preocupação com conflitos com o Prototype. Veja o código abaixo como esta alternativa pode ser utilizada:</p>
<p><pre class="brush: jscript;">
var $j = jQuery.noConflict();

$j(&quot;div&quot;).hide();
$('rodape').show();

</pre></p>
<p>Neste exemplo, a função <span style="color:#229922;"><code><strong>$j()</strong></code></span> irá funcionar com o comportamento desejado para o jQuery e a função <span style="color:#229922;"><code><strong>$() </strong></code></span>funciona como a sua definição original do Prototype. Simples assim!</p>
<p>Agora você pode usufruir do melhor dos dois mundos: a praticidade dos componentes prontos e a flexibilidade de definir novos comportamentos ou utilizar os plugins prontos do jQuery.</p>
<p>Acho que para um primeiro post &#8220;de verdade&#8221; este até que ficou bem longo&#8230; A idéia parecia bem simples no começo, mas a necessidade da contextualização acrescentou algumas linhas a mais&#8230;</p>
<p>E no caso de alguma dúvida, o espaço para comentários está aí para ser utilizado! <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/tocadocalango.wordpress.com/6/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/tocadocalango.wordpress.com/6/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/tocadocalango.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/tocadocalango.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/tocadocalango.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/tocadocalango.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/tocadocalango.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/tocadocalango.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/tocadocalango.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/tocadocalango.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/tocadocalango.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/tocadocalango.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/tocadocalango.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/tocadocalango.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/tocadocalango.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/tocadocalango.wordpress.com/6/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=tocadocalango.wordpress.com&amp;blog=3602127&amp;post=6&amp;subd=tocadocalango&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://tocadocalango.wordpress.com/2008/04/30/richfaces-e-jquery-tudo-ao-mesmo-tempo-agora/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/30c5d6bcda241fc0fed9e3833dee7a21?s=96&#38;d=identicon" medium="image">
			<media:title type="html">Ricardo Wendell</media:title>
		</media:content>
	</item>
		<item>
		<title>O primeiro post</title>
		<link>http://tocadocalango.wordpress.com/2008/04/29/o-primeiro-post/</link>
		<comments>http://tocadocalango.wordpress.com/2008/04/29/o-primeiro-post/#comments</comments>
		<pubDate>Tue, 29 Apr 2008 00:39:28 +0000</pubDate>
		<dc:creator>Ricardo Wendell</dc:creator>
				<category><![CDATA[Aleatoriedades]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[E assim nasce a Toca do Calango!! Depois de muito tempo do surgimento da idéia de manter um blog, finalmente a procrastinação teve seu lugar tomado pelo primeiro post. A simplicidade do WordPress (e sua gratuidade) facilitaram a concretização, em apenas alguns minutos, de um local para ruminar sobre assuntos pseudo-aleatórios relacionados ao desenvolvimento de [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=tocadocalango.wordpress.com&amp;blog=3602127&amp;post=1&amp;subd=tocadocalango&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>E assim nasce a Toca do Calango!!</p>
<p>Depois de muito tempo do surgimento da idéia de manter um blog, finalmente a procrastinação teve seu lugar tomado pelo primeiro post. A simplicidade do WordPress (e sua gratuidade) facilitaram a concretização, em apenas alguns minutos, de um local para ruminar sobre assuntos pseudo-aleatórios relacionados ao desenvolvimento de software.</p>
<p>A idéia é proporcionar aos leitores discussões sobre novidades na área de desenvolvimento (que serão inicialmente mais ligadas a Java, Ruby e JavaScript), idéias para soluções de problemas (e às vezes os problemas em si&#8230;) ou qualquer coisa que eu ache interessante de ser compartilhada.</p>
<p>Este é apenas o passo inicial e espero conseguir manter a motivação e a inspiração para muitos outros posts&#8230;</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/tocadocalango.wordpress.com/1/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/tocadocalango.wordpress.com/1/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/tocadocalango.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/tocadocalango.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/tocadocalango.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/tocadocalango.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/tocadocalango.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/tocadocalango.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/tocadocalango.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/tocadocalango.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/tocadocalango.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/tocadocalango.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/tocadocalango.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/tocadocalango.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/tocadocalango.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/tocadocalango.wordpress.com/1/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=tocadocalango.wordpress.com&amp;blog=3602127&amp;post=1&amp;subd=tocadocalango&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://tocadocalango.wordpress.com/2008/04/29/o-primeiro-post/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/30c5d6bcda241fc0fed9e3833dee7a21?s=96&#38;d=identicon" medium="image">
			<media:title type="html">Ricardo Wendell</media:title>
		</media:content>
	</item>
	</channel>
</rss>
