{"id":224,"date":"2008-12-29T22:01:36","date_gmt":"2008-12-30T01:01:36","guid":{"rendered":"https:\/\/devkico.itexto.com.br\/?p=224"},"modified":"2010-09-12T23:23:11","modified_gmt":"2010-09-13T02:23:11","slug":"o-que-e-grails-e-como-ele-salva-a-plataforma-jee-alem-de-lhe-evitar-o-tedio","status":"publish","type":"post","link":"https:\/\/devkico.itexto.com.br\/?p=224","title":{"rendered":"O que \u00e9 Grails e como ele salva a plataforma JEE (al\u00e9m de lhe evitar o t\u00e9dio)?"},"content":{"rendered":"<div>\n<p><a href=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2010\/02\/grails_logo.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft size-full wp-image-604\" style=\"margin: 10px;\" title=\"grails_logo\" src=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2010\/02\/grails_logo.png\" alt=\"\" width=\"163\" height=\"43\" \/><\/a>Se voc\u00ea chegou a esta p\u00e1gina, \u00e9 sinal de que tem pelo menos uma no\u00e7\u00e3o b\u00e1sica do que venha a ser Grails:\u00a0 um framework\/plataforma utilizada na constru\u00e7\u00e3o de aplica\u00e7\u00f5es web. Por\u00e9m, para desenvolvedores Java j\u00e1 acostumados com os frameworks atuais, como Struts, JSF, Facelets e outros, trata-se de algo mais do que mais um framework com o objetivo de facilitar a execu\u00e7\u00e3o desta tarefa. Trata-se de uma mudan\u00e7a de paradigma.<\/p>\n<p>At\u00e9 o surgimento do Grails, a hist\u00f3ria do desenvolvimento de aplica\u00e7\u00f5es web na plataforma JEE pode ser dividida, basicamente, em dois momentos:<\/p>\n<ul>\n<li>A cria\u00e7\u00e3o da plataforma Java Enterprise Edition em 1999<\/li>\n<li>A introdu\u00e7\u00e3o do Struts, que foi o primeiro framework de sucesso para esta plataforma.<br \/>\nEste segundo momento \u00e9 important\u00edssimo, pois logo ap\u00f3s a introdu\u00e7\u00e3o do JEE, tornou-se claro que a maior dificuldade consistia no gerenciamento da complexidade das aplica\u00e7\u00f5es. Neste sentido, o Struts foi o salvador da p\u00e1tria, ao aumentar significativamente a produtividade do desenvolvedor.<\/li>\n<\/ul>\n<p><a href=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2009\/03\/bureaucracy.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-340 alignright\" style=\"margin: 10px;\" title=\"bureaucracy\" src=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2009\/03\/bureaucracy.jpg\" alt=\"\" width=\"198\" height=\"157\" srcset=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2009\/03\/bureaucracy.jpg 550w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2009\/03\/bureaucracy-300x237.jpg 300w\" sizes=\"(max-width: 198px) 100vw, 198px\" \/><\/a>Ap\u00f3s a introdu\u00e7\u00e3o do Struts, outros frameworks foram surgindo, todos visando o mesmo objetivo: facilitar o desenvolvimento de aplica\u00e7\u00f5es web na plataforma JEE e, de um certo modo, se poss\u00edvel, superar o Struts. Dado que este foi um dos primeiros frameworks, a tarefa foi f\u00e1cilmente cumprida.<\/p>\n<p>Por\u00e9m, ap\u00f3s o surgimento de 298347203498234872634 frameworks, percebia-se n\u00edtidamente que, apesar de todos os avan\u00e7os, os mesmos problemas voltavam a se repetir:<\/p>\n<ul>\n<li>Criar o ambiente de desenvolvimento normalmente consumia um tempo significativo<\/li>\n<li>Boa parte das tarefas repetitivas ainda eram executadas manualmente<\/li>\n<li>N\u00e3o havia uma diretiva n\u00edtida a respeito de quais conven\u00e7\u00f5es seguir<\/li>\n<li>Com rar\u00edssimas excess\u00f5es, a tarefa de configurar a aplica\u00e7\u00e3o foi se tornando cada vez mais complexa<\/li>\n<li>Os frameworks eram todos basicamente muito parecidos<\/li>\n<li>E o que considero mais importante: desenvolver aplica\u00e7\u00f5es web na plataforma Java foi se tornando cada vez mais tedioso.<\/li>\n<\/ul>\n<p>A plataforma JEE como um todo, por sua vez, tamb\u00e9m apresentava um significativo aumento em sua complexidade, ao ponto de diversos desenvolvedores passarem a substituir parte de sua funcionalidade por ferramentas como o Spring e o Hibernate. Esta dupla ali\u00e1s obteve tamanho sucesso que, na vers\u00e3o 5 da plataforma (que solucionou a maior parte dos problemas presentes at\u00e9 ent\u00e3o) observa-se n\u00edtidamente a sua influ\u00eancia.<\/p>\n<p><a href=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2009\/03\/bruce_on_rails.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-full wp-image-342\" style=\"margin: 10px;\" title=\"bruce_on_rails\" src=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2009\/03\/bruce_on_rails.jpg\" alt=\"\" width=\"247\" height=\"182\" srcset=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2009\/03\/bruce_on_rails.jpg 411w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2009\/03\/bruce_on_rails-300x221.jpg 300w\" sizes=\"(max-width: 247px) 100vw, 247px\" \/><\/a>Eis que aos dois eventos citados anteriormente, surge um terceiro: Ruby on Rails (RoR): um banho de \u00e1gua fria para os desenvolvedores Java. De repente, uma linguagem que at\u00e9 ent\u00e3o a maioria ignorava mostra um framework para desenvolvimento de aplica\u00e7\u00f5es web centenas de vezes mais produtivo do que todos os nossos frameworks java juntos. Naquele momento, pode-se dizer que Java como plataforma web era carta fora do baralho.<\/p>\n<p>O que RoR nos trouxe:<\/p>\n<ul>\n<li>Uma aplica\u00e7\u00e3o pr\u00e1tica do conceito de desenvolvimento baseado em conven\u00e7\u00f5es. Seguindo este paradigma, que basicamente nos diz: &#8220;olha, siga estas conven\u00e7\u00f5es que eu me viro com o resto&#8221;.<br \/>\n\u00c9 incr\u00edvel pensar hoje que algo t\u00e3o simples era negligenciado por desenvolvedores Java. At\u00e9 ent\u00e3o, as &#8220;conven\u00e7\u00f5es&#8221; que levavamos em considera\u00e7\u00e3o diziam respeito apenas aos nossos famigerados arquivos XML (e cada componente com as suas pr\u00f3prias &#8220;conven\u00e7\u00f5es&#8221;)<\/p>\n<p>(o &#8220;rails&#8221; do nome faz refer\u00eancia justamente ao uso de conven\u00e7\u00f5es, que correspondem aos &#8220;trilhos&#8221; seguidos pelo desenvolvedor no processo de desenvolvimento)<\/li>\n<li>Stack completo: ao contr\u00e1rio do que ocorre em Java, no qual para criar uma aplica\u00e7\u00e3o usamos n componentes como por exemplo Hibernate, Log4J, Xerces, Commons, Spring \u00a0e cia ilimitada, na qual passamos HORAS, e em certos casos, DIAS nos preocupando em como fazer com que tudo fique bem integrado, RoR trouxe uma s\u00e9rie de componentes j\u00e1 pr\u00e9 integrados e prontos para uso. Ficar horas tentanto integrar componentes de uma hora para outra se tornou passado.<br \/>\nO desenvolvedor s\u00f3 precisava se preocupar com a sua l\u00f3gica de neg\u00f3cios, e n\u00e3o com uma infinidade de detalhes t\u00e9cnicos que s\u00f3 atrasam seu trabalho.<\/li>\n<li>Scaffolding: ao desenvolvermos uma aplica\u00e7\u00e3o web, boa parte do trabalho \u00e9 repetitivo, como por exemplo a cria\u00e7\u00e3o da camada de neg\u00f3cio (no caso de aplica\u00e7\u00f5es CRUD, isto se torna n\u00edtido) e controladores. Com RoR, o pr\u00f3prio framework, a partir de alguns modelos, cria para o desenvolvedor o esqueleto b\u00e1sico de sua camada de visualiza\u00e7\u00e3o e controle. Fica por conta do desenvolvedor apenas customizar estes arquivos de acordo com a necessidade de sua aplica\u00e7\u00e3o.(posteriormente neste trabalho irei mostrar que, na realidade, o scaffolding pode ser uma armadilha. Por\u00e9m, por enquanto, vamos ver apenas o lado positivo do mesmo)<\/li>\n<li>Expansibilidade: em RoR \u00e9 poss\u00edvel criar plugins que ampliem o poder do framework. Algo n\u00e3o lhe \u00e9 atendido? Simples: crie um plugin. Apesar de j\u00e1 existir este recurso em diversos frameworks Java conhecidos, RoR conseguiu facilitar ainda mais a execu\u00e7\u00e3o esta tarefa, elevando RoR do patamar de framework para o de plataforma.<\/li>\n<\/ul>\n<p>Resumindo: RoR expunha a todos diversos dos problemas existentes no desenvolvimento de aplica\u00e7\u00f5es web usando a plataforma JEE. Estes eram simplesmente eram ignorados pela maior parte dos desenvolvedores, que at\u00e9 ent\u00e3o os viam apenas como &#8220;ossos do of\u00edcio&#8221;.<\/p>\n<p>Mas no caso da plataforma Java, que possui uma imensid\u00e3o de bibliotecas existentes (a maior quantidade de biblioteca desenvolvida por terceiros na hist\u00f3ria) e c\u00f3digo legado presente, como tirar proveito dos ganhos de produtividade obtidos pelo Ruby on Rails, um framework baseado em uma plataforma completamente diferente?<\/p>\n<p>Duas foram as solu\u00e7\u00f5es:<\/p>\n<ol>\n<li>Implementar o ruby em Java. Eis que surge o projeto JRuby. Problema: a sintaxe e o modo de trabalhar do Ruby \u00e9 muito diferente daquele com o qual estavam habituados os programadores Java. Consequentemente, a curva de aprendizado \u00e9 muito maior.<\/li>\n<li>Implementar um framework baseado nos mesmos princ\u00edpios do RoR na plataforma Java: surge o Grails.<\/li>\n<\/ol>\n<p>Para o desenvolvedor Java acostumado aos frameworks at\u00e9 ent\u00e3o, Grails se mostra completamente alien\u00edgena ao primeiro contato. Para come\u00e7ar, a linguagem usada n\u00e3o \u00e9 Java, e sim Groovy. Por que Groovy?<\/p>\n<ul>\n<li>Possui uma sintaxe bem parecida com a do Java.<br \/>\nNa realidade, Groovy resolve algumas inconveni\u00eancias da linguagem Java de uma maneira bastante elegante.<\/li>\n<li>Trata-se de uma linguagem din\u00e2mica. E linguagens din\u00e2micas, todos sabem, s\u00e3o bastante produtivas.<\/li>\n<li>\u00c9 baseado na plataforma Java. Consequentemente, todo o c\u00f3digo Java pr\u00e9 existente pode ser usado de forma transparente por c\u00f3digo feito em Groovy. N\u00e3o \u00e9 preciso recompilar ou utilizar qualquer tipo de tradu\u00e7\u00e3o, uma vez que c\u00f3digo Groovy \u00e9 compilado diretamente para bytecode.<br \/>\n(ali\u00e1s, c\u00f3digo Java tamb\u00e9m acessa c\u00f3digo Groovy diretamente, pois no fina das contas, estamos lidando apenas com bytecode!)<\/li>\n<li>\u00c9 r\u00e1pido. C\u00f3digo Groovy pode ser compilado, chegando a uma performance bem pr\u00f3xima (ou igual) a do c\u00f3digo Java tradicional.<\/li>\n<li>Como o pr\u00f3prio nome j\u00e1 diz, \u00e9 uma linguagem bem divertida de se usar. :)<\/li>\n<\/ul>\n<p>Outra diferen\u00e7a diz respeito ao fato de se tratar de um ambiente completo de desenvolvimento. Ao baixar o Grails, o desenvolvedor j\u00e1 possuir\u00e1 em sua m\u00e1quina tudo o que precisa para come\u00e7ar a desenvolver suas aplica\u00e7\u00f5es. Traduzindo: Grails aposenta aquela velha hist\u00f3ria de ter de se ficar buscando arquivos jar na internet para se come\u00e7ar a trabalhar (no caso do Grails, isto \u00e9 levado ao extremo. de cara o Grails j\u00e1 vem inclusive com seu pr\u00f3prio servidor de aplica\u00e7\u00f5es: o Jetty).<\/p>\n<p>O ciclo de desenvolvimento tamb\u00e9m \u00e9 bastante diferente. Ao desenvolvermos uma aplica\u00e7\u00e3o web usando JEE, normalmente o ciclo consiste em codificar, compilar, fazer o deploy da aplica\u00e7\u00e3o, testar e voltar a codificar. No caso do Grails, o ciclo consiste apenas em codificar, iniciar a aplica\u00e7\u00e3o e continuar alterando o c\u00f3digo sem precisar ficar compilando e fazendo deploy o tempo inteiro (lembra muito o desenvolvimento em Lisp). Como resultado, o processo de desenvolvimento se torna MUITO mais agrad\u00e1vel, aniquilando o t\u00e9dio desta tarefa.<\/p>\n<p>Sobre este guia<\/p>\n<p>Este guia pretende ser o mais abrangente poss\u00edvel. Iremos ver desde o be-a-ba do Grails at\u00e9 t\u00f3picos mais avan\u00e7ados, como a cria\u00e7\u00e3o de plugins e hacks que podemos aplicar ao framework.<\/p>\n<p>Ao mesmo tempo, visto que n\u00e3o conhe\u00e7o Grails 100%, conto com a participa\u00e7\u00e3o dos leitores em sua cria\u00e7\u00e3o, raz\u00e3o pela qual estou disponibilizando o guia no formato de blog. Qualquer um poder\u00e1 me enviar corre\u00e7\u00f5es e novas informa\u00e7\u00f5es a serem compartilhadas por todos.<\/p>\n<p>N\u00e3o h\u00e1 uma forma final para este texto e provavelmente jamais ter\u00e1. Por estar em formato de blog,este \u00a0constantemente ser\u00e1 alterado, tornando o conceito de edi\u00e7\u00f5es no nosso caso completamente sem sentido (Guimar\u00e3es Rosa adoraria ter um blog). Dado que a forma final jamais ser\u00e1 cristalizada, o texto n\u00e3o precisa ser seguido linearmente. Ao consultar algum dos t\u00f3picos presentes, voc\u00ea ser\u00e1 informado dos pr\u00e9 requisitos necess\u00e1rios \u00e0 sua compreens\u00e3o, resultando portanto em um cookbook no final das contas.<\/p>\n<p>(um cookbook com linearidade proposta, definida pela ordem na qual vou escrevendo os cap\u00edtulos do guia)<\/p>\n<p>Como mencionei, iremos come\u00e7ar do b\u00e1sico. No pr\u00f3ximo cap\u00edtulo, pretendo expor como \u00e9 feita a instala\u00e7\u00e3o do Grails. A partir deste ponto, iremos acompanhar o desenvolvimento de algumas aplica\u00e7\u00f5es, cada uma expondo detalhes do funcionamento do framework (e, claro, voc\u00eas poder\u00e3o dar o pitaco que quiserem durante o processo).<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Se voc\u00ea chegou a esta p\u00e1gina, \u00e9 sinal de que tem pelo menos uma no\u00e7\u00e3o b\u00e1sica do que venha a ser Grails:\u00a0 um framework\/plataforma utilizada na constru\u00e7\u00e3o de aplica\u00e7\u00f5es web. Por\u00e9m, para desenvolvedores Java j\u00e1 acostumados com os frameworks atuais, como Struts, JSF, Facelets e outros, trata-se de algo mais do que mais um framework [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_coblocks_attr":"","_coblocks_dimensions":"","_coblocks_responsive_height":"","_coblocks_accordion_ie_support":"","site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-gradient":""}},"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[3,30,5,9,6],"tags":[],"class_list":["post-224","post","type-post","status-publish","format-standard","hentry","category-grails","category-grails-guia-rapido-e-indireto","category-groovy","category-historia","category-java"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v22.8 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>O que \u00e9 Grails e como ele salva a plataforma JEE (al\u00e9m de lhe evitar o t\u00e9dio)? - \/dev\/Kico<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/devkico.itexto.com.br\/?p=224\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"O que \u00e9 Grails e como ele salva a plataforma JEE (al\u00e9m de lhe evitar o t\u00e9dio)? - \/dev\/Kico\" \/>\n<meta property=\"og:description\" content=\"Se voc\u00ea chegou a esta p\u00e1gina, \u00e9 sinal de que tem pelo menos uma no\u00e7\u00e3o b\u00e1sica do que venha a ser Grails:\u00a0 um framework\/plataforma utilizada na constru\u00e7\u00e3o de aplica\u00e7\u00f5es web. Por\u00e9m, para desenvolvedores Java j\u00e1 acostumados com os frameworks atuais, como Struts, JSF, Facelets e outros, trata-se de algo mais do que mais um framework [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/devkico.itexto.com.br\/?p=224\" \/>\n<meta property=\"og:site_name\" content=\"\/dev\/Kico\" \/>\n<meta property=\"article:published_time\" content=\"2008-12-30T01:01:36+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2010-09-13T02:23:11+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/www.itexto.net\/devkico\/wp-content\/uploads\/2010\/02\/grails_logo.png\" \/>\n<meta name=\"author\" content=\"Kico (Henrique Lobo Weissmann)\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@loboweissmann\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Kico (Henrique Lobo Weissmann)\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. tempo de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/devkico.itexto.com.br\/?p=224\",\"url\":\"https:\/\/devkico.itexto.com.br\/?p=224\",\"name\":\"O que \u00e9 Grails e como ele salva a plataforma JEE (al\u00e9m de lhe evitar o t\u00e9dio)? - \/dev\/Kico\",\"isPartOf\":{\"@id\":\"https:\/\/devkico.itexto.com.br\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/devkico.itexto.com.br\/?p=224#primaryimage\"},\"image\":{\"@id\":\"https:\/\/devkico.itexto.com.br\/?p=224#primaryimage\"},\"thumbnailUrl\":\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2010\/02\/grails_logo.png\",\"datePublished\":\"2008-12-30T01:01:36+00:00\",\"dateModified\":\"2010-09-13T02:23:11+00:00\",\"author\":{\"@id\":\"https:\/\/devkico.itexto.com.br\/#\/schema\/person\/502ab8892631bb005d6da2269fe5a3a7\"},\"breadcrumb\":{\"@id\":\"https:\/\/devkico.itexto.com.br\/?p=224#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/devkico.itexto.com.br\/?p=224\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/devkico.itexto.com.br\/?p=224#primaryimage\",\"url\":\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2010\/02\/grails_logo.png\",\"contentUrl\":\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2010\/02\/grails_logo.png\",\"width\":\"163\",\"height\":\"43\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/devkico.itexto.com.br\/?p=224#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/devkico.itexto.com.br\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"O que \u00e9 Grails e como ele salva a plataforma JEE (al\u00e9m de lhe evitar o t\u00e9dio)?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/devkico.itexto.com.br\/#website\",\"url\":\"https:\/\/devkico.itexto.com.br\/\",\"name\":\"\/dev\/Kico\",\"description\":\"Desenvolvendo software\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/devkico.itexto.com.br\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/devkico.itexto.com.br\/#\/schema\/person\/502ab8892631bb005d6da2269fe5a3a7\",\"name\":\"Kico (Henrique Lobo Weissmann)\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/devkico.itexto.com.br\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/dd6973d86a689bc63122b2e603f25be3?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/dd6973d86a689bc63122b2e603f25be3?s=96&d=mm&r=g\",\"caption\":\"Kico (Henrique Lobo Weissmann)\"},\"sameAs\":[\"https:\/\/x.com\/loboweissmann\"],\"url\":\"https:\/\/devkico.itexto.com.br\/?author=1\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"O que \u00e9 Grails e como ele salva a plataforma JEE (al\u00e9m de lhe evitar o t\u00e9dio)? - \/dev\/Kico","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/devkico.itexto.com.br\/?p=224","og_locale":"pt_BR","og_type":"article","og_title":"O que \u00e9 Grails e como ele salva a plataforma JEE (al\u00e9m de lhe evitar o t\u00e9dio)? - \/dev\/Kico","og_description":"Se voc\u00ea chegou a esta p\u00e1gina, \u00e9 sinal de que tem pelo menos uma no\u00e7\u00e3o b\u00e1sica do que venha a ser Grails:\u00a0 um framework\/plataforma utilizada na constru\u00e7\u00e3o de aplica\u00e7\u00f5es web. Por\u00e9m, para desenvolvedores Java j\u00e1 acostumados com os frameworks atuais, como Struts, JSF, Facelets e outros, trata-se de algo mais do que mais um framework [&hellip;]","og_url":"https:\/\/devkico.itexto.com.br\/?p=224","og_site_name":"\/dev\/Kico","article_published_time":"2008-12-30T01:01:36+00:00","article_modified_time":"2010-09-13T02:23:11+00:00","og_image":[{"url":"http:\/\/www.itexto.net\/devkico\/wp-content\/uploads\/2010\/02\/grails_logo.png"}],"author":"Kico (Henrique Lobo Weissmann)","twitter_card":"summary_large_image","twitter_creator":"@loboweissmann","twitter_misc":{"Escrito por":"Kico (Henrique Lobo Weissmann)","Est. tempo de leitura":"8 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/devkico.itexto.com.br\/?p=224","url":"https:\/\/devkico.itexto.com.br\/?p=224","name":"O que \u00e9 Grails e como ele salva a plataforma JEE (al\u00e9m de lhe evitar o t\u00e9dio)? - \/dev\/Kico","isPartOf":{"@id":"https:\/\/devkico.itexto.com.br\/#website"},"primaryImageOfPage":{"@id":"https:\/\/devkico.itexto.com.br\/?p=224#primaryimage"},"image":{"@id":"https:\/\/devkico.itexto.com.br\/?p=224#primaryimage"},"thumbnailUrl":"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2010\/02\/grails_logo.png","datePublished":"2008-12-30T01:01:36+00:00","dateModified":"2010-09-13T02:23:11+00:00","author":{"@id":"https:\/\/devkico.itexto.com.br\/#\/schema\/person\/502ab8892631bb005d6da2269fe5a3a7"},"breadcrumb":{"@id":"https:\/\/devkico.itexto.com.br\/?p=224#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/devkico.itexto.com.br\/?p=224"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/devkico.itexto.com.br\/?p=224#primaryimage","url":"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2010\/02\/grails_logo.png","contentUrl":"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2010\/02\/grails_logo.png","width":"163","height":"43"},{"@type":"BreadcrumbList","@id":"https:\/\/devkico.itexto.com.br\/?p=224#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/devkico.itexto.com.br\/"},{"@type":"ListItem","position":2,"name":"O que \u00e9 Grails e como ele salva a plataforma JEE (al\u00e9m de lhe evitar o t\u00e9dio)?"}]},{"@type":"WebSite","@id":"https:\/\/devkico.itexto.com.br\/#website","url":"https:\/\/devkico.itexto.com.br\/","name":"\/dev\/Kico","description":"Desenvolvendo software","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/devkico.itexto.com.br\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"pt-BR"},{"@type":"Person","@id":"https:\/\/devkico.itexto.com.br\/#\/schema\/person\/502ab8892631bb005d6da2269fe5a3a7","name":"Kico (Henrique Lobo Weissmann)","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/devkico.itexto.com.br\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/dd6973d86a689bc63122b2e603f25be3?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/dd6973d86a689bc63122b2e603f25be3?s=96&d=mm&r=g","caption":"Kico (Henrique Lobo Weissmann)"},"sameAs":["https:\/\/x.com\/loboweissmann"],"url":"https:\/\/devkico.itexto.com.br\/?author=1"}]}},"jetpack_featured_media_url":"","jetpack-related-posts":[],"jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=\/wp\/v2\/posts\/224"}],"collection":[{"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=224"}],"version-history":[{"count":4,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=\/wp\/v2\/posts\/224\/revisions"}],"predecessor-version":[{"id":304,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=\/wp\/v2\/posts\/224\/revisions\/304"}],"wp:attachment":[{"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=224"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=224"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=224"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}