<?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/"
	>

<channel>
	<title>Lucas Teixeira</title>
	<atom:link href="http://lucastex.com.br/feed/" rel="self" type="application/rss+xml" />
	<link>http://lucastex.com.br</link>
	<description>@lucastex</description>
	<lastBuildDate>Mon, 19 Jul 2010 11:39:24 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Criando um tipo de dados personalizado no Grails + Hibernate</title>
		<link>http://lucastex.com.br/2010/07/19/criando-um-tipo-de-dados-personalizado-no-grails-hibernate/</link>
		<comments>http://lucastex.com.br/2010/07/19/criando-um-tipo-de-dados-personalizado-no-grails-hibernate/#comments</comments>
		<pubDate>Mon, 19 Jul 2010 11:39:24 +0000</pubDate>
		<dc:creator>Volnei Munhoz</dc:creator>
				<category><![CDATA[Grails]]></category>
		<category><![CDATA[Groovy]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[hibernate]]></category>
		<category><![CDATA[boolean]]></category>
		<category><![CDATA[usertype]]></category>

		<guid isPermaLink="false">http://lucastex.com.br/?p=388</guid>
		<description><![CDATA[
Olá Pessoal,
Estou invadindo o Blog do meu grande amigo Lucas para postar uma solução que encontrei para um problema no mapeamento de dados de uma base de dados existente. Gostaria, em primeiro lugar, de agradecer o espaço cedido pelo Lucas e parabenizá-lo pelo excelente Blog.
Hoje em dia são poucos os projetos que precisamos desenvolver do [...]]]></description>
			<content:encoded><![CDATA[
<p>Olá Pessoal,</p>
<p>Estou invadindo o Blog do meu grande amigo Lucas para postar uma solução que encontrei para um problema no mapeamento de dados de uma base de dados existente. Gostaria, em primeiro lugar, de agradecer o espaço cedido pelo Lucas e parabenizá-lo pelo excelente Blog.</p>
<p>Hoje em dia são poucos os projetos que precisamos desenvolver do zero &#8212; criar modelagem, tabelas e etc&#8230; &#8212; por isso é muito comum depararmos com padrões proprietários que muitas vezes não se &#8220;encaixam&#8221; na ferramenta de desenvolvimento. Não preciso dizer que não é uma tarefa fácil convencer os desenvolvedores a se adequarem aos novos padrões, então, se não pode com eles, una-se a eles.</p>
<p>Bom, vamos direto ao assunto, no meu projeto atual me deparei com um padrão que utiliza &#8216;S&#8217; e &#8216;N&#8217; para o mapeamento de propriedades booleanas no banco de dados Oracle. Na pesquisa que realizei encontrei várias pseudo-soluções mas a única que atendeu 100% as necessidades foi a implementação de um tipo de dados do Hibernate.</p>
<p>Abaixo a implementação da classe SNUserType, não tem segredo é apenas a implementação da interface <strong>org.hibernate.usertype.UserType</strong>. Salve este código no pacote <strong>persistence</strong> na pasta de <strong>src/groovy</strong> do seu projeto Grails.</p>
<pre class="brush: groovy;">package persistence;

import org.hibernate.*;
import org.hibernate.usertype.*;
import java.sql.*;
import java.util.*;
import java.io.Serializable;

public class SNUserType implements UserType {

   def SQL_TYPES = [Hibernate.YES_NO.sqlType()];

   public int[] sqlTypes() {
      return SQL_TYPES;
   }

   private Class targetClass;

   public void setParameterValues(Properties params) {
      String targetClassName = params.getProperty(&quot;targetClass&quot;);
      try {
         targetClass = Class.forName(targetClassName);
      } catch (ClassNotFoundException e) {
         throw new HibernateException(&quot;Class &quot; + targetClassName + &quot; not found &quot;, e);
      }
   }

   public Class returnedClass() {
      return targetClass;
   }

   public boolean isMutable() {
      return false;
   }

   public Object deepCopy(Object value) {
      return value;
   }

   public Serializable disassemble(Object value) {
      return (Serializable) value;
   }

   public Object assemble(Serializable cached, Object owner) {
      return cached;
   }

   public Object replace(Object original, Object target, Object owner) {
      return original;
   }

   public boolean equals(Object x, Object y) {
      if (x == y)
         return true;
      if (x == null || y == null)
         return false;
      return x.equals(y);
   }

   public int hashCode(Object x) {
      return x.hashCode();
   }

   public Object nullSafeGet(ResultSet rs, String[] names, Object owner) throws SQLException {
      String value = rs.getString(names[0]);
      if (&quot;S&quot;.equals(value))
         return true;
      else
         return false;
   }

   public void nullSafeSet(PreparedStatement ps, Object value, int index) throws HibernateException, SQLException {
      if (value == null) {
         ps.setNull(index, Hibernate.YES_NO.sqlType());
      } else {
         if((Boolean)value) {
            ps.setString(index, &quot;S&quot;);
         } else {
            ps.setString(index, &quot;N&quot;);
         }
      }
   }
}</pre>
<p>Pronto, agora tudo que você precisa fazer é utilizar o novo tipo de dados no mapeamento de suas classes de domínio.</p>
<pre class="brush: groovy;">class Pessoa {

   String nome
   Boolean ativo

   static mapping = {
      ativo type: &quot;persistence.SNUserType&quot;
   }

}</pre>
<p>Com isso, resolvi o problema de integração e concluímos este post.</p>
<p>Um abraço</p>
<p>Volnei</p>

]]></content:encoded>
			<wfw:commentRss>http://lucastex.com.br/2010/07/19/criando-um-tipo-de-dados-personalizado-no-grails-hibernate/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Instalando o iOS 4 em seu iPhone 3G ou 3Gs</title>
		<link>http://lucastex.com.br/2010/06/10/instalando-o-ios-4-em-seu-iphone-3g-ou-3gs/</link>
		<comments>http://lucastex.com.br/2010/06/10/instalando-o-ios-4-em-seu-iphone-3g-ou-3gs/#comments</comments>
		<pubDate>Thu, 10 Jun 2010 19:07:21 +0000</pubDate>
		<dc:creator>Lucas Teixeira</dc:creator>
				<category><![CDATA[Mac]]></category>
		<category><![CDATA[3g]]></category>
		<category><![CDATA[3gs]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[firmware]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[iOS4]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[ipsw]]></category>
		<category><![CDATA[itunes]]></category>
		<category><![CDATA[wwdc]]></category>

		<guid isPermaLink="false">http://lucastex.com.br/?p=379</guid>
		<description><![CDATA[
Oi pessoal,
Essa semana teve na WWDC o lançamento oficial do iPhone 4, o novo aparelho da apple, e junto com isso, também o lançamento da nova versão do sistema operacional, antigo iPhone OS, que agora é chamado de iOS, na versão 4.
A mudança de nome era fato que estava pra acontecer, já que o sistema [...]]]></description>
			<content:encoded><![CDATA[
<p>Oi pessoal,</p>
<p>Essa semana teve na WWDC o lançamento oficial do iPhone 4, o novo aparelho da apple, e junto com isso, também o lançamento da nova versão do sistema operacional, antigo iPhone OS, que agora é chamado de iOS, na versão 4.</p>
<p>A mudança de nome era fato que estava pra acontecer, já que o sistema já está sendo usado no iPad, e não fazia mais sentido o nome &#8216;iPhone&#8217; nele.</p>
<p>Bom, o aparelho iPhone 4 veio com vários recursos legais, mas que dependem de hardware, ou seja, só conseguiremos brincar quando tivermos o aparelho em mãos, como filmagem em HD pela câmera, a tela tipo &#8216;retina&#8217;, que segundo o Jobs, foi a maior melhoria no iPhone, já que trouxe *muito* mais precisão e sensibilidade para a tela do iPhone, que já era simplesmente animal. Além disso, também o giroscópio, processador melhor, e outras coisas.</p>
<p>Já outras funcionalidades que não dependem de hardware, apenas de software (no caso, o iOS4), podem ser atualizadas pra quem tem o iPhone 3Gs, (e alguns itens dela no iPhone 3G). Ontem atualizei o meu iPhone 3Gs e estou aproveitando muito. Hoje vou atualizar o iPhone 3G da @kapiologo pra ver efetivamente o que de diferente ele vai ficar.</p>
<p>Recursos legais do iOS4 (alguns já em uso massivo por aqui):</p>
<ul>
<li>Pastas de aplicativos &#8211; Chega daquela bagunça nas páginas, agora está enfim, tudo organizado em &#8220;Jogos&#8221;, &#8220;Financeiro&#8221;, &#8220;Inutil&#8221;, &#8220;Social&#8221;, e outras categorias</li>
<li>Multi-task &#8211; Enfim o tão esperado multi-task. Agora basta um duplo clique no botão home para que todos os programas que estejam abertos venham a tona, e você pode alterar entre eles sem perder tempo de recarregar ou perder o estado da app atual, muito bom mesmo.</li>
<li>Novo cliente de e-mail: Com e-mails agrupados em threads, como o gmail, agora fica mais fácil acompanhar listas de discussão também.</li>
<li>Bluetooth para teclados: Ainda não usei, nem sei se serviria para alguma coisa, mas vou fazer o teste hoje a noite com o teclado do iMac.</li>
<li>Camera fotográfica: Zoom digital &#8211; legal, e até mantém uma qualidade bem aceitável.</li>
<li>Personalização com papel de parede no home &#8211; particularmente não muda nada pra mim, mas pra quem gosta&#8230; :)</li>
</ul>
<p>Entre outros pontos, também existem os novos softwares como um tal de &#8220;Game Center&#8221; que não vi explicações muito convincentes em lugar algum, mas me parece ser uma app no estilo do antigo GameSpy (alguém jogava quake?) ou do Steam, para os jogos do iPhone, mas não tenho certeza. Também o iBook (que não está presente ainda, acredito que virá na atualização oficial do iOS4).</p>
<p>Bom, só que, como o mel nem sempre é tão doce, a Apple prometeu a atualização do iOS4 pra quem tem iPhone 3G/3Gs apenas para quando o iPhone4 começar a ser vendido nos EUA, e isso será no dia 21 de junho.</p>
<p>Só que como o pessoal que faz parte do Developer Program da Apple já tem acesso a versão, isso acabou vazando pela internet e pode ser encontrado facilmente, só que com um detalhe: Apenas para usuários &#8212; abençoados &#8212; que possuem um Mac em casa.</p>
<p>Por quê? Pelo fato que só se consegue usar o <strong>ipsw</strong> do iOS4 se for atualizado a partir do iTunes 9.2, que ainda está na versão beta.</p>
<p>Então se você é um desses felizardos de ter um iPhone 3G/3Gs e um Mac em casa, pode correr pra instalar a nova versão.</p>
<p>Eu encontrei o link para baixar o beta do iTunes 9.2 pro Mac aqui: <a href="http://hotfile.com/dl/47027679/1629379/itunes_9.2_beta.dmg.html">http://hotfile.com/dl/47027679/1629379/itunes_9.2_beta.dmg.html</a><br />
O ipsw do iPhone 3G: <a href="http://hotfile.com/dl/47027501/b933959/iPhone12_4.0_8A293_Restore.ipsw.html" target="_blank">http://hotfile.com/dl/47027501/b933959/iPhone12_4.0_8A293_Restore.ipsw.html</a><br />
O ipsw do iPhone 3GS: <a href="http://depositfiles.com/en/files/imajjlubx">http://depositfiles.com/en/files/imajjlubx</a> (links retirados do blog <a href="http://www.addictivetips.com/mobile/download-itunes-9-2-beta-and-ios-4-for-iphone-3g-and-3gs/" target="_blank">Addictive Tips</a>)</p>
<p>Bom, como fazer? Depois de baixar, é o procedimento normal de atualização. Execute o DMG do iTunes, e faça a instalação (mantenha sua versão do iTunes fechada durante o procedimento). Depois de instalar, abra o iTunes, e ele irá atualizar toda sua Library, esse processo demorou uns 5 minutos em minha library com 50gb aproximadamente.</p>
<p>Depois, é sempre bom dar uma verificada se a versão foi instalada corretamente, então vá no &#8216;About iTunes&#8217;, no menu para checar se está com a 9.2 e pronto.</p>
<p>Conecte seu iPhone no Mac, após o iTunes reconhecê-lo, faça o backup do seu aparelho (botão direito no item iPhone -&gt; backup).</p>
<p>Selecione o iPhone no menu esquerdo e na direita existirá uma opção &#8220;UPDATE&#8221;, clique nesta opção com a tecla &#8220;ALT-OPTION&#8221; do Mac pressionada, e uma janela de localização de arquivo será aberta. Basta agora selecionar o firmware ipsw para o modelo do seu aparelho que você baixou, e aguardar a instalação.</p>
<p>No final, o backup será restaurado, e o iPhone pronto para ser usado.</p>
<p>Incrível :)</p>

]]></content:encoded>
			<wfw:commentRss>http://lucastex.com.br/2010/06/10/instalando-o-ios-4-em-seu-iphone-3g-ou-3gs/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Palestra sobre Grails, meus agradecimentos</title>
		<link>http://lucastex.com.br/2010/05/26/palestra-sobre-grails-meus-agradecimentos/</link>
		<comments>http://lucastex.com.br/2010/05/26/palestra-sobre-grails-meus-agradecimentos/#comments</comments>
		<pubDate>Thu, 27 May 2010 02:20:58 +0000</pubDate>
		<dc:creator>Lucas Teixeira</dc:creator>
				<category><![CDATA[Grails]]></category>
		<category><![CDATA[Groovy]]></category>
		<category><![CDATA[palestra]]></category>
		<category><![CDATA[umesp]]></category>

		<guid isPermaLink="false">http://lucastex.com.br/?p=373</guid>
		<description><![CDATA[
Como postado antes, ontem falei sobre Grails no SESTINFO &#8211; &#8220;Grails: Java produtivo e divertido&#8221;, evento aberto da UMESP (Universidade Metodista de São Paulo).
O evento foi incrível, com muita gente presente. O último número que recebi é que tinham 98 pessoas na sala assistindo e mais dois professores. Ainda depois do início da palestra cerca [...]]]></description>
			<content:encoded><![CDATA[
<p>Como postado antes, ontem falei sobre <a href="http://www.grails.org" target="_blank">Grails</a> no SESTINFO &#8211; &#8220;Grails: Java produtivo e divertido&#8221;, evento aberto da <a href="http://www.umesp.br">UMESP</a> (Universidade Metodista de São Paulo).<br />
O evento foi incrível, com muita gente presente. O último número que recebi é que tinham 98 pessoas na sala assistindo e mais dois professores. Ainda depois do início da palestra cerca de 15 a 20 pessoas chegaram mas não puderam entrar pelo limite de pessoas na sala.</p>
<p>Pra quem não pode estar presente, comecei a apresentação falando de <a href="http://groovy.codehaus.org">groovy</a> e fazendo um paralelo de uma aplicação Java e a mesma em Groovy, passo-a-passo mostrando os benefícios e vantagens que o groovy pode trazer para o desenvolvimento (o antigo caso do seletor de palavras).<br />
Tentei deixar bem claro o tempo inteiro que o importante é gastarmos tempo *PENSANDO* em resolver o problema e não tentando aprender e entender como a linguagem de programação funciona.</p>
<p>Logo depois, passei por vários pontos do Grails, tentando mostrar como ele trazia os benfícios do Groovy para o desenvolvimento web. Passei pelo GORM (mapeamento objeto-relacional dinâmico), plugins, convenções e vários outros pontos. Pra encerrar a parte teórica, deixei alguns links e sites interessantes para que o pessoal pudesse consultar além de oferecer para os presentes cupons de desconto para a <a href="http://groovymag.com">GroovyMag</a>, revista focada em desenvolvimento Groovy e Grails.</p>
<p>Ao fim, apresentei uma aplicação simples, desenvolvida em bem pouco tempo que funcionava como um &#8216;twitter wall&#8217;, ou seja, fazendo buscas automaticamente no twitter de palavras previamente cadastradas, inclusive capturando automaticamente tweets do pessoal que estavam assistindo a palestra e twittando&#8230; :)</p>
<p>Bom, como eu já falei, foi muito bom, e além de satisfeito, fiquei muito agradecido, então não posso deixar de agradecer:<br />
Principalmente ao Prof. Mauro Schneider (<a href="http://twitter.com/muschneider">@muschneider</a>), professor da Universidade que me fez o convite e viabilizou tudo isso, a Universidade não só o meu agradecimento, mas também os meus parabéns pelo ótimo evento. Aos meus amigos que me confirmara, e foram me apoiar e ajudar, Emerson (<a href="http://twitter.com/erbernardino">@erbernardino</a>), Paulo (<a href="http://twitter.com/paulosuzart">@paulosuzart</a>), Leonardo (<a href="http://twitter.com/leonardofigs">@leonardofigs</a>), Rafael (<a href="http://twitter.com/rafaelfelini">@rafaelfelini</a>), Luca (<a href="http://twitter.com/lucabastos">@lucabastos</a>) e Jailton (<a href="http://twitter.com/jailton">@jailton</a>). Ao Jailton, não só pela presença, mas também pelo apoio divulgando o evento na lista do SOUJava.</p>
<p>Pra quem quiser, a apresentação segue abaixo. E também 2 repositórios que criei no github, um com os fontes do projeto apresentado, e outro com a apresentação em HTML.</p>
<p>Repositório da apresentação: <a href="http://github.com/lucastex/slides-grails-umesp">http://github.com/lucastex/slides-grails-umesp</a><br />
Repositório dos fontes do projeto: <a href="http://github.com/lucastex/projeto-grails-umesp">http://github.com/lucastex/projeto-grails-umesp</a></p>
<div id="__ss_4324585" style="width: 425px;"><strong style="display: block; margin: 12px 0 4px;"><a title="Grails: Java produtivo e divertido" href="http://www.slideshare.net/lucastex/grails-java-produtivo-e-divertido">Grails: Java produtivo e divertido</a></strong><object id="__sse4324585" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="355" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=metodista-grails-100526215434-phpapp02&amp;stripped_title=grails-java-produtivo-e-divertido" /><param name="name" value="__sse4324585" /><param name="allowfullscreen" value="true" /><embed id="__sse4324585" type="application/x-shockwave-flash" width="425" height="355" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=metodista-grails-100526215434-phpapp02&amp;stripped_title=grails-java-produtivo-e-divertido" name="__sse4324585" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<div style="padding: 5px 0 12px;">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/lucastex">Lucas Teixeira</a>.</div>
<div style="padding: 5px 0 12px;">Ah, e uma foto do pessoal se arrumando antes da palestra comecar:</div>
<div style="padding: 5px 0 12px;">
<dl id="attachment_377" class="wp-caption aligncenter" style="width: 310px;">
<dt class="wp-caption-dt"><a href="http://lucastex.com.br/wp-content/uploads/2010/05/photo.jpg"><img class="size-medium wp-image-377" title="palestra" src="http://lucastex.com.br/wp-content/uploads/2010/05/photo-300x225.jpg" alt="palestra" width="300" height="225" /></a></dt>
<dd class="wp-caption-dd">palestra</dd>
</dl>
</div>
<div style="padding: 5px 0 12px;">[]s,</div>
<p>Lucas</p></div>

]]></content:encoded>
			<wfw:commentRss>http://lucastex.com.br/2010/05/26/palestra-sobre-grails-meus-agradecimentos/feed/</wfw:commentRss>
		<slash:comments>25</slash:comments>
		</item>
		<item>
		<title>Palestra aberta de Grails na Universidade Metodista</title>
		<link>http://lucastex.com.br/2010/05/19/palestra-aberta-de-grails-na-universidade-metodista/</link>
		<comments>http://lucastex.com.br/2010/05/19/palestra-aberta-de-grails-na-universidade-metodista/#comments</comments>
		<pubDate>Thu, 20 May 2010 02:30:49 +0000</pubDate>
		<dc:creator>Lucas Teixeira</dc:creator>
				<category><![CDATA[Grails]]></category>
		<category><![CDATA[palestra]]></category>

		<guid isPermaLink="false">http://lucastex.com.br/?p=367</guid>
		<description><![CDATA[
Pra quem estará em São Paulo na próxima terça-feira, eu irei apresentar uma palestra sobre Grails na SESTINFO &#8211; Semana de Estudos em Tecnologia da Universidade Metodista de São Paulo.
O título da palestra será &#8211; &#8220;Grails &#8211; Java produtivo e divertido&#8221; e a entrada é liberada para quem quiser assistir. Vou falar de Groovy e [...]]]></description>
			<content:encoded><![CDATA[
<p>Pra quem estará em São Paulo na próxima terça-feira, eu irei apresentar uma palestra sobre Grails na SESTINFO &#8211; Semana de Estudos em Tecnologia da <a href="http://www.metodista.br" target="_blank">Universidade Metodista de São Paulo</a>.</p>
<p>O título da palestra será &#8211; &#8220;Grails &#8211; Java produtivo e divertido&#8221; e a entrada é liberada para quem quiser assistir. Vou falar de Groovy e Grails além da comunidade envolvida em torno dessas tecnologias. E ao final da apresentação, vou fazer algum hands on com o pessoal, desenvolvendo uma aplicação live com todos.</p>
<p>Divulgue em suas listas de discussões, empresa, amigos e inimigos, aproveitem que a entrada é liberada!</p>
<p><strong>Data</strong>: 25 de maio<br />
<strong>Horário</strong>: A partir das 19:00<br />
<strong>Local</strong>: Universidade Metodista<br />
<strong>Endereço</strong>: Rua Alfeu Tavares, 149 &#8211; Rudge Ramos &#8211; São Bernardo do Campo – SP</p>
<p><strong>Mapa</strong>: <a href="http://maps.google.com.br/maps?f=q&amp;source=s_q&amp;hl=pt-BR&amp;geocode=&amp;q=Rua+Alfeu+Tavares,+149+Rudge+Ramos+-+S%C3%A3o+Bernardo+do+Campo+%E2%80%93+SP&amp;sll=-23.581689,-46.642769&amp;sspn=0.020551,0.046756&amp;ie=UTF8&amp;hq=&amp;hnear=R.+Alfeu+Tavares,+149+-+Rudge+Ramos,+S%C3%A3o+Bernardo+do+Campo+-+S%C3%A3o+Paulo,+09641-000&amp;ll=-23.609924,-46.548729&amp;spn=0.16437,0.37405&amp;z=13&amp;iwloc=A" target="_blank">http://maps.google.com.br/maps?f=q&amp;source=s_q&amp;hl=pt-BR&amp;geocode=&amp;q=Rua+Alfeu+Tavares,+149+Rudge+Ramos+-+S%C3%A3o+Bernardo+do+Campo+%E2%80%93+SP&amp;sll=-23.581689,-46.642769&amp;sspn=0.020551,0.046756&amp;ie=UTF8&amp;hq=&amp;hnear=R.+Alfeu+Tavares,+149+-+Rudge+Ramos,+S%C3%A3o+Bernardo+do+Campo+-+S%C3%A3o+Paulo,+09641-000&amp;ll=-23.609924,-46.548729&amp;spn=0.16437,0.37405&amp;z=13&amp;iwloc=A</a></p>
<p>Depois da palestra, vou divulgar os slides e os fontes do hands on aqui no blog.</p>
<p>Ajude a divulgar, retwittando esta mensagem: <a href="http://twitter.com/lucastex/status/14333780136">http://twitter.com/lucastex/status/14333780136</a></p>
<p><span style="color: #ff0000;"><strong>[Atualizado!]</strong></span></p>
<p>Vou distribuir uma edição grátis da Groovy Magazine (<a href="http://groovymag.com" target="_blank">groovymag.com</a>) para cada pessoa presente no local, compareça!</p>

]]></content:encoded>
			<wfw:commentRss>http://lucastex.com.br/2010/05/19/palestra-aberta-de-grails-na-universidade-metodista/feed/</wfw:commentRss>
		<slash:comments>25</slash:comments>
		</item>
		<item>
		<title>Usando o textmate como editor de texto padrão do Mac</title>
		<link>http://lucastex.com.br/2010/04/20/usando-o-textmate-como-editor-de-texto-padrao-do-mac/</link>
		<comments>http://lucastex.com.br/2010/04/20/usando-o-textmate-como-editor-de-texto-padrao-do-mac/#comments</comments>
		<pubDate>Tue, 20 Apr 2010 22:18:55 +0000</pubDate>
		<dc:creator>Lucas Teixeira</dc:creator>
				<category><![CDATA[Mac]]></category>
		<category><![CDATA[dica]]></category>
		<category><![CDATA[textmate]]></category>

		<guid isPermaLink="false">http://lucastex.com.br/?p=365</guid>
		<description><![CDATA[
Uma coisa bem chata que acontece, é que quando tentava abrir arquivos com a extensão txt no Mac, sempre abria o TextEdit, o editor padrão do Mac OS.
É um editor muito simples e pouco funcional, o que me fazia todas as vezes buscar o textmate para editar e trabalhar com os arquivos. Resolvi definir ele [...]]]></description>
			<content:encoded><![CDATA[
<p>Uma coisa bem chata que acontece, é que quando tentava abrir arquivos com a extensão txt no Mac, sempre abria o TextEdit, o editor padrão do Mac OS.</p>
<p>É um editor muito simples e pouco funcional, o que me fazia todas as vezes buscar o textmate para editar e trabalhar com os arquivos. Resolvi definir ele como padrão da seguinte forma</p>
<ol>
<li>Localize algum arquivo com a extensão que quer mudar (no meu caso, .txt)</li>
<li>Vá em propriedades deste arquivo (ou selecione-o e aperte cmd+I)</li>
<li>Na &#8216;aba&#8217; &#8220;Open with&#8221;, selecione o programa que deseja usar</li>
<li>Selecione o botão &#8220;Change All&#8221; para setar como padrão para todos os arquivos deste tipo.</li>
</ol>
<p>Pronto, agora os arquivos TXT serão abertos diretamente no Textmate!</p>

]]></content:encoded>
			<wfw:commentRss>http://lucastex.com.br/2010/04/20/usando-o-textmate-como-editor-de-texto-padrao-do-mac/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Plugin grails para calcular valor de frete dos correios</title>
		<link>http://lucastex.com.br/2010/04/14/plugin-grails-para-calcular-valor-de-frete-dos-correios/</link>
		<comments>http://lucastex.com.br/2010/04/14/plugin-grails-para-calcular-valor-de-frete-dos-correios/#comments</comments>
		<pubDate>Wed, 14 Apr 2010 18:46:38 +0000</pubDate>
		<dc:creator>Lucas Teixeira</dc:creator>
				<category><![CDATA[Grails]]></category>
		<category><![CDATA[calculo]]></category>
		<category><![CDATA[correios]]></category>
		<category><![CDATA[frete]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[sedex]]></category>

		<guid isPermaLink="false">http://lucastex.com.br/?p=362</guid>
		<description><![CDATA[
Acabei de lancar um novo plugin grails.
Este calcula o valor do envio de uma encomenda através dos Correios. Contempla SEDEX, SEDEX 10, SEDEX a cobrar e outros. O texto explicativo está bem simples e legal, e está no github junto com os fontes:
http://github.com/lucastex/correios-br
Mesmo os fontes no github, você pode instalar o plugin usando o comando [...]]]></description>
			<content:encoded><![CDATA[
<p>Acabei de lancar um novo plugin grails.</p>
<p>Este calcula o valor do envio de uma encomenda através dos Correios. Contempla SEDEX, SEDEX 10, SEDEX a cobrar e outros. O texto explicativo está bem simples e legal, e está no github junto com os fontes:</p>
<p><a href="http://github.com/lucastex/correios-br">http://github.com/lucastex/correios-br</a></p>
<p>Mesmo os fontes no github, você pode instalar o plugin usando o comando padrão do grails:</p>
<pre class="brush: groovy;">grails install-plugin correios-br</pre>
<p>Deem uma olhada nos docs do github, vale a pena!</p>

]]></content:encoded>
			<wfw:commentRss>http://lucastex.com.br/2010/04/14/plugin-grails-para-calcular-valor-de-frete-dos-correios/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Google agora analisa a velocidade dos sites</title>
		<link>http://lucastex.com.br/2010/04/13/google-agora-analisa-a-velocidade-dos-sites/</link>
		<comments>http://lucastex.com.br/2010/04/13/google-agora-analisa-a-velocidade-dos-sites/#comments</comments>
		<pubDate>Tue, 13 Apr 2010 11:01:22 +0000</pubDate>
		<dc:creator>Lucas Teixeira</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://lucastex.com.br/2010/04/13/google-agora-analisa-a-velocidade-dos-sites/</guid>
		<description><![CDATA[
 O google iniciou no fim da semana passado com mais um fator de relevância para indexação e rankeamento dos sites que são retornados por ele. Por incrível que pareça, &#8220;velocidade do site&#8221; agora também conta.
Isso impacta diratamente em arquivos e chamadas externas do site (imagens, css, js), e traz a tona com MUITA importância [...]]]></description>
			<content:encoded><![CDATA[
<p><span><span style="font-family: Trebuchet MS;"> O google iniciou no fim da semana passado com mais um fator de relevância para indexação e rankeamento dos sites que são retornados por ele. Por incrível que pareça, &#8220;velocidade do site&#8221; agora também conta.</p>
<p>Isso impacta diratamente em arquivos e chamadas externas do site (imagens, css, js), e traz a tona com MUITA importância um assunto que já estava ganhando foco nos ultimos tempos que é a otimização dos sites. Otimização de tudo, desde tamanho de imagens, estrutura de HTML bem formatado, compactação de JS, união de estilos e funções JS em menos arquivos e etc.</p>
<p>Este recurso entrou em uso no Google.com, e ainda está no famoso &#8220;beta&#8221; do google. Em algum tempo, conforme for ganhando maturidade, será estendido a todos outros, incluindo Brasil. Vou deixar aqui o link oficial do anuncio pra que quem esteja interessado possa ler, e também ver as dicas de frameworks e tecnologias que o google recomenda para este trabalho de otimização.</p>
<p><a href="http://googlewebmastercentral.blogspot.com/2010/04/using-site-speed-in-web-search-ranking.html">http://googlewebmastercentral.blogspot.com/2010/04/using-site-speed-in-web-search-ranking.html</a></p>
<p>:)</span></span></p>

]]></content:encoded>
			<wfw:commentRss>http://lucastex.com.br/2010/04/13/google-agora-analisa-a-velocidade-dos-sites/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Unboxing do meu iMac de 27&#8243;</title>
		<link>http://lucastex.com.br/2010/03/09/unboxing-do-meu-imac-de-27/</link>
		<comments>http://lucastex.com.br/2010/03/09/unboxing-do-meu-imac-de-27/#comments</comments>
		<pubDate>Tue, 09 Mar 2010 03:46:11 +0000</pubDate>
		<dc:creator>Lucas Teixeira</dc:creator>
				<category><![CDATA[Mac]]></category>
		<category><![CDATA[imac]]></category>
		<category><![CDATA[unboxing]]></category>

		<guid isPermaLink="false">http://lucastex.com.br/?p=326</guid>
		<description><![CDATA[
Enfim chegou meu novo PC. Faz um tempo já que estava adiando comprar um computador de mesa para desenvolver e ficar mais a vontade em casa. Com o uso intensivo apenas de  notebook a alguns anos, meu pescoço e minhas costas começaram a reclamar feio esse ano.
Resolvi aproveitar a promoção de lançamento do site do [...]]]></description>
			<content:encoded><![CDATA[
<p>Enfim chegou meu novo PC. Faz um tempo já que estava adiando comprar um computador de mesa para desenvolver e ficar mais a vontade em casa. Com o uso intensivo apenas de  notebook a alguns anos, meu pescoço e minhas costas começaram a reclamar feio esse ano.</p>
<p>Resolvi aproveitar a promoção de lançamento do site do carrefour, que dava 20% de desconto em qualquer produto do site e comprei o tão sonhado iMac de 27&#8243;. 20% de desconto em cima do preço da Apple Store fez uma grande diferença, pode acreditar :) Cheguei de viagem este fim de semana e enfim hoje uma notícia boa, chegou meu iMac. :)</p>
<p>Ponto mega-positivo: Tela. Não podia imaginar a qualidade desse display de LED. É fantástico. Em relação a tamanho, já estava usando um Samsung de 24&#8243;, mas o brilho, a definição do display de LED da Apple é fora de sério. Tirando ainda a resolução alcançada, de <strong>2560</strong> por <strong>1440</strong>.</p>
<p>Preciso agora encontrar uma maneira efetiva de manter um sincronismo REAL entre os dados do iMac e do MacBook. Não queria nem algo web-based como dropbox ou sugarsync, seria alguma coisa normal mesmo, talvez até quem sabe um rsync possa ajudar. Se você tiver alguma opinião ou sugestão, me salve :)</p>
<p>Sobre o problema de flickering reportado por aí a alguns meses, achei que pudesse estragar a minha alegria, mas não, logo que liguei, junto com as atualizações, já veio um firmware do LED pra deixar tudo OK. :)</p>
<p>Segue algumas fotos do unboxing.</p>

<a href='http://lucastex.com.br/2010/03/09/unboxing-do-meu-imac-de-27/foto-0/' title='Foto 1'><img width="150" height="150" src="http://lucastex.com.br/wp-content/uploads/2010/03/foto-0-150x150.jpg" class="attachment-thumbnail" alt="" title="Foto 1" /></a>
<a href='http://lucastex.com.br/2010/03/09/unboxing-do-meu-imac-de-27/foto-1/' title='Foto 2'><img width="150" height="150" src="http://lucastex.com.br/wp-content/uploads/2010/03/foto-1-150x150.jpg" class="attachment-thumbnail" alt="" title="Foto 2" /></a>
<a href='http://lucastex.com.br/2010/03/09/unboxing-do-meu-imac-de-27/foto-2/' title='Foto 3'><img width="150" height="150" src="http://lucastex.com.br/wp-content/uploads/2010/03/foto-2-150x150.jpg" class="attachment-thumbnail" alt="" title="Foto 3" /></a>
<a href='http://lucastex.com.br/2010/03/09/unboxing-do-meu-imac-de-27/foto-3/' title='Foto 4'><img width="150" height="150" src="http://lucastex.com.br/wp-content/uploads/2010/03/foto-3-150x150.jpg" class="attachment-thumbnail" alt="" title="Foto 4" /></a>
<a href='http://lucastex.com.br/2010/03/09/unboxing-do-meu-imac-de-27/foto-6/' title='Foto 5'><img width="150" height="150" src="http://lucastex.com.br/wp-content/uploads/2010/03/foto-6-150x150.jpg" class="attachment-thumbnail" alt="" title="Foto 5" /></a>
<a href='http://lucastex.com.br/2010/03/09/unboxing-do-meu-imac-de-27/foto-7/' title='Foto 6'><img width="150" height="150" src="http://lucastex.com.br/wp-content/uploads/2010/03/foto-7-150x150.jpg" class="attachment-thumbnail" alt="" title="Foto 6" /></a>
<a href='http://lucastex.com.br/2010/03/09/unboxing-do-meu-imac-de-27/foto-8/' title='Foto 7'><img width="150" height="150" src="http://lucastex.com.br/wp-content/uploads/2010/03/foto-8-150x150.jpg" class="attachment-thumbnail" alt="" title="Foto 7" /></a>
<a href='http://lucastex.com.br/2010/03/09/unboxing-do-meu-imac-de-27/foto-9/' title='Foto 8'><img width="150" height="150" src="http://lucastex.com.br/wp-content/uploads/2010/03/foto-9-150x150.jpg" class="attachment-thumbnail" alt="" title="Foto 8" /></a>
<a href='http://lucastex.com.br/2010/03/09/unboxing-do-meu-imac-de-27/foto-10/' title='Foto 9'><img width="150" height="150" src="http://lucastex.com.br/wp-content/uploads/2010/03/foto-10-150x150.jpg" class="attachment-thumbnail" alt="" title="Foto 9" /></a>
<a href='http://lucastex.com.br/2010/03/09/unboxing-do-meu-imac-de-27/foto-12/' title='Foto 10'><img width="150" height="150" src="http://lucastex.com.br/wp-content/uploads/2010/03/foto-12-150x150.jpg" class="attachment-thumbnail" alt="" title="Foto 10" /></a>
<a href='http://lucastex.com.br/2010/03/09/unboxing-do-meu-imac-de-27/foto-13/' title='Foto 11'><img width="150" height="150" src="http://lucastex.com.br/wp-content/uploads/2010/03/foto-13-150x150.jpg" class="attachment-thumbnail" alt="" title="Foto 11" /></a>
<a href='http://lucastex.com.br/2010/03/09/unboxing-do-meu-imac-de-27/foto-14/' title='Foto 12'><img width="150" height="150" src="http://lucastex.com.br/wp-content/uploads/2010/03/foto-14-150x150.jpg" class="attachment-thumbnail" alt="" title="Foto 12" /></a>
<a href='http://lucastex.com.br/2010/03/09/unboxing-do-meu-imac-de-27/foto-15/' title='Foto 13'><img width="150" height="150" src="http://lucastex.com.br/wp-content/uploads/2010/03/foto-15-150x150.jpg" class="attachment-thumbnail" alt="" title="Foto 13" /></a>
<a href='http://lucastex.com.br/2010/03/09/unboxing-do-meu-imac-de-27/foto-16/' title='Foto 14'><img width="150" height="150" src="http://lucastex.com.br/wp-content/uploads/2010/03/foto-16-150x150.jpg" class="attachment-thumbnail" alt="" title="Foto 14" /></a>
<a href='http://lucastex.com.br/2010/03/09/unboxing-do-meu-imac-de-27/foto-17/' title='Foto 15'><img width="150" height="150" src="http://lucastex.com.br/wp-content/uploads/2010/03/foto-17-150x150.jpg" class="attachment-thumbnail" alt="" title="Foto 15" /></a>
<a href='http://lucastex.com.br/2010/03/09/unboxing-do-meu-imac-de-27/foto1/' title='Foto 16'><img width="150" height="150" src="http://lucastex.com.br/wp-content/uploads/2010/03/foto1-150x150.jpg" class="attachment-thumbnail" alt="" title="Foto 16" /></a>
<a href='http://lucastex.com.br/2010/03/09/unboxing-do-meu-imac-de-27/foto2/' title='Foto 17'><img width="150" height="150" src="http://lucastex.com.br/wp-content/uploads/2010/03/foto2-150x150.jpg" class="attachment-thumbnail" alt="" title="Foto 17" /></a>
<a href='http://lucastex.com.br/2010/03/09/unboxing-do-meu-imac-de-27/foto3/' title='Foto 18'><img width="150" height="150" src="http://lucastex.com.br/wp-content/uploads/2010/03/foto3-150x150.jpg" class="attachment-thumbnail" alt="" title="Foto 18" /></a>
<a href='http://lucastex.com.br/2010/03/09/unboxing-do-meu-imac-de-27/foto4/' title='Foto 19'><img width="150" height="150" src="http://lucastex.com.br/wp-content/uploads/2010/03/foto4-150x150.jpg" class="attachment-thumbnail" alt="" title="Foto 19" /></a>
<a href='http://lucastex.com.br/2010/03/09/unboxing-do-meu-imac-de-27/foto-18/' title='Foto 20'><img width="150" height="150" src="http://lucastex.com.br/wp-content/uploads/2010/03/foto-18-150x150.jpg" class="attachment-thumbnail" alt="" title="Foto 20" /></a>
<a href='http://lucastex.com.br/2010/03/09/unboxing-do-meu-imac-de-27/foto-19/' title='Foto 21'><img width="150" height="150" src="http://lucastex.com.br/wp-content/uploads/2010/03/foto-19-150x150.jpg" class="attachment-thumbnail" alt="" title="Foto 21" /></a>
<a href='http://lucastex.com.br/2010/03/09/unboxing-do-meu-imac-de-27/foto-20/' title='Foto 22'><img width="150" height="150" src="http://lucastex.com.br/wp-content/uploads/2010/03/foto-20-150x150.jpg" class="attachment-thumbnail" alt="" title="Foto 22" /></a>


]]></content:encoded>
			<wfw:commentRss>http://lucastex.com.br/2010/03/09/unboxing-do-meu-imac-de-27/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Como, e por que usar um DataSource JNDI.</title>
		<link>http://lucastex.com.br/2010/03/04/como-e-por-que-usar-um-datasource-jndi/</link>
		<comments>http://lucastex.com.br/2010/03/04/como-e-por-que-usar-um-datasource-jndi/#comments</comments>
		<pubDate>Thu, 04 Mar 2010 06:36:04 +0000</pubDate>
		<dc:creator>Lucas Teixeira</dc:creator>
				<category><![CDATA[Grails]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[cluster]]></category>
		<category><![CDATA[configuracao]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[datasou]]></category>
		<category><![CDATA[environment]]></category>
		<category><![CDATA[infra]]></category>
		<category><![CDATA[jndi]]></category>

		<guid isPermaLink="false">http://lucastex.com.br/?p=312</guid>
		<description><![CDATA[
Recebi uma pergunta esses dias por aqui.
Lucas,
gostaria de saber como trabalhar com arquivos .properties pra conexão com o banco de dados.
No Grails a gente nota que a conexão fica no código-fonte (DataSorce.class)&#8230;
Estou tentando descobrir como faço para ter um arquivo de propriedade com os parametros da conexão. Caso eu precise apontar para outro banco, não [...]]]></description>
			<content:encoded><![CDATA[
<p>Recebi uma pergunta esses dias por aqui.</p>
<blockquote><p>Lucas,<br />
gostaria de saber como trabalhar com arquivos .properties pra conexão com o banco de dados.<br />
No Grails a gente nota que a conexão fica no código-fonte (DataSorce.class)&#8230;<br />
Estou tentando descobrir como faço para ter um arquivo de propriedade com os parametros da conexão. Caso eu precise apontar para outro banco, não terei que recoompilar tudo.</p></blockquote>
<div>Quem enviou foi o <strong>Felipe Juliani</strong>.</div>
<p></p>
<div>Neste caso, devemos usar ao invés das conexões declaradas no DataSource.groovy, uma declaração de conexão com banco de dados via <a href="http://pt.wikipedia.org/wiki/JNDI" target="_blank">JNDI</a>.</div>
<p></p>
<div>JNDI é uma árvore de &#8216;nomes&#8217; que referenciam &#8216;recursos externos&#8217;. O que isso quer dizer? Basicamente, que a sua aplicação poderá pegar uma configuração de fora da aplicação, diretamente de um &#8220;lugar&#8221; na JVM que alguém colocou. Seria mais ou menos um clipboard compartilhado, só que de objetos é claro :)</div>
<p></p>
<div>Então para o caso acima, nada melhor que deixar toda essa &#8216;configuração&#8217; de conexão com o banco de dados do lado de fora da aplicação e fazer com que ela vá buscar apenas pelo &#8216;nome&#8217; desta conexão. Pronto, desta maneira a configuração fica externa a nossa aplicação e feita diretamente no nosso container.</div>
<p></p>
<div>Bom, eu particularmente vejo três grandes razões para o uso de DataSources JNDI. A primeira é quando devemos tirar do desenvolvedor a (ir)responsabilidadade de dimensionar/configurar a utilização de banco de dados. Isso é um trabalho de infra estrutura, e se em algum determinado momento infra estrutura resolver aumentar o pool de conexões de banco da aplicação, consegue fazer isto sem encostar na aplicação, diretamente no container onde ela está rodando.</div>
<p></p>
<div></div>
<div>Outro motivo é a melhor utilização de recursos de banco de dados. Vamos imaginar um cluster de servidores de aplicação com 3 nós. Cada um dos nós roda uma instância da sua aplicação, que está configurada (diretamente no DataSources.groovy) com um pool de 10 conexões, ou seja, só de subir as aplicações, você terá 30 conexões com o banco já feitas. Com DataSources neste caso, todas as instâncias da aplicação poderiam ir buscar conexões com o banco de dados no mesmo DataSource, configurado uma única vez. Com isso, não precisamos necessariamente possuir 30 conexões abertas com o banco, pois quando uma instância necessita de todas elas, outra instância pode estar usando apenas 3 ou 4.  É claro que para isso, além dos servidores e da aplicação, o seu DataSource também precisa estar deployado no cluster todo.</div>
<p></p>
<div></div>
<div>E o terceiro motivo, é o apontado pelo Felipe acima, que precisa deixar uma maneira fácil de trocar o banco de dados da aplicação. Com estes DataSources JNDI fica fácil também, já que a url do banco, driver, e credenciais estão do lado de fora, na configuração do DataSource.</div>
<div></div>
<div>E para criar este DataSource?</div>
<div></div>
<div>Bom, o primeiro passo é levantar em que container você está rodando a sua aplicação, pois cada um tem a sua maneira particular de configuração, seja jetty, tomcat, jboss ou weblogic. Além das diferenças durante a criação do DataSource, temos também diferenças na &#8216;formação&#8217; do nome deles. No caso do weblogic por exemplo, o mais simplista neste quesito, você poderia ter um datasource com o nome de &#8220;PedidosDS&#8221;, já no JBoss, ele fica prefixado desta maneira: &#8220;java:&lt;nome_datasource&gt;&#8221;.</div>
<div></div>
<p></p>
<div>E depois disso, na configuração da sua aplicação Grails, na closure do environment específico que você quer, basta descrevê-lo desta maneira:</div>
<p></p>
<div>
<pre class="brush: groovy;">production {
   dataSource {
      jndiName = &quot;&lt;nome_datasource&gt;&quot;
   }
}</pre>
</div>
<p></p>
<div>Vale lembrar que estes dias postei sobre <a href="http://lucastex.com.br/2010/02/15/criando-um-datasource-jndi-no-jboss/" target="_blank">como criar um datasource no jboss e usá-lo em uma aplicação grails. Não deixe de ler também.</a></div>

]]></content:encoded>
			<wfw:commentRss>http://lucastex.com.br/2010/03/04/como-e-por-que-usar-um-datasource-jndi/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>[GSolr] Beans declarados automagicamente</title>
		<link>http://lucastex.com.br/2010/02/28/gsolr-beans-declarados-automagicamente/</link>
		<comments>http://lucastex.com.br/2010/02/28/gsolr-beans-declarados-automagicamente/#comments</comments>
		<pubDate>Mon, 01 Mar 2010 02:18:23 +0000</pubDate>
		<dc:creator>Lucas Teixeira</dc:creator>
				<category><![CDATA[GSolr]]></category>
		<category><![CDATA[Grails]]></category>
		<category><![CDATA[Solr]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[Spring]]></category>

		<guid isPermaLink="false">http://lucastex.com.br/?p=314</guid>
		<description><![CDATA[
GSolr, é o nome do plugin de solr que estamos fazendo de solr para grails. Para quem quiser acompanhar o trabalho, o repositório está no github: http://github.com/lucastex/gsolr.
Uma coisa que já está feita é a leitura da configuração do gsolr e a declaração mágica de beans, um para cada servidor solr que estiver configurado. Exemplificando, vamos [...]]]></description>
			<content:encoded><![CDATA[
<p>GSolr, é o nome do plugin de solr que estamos fazendo de solr para grails. Para quem quiser acompanhar o trabalho, o repositório está no github: <a href="http://github.com/lucastex/gsolr" target="_blank">http://github.com/lucastex/gsolr</a>.</p>
<p>Uma coisa que já está feita é a leitura da configuração do gsolr e a declaração <strong>mágica</strong> de beans, um para cada servidor solr que estiver configurado. Exemplificando, vamos imaginar que a configuração esteja declarando três servidores Solr que serão consultados:</p>
<pre class="brush: groovy;">gsolr {
   solr {
      produtos {
         (...)
      }
      noticias {
         (...)
      }
      usuarios {
         (...)
      }
   }
}</pre>
<p>Particularmente, achei bem interessante usar o nome da closure para o nome do servidor ao invés de termos um atributo <em>name = produtos</em> :)<br />
A mágica legal mesmo, é que o plugin vai ler esta configuração quando a aplicação for para o ar, e depois disso irá declarar / criar beans spring dinâmicamente, usando a Spring DSL. E os beans vão ter no nome a declaração feita na closure do usuário.</p>
<p>Ou seja, para os servidores <strong>solr</strong> declarados acima, o plugin irá declarar os Spring Beans <strong>produtosGSolr</strong>, <strong>noticiasGSolr</strong> e <strong>usuariosGSolr</strong> .</p>
<p>Desta maneira, vamos garantir que se você quiser o usar o plugin, o processo como um todo ficará o menos intrusivo possível, e você poderá usar os métodos (de pesquisa e outros) do GSolr apenas injetando o bean do servidor Solr que você quiser.</p>
<pre class="brush: groovy;">class PesquisaService {
   def noticiasGSolr

   def pesquisar = {
      (...)
   }
}</pre>
<p>Achei no mínimo, muito prático. Tudo isso graças a Spring DSL que temos em groovy. Com um pouco mais de tempo, coloco o procedimento passo a passo para declarar os beans desta maneira. Enquanto isso, conheça um pouco mais sobre a <a href="http://grails.org/doc/latest/guide/14.%20Grails%20and%20Spring.html#14.4%20The%20BeanBuilder%20DSL%20Explained" target="_blank">Spring DSL aqui</a>, ou veja o código fonte <a href="http://github.com/lucastex/gsolr/blob/master/GsolrGrailsPlugin.groovy" target="_blank">aqui</a> e também <a href="http://github.com/lucastex/gsolr/blob/master/src/groovy/org/gsolr/core/GSolrConfigParser.groovy" target="_blank">aqui</a>.</p>
<p>Tem alguma idéia ou sugestão para o plugin? Deixe um comentário!</p>

]]></content:encoded>
			<wfw:commentRss>http://lucastex.com.br/2010/02/28/gsolr-beans-declarados-automagicamente/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Resolvendo dependências de sua aplicação Grails usando Ivy</title>
		<link>http://lucastex.com.br/2010/02/28/resolvendo-dependencias-de-sua-aplicacao-grails-usando-ivy/</link>
		<comments>http://lucastex.com.br/2010/02/28/resolvendo-dependencias-de-sua-aplicacao-grails-usando-ivy/#comments</comments>
		<pubDate>Sun, 28 Feb 2010 04:45:14 +0000</pubDate>
		<dc:creator>Lucas Teixeira</dc:creator>
				<category><![CDATA[Grails]]></category>
		<category><![CDATA[ivy]]></category>
		<category><![CDATA[buildconfig]]></category>
		<category><![CDATA[dependencia]]></category>
		<category><![CDATA[libs]]></category>
		<category><![CDATA[maven]]></category>

		<guid isPermaLink="false">http://lucastex.com.br/?p=307</guid>
		<description><![CDATA[
Estamos fazendo o desenho do plugin do Solr para o Grails, e precisei das libs do solr/lucene. Dessa vez quis fazer diferente e usar o gerenciamento de dependências que o grails traz usando o ivy. Pra mim, que nunca tinha trabalhado com ivy antes, foi bem simples até.
Bastou eu levantar os grupos/artifactsId e versão do [...]]]></description>
			<content:encoded><![CDATA[
<p>Estamos fazendo o desenho do plugin do Solr para o Grails, e precisei das libs do solr/lucene. Dessa vez quis fazer diferente e usar o gerenciamento de dependências que o grails traz usando o ivy. Pra mim, que nunca tinha trabalhado com ivy antes, foi bem simples até.</p>
<p>Bastou eu levantar os grupos/artifactsId e versão do solr-core e do solrj (1.4) e adicionar no meu <strong>BuildConfig.groovy. </strong>Consegui estas informações no próprio <a href="http://wiki.apache.org/solr">wiki do solr,</a> nesta página: <a href="http://wiki.apache.org/solr/Solrj#Maven">http://wiki.apache.org/solr/Solrj#Maven</a></p>
<p>Depois disso, bastou adicionar um repositório para buscar os jars</p>
<pre class="brush: groovy;">repositories {
    mavenRepo &quot;http://mirrors.ibiblio.org/pub/mirrors/maven2&quot;
}</pre>
<p>E declarar as dependências que eu precisaria em runtime:</p>
<div id="_mcePaste">
<pre class="brush: groovy;">dependencies {
    runtime 'org.apache.solr:solr-core:1.4.0'
    runtime 'org.apache.solr:solr-solrj:1.4.0'
}</pre>
</div>
<div>Depois, foi só rodar a aplicação que os jars já estavam todos carregados e prontos para serem importados, ponto para o Grails.</div>
<div></div>
<div></div>

]]></content:encoded>
			<wfw:commentRss>http://lucastex.com.br/2010/02/28/resolvendo-dependencias-de-sua-aplicacao-grails-usando-ivy/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Grails e Solr juntos, o melhor dos mundos</title>
		<link>http://lucastex.com.br/2010/02/26/grails-e-solr-juntos-o-melhor-dos-mundos/</link>
		<comments>http://lucastex.com.br/2010/02/26/grails-e-solr-juntos-o-melhor-dos-mundos/#comments</comments>
		<pubDate>Fri, 26 Feb 2010 18:11:42 +0000</pubDate>
		<dc:creator>Lucas Teixeira</dc:creator>
				<category><![CDATA[Grails]]></category>
		<category><![CDATA[Solr]]></category>
		<category><![CDATA[nabble]]></category>
		<category><![CDATA[plugin]]></category>

		<guid isPermaLink="false">http://lucastex.com.br/?p=304</guid>
		<description><![CDATA[
Tá rolando uma discussão legal na lista &#8220;grails-users&#8221; sobre Solr.
Estamos levantando alguns pontos que seriam essenciais e interessantes para um plugin grails que cuidasse disso. Se você gosta também de Solr, ou está interessado, acompanhe os e-mails na Grails-Users ou no nabble aqui.
Você usa solr? O que acha interessante nele que deva existir em um [...]]]></description>
			<content:encoded><![CDATA[
<p>Tá rolando uma discussão legal na lista &#8220;grails-users&#8221; sobre Solr.</p>
<p>Estamos levantando alguns pontos que seriam essenciais e interessantes para um plugin grails que cuidasse disso. Se você gosta também de Solr, ou está interessado, acompanhe os e-mails na <a href="http://n4.nabble.com/Grails-user-f1312389.html" target="_blank">Grails-Users</a> ou no <a href="http://n4.nabble.com/Discussion-on-a-Grails-Solr-Plugin-td1569847.html" target="_blank">nabble aqui</a>.</p>
<p>Você usa solr? O que acha interessante nele que deva existir em um plugin grails?</p>

]]></content:encoded>
			<wfw:commentRss>http://lucastex.com.br/2010/02/26/grails-e-solr-juntos-o-melhor-dos-mundos/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Criando um DataSource JNDI no JBoss</title>
		<link>http://lucastex.com.br/2010/02/15/criando-um-datasource-jndi-no-jboss/</link>
		<comments>http://lucastex.com.br/2010/02/15/criando-um-datasource-jndi-no-jboss/#comments</comments>
		<pubDate>Mon, 15 Feb 2010 02:08:03 +0000</pubDate>
		<dc:creator>Lucas Teixeira</dc:creator>
				<category><![CDATA[jboss]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[datasource]]></category>
		<category><![CDATA[jndi]]></category>

		<guid isPermaLink="false">http://lucastex.com.br/?p=296</guid>
		<description><![CDATA[
Ok, agora que temos uma aplicação grails rodando no ambiente jboss, temos que configurar um DataSource JNDI para ser usado, com isso evitamos que as credenciais e informações do banco fiquem diretamente configuradas em nossa aplicação.
Este procedimento é simples e facilmente descrito em dois simples passos:

Driver do banco de dados: Você deve copiar o jar [...]]]></description>
			<content:encoded><![CDATA[
<p>Ok, agora que <a href="http://lucastex.com.br/2010/02/14/como-fazer-o-deploy-de-uma-app-grails-no-jboss/" target="_blank">temos uma aplicação grails rodando no ambiente jboss</a>, temos que configurar um DataSource JNDI para ser usado, com isso evitamos que as credenciais e informações do banco fiquem diretamente configuradas em nossa aplicação.</p>
<p>Este procedimento é simples e facilmente descrito em dois simples passos:</p>
<ol>
<li>Driver do banco de dados: Você deve copiar o jar do driver JDBC do seu banco de dados para dentro da pasta &lt;jboss_home&gt;/common/lib</li>
<li>Configuração do DataSource: No jboss ela é feita através de um arquivo XML. Após criar este arquivo, tenha certeza que o salvou dentro da pasta &lt;jboss_home&gt;/server/&lt;seu_server&gt;/deploy.</li>
</ol>
<p>No meu caso, o arquivo se chama <strong>database-ds.xml</strong> e possui as seguintes tags (são altamente descritivas, acredito não precisar detalhar):</p>
<pre class="brush: xml;">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; ?&gt;
&lt;datasources&gt;
  &lt;local-tx-datasource&gt;
    &lt;jndi-name&gt;jdbc/databaseDS&lt;/jndi-name&gt;
    &lt;connection-url&gt;jdbc:mysql://localhost:3306/banco_dev&lt;/connection-url&gt;
    &lt;driver-class&gt;com.mysql.jdbc.Driver&lt;/driver-class&gt;
    &lt;user-name&gt;root&lt;/user-name&gt;
    &lt;password&gt;senha&lt;/password&gt;
    &lt;min-pool-size&gt;5&lt;/min-pool-size&gt;
    &lt;max-pool-size&gt;30&lt;/max-pool-size&gt;
    &lt;idle-timeout-minutes&gt;1&lt;/idle-timeout-minutes&gt;
    &lt;prepared-statement-cache-size&gt;32&lt;/prepared-statement-cache-size&gt;
  &lt;/local-tx-datasource&gt;
&lt;/datasources&gt;</pre>
<p>Agora para acessá-lo basta buscar pelo nome JNDI <strong>java:jdbc/databaseDS</strong>, ou no meu caso, como é uma aplicação grails, usar a declarativa no <strong>DataSources.groovy</strong></p>
<pre class="brush: groovy;">production {
  dataSource {
    jndiName = &quot;java:jdbc/databaseDS&quot;
    dbCreate = &quot;update&quot;
  }
}
</pre>

]]></content:encoded>
			<wfw:commentRss>http://lucastex.com.br/2010/02/15/criando-um-datasource-jndi-no-jboss/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Como fazer o deploy de uma app grails no JBoss</title>
		<link>http://lucastex.com.br/2010/02/14/como-fazer-o-deploy-de-uma-app-grails-no-jboss/</link>
		<comments>http://lucastex.com.br/2010/02/14/como-fazer-o-deploy-de-uma-app-grails-no-jboss/#comments</comments>
		<pubDate>Sun, 14 Feb 2010 12:51:56 +0000</pubDate>
		<dc:creator>Lucas Teixeira</dc:creator>
				<category><![CDATA[Grails]]></category>
		<category><![CDATA[deploy]]></category>
		<category><![CDATA[erro]]></category>
		<category><![CDATA[hibernate]]></category>
		<category><![CDATA[jar]]></category>
		<category><![CDATA[jboss]]></category>
		<category><![CDATA[validator]]></category>

		<guid isPermaLink="false">http://lucastex.com.br/?p=289</guid>
		<description><![CDATA[
Neste fim de semana quis fazer alguns testes pela primeira vez com uma aplicação grails no jboss.
Já tinha acompanhado na grails-users que existem alguns problemas para efetuar o deploy, e para cada um deles, uma sequência de passos obscuros para fazer o deploy acontecer com sucesso. Minha versão de grails neste procedimento é a 1.2.1 [...]]]></description>
			<content:encoded><![CDATA[
<p>Neste fim de semana quis fazer alguns testes pela primeira vez com uma aplicação grails no jboss.</p>
<p>Já tinha acompanhado na <strong>grails-users</strong> que existem alguns problemas para efetuar o deploy, e para cada um deles, uma sequência de passos obscuros para fazer o deploy acontecer com sucesso. Minha versão de grails neste procedimento é a 1.2.1 e do JBoss é a 5.1.0.GA</p>
<p>Efetivamente, o que acontece é que jboss traz junto com suas common libs vários jars que são empacotados juntamente com a sua aplicação quando você utiliza o comando <strong>grails war</strong>.</p>
<p>Existem alguns workarounds na internet que te mostram como modificar o <strong>BuildConfig.groovy</strong> (arquivo que define propriedades do empacotamento de sua app) para que após montar a estrutura de arquivos que irão ser empacotados, remova estes arquivos (principalmente o log4j onde o problema é mais aparente) do chamado <strong>stagingDir</strong> e os deixe de fora do pacote final.</p>
<p>Particularmente, achei a solução <a href="http://www.comerciaisnet.com.br/clientes/difermig_representacoes/minasul/marreta.jpg" target="_blank">um tanto quanto diferente</a> e acabei achando no <a href="http://www.grails.org/FAQ" target="_blank">FAQ do Grails</a> e depois com mais detalhes <a href="http://community.jboss.org/wiki/ClassLoadingConfiguration" target="_blank">nesta página</a> uma solução menos intrusiva ao pacote, que é definir a prioridade de carregamento dos jars da aplicação.</p>
<p>Bom, para isso, precisamos criar um arquivo <strong>jboss-web.xml</strong> dentro do diretório <strong>WEB-INF</strong> de nossa aplicação que irá mostrar ao jboss que queremos &#8220;blindar&#8221; nossa aplicação para utilizar os jars que estão dentro de seu lib, e que estes por sua vez não deverão ser sobrescritos pelos jars do classpath do servidor. O conteúdo do arquivo segue abaixo:</p>
<pre class="brush: xml;">&lt;jboss-web&gt;
   &lt;context-root&gt;/projeto&lt;/context-root&gt;
   &lt;class-loading java2ClassLoadingCompliance=&quot;false&quot;&gt;
      &lt;loader-repository&gt;
         projeto:archive=projeto.war
         &lt;loader-repository-config&gt;java2ParentDelegation=false&lt;/loader-repository-config&gt;
      &lt;/loader-repository&gt;
   &lt;/class-loading&gt;
&lt;/jboss-web&gt;</pre>
<p>Na tag <strong>context-root</strong> estamos apenas aproveitando que a aplicação terá seu arquivo de configuração específico para o jboss e definindo o contexto em que ela será publicada. Nas tags seguintes pedimos para o jboss criar o nosso classloader isolado, com o nome &#8220;projeto:archive=projeto.war&#8221;. Com este nome (que deve ser único, por isto leva em consideração o nome do projeto), garantimos que as classes pedidas pelo nosso projeto serão procuradas ali, e caso não encontradas, nos classpaths seguintes (common/lib, depois no tomcat).</p>
<p>Basicamente isto seria suficiente para conseguir que o projeto rodasse sem problemas. Porém no meu cenário de versões (grails 1.2.1 e jboss-5.1.0.GA) existe outro ponto de conflito. O Hibernate Validator que está junto ao jboss também difere em versão e gera conflito com o grails. Neste caso a solução é <a href="http://www.comerciaisnet.com.br/clientes/difermig_representacoes/minasul/marreta.jpg" target="_blank">ainda mais interessante</a> e simples que a anterior.</p>
<p>Para resolver o problema no deploy que indica claramente problema de versão no Hibernate Validator, basta que você faça o download da última versão deste jar (no meu caso, 4.0.2-GA) nesta url: <a href="https://www.hibernate.org/30.html" target="_blank">https://www.hibernate.org/30.html</a>. Depois disto, resta apenas colocar o jar do hibernate validator dentro da pasta <strong>&lt;jboss_home&gt;/common/lib</strong>.</p>
<p>Pronto, a aplicação está rodando e funcional dentro do jboss!</p>
<pre class="brush: plain;">10:36:32,815 INFO  [[/projeto]] Initializing Spring root WebApplicationContext
10:36:41,155 INFO  [[/projeto]] Initializing Spring FrameworkServlet 'grails'</pre>
<p>PS: Vale lembrar que o arquivo <strong>jboss-web.xml</strong> é padrão para arquivos <strong>war</strong>, se você quiser configurar a ordem do classpath para aplicações <strong>ear</strong> ou<strong> sar</strong>, consulte o link acima para entender as diferenças.</p>

]]></content:encoded>
			<wfw:commentRss>http://lucastex.com.br/2010/02/14/como-fazer-o-deploy-de-uma-app-grails-no-jboss/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Como acessar uma taglib de dentro de um service</title>
		<link>http://lucastex.com.br/2010/02/03/como-acessar-uma-taglib-de-dentro-de-um-service/</link>
		<comments>http://lucastex.com.br/2010/02/03/como-acessar-uma-taglib-de-dentro-de-um-service/#comments</comments>
		<pubDate>Thu, 04 Feb 2010 00:35:31 +0000</pubDate>
		<dc:creator>Lucas Teixeira</dc:creator>
				<category><![CDATA[Grails]]></category>
		<category><![CDATA[controller]]></category>
		<category><![CDATA[dica]]></category>
		<category><![CDATA[service]]></category>
		<category><![CDATA[Spring]]></category>
		<category><![CDATA[taglib]]></category>

		<guid isPermaLink="false">http://lucastex.com.br/?p=277</guid>
		<description><![CDATA[
Uma situação que acontece muito, é a reutilização das funções de taglibs dentro dos controllers de sua aplicação grails. Isso é muito fácil de se fazer, basta chamar o método usando o objeto com o nome do namespace da taglib.
Ou seja, para usar dentro do controller a função de formatação de números, definida pela função [...]]]></description>
			<content:encoded><![CDATA[
<p>Uma situação que acontece muito, é a reutilização das funções de taglibs dentro dos controllers de sua aplicação grails. Isso é muito fácil de se fazer, basta chamar o método usando o objeto com o nome do namespace da taglib.<br />
Ou seja, para usar dentro do controller a função de formatação de números, definida pela função formatNumber (<a href="http://grails.org/doc/latest/ref/Tags/formatNumber.html" target="_blank">taglib já no core do grails</a>), é só fazer a chamada assim:</p>
<pre class="brush: groovy;">def myAction = {
render g.formatNumber([number:5000.234, type: &quot;number&quot;, maxFractionDigits: 2])
}</pre>
<p>Esta função é equivalente a chamar a taglib de dentro de um gsp da seguinte maneira:</p>
<pre class="brush: xml;">&lt;g:formatNumber number=&quot;5000.234&quot; type=&quot;number&quot; maxFractionDigits=&quot;2&quot; /&gt;</pre>
<p>Mas quando precisamos fazer isto, por exemplo, dentro de um service, encontramos um probleminha chato, as taglibs não são injetadas automaticamente. Para contornar essa &#8220;<a href="http://upload.wikimedia.org/wikipedia/commons/7/7d/Bug.png" target="_blank">situação</a>&#8220;, temos que buscar a taglib manualmente, da seguinte maneira:</p>
<pre class="brush: groovy;">def myTag = grailsApplication.mainContext.
            getBean('org.codehaus.groovy.grails.plugins.web.taglib.ApplicationTagLib')
def value = myTag.formatNumber([number:5000.234, type: &quot;number&quot;, maxFractionDigits: 2])</pre>
<p>Ahhh, para isso não se esqueca de injetar o objeto da grailsApplication da seguinte maneira</p>
<pre class="brush: groovy;">class MeuService {
   def grailsApplication
   (...)
}</pre>
<p>Bin-go.</p>

]]></content:encoded>
			<wfw:commentRss>http://lucastex.com.br/2010/02/03/como-acessar-uma-taglib-de-dentro-de-um-service/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Devolvendo um texto como attachment no response</title>
		<link>http://lucastex.com.br/2010/01/27/devolvendo-um-texto-como-attachment-no-response/</link>
		<comments>http://lucastex.com.br/2010/01/27/devolvendo-um-texto-como-attachment-no-response/#comments</comments>
		<pubDate>Wed, 27 Jan 2010 12:48:52 +0000</pubDate>
		<dc:creator>Lucas Teixeira</dc:creator>
				<category><![CDATA[Grails]]></category>
		<category><![CDATA[attachment]]></category>
		<category><![CDATA[content disposition]]></category>
		<category><![CDATA[controller]]></category>
		<category><![CDATA[render]]></category>
		<category><![CDATA[response]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://lucastex.com.br/?p=271</guid>
		<description><![CDATA[
Me deparei com a seguinte situação em uma aplicação construída usando Grails.
O sistema gravaria o conteúdo de um arquivo (plain xml mesmo) dentro do banco de dados, para evitar dependências com filesystem. Mas este arquivo também precisaria ser lido posteriormente. A solução que estava disponível, era alguma coisa mais ou menos assim:
def arquivo = Arquivo.get(params.id) [...]]]></description>
			<content:encoded><![CDATA[
<p>Me deparei com a seguinte situação em uma aplicação construída usando Grails.</p>
<p>O sistema gravaria o conteúdo de um arquivo (plain xml mesmo) dentro do banco de dados, para evitar dependências com filesystem. Mas este arquivo também precisaria ser lido posteriormente. A solução que estava disponível, era alguma coisa mais ou menos assim:</p>
<pre class="brush: groovy;">def arquivo = Arquivo.get(params.id) //recupera o arquivo da base
render arquivo.texto</pre>
<p>Legal, desta maneira (bem simples até), o conteúdo deste texto seria renderizado na página para o usuário poder salvá-la.</p>
<p>Imaginei que isto pudesse ser incrementado um pouco, e percebi que fazer com que o usuário tivesse que salvar a página (que continha apenas o XML) poderia se tornar um tanto chato com o passar do tempo. Resolvi alterar a action para devolver o texto em anexo ao response. Isso mesmo, com a caixinha para poder salvá-lo.</p>
<p>Olha que simples:</p>
<pre class="brush: groovy;">def arquivo = Arquivo.get(params.id) //recupera o arquivo da base
response.setContentType &quot;text/xml&quot;
response.setHeader &quot;Content-Disposition&quot;, &quot;attachment;filename=\&quot;${arquivo.nome}.xml\&quot;&quot;
response &lt;&lt; arquivo.texto</pre>
<p>Simples, colocando a instrução no header para que a &#8220;disposição&#8221; da resposta seja &#8220;attachment&#8221; (anexo), o browser ao invés de renderizar apenas o conteudo, retorna um arquivo com este texto.</p>

]]></content:encoded>
			<wfw:commentRss>http://lucastex.com.br/2010/01/27/devolvendo-um-texto-como-attachment-no-response/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Como definir o locale default de sua aplicação grails</title>
		<link>http://lucastex.com.br/2010/01/26/como-definir-o-locale-default-de-sua-aplicacao-grails/</link>
		<comments>http://lucastex.com.br/2010/01/26/como-definir-o-locale-default-de-sua-aplicacao-grails/#comments</comments>
		<pubDate>Tue, 26 Jan 2010 12:05:33 +0000</pubDate>
		<dc:creator>Lucas Teixeira</dc:creator>
				<category><![CDATA[Grails]]></category>
		<category><![CDATA[bean]]></category>
		<category><![CDATA[i18n]]></category>
		<category><![CDATA[locale]]></category>
		<category><![CDATA[resources]]></category>
		<category><![CDATA[Spring]]></category>

		<guid isPermaLink="false">http://lucastex.com.br/?p=266</guid>
		<description><![CDATA[
Graças ao ótimo suporte de internacionalização que o grails nos proporciona, podemos alterar o idioma corrente da app passando apenas o parametro lang na URL. Com isso, o locale é definido para o usuário e se sua aplicação recupera as mensagens com o g:message ou outros recursos de i18n, usará o locale indicado.
Caso queira definir [...]]]></description>
			<content:encoded><![CDATA[
<p>Graças ao ótimo <a href="http://grails.org/doc/1.1/guide/single.html#10.%20Internationalization" target="_blank">suporte de internacionalização</a> que o grails nos proporciona, podemos alterar o idioma corrente da app passando apenas o parametro <strong>lang</strong> na URL. Com isso, o locale é definido para o usuário e se sua aplicação recupera as mensagens com o <strong>g:message</strong> ou outros recursos de i18n, usará o locale indicado.</p>
<p>Caso queira definir um locale default para sua app, basta sobrescrever o bean <strong>localeResolver</strong> no seu resources.groovy como abaixo:</p>
<pre class="brush: groovy;">beans = {
  localeResolver(org.springframework.web.servlet.i18n.SessionLocaleResolver) {
    defaultLocale = new Locale(&quot;pt&quot;, &quot;BR&quot;)
    java.util.Locale.setDefault(defaultLocale)
  }
}</pre>
<p>Sim, estou trazendo aos poucos tópicos que estavam em meu outro blog, blog.lucastex.com, dê uma passada por lá.</p>

]]></content:encoded>
			<wfw:commentRss>http://lucastex.com.br/2010/01/26/como-definir-o-locale-default-de-sua-aplicacao-grails/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Usando JNDI na configuração do DataImportHandler</title>
		<link>http://lucastex.com.br/2010/01/18/usando-jndi-na-configuracao-do-dataimporthandler/</link>
		<comments>http://lucastex.com.br/2010/01/18/usando-jndi-na-configuracao-do-dataimporthandler/#comments</comments>
		<pubDate>Mon, 18 Jan 2010 11:27:03 +0000</pubDate>
		<dc:creator>Lucas Teixeira</dc:creator>
				<category><![CDATA[Solr]]></category>
		<category><![CDATA[dataimporthandler]]></category>
		<category><![CDATA[dica]]></category>
		<category><![CDATA[indexação]]></category>
		<category><![CDATA[jndi]]></category>

		<guid isPermaLink="false">http://lucastex.com.br/?p=254</guid>
		<description><![CDATA[
Quer evitar que suas credenciais (usuário e senha) estejam abertas no seu data-config.xml? A melhor alternativa com certeza é usar um datasource JNDI para isso e manter usuário, senha e url de conexão do banco de dados dentro do cointainer.
Para isso, é só declarar a tag dataSource do data-config.xml desta maneira:
&#60;dataSource user=&#34;&#34; password=&#34;&#34; jndiName=&#34;JndiDoMeuDs&#34;
Sim, os [...]]]></description>
			<content:encoded><![CDATA[
<p>Quer evitar que suas credenciais (usuário e senha) estejam abertas no seu <strong>data-config.xml</strong>? A melhor alternativa com certeza é usar um datasource JNDI para isso e manter usuário, senha e url de conexão do banco de dados dentro do cointainer.</p>
<p>Para isso, é só declarar a tag <strong>dataSource</strong> do <strong>data-config.xml</strong> desta maneira:</p>
<pre class="brush: xml;">&lt;dataSource user=&quot;&quot; password=&quot;&quot; jndiName=&quot;JndiDoMeuDs&quot;</pre>
<p>Sim, os parametros <strong>user</strong> e <strong>password</strong> devem ser declados vazios, não se esqueça disso.</p>

]]></content:encoded>
			<wfw:commentRss>http://lucastex.com.br/2010/01/18/usando-jndi-na-configuracao-do-dataimporthandler/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Apache Solr &#8211; Recomendação de livro</title>
		<link>http://lucastex.com.br/2010/01/15/apache-solr-recomendacao-de-livro/</link>
		<comments>http://lucastex.com.br/2010/01/15/apache-solr-recomendacao-de-livro/#comments</comments>
		<pubDate>Fri, 15 Jan 2010 16:53:57 +0000</pubDate>
		<dc:creator>Lucas Teixeira</dc:creator>
				<category><![CDATA[Livros]]></category>
		<category><![CDATA[Solr]]></category>
		<category><![CDATA[indexa]]></category>
		<category><![CDATA[leitura]]></category>
		<category><![CDATA[livro]]></category>
		<category><![CDATA[Lucene]]></category>
		<category><![CDATA[seach]]></category>

		<guid isPermaLink="false">http://lucastex.com.br/?p=238</guid>
		<description><![CDATA[
Pra quem gosta de busca e assuntos relacionados, um ótimo livro que recomendo é este: Solr 1.4 Enterprise Search Server.
Muito legal, bem abrangente, fala um pouco sobre cada coisa, desde implementações básicas necessárias de DataImportHandler, Transformers, Term-Suggest, Types e outros pontos.


Foi lançado um pouco antes da versão 1.4 estável sair (por todo aquele problema do [...]]]></description>
			<content:encoded><![CDATA[
<p>Pra quem gosta de busca e assuntos relacionados, um ótimo livro que recomendo é este: <strong>Solr 1.4 Enterprise Search Server.</strong></p>
<p>Muito legal, bem abrangente, fala um pouco sobre cada coisa, desde implementações básicas necessárias de DataImportHandler, Transformers, Term-Suggest, Types e outros pontos.</p>
<p><center><br />
<div id="attachment_239" class="wp-caption alignnone" style="width: 210px"><img class="size-full wp-image-239" title="Solr 1.4 - Enterprise Search Server" src="http://lucastex.com.br/wp-content/uploads/2010/01/Solr-1-4-Enterprise-Search-Server.jpg" border="0" alt="Solr 1.4 - Enterprise Search Server" width="200" height="247" /><p class="wp-caption-text">Solr 1.4 - Enterprise Search Server</p></div><br />
</center></p>
<p>Foi lançado um pouco antes da versão 1.4 estável sair (por todo aquele problema do último bug do lucene e etc), por 2 dos committers: David Smiley e Eric Pugh.</p>
<p>Está custando $40 diretamente no packetpub: A url para o produto é esta: <a href="http://www.packtpub.com/solr-1-4-enterprise-search-server/book" target="_blank">http://www.packtpub.com/solr-1-4-enterprise-search-server/book</a>. </p>
<p>Recomendo a todos que se interessam pelo assunto, e trabalham com isso, guia de consulta imprescindível :)</p>

]]></content:encoded>
			<wfw:commentRss>http://lucastex.com.br/2010/01/15/apache-solr-recomendacao-de-livro/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Config.groovy &#8211; Cuidado ao manipular suas configurações</title>
		<link>http://lucastex.com.br/2010/01/11/config-groovy-cuidado-ao-manipular-suas-configuracoes/</link>
		<comments>http://lucastex.com.br/2010/01/11/config-groovy-cuidado-ao-manipular-suas-configuracoes/#comments</comments>
		<pubDate>Tue, 12 Jan 2010 00:18:00 +0000</pubDate>
		<dc:creator>Lucas Teixeira</dc:creator>
				<category><![CDATA[Grails]]></category>
		<category><![CDATA[Groovy]]></category>
		<category><![CDATA[Maldades do Groovy]]></category>
		<category><![CDATA[config]]></category>
		<category><![CDATA[dica]]></category>
		<category><![CDATA[grailsapplication]]></category>
		<category><![CDATA[mail]]></category>
		<category><![CDATA[problema]]></category>
		<category><![CDATA[referencia]]></category>

		<guid isPermaLink="false">http://lucastex.com.br/?p=234</guid>
		<description><![CDATA[
Hum, reportando uma situação no mínimo inusitada que tive por aqui.
Acabei descobrindo, da maneira ruim, que no Grails, quando lêmos a configuração da aplicação (Config.groovy) através da referência grailsApplication.config estamos manipulando uma variável passível de alterações, ou seja, qualquer atributo que você recuperar de lá, e modificar, assim estará para toda a execução.
Na minha situação, [...]]]></description>
			<content:encoded><![CDATA[
<p>Hum, reportando uma situação no mínimo inusitada que tive por aqui.</p>
<p>Acabei descobrindo, da maneira ruim, que no Grails, quando lêmos a configuração da aplicação (Config.groovy) através da referência <strong>grailsApplication.config</strong> estamos manipulando uma variável passível de alterações, ou seja, qualquer atributo que você recuperar de lá, e modificar, assim estará para toda a execução.</p>
<p>Na minha situação, eu mantinha uma lista de e-mails lá no arquivo de configuração para que quando disparado, eu pudesse enviar o e-mail a estes destinatários somados ao e-mail do usuário, que tinha acabado de ser inputado no formulário. Tinha algo assim:</p>
<pre class="brush: groovy;">contato.destinatarios = [&quot;email1@xpto.com&quot;, &quot;email2@xpto.com&quot;, &quot;email3@xpto.com&quot;]</pre>
<p>E dentro do controller, usando o mail plugin (<a href="http://lucastex.com.br/2010/01/02/envio-de-e-mails-com-o-mail-plugin/">leia este post sobre o mail plugin</a>), executava o seguinte trecho de código:</p>
<pre class="brush: groovy;">def destinatarios = grailsApplication.config.contato?.destinatarios?.toArray()
destinatarios &lt;&lt; params.email
sendMail {
    to destinatarios
    subject &quot;Contato ...&quot;
    body &quot;......&quot;
 }</pre>
<p>Ou seja, quando eu pegava a referência dos destinatários do Config, eu mantinha essa referência em &#8216;destinatários&#8217;. Quando eu adicionava neste array o destinatário que vinha do formulários &#8220;params.email&#8221;, eu alterava a *instância* e referência da configuração da aplicação, e aquele e-mail ali ficava.</p>
<p>Resultado, no primeiro contato, receberam o e-mail a lista de destinatários e o primeirocontato@xpto.com, na segunda execução, todos eles da configuração, o primeirocontato@xpto.com e também o segundocontato@xpto.com foram copiados.</p>
<p>E assim sucessivamente.</p>
<p>Vivendo e aprendendo, tomem cuidado com isso!</p>

]]></content:encoded>
			<wfw:commentRss>http://lucastex.com.br/2010/01/11/config-groovy-cuidado-ao-manipular-suas-configuracoes/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Portal imobiliário usando Groovy e Grails</title>
		<link>http://lucastex.com.br/2010/01/10/portal-imobiliario-usando-groovy-e-grails/</link>
		<comments>http://lucastex.com.br/2010/01/10/portal-imobiliario-usando-groovy-e-grails/#comments</comments>
		<pubDate>Sun, 10 Jan 2010 13:05:34 +0000</pubDate>
		<dc:creator>Lucas Teixeira</dc:creator>
				<category><![CDATA[Grails]]></category>
		<category><![CDATA[Groovy]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[acegi]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[asp]]></category>
		<category><![CDATA[cookie]]></category>
		<category><![CDATA[GORM]]></category>
		<category><![CDATA[iis]]></category>
		<category><![CDATA[imob]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[json]]></category>
		<category><![CDATA[locaweb]]></category>
		<category><![CDATA[mail]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[navigation]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[richui]]></category>
		<category><![CDATA[runtimelogging]]></category>
		<category><![CDATA[settings]]></category>
		<category><![CDATA[Spring]]></category>
		<category><![CDATA[sqlserver]]></category>
		<category><![CDATA[tomcat]]></category>

		<guid isPermaLink="false">http://lucastex.com.br/?p=220</guid>
		<description><![CDATA[
Ontem (dia 09/01) fizemos o lançamento de um site que desenvolvemos usando Groovy e Grails, um desafio e tanto, pela responsabilidade de colocar o sistema no ar e pelo timing do projeto. Todo o site e a integração com o sistema legado (onde algumas informações ainda estão sendo gerenciadas), tiveram que sair do simples &#8220;create [...]]]></description>
			<content:encoded><![CDATA[
<p>Ontem (dia 09/01) fizemos o lançamento de um site que desenvolvemos usando <a href="http://lucastex.com.br/tag/groovy/" target="_blank">Groovy</a> e <a href="http://lucastex.com.br/tag/grails/" target="_blank">Grails</a>, um desafio e tanto, pela responsabilidade de colocar o sistema no ar e pelo timing do projeto. Todo o site e a integração com o sistema legado (onde algumas informações ainda estão sendo gerenciadas), tiveram que sair do simples &#8220;<em>create app</em>&#8221; para produção em 2 meses. Esse é também o grande motivo para a falta de tempo de postar mais por aqui.</p>
<p>Trata-se dos sites <a href="http://www.imoveisnomorumbi.com.br" target="_blank">http://www.imoveisnomorumbi.com.br</a> e <a href="http://www.imoveisnopanamby.com.br" target="_blank">http://www.imoveisnopanamby.com.br</a>, site de duas imobiliárias do mesmo grupo, que negocia imóveis de alto padrão nestes dois bairros.</p>
<p>Algumas informações interessantes sobre o projeto:</p>
<p><strong>Tecnologia e Infraestrutura:</strong> O site antigo usava <a href="http://pt.wikipedia.org/wiki/Microsoft_SQL_Server" target="_blank">SQLServer</a> como banco de dados e tecnologia <a href="http://pt.wikipedia.org/wiki/ASP" target="_blank">ASP</a>. Como usamos Groovy e Grails, por trás temos uma JVM <a href="http://pt.wikipedia.org/wiki/Plataforma_Java">Java</a> em execução, e o banco de dados, o bom e velho <a href="http://pt.wikipedia.org/wiki/MySQL">MySQL</a>.</p>
<p>Antes, para suportar o ASP, o <a href="http://pt.wikipedia.org/wiki/IIS">IIS</a> era usado como web server, e agora Um <a href="http://pt.wikipedia.org/wiki/Servidor_Apache">apache</a> balanceia as requisições aos dois <a href="http://pt.wikipedia.org/wiki/Tomcat">Tomcats</a>. Tudo isto está deployado e rodando em um Cloud Server da Locaweb, por opção do cliente, onde já mantinha a conta antiga.</p>
<p><strong>Integração com o sistema legado:</strong> Para a integração do modelo de dados antigo e o novo modelo, construímos rotinas de importação dos dados usando <a href="http://docs.codehaus.org/display/GROOVY/Tutorial+6+-+Groovy+SQL" target="_blank">Groovy SQL</a>, uma maneira <span style="text-decoration: line-through;"> fácil, </span> muito fácil, de fazer rotinas em banco de dados.</p>
<p><strong>Plugins utilizados: </strong>Ahhh, os bons e velhos plugins do Grails, não canso de dizer que esta é a melhor parte do Grails! Foram usados os plugins:</p>
<p><a href="http://grails.org/plugin/mail" target="_blank"><strong>Grails-Mail</strong></a>, para envio dos e-mails e formas de contato do site<br />
<a href="http://grails.org/plugin/acegi" target="_blank"><strong>Grails-Acegi</strong></a>, para autenticação e segurança<br />
<a href="http://grails.org/plugin/cookie" target="_blank"><strong>Grails-Cookie</strong></a>, para manipulação dos cookies do cliente<br />
<a href="http://grails.org/plugin/navigation" target="_blank"><strong>Grails-Navigation</strong></a> para criação de menus/submenus da interface administrativa<br />
<a href="http://grails.org/plugin/richui" target="_blank"><strong>Grails-RichUi</strong></a> para alguns componentes gráficos como auto-complete e nuvem de tags<br />
<a href="http://grails.org/plugin/runtime-logging" target="_blank"><strong>Grails-RuntimeLogging</strong></a>, um ótimo plugin para moder trabalhar com o nível de log de cada artefato (controller, service, etc), da app em runtime<br />
<a href="http://grails.org/plugin/settings" target="_blank"><strong>Grails-Settings</strong></a> para algumas parametrizações da aplicação.</p>
<p>E com certeza, se eu tivesse pesquisado com um pouco mais de tempo, teria usado outros plugins para evitar algum trabalho que tenha feito na mão. E é claro, além disso, bastante (mesmo) <a href="http://www.jquery.com" target="_blank">jquery</a>, <a href="http://pt.wikipedia.org/wiki/AJAX_%28programa%C3%A7%C3%A3o%29" target="_blank">ajax</a> e <a href="http://pt.wikipedia.org/wiki/Json" target="_blank">json</a>.</p>
<p>É isso, qualquer dúvida sobre o projeto, como aconteceu, soluções e problemas, basta comentar!</p>
<p>Obrigado a todos!</p>

]]></content:encoded>
			<wfw:commentRss>http://lucastex.com.br/2010/01/10/portal-imobiliario-usando-groovy-e-grails/feed/</wfw:commentRss>
		<slash:comments>24</slash:comments>
		</item>
		<item>
		<title>Envio de e-mails com o Mail Plugin</title>
		<link>http://lucastex.com.br/2010/01/02/envio-de-e-mails-com-o-mail-plugin/</link>
		<comments>http://lucastex.com.br/2010/01/02/envio-de-e-mails-com-o-mail-plugin/#comments</comments>
		<pubDate>Sat, 02 Jan 2010 03:43:10 +0000</pubDate>
		<dc:creator>Lucas Teixeira</dc:creator>
				<category><![CDATA[Grails]]></category>
		<category><![CDATA[mail]]></category>
		<category><![CDATA[plugin]]></category>

		<guid isPermaLink="false">http://lucastex.com.br/?p=211</guid>
		<description><![CDATA[
Enviar e-mails a partir de uma aplicação Grails é extremamente fácil. Tudo graças ao Mail Plugin. Sou um grande fã do mecanismo de plugins do Grails não só pela facilidade de criá-los, mas principalmente pelo espírito de compartilhamento de código que isto gera nos desenvolvedores. É bem simples, por exemplo, se eu preciso de alguma [...]]]></description>
			<content:encoded><![CDATA[
<p>Enviar e-mails a partir de uma aplicação <a href="http://grails.org" target="_blank">Grails</a> é extremamente fácil. Tudo graças ao <a href="http://grails.org/plugin/mail" target="_blank">Mail Plugin</a>. Sou um grande fã do mecanismo de plugins do Grails não só pela facilidade de criá-los, mas principalmente pelo espírito de compartilhamento de código que isto gera nos desenvolvedores. É bem simples, por exemplo, se eu preciso de alguma coisa que envie e-mails, vou construir isto separado da minha aplicação e distribuir para todos que precisem. Fácil, muito fácil!</p>
<p>Enfim, o Mail Plugin é um dos plugins mais antigos do Grails (acho que usei pela primeira vez em agosto de 2008), e um dos mais simples de ser usado. O primeiro passo é instalar o plugin como qualquer outro:</p>
<pre class="brush: groovy;">grails install-plugin mail</pre>
<p>Com isso as dependências serão baixadas e o plugin será instalado.</p>
<p>Após isso, você vai precisar configurar o envio de e-mail.<br />
De forma bem intuitiva novamente, diretamente em seu Config.groovy deverá setar as propriedades:</p>
<pre class="brush: groovy;">grails {
   mail {
      host     = &quot;smtp.meuservidor.com.br&quot;
      port     = 25
      username = &quot;usuario@provedor.com.br&quot;
      password = &quot;eusoul33t&quot;
      props    = [&quot;mail.smtp.auth&quot;: &quot;true&quot;, &quot;mail.smtp.socketFactory.port&quot;: &quot;587&quot;]
   }
}</pre>
<p>Ahhh, o exemplo acima já está pronto para usar validação de usuário e senha no envio, já que hoje (99%) dos servidores assim exigem. Pronto, com isso o plugin já consegue saber como o e-mail será enviado (por trás ele usa o envio de e-mails embutido no Spring, é claro).</p>
<p>Agora, quando for enviar um e-mail, basta usar a closure <strong>sendMail</strong> que é automaticamente adicionada em todos os seus controllers! Segue um exemplo:</p>
<pre class="brush: groovy;">sendMail {
   from &quot;lucas@testedoblog.com.br&quot;
   to &quot;dest1@email.com&quot;, &quot;dest2@email.com&quot;
   cc &quot;copia@email.com&quot;
   bcc &quot;oculto@email.com&quot;
   subject &quot;Enviando e-mails com Grails&quot;
   body &quot;&quot;&quot;
      E ai pessoal,
      Este e-mail foi enviado diretamente de um controller da minha
      aplicação Grails usando o Mail Plugin.

      Até mais.&quot;&quot;&quot;
}</pre>
<p>Pronto, agora é só checar as caixas de e-mail! Vale lembrar que as instruções <strong>cc</strong> e <strong>bcc</strong> não são obrigatórias!</p>
<p>O plugin suporta envio de anexos, conteúdo HTML e outras opções. Para mais detalhes, consulte a <a href="http://grails.org/plugin/mail" target="_blank">documentação oficial</a>, ou deixe um comentário aqui.</p>
<p>Ahh, e se quiser usar uma caixa do GMail para enviar as mensagens, use a configuração abaixo.</p>
<pre class="brush: groovy;">grails {
   mail {
      host     = &quot;smtp.gmail.com&quot;
      port     = 465
      username = &quot;seulogingmail@gmail.com&quot;
      password = &quot;suasenhadogmail&quot;
      props    = [&quot;mail.smtp.auth&quot;: &quot;true&quot;,
                  &quot;mail.smtp.socketFactory.port&quot;: &quot;465&quot;,
                  &quot;mail.smtp.socketFactory.class&quot;: &quot;javax.net.ssl.SSLSocketFactory&quot;,
                  &quot;mail.smtp.socketFactory.fallback&quot;: &quot;false&quot;]
   }
}</pre>
<p>Feliz 2010, ao som de &#8220;Dream Theater &#8211; Don&#8217;t look past me&#8221;.</p>

]]></content:encoded>
			<wfw:commentRss>http://lucastex.com.br/2010/01/02/envio-de-e-mails-com-o-mail-plugin/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Indexando vários campos com o mesmo conteúdo</title>
		<link>http://lucastex.com.br/2009/12/15/indexando-varios-campos-com-o-mesmo-conteudo/</link>
		<comments>http://lucastex.com.br/2009/12/15/indexando-varios-campos-com-o-mesmo-conteudo/#comments</comments>
		<pubDate>Tue, 15 Dec 2009 18:15:22 +0000</pubDate>
		<dc:creator>Lucas Teixeira</dc:creator>
				<category><![CDATA[Solr]]></category>
		<category><![CDATA[field]]></category>
		<category><![CDATA[indexação]]></category>
		<category><![CDATA[schema]]></category>

		<guid isPermaLink="false">http://lucastex.com.br/?p=201</guid>
		<description><![CDATA[
Durante a definição schema do seu índice SOLR, muitas vezes precisamos armazenar o mesmo valor em diferentes campos (fields). Isto é necessário pelo fato de que cada field tem sua maneira de ser indexado, impactando diretamente no match deste documento em uma busca.
Por exemplo, temos o nome de um livro no nosso índice da biblioteca. [...]]]></description>
			<content:encoded><![CDATA[
<p>Durante a definição schema do seu índice SOLR, muitas vezes precisamos armazenar o mesmo valor em diferentes campos (fields). Isto é necessário pelo fato de que cada field tem sua maneira de ser indexado, impactando diretamente no match deste documento em uma busca.</p>
<p>Por exemplo, temos o nome de um livro no nosso índice da biblioteca. Este nome deve ser flexionado no maior número possível de formas para que seja encontrado, seja removendo acentos, usando o snowball, o tokenizando e etc. Porém, ele também será usado em uma feature de &#8220;ordenação alfabética&#8221;. Neste caso sabemos que o campo deve ser indexado como &#8220;string&#8221; sem tokenização ou flexão, ou o resultado pode virar uma bagunça.</p>
<p>Grande parte das pessoas, enviam o campo duas vezes para o Solr, em dois fields diferentes, por exemplo: &#8220;nome&#8221; e &#8220;nome_ord&#8221;. Com isso, deixamos de usar uma diretriz bem bacana do solr chamada <strong>copyField</strong> que serve para copiar o conteúdo de um campo para outro.</p>
<p>Imaginando que os campos estejam definidos da seguinte forma:</p>
<pre class="brush: xml;">&lt;field name=&quot;nome&quot; type=&quot;text&quot; indexed=&quot;true&quot; stored=&quot;true&quot; /&gt;
&lt;field name=&quot;nome_ord&quot; type=&quot;string&quot; indexed=&quot;true&quot; stored=&quot;false&quot; /&gt;</pre>
<p>E usar no fim do documento a instrução <strong>copyField</strong></p>
<pre class="brush: xml;">&lt;copyField source=&quot;nome&quot; dest=&quot;nome_ord&quot; /&gt;</pre>
<p>Desta forma não adicionamos nenhum overhead de parse de uma nova informação, diminuímos a quantidade de dados enviada para o Solr (muito importante se estiver usando HTTP para indexação) e garantimos que a informação será exatamente a mesma.</p>
<p>Uma outra funcionalidade (esta disponível apenas a partir do Solr 1.4) é o <strong>maxChars </strong>que pode ser usado para restringir a quantidade de caracteres que serão copiados. Neste meu exemplo poderia ser usado para criar um resumo da introdução desta maneira.</p>
<pre class="brush: xml;">&lt;copyField source=&quot;introducao&quot; dest=&quot;resumo&quot; maxChars=&quot;3000&quot; /&gt;</pre>
<p>Boa!</p>

]]></content:encoded>
			<wfw:commentRss>http://lucastex.com.br/2009/12/15/indexando-varios-campos-com-o-mesmo-conteudo/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Instalando o JDeveloper no Mac</title>
		<link>http://lucastex.com.br/2009/11/11/instalando-o-jdeveloper-no-mac/</link>
		<comments>http://lucastex.com.br/2009/11/11/instalando-o-jdeveloper-no-mac/#comments</comments>
		<pubDate>Wed, 11 Nov 2009 11:42:16 +0000</pubDate>
		<dc:creator>Lucas Teixeira</dc:creator>
				<category><![CDATA[Mac]]></category>
		<category><![CDATA[Oracle]]></category>

		<guid isPermaLink="false">http://lucastex.com.br/?p=188</guid>
		<description><![CDATA[
Neste fim de ano, estarei me divertindo com um novo projeto por aqui.
Usaremos JDeveloper como IDE e JSF como framework web. Particularmente não tenho boas impressões de JSF nem do JDeveloper, mas como apenas conheço comentários e opiniões de amigos, acredito ser uma boa oportunidade para tentar entender e um pouco deles e poder formar [...]]]></description>
			<content:encoded><![CDATA[
<p>Neste fim de ano, estarei me <a href="http://cpantiguidade.files.wordpress.com/2009/10/abolicaoescravatura081.jpg" target="_blank">divertindo</a> com um novo projeto por aqui.</p>
<p>Usaremos JDeveloper como IDE e JSF como framework web. Particularmente não tenho boas impressões de JSF nem do JDeveloper, mas como apenas conheço comentários e opiniões de amigos, acredito ser uma boa oportunidade para tentar entender e um pouco deles e poder formar uma opinião própria com propriedade . Mas já adianto, não vou me apaixonar :)</p>
<p>Enfim, precisei já instalar o JDeveloper no meu Mac, e como várias coisas no mundo Oracle, precisam de alguns ajustes para rodar sem problemas no Mac.</p>
<p>O primeiro passo, é <a href="http://www.oracle.com/technology/software/products/jdev/index.html" target="_blank">baixar o produto diretamente do site</a>. O arquivo já vem no genérico .jar, então para rodar é na base do clássico</p>
<pre class="brush: xml;">java -jar jdevstudio11111install.jar</pre>
<p>Só que por <a href="http://i188.photobucket.com/albums/z99/fisicomaluco/semttulo-3.jpg" target="_blank">algum motivo</a> ele não identifica os JREs instaladas por default no mac, para isso, um <a href="http://legalzinho.files.wordpress.com/2007/06/30102006125200g.jpg" target="_blank">pequeno ajuste</a> deve ser feito, criando um link dentro da pasta onde a instalação do JDeveloper irá procurar o JRE.</p>
<p><strong>Lembre-se que este processo deve ser feito antes de executar a instalação do pacote. Se você já havia iniciado, encerre-a e comece novamente.</strong></p>
<pre class="brush: bash;">cd /System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home
sudo mkdir -p jre/lib
cd /System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/classes/
sudo ln -s classes.jar ../Home/jre/lib/rt.jar</pre>
<p>Pronto, agora basta iniciar a instalação padrão do JDeveloper sem mais problemas.</p>

]]></content:encoded>
			<wfw:commentRss>http://lucastex.com.br/2009/11/11/instalando-o-jdeveloper-no-mac/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Solr 1.4 &#8211; Feito o lançamento oficial</title>
		<link>http://lucastex.com.br/2009/11/10/solr-1-4-feito-o-lancamento-oficial/</link>
		<comments>http://lucastex.com.br/2009/11/10/solr-1-4-feito-o-lancamento-oficial/#comments</comments>
		<pubDate>Tue, 10 Nov 2009 16:12:51 +0000</pubDate>
		<dc:creator>Lucas Teixeira</dc:creator>
				<category><![CDATA[Solr]]></category>
		<category><![CDATA[indexação]]></category>

		<guid isPermaLink="false">http://lucastex.com.br/?p=181</guid>
		<description><![CDATA[
Bom pessoal, como disse no post anterior, hoje foi lançado o Solr 1.4 versão final.
O link para download é: http://linorg.usp.br/apache/lucene/solr/1.4.0/
Segue abaixo o e-mail oficial de lançamento, que acabou de cair na Lista de e-mails do framework, enviado pelo Grant Ingersoll.
Apache Solr 1.4 has been released and is now available for public download!
http://www.apache.org/dyn/closer.cgi/lucene/solr/
Solr is the popular, [...]]]></description>
			<content:encoded><![CDATA[
<p>Bom pessoal, como disse no post anterior, hoje foi lançado o Solr 1.4 versão final.</p>
<p>O link para download é: <a href="http://linorg.usp.br/apache/lucene/solr/1.4.0/">http://linorg.usp.br/apache/lucene/solr/1.4.0/</a></p>
<p>Segue abaixo o e-mail oficial de lançamento, que acabou de cair na <a href="http://lucene.apache.org/solr/mailing_lists.html#Users" target="_blank">Lista de e-mails do framework</a>, enviado pelo <a href="http://lucene.grantingersoll.com/2009/11/10/apache-solr-1-4-0-offically-released/" target="_blank">Grant Ingersoll</a>.</p>
<blockquote><p>Apache Solr 1.4 has been released and is now available for public download!<br />
<a style="color: #074d8f;" href="http://www.apache.org/dyn/closer.cgi/lucene/solr/" target="_blank">http://www.apache.org/dyn/closer.cgi/lucene/solr/</a></p>
<p>Solr is the popular, blazing fast open source enterprise search<br />
platform from the Apache Lucene project.  Its major features include<br />
powerful full-text search, hit highlighting, faceted search, dynamic<br />
clustering, database integration, and rich document (e.g., Word, PDF)<br />
handling.  Solr is highly scalable, providing distributed search and<br />
index replication, and it powers the search and navigation features of<br />
many of the world&#8217;s largest internet sites.</p>
<p>Solr is written in Java and runs as a standalone full-text search server<br />
within a servlet container such as Tomcat.  Solr uses the Lucene Java<br />
search library at its core for full-text indexing and search, and has<br />
REST-like HTTP/XML and JSON APIs that make it easy to use from virtually<br />
any programming language.  Solr&#8217;s powerful external configuration allows it to<br />
be tailored to almost any type of application without Java coding, and<br />
it has an extensive plugin architecture when more advanced<br />
customization is required.</p>
<p>New Solr 1.4 features include<br />
- Major performance enhancements in indexing, searching, and faceting<br />
- Revamped all-Java index replication that&#8217;s simple to configure and<br />
can replicate config files<br />
- Greatly improved database integration via the DataImportHandler<br />
- Rich document processing (Word, PDF, HTML) via Apache Tika<br />
- Dynamic search results clustering via Carrot2<br />
- Multi-select faceting (support for multiple items in a single<br />
category to be selected)<br />
- Many powerful query enhancements, including ranges over arbitrary<br />
functions, and nested queries of different syntaxes<br />
- Many other plugins including Terms for auto-suggest, Statistics,<br />
TermVectors, Deduplication</p>
<p>Getting Started<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
New to Solr?  Follow the steps below to get up and running ASAP.</p>
<p>1. Download Solr at <a style="color: #074d8f;" href="http://www.apache.org/dyn/closer.cgi/lucene/solr/" target="_blank">http://www.apache.org/dyn/closer.cgi/lucene/solr/</a><br />
2. Check out the tutorial at <a style="color: #074d8f;" href="http://lucene.apache.org/solr/tutorial.html" target="_blank">http://lucene.apache.org/solr/tutorial.html</a><br />
3. Read the Solr wiki (<a style="color: #074d8f;" href="http://wiki.apache.org/solr" target="_blank">http://wiki.apache.org/solr</a>) to learn more<br />
4. Join the community by subscribing to <a style="color: #074d8f;" href="mailto:solr-user@lucene.apache.org" target="_blank">solr-user@lucene.apache.org</a><br />
5. Give Back (Optional, but encouraged!)  See <a style="color: #074d8f;" href="http://wiki.apache.org/solr/HowToContribute" target="_blank">http://wiki.apache.org/solr/HowToContribute</a></p>
<p>For more information on Apache Solr, see <a style="color: #074d8f;" href="http://lucene.apache.org/solr" target="_blank">http://lucene.apache.org/solr</a></p></blockquote>

]]></content:encoded>
			<wfw:commentRss>http://lucastex.com.br/2009/11/10/solr-1-4-feito-o-lancamento-oficial/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Solr 1.4, mais que pronto</title>
		<link>http://lucastex.com.br/2009/11/09/solr-1-4-mais-que-pronto/</link>
		<comments>http://lucastex.com.br/2009/11/09/solr-1-4-mais-que-pronto/#comments</comments>
		<pubDate>Tue, 10 Nov 2009 00:37:13 +0000</pubDate>
		<dc:creator>Lucas Teixeira</dc:creator>
				<category><![CDATA[Solr]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[busca]]></category>
		<category><![CDATA[indexação]]></category>
		<category><![CDATA[Lucene]]></category>
		<category><![CDATA[release]]></category>
		<category><![CDATA[search]]></category>

		<guid isPermaLink="false">http://lucastex.com.br/?p=173</guid>
		<description><![CDATA[
Pra quem acompanha a lista de discussões e o andamento do projeto, o Solr 1.4 já está prontinho para ser lançado tem algum tempo. O pessoal de dev estava apenas esperando o lançamento do Lucene 2.9 para oficializar o lançamento.
Quando então foi lançado, o pessoal do Solr empacotou o framework como RC, disponibilizou para download e [...]]]></description>
			<content:encoded><![CDATA[
<p>Pra quem acompanha a lista de discussões e o andamento do projeto, o Solr 1.4 já está prontinho para ser lançado tem algum tempo. O pessoal de dev estava apenas esperando o lançamento do Lucene 2.9 para oficializar o lançamento.</p>
<p>Quando então foi lançado, o pessoal do Solr empacotou o framework como RC, disponibilizou para download e na hora do lançamento (pra ser mais preciso, um dia antes), dois bugs significativos foram levantados no Lucene 2.9. A equipe do Solr os avaliou com calma, entrou em alinhamento com os devs do Lucene (alguns fazem parte de ambas as equipes) e decidiram por bem aguardar o Lucene 2.9.1 para efetuar o anúncio oficial do Solr 1.4.</p>
<p>Pois bem, com <a href="http://lucene.apache.org/java/docs/index.html#6+November+2009+-+Lucene+Java+2.9.1+available">o lançamento oficial do Lucene 2.9.1 hoje a tarde</a>, o pessoal do Solr já correu, e empacotou em uma versão final a release tão esperada, 1.4.</p>
<p><a href="http://twitter.com/gsingers/status/5568639566" target="_self">Amanhã, dia 07, será feito o lançamento final do Solr 1.4 sem mais delongas</a>. Pois bem, é só aguardar! Mas se você quiser dar uma olhadinha antes, é só baixar os pacotes antes de serem replicados para o mirror central entrando aqui: <a href="http://people.apache.org/~gsingers/solr/1.4.0/" target="_blank">http://people.apache.org/~gsingers/solr/1.4.0/</a>.</p>
<p>Eu, em uma olhada muito, mas muito rápida por cima de algumas funcionalidades do Solr 1.4 (direto no wiki), levantei alguns pontos e encaminhei na lista de e-mails dos colaboradores da empresa em que trabalho. Não estão agrupados, muito menos organizados, mas segue como esboço e rascunho de um post que valeria a pena.</p>
<ul>
<li>SolrServer &#8211; SolrJ HTTP
<ul>
<li>Configuração
<ul>
<li>Timeout</li>
<li>Quantidade de retentativas</li>
</ul>
</li>
<li>SolrJ altamente evoluído para criação da queries e integrado aos searchcomponents</li>
</ul>
</li>
<li>DataImportHandler
<ul>
<li>Transformers
<ul>
<li>Clob Transformer: Permite pegar dados direto de colunas clob no banco de dados</li>
<li>HTML Stripper: Atua em campos com conteúdo HTML, removendo tags e deixando apenas o conteúdo</li>
</ul>
</li>
<li>Agora é possível usar o DIH indexando até conteúdos de um &#8216;datasource&#8217; de e-mail, deixando ele fazer pooling em um e-mail e indexando o que chega.</li>
<li>Eventos callback após indexação</li>
</ul>
</li>
<li>Replicação
<ul>
<li>Configuração interna a aplicação &#8211; Funciona como um RequestHandler</li>
<li>Dashboard de administração, permite ver como estão as replicações, qual indice está em cada nó, status do download de novos indices</li>
<li>Permite replicação interna, via HTTP, não sendo mais necessário usar apenas rsync
<ul>
<li>Com isso, possibilidade de usar em windows</li>
<li>Menos configuração de infra estrutura</li>
<li>Maior visibilidade do status da replicação</li>
</ul>
</li>
</ul>
</li>
<li>Indexação
<ul>
<li>indexação de grandes quantidades de documentos via streaming
<ul>
<li>conexão é aberta com o master, e permanece assim enquanto necessário.</li>
</ul>
</li>
<li>Anotação @Field para poder adicionar um POJO direto ao índice, sem ter que transformar em SolrInputDocument</li>
</ul>
</li>
<li>Componentes de busca (alguns presentes no 1.3 completos, outros eram beta, outros nem existiam)
<ul>
<li>Sugestão de busca</li>
<li>Spelling</li>
<li>Highlight</li>
</ul>
</li>
<li>Resposta da busca em vários novos formatos
<ul>
<li>php nativo</li>
<li>json (já existia mas não era oficial)</li>
<li>xml (normal)</li>
<li>ruby</li>
</ul>
</li>
</ul>
<p>E muito mais&#8230;</p>

]]></content:encoded>
			<wfw:commentRss>http://lucastex.com.br/2009/11/09/solr-1-4-mais-que-pronto/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Visualizando XMLs no Safari de forma decente</title>
		<link>http://lucastex.com.br/2009/11/09/visualizando-xmls-no-safari-de-forma-decente/</link>
		<comments>http://lucastex.com.br/2009/11/09/visualizando-xmls-no-safari-de-forma-decente/#comments</comments>
		<pubDate>Mon, 09 Nov 2009 18:08:33 +0000</pubDate>
		<dc:creator>Lucas Teixeira</dc:creator>
				<category><![CDATA[Mac]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[safari]]></category>
		<category><![CDATA[source]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://lucastex.com.br/?p=162</guid>
		<description><![CDATA[
Se você usa um Mac e navega com o Safari, com certeza sofre pra visualizar XMLs nele, fica como o firefox antigo, uma bagunça.
Neste caso, acaba tendo que abrir o source da página para conseguir ler o conteúdo.
Este plugin do safari, chamado XMLView Plugin com certeza me ajuda muito e pode te ajudar. É muito [...]]]></description>
			<content:encoded><![CDATA[
<p>Se você usa um Mac e navega com o Safari, com certeza sofre pra visualizar XMLs nele, fica como o firefox antigo, uma bagunça.</p>
<p>Neste caso, acaba tendo que abrir o source da página para conseguir ler o conteúdo.</p>
<p><a href="http://www.entropy.ch/software/MacOSX/xmlviewplugin/">Este plugin do safari, chamado XMLView Plugin</a> com certeza me ajuda muito e pode te ajudar. É muito simples, basta descompactar seu conteúdo em <strong>$HOME/Library/Internet Plug-Ins</strong> e reiniciar o navegador.</p>
<p>Depois de reiniciar o Safari, abra <a href="http://www.entropy.ch/software/MacOSX/xmlviewplugin/test.xml">qualquer XML</a> e faça o teste! Use e abuse do layout bem definido e opções de expand/collapse dos nós. Veja abaixo um exemplo:</p>
<p style="text-align: center;">
<div id="attachment_169" class="wp-caption aligncenter" style="width: 669px"><img class="size-full wp-image-169 " title="Safari vendo XML com o plugin XMLView Plugin" src="http://lucastex.com.br/wp-content/uploads/2009/11/dih.png" alt="Safari vendo XML com o plugin XMLView Plugin" width="659" height="373" /><p class="wp-caption-text">Safari vendo XML com o plugin XMLView Plugin</p></div>
</p>
<p>Se gostou, me deve um real. :)</p>

]]></content:encoded>
			<wfw:commentRss>http://lucastex.com.br/2009/11/09/visualizando-xmls-no-safari-de-forma-decente/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Manipulando combos dinamicamente com JQuery</title>
		<link>http://lucastex.com.br/2009/11/09/manipulando-combos-dinamicamente-com-jquery/</link>
		<comments>http://lucastex.com.br/2009/11/09/manipulando-combos-dinamicamente-com-jquery/#comments</comments>
		<pubDate>Mon, 09 Nov 2009 12:45:41 +0000</pubDate>
		<dc:creator>Lucas Teixeira</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[layout]]></category>

		<guid isPermaLink="false">http://lucastex.com.br/?p=147</guid>
		<description><![CDATA[
Já precisou alterar as opções de uma combo com javascript? Pra variar, o JQuery tem algo pronto para isso, basta usar a função appendTo.
É como eu estava dizendo para a @loiane e para o @cmilfont no twitter sexta. Não tem nada mais poderoso que javascript. :)
//insere faixas de preço para compra
$(&#34;&#60;option value='0-200000'&#62;Até 200 mil&#60;/option&#62;&#34;).appendTo(&#34;#cmbValor&#34;);
$(&#34;&#60;option value='200000-300000'&#62;De [...]]]></description>
			<content:encoded><![CDATA[
<p>Já precisou alterar as opções de uma combo com javascript? Pra variar, o <a href="http://jquery.com/" target="_blank">JQuery</a> tem algo pronto para isso, basta usar a função <strong>appendTo</strong>.</p>
<p>É como eu estava dizendo para a <a href="http://twitter.com/loiane" target="_blank">@loiane</a> e para o <a href="http://twitter.com/cmilfont" target="_blank">@cmilfont</a> no twitter sexta. Não tem nada mais poderoso que javascript. :)</p>
<pre class="brush: jscript;">//insere faixas de preço para compra
$(&quot;&lt;option value='0-200000'&gt;Até 200 mil&lt;/option&gt;&quot;).appendTo(&quot;#cmbValor&quot;);
$(&quot;&lt;option value='200000-300000'&gt;De 200 mil a 300 mil&lt;/option&gt;&quot;).appendTo(&quot;#cmbValor&quot;);
$(&quot;&lt;option value='300000-400000'&gt;De 300 mil a 400 mil&lt;/option&gt;&quot;).appendTo(&quot;#cmbValor&quot;);
$(&quot;&lt;option value='400000-500000'&gt;De 400 mil a 500 mil&lt;/option&gt;&quot;).appendTo(&quot;#cmbValor&quot;);
$(&quot;&lt;option value='500000-700000'&gt;De 500 mil a 700 mil&lt;/option&gt;&quot;).appendTo(&quot;#cmbValor&quot;);
$(&quot;&lt;option value='700000-1000000'&gt;De 700 mil a 1 milhão&lt;/option&gt;&quot;).appendTo(&quot;#cmbValor&quot;);
$(&quot;&lt;option value='1000000-2000000'&gt;De 1 a 2 milhões&lt;/option&gt;&quot;).appendTo(&quot;#cmbValor&quot;);
$(&quot;&lt;option value='2000000-0'&gt;Acima de 2 milhões&lt;/option&gt;&quot;).appendTo(&quot;#cmbValor&quot;);
</pre>
<p>Para limpar o conteúdo do select, basta definir o html interno como vazio.</p>
<pre class="brush: jscript;">$(&quot;#idDoMeuSelect&quot;).html(&quot;&quot;);</pre>

]]></content:encoded>
			<wfw:commentRss>http://lucastex.com.br/2009/11/09/manipulando-combos-dinamicamente-com-jquery/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Maravilhas do Groovy: O método &#8216;collect&#8217; das listas</title>
		<link>http://lucastex.com.br/2009/11/06/maravilhas-do-groovy-o-metodo-collect-das-listas/</link>
		<comments>http://lucastex.com.br/2009/11/06/maravilhas-do-groovy-o-metodo-collect-das-listas/#comments</comments>
		<pubDate>Sat, 07 Nov 2009 00:28:40 +0000</pubDate>
		<dc:creator>Lucas Teixeira</dc:creator>
				<category><![CDATA[Maravilhas do Groovy]]></category>
		<category><![CDATA[collections]]></category>
		<category><![CDATA[Groovy]]></category>
		<category><![CDATA[mop]]></category>

		<guid isPermaLink="false">http://lucastex.com.br/?p=142</guid>
		<description><![CDATA[
Passei agora pela seguinte situação:
Possuía uma lista de objetos (pogos) com várias propriedades, e a partir desta lista, eu precisaria de uma nova lista com apenas os ids de cada um destes objetos, ao invés da clássica iteração para se resgatar os valores, acabei usando o método collect, que recebe uma closure, e para cada [...]]]></description>
			<content:encoded><![CDATA[
<p>Passei agora pela seguinte situação:</p>
<p>Possuía uma lista de objetos (pogos) com várias propriedades, e a partir desta lista, eu precisaria de uma nova lista com apenas os ids de cada um destes objetos, ao invés da clássica iteração para se resgatar os valores, acabei usando o método <strong>collect</strong>, que recebe uma closure, e para cada objeto da lista, aplica esta <a href="http://lucastex.com.br/2009/10/21/nao-tenha-medo-das-closures/" target="_blank">closure</a>!</p>
<p>Para quem conhece, funciona da mesma maneira que o <a href="http://java.sun.com/javase/6/docs/api/java/io/FileFilter.html" target="_blank">FileFilter</a> do Java, que é usado para <a href="http://java.sun.com/javase/6/docs/api/java/io/File.html#listFiles%28java.io.FileFilter%29" target="_blank">filtrar arquivos dentro de um diretório</a>.</p>
<pre class="brush: groovy;">def listaPogos = ...
def listaIds = listaPogos.collect { pogo -&gt;
   pogo.id
}</pre>
<p>Quer ver funcionando? <a href="http://groovyconsole.appspot.com/?id=36001" target="_blank">Clique aqui</a> para rodar o código no Groovy Web Console</p>

]]></content:encoded>
			<wfw:commentRss>http://lucastex.com.br/2009/11/06/maravilhas-do-groovy-o-metodo-collect-das-listas/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Grails e GORM: Logando as consultas SQL no console</title>
		<link>http://lucastex.com.br/2009/11/05/grails-e-gorm-logando-as-consultas-sql-no-console/</link>
		<comments>http://lucastex.com.br/2009/11/05/grails-e-gorm-logando-as-consultas-sql-no-console/#comments</comments>
		<pubDate>Thu, 05 Nov 2009 13:38:57 +0000</pubDate>
		<dc:creator>Lucas Teixeira</dc:creator>
				<category><![CDATA[GORM]]></category>
		<category><![CDATA[Grails]]></category>
		<category><![CDATA[debug]]></category>
		<category><![CDATA[dica]]></category>
		<category><![CDATA[hibernate]]></category>
		<category><![CDATA[sql]]></category>

		<guid isPermaLink="false">http://lucastex.com.br/?p=137</guid>
		<description><![CDATA[
Uma dica pra acompanhar o uso do seu banco de dados, e saber o que o hibernate e o gorm estão fazendo por trás dos panos, é logar as queries que estão sendo feitas.
Você pode acompanhar isto detalhadamente configurando seu DataSource.groovy para fazer isso com o parâmetro loggingSql. E o mais bacana na minha opinião [...]]]></description>
			<content:encoded><![CDATA[
<p>Uma dica pra acompanhar o uso do seu banco de dados, e saber o que o <a href="https://www.hibernate.org/" target="_blank">hibernate</a> e o <a href="http://grails.org/GORM" target="_blank">gorm</a> estão fazendo por trás dos panos, é logar as queries que estão sendo feitas.</p>
<p>Você pode acompanhar isto detalhadamente configurando seu <strong>DataSource.groovy </strong>para fazer isso com o parâmetro <strong>loggingSql</strong>. E o mais bacana na minha opinião é poder fazer isso de forma independente para cada ambiente. Lembre-se que por default esta configuração vem desligada.</p>
<pre class="brush: groovy;">environments {
  development {
    dataSource {
      url = &quot;...&quot;    //banco de dev
      loggingSql = true
    }
  }
  test {
    dataSource {
      url = &quot;...&quot; //banco de testes
    }
  }
  production {
    dataSource {
      url = &quot;...&quot; //banco de produção
    }
  }
}</pre>

]]></content:encoded>
			<wfw:commentRss>http://lucastex.com.br/2009/11/05/grails-e-gorm-logando-as-consultas-sql-no-console/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
