quinta-feira, 31 de março de 2016

Como criar uma aplicação portátil (portable) em Grails

Siga os passos abaixo para gerar uma aplicação que embute em si tanto um container (Jetty) quanto um banco de dados (H2):

1. Em "plugins", do arquivo BuildConfig.groovy, adicione a linha runtime ':war-exec:1.0.1' (esse é o plugin que faz o Jetty ficar embutido na aplicação);

2. Adicione ou altere o ambiente desejado no arquivo DataSource.groovy como segue abaixo:

    production {
        dataSource {
            dbCreate = "update"
            url = "jdbc:h2:file:banco;MVCC=TRUE;LOCK_TIMEOUT=10000"
            pooled = true
            username = "sa"
            password = ""

            properties {
                maxActive = -1
                minEvictableIdleTimeMillis=1800000
                timeBetweenEvictionRunsMillis=1800000
                numTestsPerEvictionRun=3
                testOnBorrow=true
                testWhileIdle=true
                testOnReturn=true
                validationQuery="SELECT 1"
            }
        }
    }

Obs.: O nome do arquivo do H2 deve ser definido na chave url (no exemplo foi definido como "banco").

3. Gere o arquivo war da aplicação com o comando grails war;

Pronto. Com isso o arquivo .war gerado na pasta "target" poderá ser utilizado em qualquer ambiente que possua o Java instalado. Para tanto é suficiente executar o comando java -jar .

domingo, 6 de março de 2016

Distância entre CEP's ou endereços em Groovy Grails

1 - Crie uma aplicação:

grails create-app Teste

2 - Entre na pasta da aplicação:

cd Teste

3 - Crie um controller:

grails create-controller pacote.Teste

4 - Adicione o código abaixo ao arquivo TesteController.groovy:

package pacote

class TesteController {

    def index() {

      def url= "http://maps.googleapis.com/maps/api/distancematrix/xml?origins=77804040&destinations=65300000"
   
      def doc = new XmlSlurper().parse(url)

      render doc.row.element.distance.value

    }
}

4 - Rode a aplicação:

grails run-app

5 - Acesse a aplicação:

http://localhost:8080/teste

Obs.: O teste foi feito com CEP's, porém funciona com endereços; Os parâmetros podem ser enviados ao controller por uma GSP e tratados por meio do objeto params;