{"id":336,"date":"2009-03-22T21:10:33","date_gmt":"2009-03-23T00:10:33","guid":{"rendered":"https:\/\/devkico.itexto.com.br\/?p=336"},"modified":"2009-03-22T21:10:33","modified_gmt":"2009-03-23T00:10:33","slug":"por-que-grails-e-importante-para-os-desenvolvedores-java","status":"publish","type":"post","link":"https:\/\/devkico.itexto.com.br\/?p=336","title":{"rendered":"Por que Grails \u00e9 importante para os desenvolvedores Java?"},"content":{"rendered":"<p><a href=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2009\/03\/grails_grails_logo.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft size-full wp-image-337\" style=\"margin: 20px;\" title=\"grails_grails_logo\" src=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2009\/03\/grails_grails_logo.jpg\" alt=\"\" width=\"280\" height=\"84\" \/><\/a>Por que se importar com Grails? Esta \u00e9 uma pergunta\u00a0 justa se formos levar em considera\u00e7\u00e3o a quantidade de frameworks com os quais desenvolvedores Java est\u00e3o acostumados a trabalhar. Por tr\u00e1s desta pergunta na realidade h\u00e1 outra disfar\u00e7ada: &#8220;Grails realmente tr\u00e1s algo de novo ou \u00e9 s\u00f3 mais um framework?&#8221;.<\/p>\n<p>Sou completamente a favor da diversidade, no entanto, se formos observar o hist\u00f3rico das ferramentas com as quais o desenvolvedor Java est\u00e1 acostumado, vemos que o \u00fanico framework que realmente revolucionou as coisas foi o Struts. N\u00e3o por ser a melhor coisa do mundo (nunca foi), mas pelo puro fato de ter sido o primeiro. Nese sentido, pode-se dizer que o desenvolvimento web na plataforma Java \u00e9 antes e depois do Struts.<\/p>\n<p>Ap\u00f3s o Struts, o que se viu foi uma prolifera\u00e7\u00e3o incr\u00edvel (e saud\u00e1vel) de frameworks, todos prometendo &#8220;<em>revolucionar o desenvolvimento de aplica\u00e7\u00f5es web aumentando a produtividade dos desenvolvedores<\/em>&#8220;. De certo modo, muitos conseguiram (e MUITOS outros n\u00e3o), mas no final das contas, sempre ficava a impress\u00e3o de que n\u00e3o traziam nada de realmente novo (com raras excess\u00f5es, como o VRaptor, Tapestry, JSF e outros).<\/p>\n<p>Sendo assim, a pergunta que fica \u00e9: <strong>seria Grails apenas mais um para a <a href=\"http:\/\/java-source.net\/open-source\/web-frameworks\" target=\"_blank\">lista<\/a>?<\/strong> E a resposta \u00e9: n\u00e3o. Isto porque Grails n\u00e3o tr\u00e1s consigo novas tecnologias (na realidade, \u00e9 tudo baseado em tecnologias que j\u00e1 existiam), mas sim um <strong>novo modo de se trabalhar<\/strong>.<\/p>\n<p><a href=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2009\/03\/ruby_on_rails_logo.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-full wp-image-338\" title=\"ruby_on_rails_logo\" src=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2009\/03\/ruby_on_rails_logo.jpg\" alt=\"\" width=\"137\" height=\"164\" srcset=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2009\/03\/ruby_on_rails_logo.jpg 316w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2009\/03\/ruby_on_rails_logo-252x300.jpg 252w\" sizes=\"(max-width: 137px) 100vw, 137px\" \/><\/a><\/p>\n<p>O modo de trabalhar no qual Ruby on Rails (RoR) \u00e9 um dos pioneiros. S\u00f3 para lembrar, o nome original do Grails era <strong>Groovy on Rails<\/strong>. Quando RoR apareceu, foi como um tapa na cara do desenvolvedor Java, pois do dia para a noite, aquele modo de trabalho com o qual est\u00e1vamos acostumados a trabalhar de repente se mostrou incr\u00edvelmente improdutivo.<\/p>\n<p>Do dia para a noite, ficaram n\u00edtidos alguns problemas que enfrent\u00e1vamos diariamente e para os quais simplesmente torciamos o nariz:<\/p>\n<h2><strong>Dificuldade em integrar componentes<\/strong><\/h2>\n<p><a href=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2009\/03\/jars.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft size-full wp-image-339\" title=\"jars\" src=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2009\/03\/jars.jpg\" alt=\"\" width=\"158\" height=\"162\" \/><\/a>Quem trabalha com Java sabe: temos ferramentas maravilhosas, como por exemplo Spring, Hibernate, Log4J, JUnit e muitas outras que realmente ampliam muito a nossa produtividade. Fazem maravilhas por n\u00f3s, mas\u00a0 quando precisamos integr\u00e1-los, boa parte desta produtividade \u00e9 simplesmente perdida.<\/p>\n<p>O Spring nos ajudou a resolver estes problemas, mas no entanto ainda n\u00e3o era suficiente. A quantidade de arquivos jar com os quais precis\u00e1vamos lidar \u00e9 um problema. Quem nunca passou por problemas deste tipo que atire a primeira pedra.<\/p>\n<h2><strong>Arquivos de configura\u00e7\u00e3o<\/strong><\/h2>\n<p><a href=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2009\/03\/bureaucracy.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-medium wp-image-340\" title=\"bureaucracy\" src=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2009\/03\/bureaucracy-300x237.jpg\" alt=\"\" width=\"300\" height=\"237\" srcset=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2009\/03\/bureaucracy-300x237.jpg 300w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2009\/03\/bureaucracy.jpg 550w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>Ao criarmos nossas aplica\u00e7\u00f5es, ficava n\u00edtido que boa parte do tempo era gasta trabalhando com arquivos de configura\u00e7\u00e3o. Configura\u00e7\u00e3o do servidor, das a\u00e7\u00f5es, dos managed beans, das tag libraries, dos componentes JSF, etc.<\/p>\n<p>E todos escritos em XML, cuja sintaxe, apesar de bacana, \u00e9 bem distante da qual os programadores est\u00e3o acostumados. Tudo bem: h\u00e1 assistentes para estas tarefas, por\u00e9m o confronto com os malditos \u00e9 inevit\u00e1vel.<\/p>\n<h2><strong>Repeti\u00e7\u00e3o, repeti\u00e7\u00e3o, repeti\u00e7\u00e3o, repeti\u00e7\u00e3o<\/strong><\/h2>\n<p>Quando se est\u00e1 trabalhando com uma aplica\u00e7\u00e3o simples, que seja basicamente apenas CRUD, pode-se ver n\u00edtidamente o qu\u00e3o repetitivo o trabalho se torna. Voc\u00ea precisa de uma p\u00e1gina para consultar registros no banco de dados, outra para criar novos registros, outra para editar estes registros e mais uma para visualizar os detalhes do mesmo. Resumindo: s\u00e3o basicamente 4 p\u00e1ginas por entidade. Logo, se sua aplica\u00e7\u00e3o possui N entidades, o n\u00famero de p\u00e1ginas a serem geradas \u00e9 no m\u00ednimo 4*N.<\/p>\n<p>E sabe o que \u00e9 mais engra\u00e7ado? Em sua maior parte, as p\u00e1ginas s\u00e3o basicamente as mesmas. S\u00f3 variam os campos. N\u00e3o seria \u00f3timo se estas j\u00e1 fossem geradas para voc\u00ea?<\/p>\n<h2><strong>Ambiente de desenvolvimento complicado de ser configurado<br \/>\n<\/strong><\/h2>\n<p>Este \u00e9 um problema comum: chega um novo desenvolvedor na sua equipe e \u00e9 necess\u00e1rio que voc\u00ea crie ou configure seu ambiente de desenvolvimento. H\u00e1 duas alternativas aqui: voc\u00ea j\u00e1 tem algo pr\u00e9-configurado (s\u00f3 copia para a m\u00e1quina cliente e pronto) ou tem de trabalhar do zero. No segundo caso, ser\u00e1 preciso instalar IDE, bibliotecas, JDK, etc. E pior ainda: ainda precisa preparar o ambiente de desenvolvimento para que trabalhe direito com o seu framework (o que nos leva a primeira dificuldade). Tudo bem que voc\u00ea pode simplesmente instalar uma IDE como Netbeans ou Eclipse e te\u00f3ricamente tudo j\u00e1 viria pr\u00e9 configurado. No entanto, as coisas n\u00e3o s\u00e3o t\u00e3o lindas assim.<\/p>\n<p>Ao se iniciar um novo projeto, \u00e9 incr\u00edvel quanto tempo se perde s\u00f3 para montar o ambiente&#8230;<\/p>\n<h2>O modo Ruby on Rails (e Grails) de se trabalhar<\/h2>\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\" title=\"bruce_on_rails\" src=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2009\/03\/bruce_on_rails.jpg\" alt=\"\" width=\"411\" height=\"304\" 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: 411px) 100vw, 411px\" \/><\/a><\/p>\n<p>\u00c9 importante mencionar que Ruby on Rails n\u00e3o \u00e9 a solu\u00e7\u00e3o para todos os seus problemas (assim como Grails), por\u00e9m os princ\u00edpios b\u00e1sicos por tr\u00e1s do seu funcionamento apontam diretamente para os problemas que mencionei acima:<\/p>\n<p><strong>DRY: Don&#8217;t Repeat Yourself<\/strong><\/p>\n<p>A pergunta que se coloca aqui \u00e9: se h\u00e1 tarefas repetitivas no processo de desenvolvimento, por que n\u00e3o deixar que o framework tome conta destas tarefas para voc\u00ea? Assim voc\u00ea se preocupa apenas com o que importa: <strong>o neg\u00f3cio a ser modelado<\/strong>.<\/p>\n<p>No Ruby on Rails vimos ressurgir algo que at\u00e9 ent\u00e3o haviamos simplesmente ignorado: o scaffolding. O framework gera autom\u00e1ticamente para o desenvolvedor arquivos pr\u00e9 prontos para as principais tarefas repetitivas, como por exemplo p\u00e1ginas de CRUD (inclus\u00e3o, edi\u00e7\u00e3o, listagem e visualiza\u00e7\u00e3o de detalhes) e controladores. O programador s\u00f3 precisa customizar estas p\u00e1ginas e pronto. E se quiser algo a mais, basta escrev\u00ea-las por si pr\u00f3prios!<\/p>\n<p>(aonde voc\u00ea viu anteriormente o scaffolding? Nos bancos de dados pessoais como Access (maldito!), Paradox, FIleMaker e outros!)<\/p>\n<p><strong>Conven\u00e7\u00f5es sobre configura\u00e7\u00f5es (zero configuration)<br \/>\n<\/strong><\/p>\n<p>E aqui \u00e9 que a produtividade REALMENTE se faz n\u00edtida. Voc\u00ea n\u00e3o precisa de arquivos de configura\u00e7\u00e3o se tudo encontra-se em seu devido lugar. No caso do Grails e RoR, a partir de algumas conven\u00e7\u00f5es estipuladas pelo framework, o programador n\u00e3o precisa se preocupar com arquivos de configura\u00e7\u00e3o.<\/p>\n<p>Por exemplo: em Grails, todos os controladores se encontram dentro de um diret\u00f3rio espec\u00edfico. Sendo assim, n\u00e3o \u00e9 necess\u00e1rio criar um arquivo de configura\u00e7\u00e3o que os identifique. Ao ser iniciada, a pr\u00f3pria aplica\u00e7\u00e3o j\u00e1 ir\u00e1 descobrir quais s\u00e3o os seus controladores.<\/p>\n<p>O grande lance \u00e9: <strong>os arquivos de configura\u00e7\u00e3o s\u00e3o desnecess\u00e1rios porque a pr\u00f3pria aplica\u00e7\u00e3o j\u00e1 \u00e9 a sua configura\u00e7\u00e3o<\/strong>.<\/p>\n<p>Por\u00e9m, mais do que isto, deve-se pensar em conven\u00e7\u00f5es <strong>sobre<\/strong> configura\u00e7\u00f5es, e n\u00e3o <strong>ao inv\u00e9s de<\/strong>. Por que? Simples: porque aplica\u00e7\u00f5es feitas em sua maior parte para serem usadas no ambiente corporativo, sendo assim, precisam ser f\u00e1cilmente integradas aos componentes pr\u00e9-existentes. Nestes casos, o programador voltar\u00e1 a alterar arquivos de configura\u00e7\u00e3o, por\u00e9m com uma intensidade bem menor do que a qual j\u00e1 se encontra acostumado.<\/p>\n<p>(por\u00e9m, na esmagadora maioria das vezes, o \u00fanico arquivo de configura\u00e7\u00e3o com o qual voc\u00ea ter\u00e1 de enfrentar consiste no que configura o acesso a suas bases de dados (e n\u00e3o \u00e9 um arquivo XML))<\/p>\n<p><strong>Stack completo<br \/>\n<\/strong><\/p>\n<p>Assim como RoR, Grails j\u00e1 vem com o seu ambiente de desenvolvimento completo e padronizado. Voc\u00ea n\u00e3o precisa de uma IDE para come\u00e7ar a trabalhar com Grails. Basta o JDK e a instala\u00e7\u00e3o do Grails e pronto. Tudo j\u00e1 est\u00e1 dispon\u00edvel para voc\u00ea. N\u00e3o \u00e9 necess\u00e1rio se preocupar com a instala\u00e7\u00e3o do Spring, Hibernate, JUnit, Log4J, Commons, etc. A instala\u00e7\u00e3o do framework j\u00e1 vem com todos os componentes pr\u00e9-configurados e prontos para uso.<\/p>\n<p>Isto porque Grails \u00e9 baseado em componentes com os quais j\u00e1 estamos acostumados e cuja efic\u00e1cia \u00e9 comprovada. No final das contas, Grails acaba sendo simplesmente uma fina camada que integra todos estes componentes para o desenvolvedor usando Groovy. \u00c9 realmente fant\u00e1stico.<\/p>\n<p>Como resultado, voc\u00ea n\u00e3o precisa se preocupar com arquivos jar, configura\u00e7\u00f5es, etc. J\u00e1 inicia o seu desenvolvimento pensando direto no que realmente interessa: o neg\u00f3cio a ser modelado. Resultado: <span style=\"color: #ff0000;\"><strong>produtividade instant\u00e2nea<\/strong><\/span>.<\/p>\n<p>E ap\u00f3s esta explica\u00e7\u00e3o, e sabendo-se que existe o JRuby, a pergunta que fica \u00e9:<\/p>\n<h2>Por que Grails e n\u00e3o Ruby on Rails?<\/h2>\n<p>Na realidade, em ambos os casos o ganho do desenvolvedor ser\u00e1 exatamente o mesmo. No entanto, para o programador Java, que j\u00e1 est\u00e1 acostumado com a sua sintaxe, Grails se mostra mais familiar, pois \u00e9 baseado em <a href=\"https:\/\/devkico.itexto.com.br\/?p=62\" target=\"_blank\">Groovy<\/a>, que no final das contas, possui quase a mesma sintaxe, diminuindo significativamente a curva de aprendizado.<\/p>\n<p>At\u00e9 o surgimento do JRuby, outro ponto importante em favor ao Grails consistia no fato de ser poss\u00edvel <a href=\"https:\/\/devkico.itexto.com.br\/?p=330\" target=\"_blank\">reaproveitar todo o seu c\u00f3digo legado em uma aplica\u00e7\u00e3o Grails<\/a>, por\u00e9m este ponto ainda se mant\u00e9m para ambos os casos.<\/p>\n<p>Mas no final das contas, a escolha entre Grails ou Ruby on Rails pode ser resolvida com a seguinte pergunta: com qual linguagem voc\u00ea se sente mais \u00e0 vontade? Groovy (Java) ou Ruby? Mais Java e Groovy? Grails \u00e9 para voc\u00ea. Curte Ruby? V\u00e1 para o RoR!<\/p>\n<h2>Finalmente, respondendo \u00e0 pergunta: por que se importar com Grails?<\/h2>\n<p>Ap\u00f3s o lan\u00e7amento do RoR,\u00a0 os problemas da plataforma JEE se tornaram n\u00edtidos. Mesmo que Grails n\u00e3o venha a ter futuro (pouqu\u00edssimo prov\u00e1vel) e que RoR desapare\u00e7a (mais improv\u00e1vel ainda), os frameworks que surgir\u00e3o daqui para frente com certeza ser\u00e3o baseados neste &#8220;novo&#8221; modo de se trabalhar. E levando-se em considera\u00e7\u00e3o que Grails desde o in\u00edcio \u00e9 feito pensando no desenvolvedor Java, \u00e9 ineg\u00e1vel que exercer\u00e1 (e j\u00e1 exerce) uma influ\u00eancia significativa em tudo o que virmos surgir daqui pra frente.<\/p>\n<p>Ou, resumindo: <span style=\"color: #ff0000;\"><strong>porque RoR e Grails de repente nos mostraram que nosso trabalho na plataforma JEE era incr\u00edvelmente chato<\/strong><\/span>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Por que se importar com Grails? Esta \u00e9 uma pergunta\u00a0 justa se formos levar em considera\u00e7\u00e3o a quantidade de frameworks com os quais desenvolvedores Java est\u00e3o acostumados a trabalhar. Por tr\u00e1s desta pergunta na realidade h\u00e1 outra disfar\u00e7ada: &#8220;Grails realmente tr\u00e1s algo de novo ou \u00e9 s\u00f3 mais um framework?&#8221;. Sou completamente a favor da [&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":[1],"tags":[],"class_list":["post-336","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v22.8 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Por que Grails \u00e9 importante para os desenvolvedores Java? - \/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=336\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Por que Grails \u00e9 importante para os desenvolvedores Java? - \/dev\/Kico\" \/>\n<meta property=\"og:description\" content=\"Por que se importar com Grails? Esta \u00e9 uma pergunta\u00a0 justa se formos levar em considera\u00e7\u00e3o a quantidade de frameworks com os quais desenvolvedores Java est\u00e3o acostumados a trabalhar. Por tr\u00e1s desta pergunta na realidade h\u00e1 outra disfar\u00e7ada: &#8220;Grails realmente tr\u00e1s algo de novo ou \u00e9 s\u00f3 mais um framework?&#8221;. Sou completamente a favor da [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/devkico.itexto.com.br\/?p=336\" \/>\n<meta property=\"og:site_name\" content=\"\/dev\/Kico\" \/>\n<meta property=\"article:published_time\" content=\"2009-03-23T00:10:33+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/www.itexto.net\/devkico\/wp-content\/uploads\/2009\/03\/grails_grails_logo.jpg\" \/>\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=336\",\"url\":\"https:\/\/devkico.itexto.com.br\/?p=336\",\"name\":\"Por que Grails \u00e9 importante para os desenvolvedores Java? - \/dev\/Kico\",\"isPartOf\":{\"@id\":\"https:\/\/devkico.itexto.com.br\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/devkico.itexto.com.br\/?p=336#primaryimage\"},\"image\":{\"@id\":\"https:\/\/devkico.itexto.com.br\/?p=336#primaryimage\"},\"thumbnailUrl\":\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2009\/03\/grails_grails_logo.jpg\",\"datePublished\":\"2009-03-23T00:10:33+00:00\",\"dateModified\":\"2009-03-23T00:10:33+00:00\",\"author\":{\"@id\":\"https:\/\/devkico.itexto.com.br\/#\/schema\/person\/502ab8892631bb005d6da2269fe5a3a7\"},\"breadcrumb\":{\"@id\":\"https:\/\/devkico.itexto.com.br\/?p=336#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/devkico.itexto.com.br\/?p=336\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/devkico.itexto.com.br\/?p=336#primaryimage\",\"url\":\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2009\/03\/grails_grails_logo.jpg\",\"contentUrl\":\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2009\/03\/grails_grails_logo.jpg\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/devkico.itexto.com.br\/?p=336#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/devkico.itexto.com.br\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Por que Grails \u00e9 importante para os desenvolvedores Java?\"}]},{\"@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":"Por que Grails \u00e9 importante para os desenvolvedores Java? - \/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=336","og_locale":"pt_BR","og_type":"article","og_title":"Por que Grails \u00e9 importante para os desenvolvedores Java? - \/dev\/Kico","og_description":"Por que se importar com Grails? Esta \u00e9 uma pergunta\u00a0 justa se formos levar em considera\u00e7\u00e3o a quantidade de frameworks com os quais desenvolvedores Java est\u00e3o acostumados a trabalhar. Por tr\u00e1s desta pergunta na realidade h\u00e1 outra disfar\u00e7ada: &#8220;Grails realmente tr\u00e1s algo de novo ou \u00e9 s\u00f3 mais um framework?&#8221;. Sou completamente a favor da [&hellip;]","og_url":"https:\/\/devkico.itexto.com.br\/?p=336","og_site_name":"\/dev\/Kico","article_published_time":"2009-03-23T00:10:33+00:00","og_image":[{"url":"http:\/\/www.itexto.net\/devkico\/wp-content\/uploads\/2009\/03\/grails_grails_logo.jpg"}],"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=336","url":"https:\/\/devkico.itexto.com.br\/?p=336","name":"Por que Grails \u00e9 importante para os desenvolvedores Java? - \/dev\/Kico","isPartOf":{"@id":"https:\/\/devkico.itexto.com.br\/#website"},"primaryImageOfPage":{"@id":"https:\/\/devkico.itexto.com.br\/?p=336#primaryimage"},"image":{"@id":"https:\/\/devkico.itexto.com.br\/?p=336#primaryimage"},"thumbnailUrl":"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2009\/03\/grails_grails_logo.jpg","datePublished":"2009-03-23T00:10:33+00:00","dateModified":"2009-03-23T00:10:33+00:00","author":{"@id":"https:\/\/devkico.itexto.com.br\/#\/schema\/person\/502ab8892631bb005d6da2269fe5a3a7"},"breadcrumb":{"@id":"https:\/\/devkico.itexto.com.br\/?p=336#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/devkico.itexto.com.br\/?p=336"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/devkico.itexto.com.br\/?p=336#primaryimage","url":"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2009\/03\/grails_grails_logo.jpg","contentUrl":"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2009\/03\/grails_grails_logo.jpg"},{"@type":"BreadcrumbList","@id":"https:\/\/devkico.itexto.com.br\/?p=336#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/devkico.itexto.com.br\/"},{"@type":"ListItem","position":2,"name":"Por que Grails \u00e9 importante para os desenvolvedores Java?"}]},{"@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\/336"}],"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=336"}],"version-history":[{"count":1,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=\/wp\/v2\/posts\/336\/revisions"}],"predecessor-version":[{"id":343,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=\/wp\/v2\/posts\/336\/revisions\/343"}],"wp:attachment":[{"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=336"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=336"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=336"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}