<?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 &#187; Grails</title>
	<atom:link href="http://lucastex.com.br/category/grails/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[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Flucastex.com.br%252F2010%252F07%252F19%252Fcriando-um-tipo-de-dados-personalizado-no-grails-hibernate%252F%22%2C%20%22shorturl%22%3A%20%22http%3A%2F%2Fbit.ly%2FbkhFEI%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Criando%20um%20tipo%20de%20dados%20personalizado%20no%20Grails%20%2B%20Hibernate%22%20%7D);"></div>
<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>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[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Flucastex.com.br%252F2010%252F05%252F26%252Fpalestra-sobre-grails-meus-agradecimentos%252F%22%2C%20%22shorturl%22%3A%20%22http%3A%2F%2Fbit.ly%2FarbeJQ%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Palestra%20sobre%20Grails%2C%20meus%20agradecimentos%22%20%7D);"></div>
<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[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Flucastex.com.br%252F2010%252F05%252F19%252Fpalestra-aberta-de-grails-na-universidade-metodista%252F%22%2C%20%22shorturl%22%3A%20%22http%3A%2F%2Fbit.ly%2Fbwj5XC%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Palestra%20aberta%20de%20Grails%20na%20Universidade%20Metodista%22%20%7D);"></div>
<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>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[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Flucastex.com.br%252F2010%252F04%252F14%252Fplugin-grails-para-calcular-valor-de-frete-dos-correios%252F%22%2C%20%22shorturl%22%3A%20%22http%3A%2F%2Fbit.ly%2FdcLV9j%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Plugin%20grails%20para%20calcular%20valor%20de%20frete%20dos%20correios%22%20%7D);"></div>
<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>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[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Flucastex.com.br%252F2010%252F03%252F04%252Fcomo-e-por-que-usar-um-datasource-jndi%252F%22%2C%20%22shorturl%22%3A%20%22http%3A%2F%2Fbit.ly%2F9pmLMO%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Como%2C%20e%20por%20que%20usar%20um%20DataSource%20JNDI.%22%20%7D);"></div>
<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[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Flucastex.com.br%252F2010%252F02%252F28%252Fgsolr-beans-declarados-automagicamente%252F%22%2C%20%22shorturl%22%3A%20%22http%3A%2F%2Fbit.ly%2FccV24J%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22%5BGSolr%5D%20Beans%20declarados%20automagicamente%22%20%7D);"></div>
<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[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Flucastex.com.br%252F2010%252F02%252F28%252Fresolvendo-dependencias-de-sua-aplicacao-grails-usando-ivy%252F%22%2C%20%22shorturl%22%3A%20%22http%3A%2F%2Fbit.ly%2Fc00XnA%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Resolvendo%20depend%C3%AAncias%20de%20sua%20aplica%C3%A7%C3%A3o%20Grails%20usando%20Ivy%22%20%7D);"></div>
<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[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Flucastex.com.br%252F2010%252F02%252F26%252Fgrails-e-solr-juntos-o-melhor-dos-mundos%252F%22%2C%20%22shorturl%22%3A%20%22http%3A%2F%2Fbit.ly%2F9RkqDd%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Grails%20e%20Solr%20juntos%2C%20o%20melhor%20dos%20mundos%22%20%7D);"></div>
<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>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[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Flucastex.com.br%252F2010%252F02%252F14%252Fcomo-fazer-o-deploy-de-uma-app-grails-no-jboss%252F%22%2C%20%22shorturl%22%3A%20%22http%3A%2F%2Fbit.ly%2FdCFz4H%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Como%20fazer%20o%20deploy%20de%20uma%20app%20grails%20no%20JBoss%20%22%20%7D);"></div>
<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[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Flucastex.com.br%252F2010%252F02%252F03%252Fcomo-acessar-uma-taglib-de-dentro-de-um-service%252F%22%2C%20%22shorturl%22%3A%20%22http%3A%2F%2Fbit.ly%2FblFNGk%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Como%20acessar%20uma%20taglib%20de%20dentro%20de%20um%20service%22%20%7D);"></div>
<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[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Flucastex.com.br%252F2010%252F01%252F27%252Fdevolvendo-um-texto-como-attachment-no-response%252F%22%2C%20%22shorturl%22%3A%20%22http%3A%2F%2Fbit.ly%2FdDzmT5%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Devolvendo%20um%20texto%20como%20attachment%20no%20response%22%20%7D);"></div>
<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[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Flucastex.com.br%252F2010%252F01%252F26%252Fcomo-definir-o-locale-default-de-sua-aplicacao-grails%252F%22%2C%20%22shorturl%22%3A%20%22http%3A%2F%2Fbit.ly%2F4ZDOrp%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Como%20definir%20o%20locale%20default%20de%20sua%20aplica%C3%A7%C3%A3o%20grails%22%20%7D);"></div>
<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>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[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Flucastex.com.br%252F2010%252F01%252F11%252Fconfig-groovy-cuidado-ao-manipular-suas-configuracoes%252F%22%2C%20%22shorturl%22%3A%20%22http%3A%2F%2Fbit.ly%2F6RuMHa%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Config.groovy%20-%20Cuidado%20ao%20manipular%20suas%20configura%C3%A7%C3%B5es%20%22%20%7D);"></div>
<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[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Flucastex.com.br%252F2010%252F01%252F10%252Fportal-imobiliario-usando-groovy-e-grails%252F%22%2C%20%22shorturl%22%3A%20%22http%3A%2F%2Fbit.ly%2F7iywM2%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Portal%20imobili%C3%A1rio%20usando%20Groovy%20e%20Grails%22%20%7D);"></div>
<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[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Flucastex.com.br%252F2010%252F01%252F02%252Fenvio-de-e-mails-com-o-mail-plugin%252F%22%2C%20%22shorturl%22%3A%20%22http%3A%2F%2Fbit.ly%2F7LOCfQ%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Envio%20de%20e-mails%20com%20o%20Mail%20Plugin%22%20%7D);"></div>
<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>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[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Flucastex.com.br%252F2009%252F11%252F05%252Fgrails-e-gorm-logando-as-consultas-sql-no-console%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Grails%20e%20GORM%3A%20Logando%20as%20consultas%20SQL%20no%20console%22%20%7D);"></div>
<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>
		<item>
		<title>Renderizando um XML como resposta em grails</title>
		<link>http://lucastex.com.br/2009/11/03/renderizando-um-xml-como-resposta-em-grails/</link>
		<comments>http://lucastex.com.br/2009/11/03/renderizando-um-xml-como-resposta-em-grails/#comments</comments>
		<pubDate>Tue, 03 Nov 2009 12:45:04 +0000</pubDate>
		<dc:creator>Lucas Teixeira</dc:creator>
				<category><![CDATA[Grails]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[builder]]></category>
		<category><![CDATA[render]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://lucastex.com.br/?p=126</guid>
		<description><![CDATA[

Se em grails você precisar renderizar um XML como resposta de uma action, use o método render junto com o builder de XML que temos disponível. Muito fácil, rápido e objetivo.
No exemplo abaixo, um parâmetro nome é passado para a action, que faz uma consulta baseado neste parâmetro e nos nomes dos clientes.
def busca = [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Flucastex.com.br%252F2009%252F11%252F03%252Frenderizando-um-xml-como-resposta-em-grails%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Renderizando%20um%20XML%20como%20resposta%20em%20grails%22%20%7D);"></div>
<p>Se em grails você precisar renderizar um XML como resposta de uma action, use o método render junto com o builder de XML que temos disponível. Muito fácil, rápido e objetivo.</p>
<p>No exemplo abaixo, um parâmetro <em>nome</em> é passado para a action, que faz uma consulta baseado neste parâmetro e nos nomes dos clientes.</p>
<pre class="brush: groovy;">def busca = {
   def clientes = Cliente.findAllByNomeIlike(&quot;%${params.nome}%&quot;)

   render(contentType: &quot;text/xml&quot;) {
      results() {
         clientes.each {
            cliente -&gt; result() {
               id(cliente.id)
               nome(cliente.nome)
            }
         }
      }
   }
}</pre>
<p>Explicando o auto-explicativo:</p>
<p>Linha 2: Usamos um método dinâmico do grails (não, este método não existe na classe) que permite que eu localize todos os clientes (findAll) por seus nomes (byNome) Ilike (case insensitive) usando o parâmetro <em>nome</em> que veio no request. Esta lista é armazenada na referência clientes.</p>
<p>Linha 4: Pela funcão <em>render</em> deixamos claro que iremos renderizar um conteúdo <em>text/xml</em></p>
<p>Linha 5: Esta será a nossa tag root do xml: <strong>results</strong>. A <a href="http://lucastex.com.br/2009/10/21/nao-tenha-medo-das-closures/" target="_blank">closure</a> que se abre definirá os filhos deste nó.</p>
<p>Linha 6: Cada cliente na lista retornada&#8230;</p>
<p>Linha 7: Será um novo nó <strong>result</strong> do XML de resposta</p>
<p>Linhas 8 e 9: Os fois filhos de <strong>result</strong>, teremos o <strong>id</strong> do cliente e seu <strong>nome</strong>, suficiente para uma combo com auto-complete!<br />
O resultado foi como esperado, e o tempo de fazer o exemplo funcionar foi definitivamente menor que o de escrever este post!</p>
<pre class="brush: xml;">&lt;results&gt;
   &lt;result&gt;
      &lt;id&gt;313&lt;/id&gt;
      &lt;nome&gt;JOSE DA SILVA&lt;/nome&gt;
   &lt;/result&gt;
   &lt;result&gt;
      &lt;id&gt;817&lt;/id&gt;
      &lt;nome&gt;PATRICIA MARIA SILVA E SILVA&lt;/nome&gt;
   &lt;/result&gt;
   &lt;result&gt;
      &lt;id&gt;91&lt;/id&gt;
      &lt;nome&gt;MARCOS SILVINO&lt;/nome&gt;
   &lt;/result&gt;
&lt;/results&gt;</pre>

]]></content:encoded>
			<wfw:commentRss>http://lucastex.com.br/2009/11/03/renderizando-um-xml-como-resposta-em-grails/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>
