{"id":330,"date":"2009-03-18T19:24:47","date_gmt":"2009-03-18T22:24:47","guid":{"rendered":"https:\/\/devkico.itexto.com.br\/?p=330"},"modified":"2009-03-18T19:24:47","modified_gmt":"2009-03-18T22:24:47","slug":"grails-e-codigo-legado-rejuvenesca-seu-codigo-legado","status":"publish","type":"post","link":"https:\/\/devkico.itexto.com.br\/?p=330","title":{"rendered":"Grails e c\u00f3digo legado &#8211; rejuvenes\u00e7a seu c\u00f3digo legado!!!"},"content":{"rendered":"<p><a href=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2009\/03\/grails-logo.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft size-full wp-image-301\" style=\"margin: 10px;\" title=\"grails-logo\" src=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2009\/03\/grails-logo.png\" alt=\"\" width=\"285\" height=\"148\" \/><\/a>Um dos aspectos mais fenomenais do Grails consiste no reaproveitamento de c\u00f3digo legado. \u00c9 muito bacana ter todo o ganho de produtividade que o framework nos oferece, no entanto, este ganho s\u00f3 se torna REAL com reaproveitamento de c\u00f3digo. E \u00e9 neste ponto que Grails se torna REALMENTE interessante para o desenvolvedor que trabalha com Java.<\/p>\n<p>Nesta semana precisei criar uma nova aplica\u00e7\u00e3o web que, na realidade, n\u00e3o passava de uma interface para um sistema legado. O que eu tinha ent\u00e3o: todos os jars que compunham a aplica\u00e7\u00e3o e uma escolha a fazer: qual framework utilizar: JSF, Struts, apenas servlets (um momento de insanidade, concordo)?<\/p>\n<p>Iniciei com JSF. Criei a aplica\u00e7\u00e3o no Netbeans, inclui no projeto todos os arquivos jar que precisava (in\u00fameros: inclua ai todos os arquivos de depend\u00eancia do Spring + Hibernate e saber\u00e1 do que estou falando) e comecei o trabalho. Momentos depois, a aplica\u00e7\u00e3o come\u00e7ou a dar problemas: o Tomcat havia come\u00e7ado a &#8220;implicar&#8221; com meu arquivo de configura\u00e7\u00e3o do faces, o que me deu MUITA pregui\u00e7a. Foi quando algo me veio \u00e0 cabe\u00e7a: <span style=\"font-size: 2em; color: red;\"><strong>uma aplica\u00e7\u00e3o feita em Grails n\u00e3o precisa ter classes de dom\u00ednio!<\/strong><\/span><\/p>\n<p>Sendo assim, criei uma nova aplica\u00e7\u00e3o feita em Grails e, ao inv\u00e9s de utiliz\u00e1-lo como um stack completo, o que costuma ser feito na maior parte das vezes, optei por trabalhar apenas com os controladores. E n\u00e3o \u00e9 que deu certo?<\/p>\n<p>O procedimento que segui foi basicamente o seguinte:<\/p>\n<p><strong>1. Criar um novo projeto Grails e, em seguida, anular as configura\u00e7\u00f5es de acesso a base de dados. <\/strong><\/p>\n<p>Neste ponto: a \u00fanica a\u00e7\u00e3o necess\u00e1ria a fazer consiste em editar o seu arquivo DataSource.groovy para que fique exatamente como o descrito abaixo:<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\n\r\ndataSource {\r\n\r\n}\r\nhibernate {\r\n\r\n}\r\n\/\/ environment specific settings\r\nenvironments {\r\ndevelopment {\r\ndataSource {\r\n}\r\n}\r\ntest {\r\ndataSource {\r\n}\r\n}\r\nproduction {\r\ndataSource {\r\n}\r\n}\r\n}\r\n\r\n<\/pre>\n<p>Importante: a altera\u00e7\u00e3o deste arquivo de configura\u00e7\u00e3o \u00e9 opcional. No entanto, \u00e9 uma boa id\u00e9ia alter\u00e1-lo, pois voc\u00ea n\u00e3o ir\u00e1 precisar do HSQLDB rodando a toa por tr\u00e1s dos panos, n\u00e3o \u00e9 mesmo?<\/p>\n<p><strong>2. Copie todos os seus arquivos .jar que voc\u00ea necessite para dentro do diret\u00f3rio lib de sua aplica\u00e7\u00e3o<\/strong><\/p>\n<p>Neste caso, por arquivos .jar, deve ser entendido o seu c\u00f3digo legado e suas depend\u00eancias. E ai \u00e9 que a coisa fica interessante: como Grails j\u00e1 v\u00eam com o stack completo, voc\u00ea basicamente s\u00f3 precisar\u00e1 incluir neste diret\u00f3rio, al\u00e9m do seu c\u00f3digo legado, uma ou outra biblioteca que sua aplica\u00e7\u00e3o venha a utilizar.<\/p>\n<p>Caso sua aplica\u00e7\u00e3o utilize algum dos frameworks abaixo, voc\u00ea nem sequer precisar\u00e1 copiar os arquivos jar necess\u00e1rios para dentro do diret\u00f3rio lib. Na realidade, para evitar conflitos, \u00e9 ideal que voc\u00ea n\u00e3o os copie. Muito bem: vamos a lista dos frameworks:<\/p>\n<p>Sitemesh, Hibernate, Sprng, Log4J, JUnit, Ant, Commons (boa parte do Apache Commons j\u00e1 vem com o Grails), Xalan, Xerces, Hsqldb.<\/p>\n<p>Como pode ser visto, a quantidade de arquivos de depend\u00eancia com os quais voc\u00ea venha a se preocupar diminui bastante neste momento. No meu caso, s\u00f3 precisei copiar o driver JDBC para o MySQL e o jar do JExcel (al\u00e9m, \u00e9 claro, do meu c\u00f3digo legado).<\/p>\n<p>Dica: navegue pelo diret\u00f3rio lib da sua instala\u00e7\u00e3o do Grails. Voc\u00ea perceber\u00e1 que talvez eu n\u00e3o tenha mencionado todas as bibliotecas que o Grails utiliza!<\/p>\n<p><strong>3. N\u00e3o tem passo 3!!!<\/strong><\/p>\n<p>Finalizado este processo, tudo o que voc\u00ea precisa fazer daqui pra frente ir\u00e1 consistir em trabalhar apenas com os controladores de sua aplica\u00e7\u00e3o, que dever\u00e3o, por sua vez, acessar diretamente seu c\u00f3digo legado, e pronto: voc\u00ea ter\u00e1 reaproveitado 100% do seu c\u00f3digo e ainda ter\u00e1 tido no final das contas um ganho de produtividade gigantesco usando apenas a parte dos controladores do Grails!<\/p>\n<p>A grande dica para a finaliza\u00e7\u00e3o de sua aplica\u00e7\u00e3o \u00e9 a seguinte: <strong>esque\u00e7a o GORM!<\/strong><\/p>\n<h2>Vantagens com rela\u00e7\u00e3o aos demais frameworks<\/h2>\n<p><a href=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2009\/03\/jsf.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft size-full wp-image-331\" title=\"jsf\" src=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2009\/03\/jsf.jpg\" alt=\"\" width=\"180\" height=\"180\" srcset=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2009\/03\/jsf.jpg 180w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2009\/03\/jsf-150x150.jpg 150w\" sizes=\"(max-width: 180px) 100vw, 180px\" \/><\/a>Nesta experi\u00eancia, ficaram n\u00edtidas para mim algumas vantagens desta abordagem com rela\u00e7\u00e3o ao procedimento tomado at\u00e9 ent\u00e3o, que consistia em utilizar um framework mais tradicional como JSF ou Struts. Seguem as vantagens que observei:<\/p>\n<ul>\n<li><strong>Reaproveitamento total de c\u00f3digo legado:<\/strong> reparem que em momento algum precisei recompilar coisa alguma. Lidei aqui apenas com as camadas de visualiza\u00e7\u00e3o e controle.<\/li>\n<li><strong>Sem arquivos de configura\u00e7\u00e3o.<\/strong> J\u00e1 sofreu com o maldito arquivo de configura\u00e7\u00e3o do JSF ou Struts? J\u00e1 penou com o web.xml? No caso do Grails, eu nem sequer me lembro de configurar qualquer coisa que n\u00e3o seja o acesso a dados!<\/li>\n<li><strong>Rejuvenescimento do c\u00f3digo legado:<\/strong> h\u00e1 momentos nos quais olho para o meu c\u00f3digo Java e, em seguida, ao olhar para o meu c\u00f3digo Groovy, tenho a impress\u00e3o de que o mesmo encontra-se velho.<br \/>\nAo trabalhar com Grails, estou utilizando c\u00f3digo Groovy para acessar meu c\u00f3digo Java.<br \/>\nSe assim como eu voc\u00ea tamb\u00e9m j\u00e1 est\u00e1 um pouco entediado em codificar na lingua m\u00e3e, Grails cai como uma luva.<\/li>\n<li><strong>Facilidade de deploy:<\/strong> como n\u00e3o preciso me preocupar com tantos arquivos .jar, os meus problemas de deploy pr\u00e1ticamente acabaram. Basta executar grails war e pronto. L\u00e1 est\u00e1 o war que precisava!<\/li>\n<li><strong>Controladores realmente simples.<\/strong> Basta se lembrar do c\u00f3digo que voc\u00ea escreve usando JSF ou Struts pra ver a diferen\u00e7a. No caso do Grails, \u00e9 realmente simples: sem mapeamentos, sem regras: apenas closures simples relacionadas a arquivos de visualiza\u00e7\u00e3o igualmente simples.<\/li>\n<li><strong>Filtros simples!<\/strong> Nada de implementar ou extender classes ou alterar arquivos de configura\u00e7\u00e3o!<\/li>\n<li><strong>\u00c9 Grails!<\/strong> Este para mim \u00e9 o ponto mais importante: eu tenho todo o ganho de produtividade do Grails com meu c\u00f3digo legado!<\/li>\n<\/ul>\n<p>E aqui entra uma conclus\u00e3o paradoxal: Grails sem o GORM acessando seu c\u00f3digo fonte legado \u00e9 ainda mais poderoso do que com o GORM. Por que isto? Simples: porque o reaproveitamento de c\u00f3digo Grails n\u00e3o \u00e9 a coisa mais simples do mundo. Se voc\u00ea cria por exemplo uma aplica\u00e7\u00e3o A em Grails, e em seguida quer reaproveitar parte do seu c\u00f3digo em um projeto B, as coisas j\u00e1 se complicam. No entanto, se voc\u00ea tem sua camada de neg\u00f3cio bem organizada, reaproveit\u00e1-la no Grails \u00e9 simples!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Um dos aspectos mais fenomenais do Grails consiste no reaproveitamento de c\u00f3digo legado. \u00c9 muito bacana ter todo o ganho de produtividade que o framework nos oferece, no entanto, este ganho s\u00f3 se torna REAL com reaproveitamento de c\u00f3digo. E \u00e9 neste ponto que Grails se torna REALMENTE interessante para o desenvolvedor que trabalha com [&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,7,6,24],"tags":[],"class_list":["post-330","post","type-post","status-publish","format-standard","hentry","category-grails","category-hibernate","category-java","category-jdbc"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v22.8 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Grails e c\u00f3digo legado - rejuvenes\u00e7a seu c\u00f3digo legado!!! - \/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=330\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Grails e c\u00f3digo legado - rejuvenes\u00e7a seu c\u00f3digo legado!!! - \/dev\/Kico\" \/>\n<meta property=\"og:description\" content=\"Um dos aspectos mais fenomenais do Grails consiste no reaproveitamento de c\u00f3digo legado. \u00c9 muito bacana ter todo o ganho de produtividade que o framework nos oferece, no entanto, este ganho s\u00f3 se torna REAL com reaproveitamento de c\u00f3digo. E \u00e9 neste ponto que Grails se torna REALMENTE interessante para o desenvolvedor que trabalha com [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/devkico.itexto.com.br\/?p=330\" \/>\n<meta property=\"og:site_name\" content=\"\/dev\/Kico\" \/>\n<meta property=\"article:published_time\" content=\"2009-03-18T22:24:47+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/www.itexto.net\/devkico\/wp-content\/uploads\/2009\/03\/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=\"5 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=330\",\"url\":\"https:\/\/devkico.itexto.com.br\/?p=330\",\"name\":\"Grails e c\u00f3digo legado - rejuvenes\u00e7a seu c\u00f3digo legado!!! - \/dev\/Kico\",\"isPartOf\":{\"@id\":\"https:\/\/devkico.itexto.com.br\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/devkico.itexto.com.br\/?p=330#primaryimage\"},\"image\":{\"@id\":\"https:\/\/devkico.itexto.com.br\/?p=330#primaryimage\"},\"thumbnailUrl\":\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2009\/03\/grails-logo.png\",\"datePublished\":\"2009-03-18T22:24:47+00:00\",\"dateModified\":\"2009-03-18T22:24:47+00:00\",\"author\":{\"@id\":\"https:\/\/devkico.itexto.com.br\/#\/schema\/person\/502ab8892631bb005d6da2269fe5a3a7\"},\"breadcrumb\":{\"@id\":\"https:\/\/devkico.itexto.com.br\/?p=330#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/devkico.itexto.com.br\/?p=330\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/devkico.itexto.com.br\/?p=330#primaryimage\",\"url\":\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2009\/03\/grails-logo.png\",\"contentUrl\":\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2009\/03\/grails-logo.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/devkico.itexto.com.br\/?p=330#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/devkico.itexto.com.br\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Grails e c\u00f3digo legado &#8211; rejuvenes\u00e7a seu c\u00f3digo legado!!!\"}]},{\"@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":"Grails e c\u00f3digo legado - rejuvenes\u00e7a seu c\u00f3digo legado!!! - \/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=330","og_locale":"pt_BR","og_type":"article","og_title":"Grails e c\u00f3digo legado - rejuvenes\u00e7a seu c\u00f3digo legado!!! - \/dev\/Kico","og_description":"Um dos aspectos mais fenomenais do Grails consiste no reaproveitamento de c\u00f3digo legado. \u00c9 muito bacana ter todo o ganho de produtividade que o framework nos oferece, no entanto, este ganho s\u00f3 se torna REAL com reaproveitamento de c\u00f3digo. E \u00e9 neste ponto que Grails se torna REALMENTE interessante para o desenvolvedor que trabalha com [&hellip;]","og_url":"https:\/\/devkico.itexto.com.br\/?p=330","og_site_name":"\/dev\/Kico","article_published_time":"2009-03-18T22:24:47+00:00","og_image":[{"url":"http:\/\/www.itexto.net\/devkico\/wp-content\/uploads\/2009\/03\/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":"5 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/devkico.itexto.com.br\/?p=330","url":"https:\/\/devkico.itexto.com.br\/?p=330","name":"Grails e c\u00f3digo legado - rejuvenes\u00e7a seu c\u00f3digo legado!!! - \/dev\/Kico","isPartOf":{"@id":"https:\/\/devkico.itexto.com.br\/#website"},"primaryImageOfPage":{"@id":"https:\/\/devkico.itexto.com.br\/?p=330#primaryimage"},"image":{"@id":"https:\/\/devkico.itexto.com.br\/?p=330#primaryimage"},"thumbnailUrl":"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2009\/03\/grails-logo.png","datePublished":"2009-03-18T22:24:47+00:00","dateModified":"2009-03-18T22:24:47+00:00","author":{"@id":"https:\/\/devkico.itexto.com.br\/#\/schema\/person\/502ab8892631bb005d6da2269fe5a3a7"},"breadcrumb":{"@id":"https:\/\/devkico.itexto.com.br\/?p=330#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/devkico.itexto.com.br\/?p=330"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/devkico.itexto.com.br\/?p=330#primaryimage","url":"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2009\/03\/grails-logo.png","contentUrl":"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2009\/03\/grails-logo.png"},{"@type":"BreadcrumbList","@id":"https:\/\/devkico.itexto.com.br\/?p=330#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/devkico.itexto.com.br\/"},{"@type":"ListItem","position":2,"name":"Grails e c\u00f3digo legado &#8211; rejuvenes\u00e7a seu c\u00f3digo legado!!!"}]},{"@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\/330"}],"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=330"}],"version-history":[{"count":1,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=\/wp\/v2\/posts\/330\/revisions"}],"predecessor-version":[{"id":332,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=\/wp\/v2\/posts\/330\/revisions\/332"}],"wp:attachment":[{"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=330"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=330"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=330"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}