Dicas e passo a passo para iniciar com o Amazon Web Services - AWS (em inglês)

Estou começando a fazer uns testes com os servidores da Amazon, o Amazon Web Services. Aí descobri umas dicas e passo a passo com boas informações:

http://bristle.com/Tips/CloudComputing.htm#aws

Abcs a todos.

Grails: problema com uso de herança nos Controllers

Ao fazer uma revisão na performance de uma aplicação Grails, acabei me deparando com um problema muito esquisito.

Nesta aplicação, há alguns controllers que possuíam alguns métodos comuns. Então, nada mais natural do que criar um controller pai, abstrato, do qual os demais controllers herdavam para poderem utilizar os métodos comuns. Não eram actions, eram métodos simples.

Percebi, então, que os alguns dos métodos do controller pai eram executados mesmo sem serem chamados. É isso mesmo. Não me perguntem como, mas estava acontecendo. Será que havia algum erro da minha aplicação. Pode ser que sim, mas....

Então criei uma action de teste simples no meu controller filho:

class FilhoController extends PaiController {
    def teste = {
     render "ola"
    }
}

Ou seja, nada deveria ser executado além de aparecer um "ola" na tela. Mas o problema é que ao configurar o Grails para fazer o log das queries SQL (no DataSource.groovy coloquei loggingSql = true), quando eu acessava esta action http://localhost:8080/app/filho/teste , um monte de SQL aparecia no console. Eram as queries que existiam nos métodos do PaiController. E aí? Fiquei horas, literalmente, tentando entender. Achei que fosse algo em algum Filter, algo no BootStrap, no resources.groovy, sei lá aonde. Mas não imaginei que era a herança que estava causando isso.

Bom, resolvi arriscar e acabei com a herança. Matei o "extends PaiController". Aí criei uma classe groovy comum contendo todos os métodos da antiga classe PaiController. Problema resolvido. Acredita nisso? Nem eu. Mas........

Só mais um detalhe: nesta classe groovy, que chamei de WebHelper, eu precisava de session, de um service, do request, da taglib para poder usar o método message(), e por aí vai. Então, criei esta classe com.minhaapp.web.WebHelper na pasta src/groovy, e configurei o resources.groovy para poder injetar nestas minha classe tudo que eu precisava, da seguinte forma:

beans = {
    
  webHelper(com.minhaapp.web.WebHelper) { bean ->
    bean.scope = 'prototype' // aqui pode ser singleton se vc preferir
    bean.autowire = 'byName'
    applicationTagLib = ref('org.codehaus.groovy.grails.plugins.web.taglib.ApplicationTagLib')
  }

}


E a classe WebHelper então ficou assim:

package com.minhaapp.web


import org.codehaus.groovy.grails.plugins.web.taglib.ApplicationTagLib
import org.springframework.web.servlet.support.RequestContextUtils
import org.springframework.web.context.request.RequestContextHolder

public class WebHelper {
    def grailsApplication
    def meuService
    def applicationTagLib
    
    def teste(){
        println grailsApplication.class
        println RequestContextHolder.currentRequestAttributes().session.class
        println applicationTagLib.class
        println meuService.class
    }
    
}


Abcs a todos.

Reportagens sobre Grails na revista Wide

Pessoal

a revista Wide deste mês tem duas reportagens boas sobre o Grails. Uma delas é comigo mesmo, onde falo a respeito do uso do Grails no caso do NoiteUniversitaria.com.br ( e comento um pouco sobre o caso do Manubia ).
A outra é uma entrevista com o Graeme Rocher, desenvolvedor líder do projeto Grails.

Interessante a revista. (não estou ganhando $$ com a revista não hein)....

Abcs a todos.