Arquivo para a tag ‘ajax’
Portal imobiliário usando Groovy e Grails
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 “create app” para produção em 2 meses. Esse é também o grande motivo para a falta de tempo de postar mais por aqui.
Trata-se dos sites http://www.imoveisnomorumbi.com.br e http://www.imoveisnopanamby.com.br, site de duas imobiliárias do mesmo grupo, que negocia imóveis de alto padrão nestes dois bairros.
Algumas informações interessantes sobre o projeto:
Tecnologia e Infraestrutura: O site antigo usava SQLServer como banco de dados e tecnologia ASP. Como usamos Groovy e Grails, por trás temos uma JVM Java em execução, e o banco de dados, o bom e velho MySQL.
Antes, para suportar o ASP, o IIS era usado como web server, e agora Um apache balanceia as requisições aos dois Tomcats. Tudo isto está deployado e rodando em um Cloud Server da Locaweb, por opção do cliente, onde já mantinha a conta antiga.
Integração com o sistema legado: Para a integração do modelo de dados antigo e o novo modelo, construímos rotinas de importação dos dados usando Groovy SQL, uma maneira fácil, muito fácil, de fazer rotinas em banco de dados.
Plugins utilizados: Ahhh, os bons e velhos plugins do Grails, não canso de dizer que esta é a melhor parte do Grails! Foram usados os plugins:
Grails-Mail, para envio dos e-mails e formas de contato do site
Grails-Acegi, para autenticação e segurança
Grails-Cookie, para manipulação dos cookies do cliente
Grails-Navigation para criação de menus/submenus da interface administrativa
Grails-RichUi para alguns componentes gráficos como auto-complete e nuvem de tags
Grails-RuntimeLogging, um ótimo plugin para moder trabalhar com o nível de log de cada artefato (controller, service, etc), da app em runtime
Grails-Settings para algumas parametrizações da aplicação.
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) jquery, ajax e json.
É isso, qualquer dúvida sobre o projeto, como aconteceu, soluções e problemas, basta comentar!
Obrigado a todos!
Renderizando um XML como resposta em grails
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 = {
def clientes = Cliente.findAllByNomeIlike("%${params.nome}%")
render(contentType: "text/xml") {
results() {
clientes.each {
cliente -> result() {
id(cliente.id)
nome(cliente.nome)
}
}
}
}
}
Explicando o auto-explicativo:
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 nome que veio no request. Esta lista é armazenada na referência clientes.
Linha 4: Pela funcão render deixamos claro que iremos renderizar um conteúdo text/xml
Linha 5: Esta será a nossa tag root do xml: results. A closure que se abre definirá os filhos deste nó.
Linha 6: Cada cliente na lista retornada…
Linha 7: Será um novo nó result do XML de resposta
Linhas 8 e 9: Os fois filhos de result, teremos o id do cliente e seu nome, suficiente para uma combo com auto-complete!
O resultado foi como esperado, e o tempo de fazer o exemplo funcionar foi definitivamente menor que o de escrever este post!
<results>
<result>
<id>313</id>
<nome>JOSE DA SILVA</nome>
</result>
<result>
<id>817</id>
<nome>PATRICIA MARIA SILVA E SILVA</nome>
</result>
<result>
<id>91</id>
<nome>MARCOS SILVINO</nome>
</result>
</results>