{"id":344,"date":"2009-03-22T22:14:38","date_gmt":"2009-03-23T01:14:38","guid":{"rendered":"https:\/\/devkico.itexto.com.br\/?p=344"},"modified":"2009-03-29T11:57:14","modified_gmt":"2009-03-29T14:57:14","slug":"why-grails-really-matters-for-a-java-developer-and-actually-rescues-jee-from-boredom","status":"publish","type":"post","link":"https:\/\/devkico.itexto.com.br\/?p=344","title":{"rendered":"Why Grails really matters for a Java developer (and actually rescues JEE from boredom)"},"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> Why Grails matters? That&#8217;s a fair question if we take a look at the huge amount of web frameworks <span class=\"__mozilla-findbar-search\" style=\"padding: 0pt; background-color: yellow; color: black; display: inline; font-size: inherit;\">which<\/span> an average Java developer is used to. Behind this question actually there&#8217;s another one hidden: &#8220;Does Grails really brings something new or is it just another web framework?&#8221;.<\/p>\n<p>Historically speakng, we can see that the only really revolutionary web framework on the Java platform is Struts. Not because is the best, but only because it was the first (at least that I know). After Struts we can see\u00a0 the amazing proliferation of zillions of web frameworks, all promising the same thing: <em>&#8220;revolutionize web development through huge gains in developer productivity&#8221;<\/em>. Some really did it (but MANY more didn&#8217;t), and at the end of the day, there was this feeling that they actually didn&#8217;t bring anything new (with some exceptions, like VRaptor, Tapestry, JSF and some others).<\/p>\n<p>So the question is: <strong>will Grails be only one more in the <a href=\"http:\/\/java-source.net\/open-source\/web-frameworks\" target=\"_blank\">list<\/a>?<\/strong> And my answer is: no! That&#8217;s because Grails brings some new technology, but more than that, Grails bring us a &#8220;new&#8221; work philosophy.<\/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>This &#8220;new&#8221; work philosophy is actually inspired on Ruby on Rails (RoR). Just to remember, Grails is not the original name of this framework: <strong>Groovy on Rails<\/strong> was. When RoR started to became popular, it was like a slap on the face of MANY Java developers. Suddenly, our methodology and tools became amazingly lame (maybe &#8220;bored&#8221; should be the word). And in that same moment, some JEE problems became crystal clear to everyone.<\/p>\n<h2><strong>Hard component integration<\/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> If you&#8217;re a Java developer you know that we have at our disposal some tools like Hibernate, Spring, Log4j and many others that are simply marvelous. They really improve our productivity, but when we have to integrate them, it&#8217;s usual to see all this gain fading in front of us.<\/p>\n<p>There are actually too many jar files to manage. It&#8217;s really common to face problems like incompatibilities, version problems and so on. Really a pain in the ass <strong>many times<\/strong>.<\/p>\n<h2><strong>Configuration files<\/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>It&#8217;s amazing the amount of time spent on these beasts. We have to configure our servers, the application context, framework behavior, managed beans, tag libraries and so on. And all these things are made using XML files, <span class=\"__mozilla-findbar-search\" style=\"padding: 0pt; background-color: yellow; color: black; display: inline; font-size: inherit;\">which<\/span> is a great format, but whose syntax is basically the opposite of the one we are used too, <span class=\"__mozilla-findbar-search\" style=\"padding: 0pt; background-color: yellow; color: black; display: inline; font-size: inherit;\">which<\/span> is the Java&#8217;s syntax.<\/p>\n<p>It&#8217;s true that we can avoid these files if we are using a great IDE, but this is only a silly illusion. You know that some day you&#8217;ll have to face these bastards.<\/p>\n<h2><strong>Repetition, repetition, repetition and more repetition<\/strong><\/h2>\n<p>If you&#8217;re working on a simple CRUD application, the repetitiveness becames clear. Usually you have to create basically four pages for each entity: one for editing, another one for creating, another one for listing and, finally a page <span class=\"__mozilla-findbar-search\" style=\"padding: 0pt; background-color: yellow; color: black; display: inline; font-size: inherit;\">which<\/span> will show the details of that register. So, if you have N entities in your application, you&#8217;ll have to write approximately 4*N pages.<\/p>\n<p>And what is more sad: basically, these pages are all very much the same. The only change is <span class=\"__mozilla-findbar-search\" style=\"padding: 0pt; background-color: yellow; color: black; display: inline; font-size: inherit;\">which<\/span> fields are being exposed. Whould&#8217;nt it be nice if you could build these pages automatically?<\/p>\n<h2><strong>Stack configuration<\/strong><\/h2>\n<p>Here is the situation: a new programmer arives at your office and you need to setup his environment. So, there are two options: you already have an image ready to be used or you don&#8217;t. In the second case, you know how boring this is: you have to install JDK, IDE, libraries, servers and so on. Even worse: sometimes you have to configure the developers IDE to work properly with the components you&#8217;re used to.<\/p>\n<p>Of course, someone could say: &#8220;but if you install an IDE like Netbeans, all this stuff are there ready to be used&#8221;. Well, this is only half true: things are not so beautiful on the real world.<\/p>\n<h2>Ruby on Rails (and Grails) philosophy<\/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><strong>DRY: Don&#8217;t Repeat Yourself<\/strong><\/p>\n<p>The question is: if there are tasks <span class=\"__mozilla-findbar-search\" style=\"padding: 0pt; background-color: yellow; color: black; display: inline; font-size: inherit;\">which<\/span> are repetitive in the development process, why they are executed by humans and not by the framework?<\/p>\n<p>After all, developers are paid to implement a business model, not to execute repetitive tasks. At leat in theory they&#8217;re paid to THINK!<\/p>\n<p>At RoR we can see the return of something that we had simply ignored: scaffolding. The framework generates automatically for the developer several artifacts <span class=\"__mozilla-findbar-search\" style=\"padding: 0pt; background-color: yellow; color: black; display: inline; font-size: inherit;\">which<\/span> are usually related to repetitive tasks, like for example views and controllers. So, all the repetitive tasks are gone, and your work will be to only customize these artifacts. Neat!<\/p>\n<p>(where we had seen this before? Personal databases like Access (damn!), Paradox, FileMaker and many others)<\/p>\n<p><strong>Convention over configuration (or zero configuration)<br \/>\n<\/strong><\/p>\n<p>Here is where productivity soars. You don&#8217;t need configuration files if everything is in its place, do you? When working with RoR or Grails, the framework will stipulate some conventions that simply make configuration files unnecessary.<\/p>\n<p>For example: in Grails every controller is stored on a specific directory. So, it&#8217;s not necessary to told the framework <span class=\"__mozilla-findbar-search\" style=\"padding: 0pt; background-color: yellow; color: black; display: inline; font-size: inherit;\">which<\/span> are the controllers. He&#8217;ll find them automatically. Actually, when working with Grails and RoR, it&#8217;s quite common that the only configuration file you&#8217;ll ever touch will be the one <span class=\"__mozilla-findbar-search\" style=\"padding: 0pt; background-color: yellow; color: black; display: inline; font-size: inherit;\">which<\/span> is responsible for defining the dabase access configuration!<\/p>\n<p>The basic idea here is: <strong>configuration files are unnecessary because the application is already well organized. The configuration, in this case, is the application itself!<\/strong><\/p>\n<p>But, more than that, it&#8217;s important to think in conventions <strong>over<\/strong> configuration, and not <strong>instead of<\/strong> configurations. Why? Simple: because these applications usually are targeted at the enterprise environment, so you&#8217;ll have to integrate them with it. So, in this case, you&#8217;ll have to change some configuration files, but guess what: it&#8217;ll be far easier, because in these cases, you&#8217;re not working with XML.<\/p>\n<p><strong>Full stack<br \/>\n<\/strong><\/p>\n<p>As RoR, Grails installation is actually an IDE with everything you need. To install it, all you need is the JDK and Grails installation (of course!). You don&#8217;t even need to concern about installing some other IDE or server. All you&#8217;ll need is a simple text editor.<\/p>\n<p>And in Grails case, it is based on several components whose quality is already attested like Hibernate, Spring, SiteMesh, Log4J, Apache Commons and many others. So you don&#8217;t need to worry about how to integrate those libraries and frameworks, because they already are! Again, all you need to worry is your business logic!<\/p>\n<p>So, after all this talk about RoR, and knowing that &#8220;something&#8221; called <a href=\"http:\/\/jruby.codehaus.org\/\" target=\"_blank\">JRuby<\/a> exists, the question is:<\/p>\n<h2>Why Grails and not Ruby on Rails?<\/h2>\n<p>Actually, it doesn&#8217;t matter. Your productivity boost will be basically the same. However, for the Java developer, already used to it&#8217;s syntax, Grails will be way more familiar, because it&#8217;s based on Groovy, <span class=\"__mozilla-findbar-search\" style=\"padding: 0pt; background-color: yellow; color: black; display: inline; font-size: inherit;\">which<\/span>, by the way, have basically the same Java syntax (with some syntatic sugar). Your learning curve will be reduced on this case.<\/p>\n<p>Another important point is the fact that <a href=\"https:\/\/devkico.itexto.com.br\/?p=333\" target=\"_blank\">you&#8217;ll be able to reuse all your legacy code on a Grails project without changing anything on it<\/a> (<span class=\"__mozilla-findbar-search\" style=\"padding: 0pt; background-color: yellow; color: black; display: inline; font-size: inherit;\">which<\/span> is not a Grails advantage, because this same code reuse can be achieved using JRuby too).<\/p>\n<p>But, at the end of the day, this can be solved with a single question: <span class=\"__mozilla-findbar-search\" style=\"padding: 0pt; background-color: yellow; color: black; display: inline; font-size: inherit;\">which<\/span> language do you prefer? Grovy (Java) or Ruby? Java? Go Grails! Ruby? Go RoR!<\/p>\n<h2>Finally answering the question: &#8220;why Grails matters to a Java developer?&#8221;<\/h2>\n<p>After the success of RoR, the problems of the JEE platform became clear to everyone. Even if Grails or RoR suddenly disappear, from now on the new frameworks that will emerge will be following this &#8220;new&#8221; philosophy. And taking into consideration that Grails was developed since it&#8217;s begining focusing on the Java developer, it&#8217;s an undeniable fact that it will have a huge influence over all the new developments on this area from now on.<\/p>\n<p>Or, being more direct: <span style=\"color: #ff0000;\"><strong>because RoR and Grails suddenly showed us that working with the JEE is amazingly boring.<\/strong><\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Why Grails matters? That&#8217;s a fair question if we take a look at the huge amount of web frameworks which an average Java developer is used to. Behind this question actually there&#8217;s another one hidden: &#8220;Does Grails really brings something new or is it just another web framework?&#8221;. Historically speakng, we can see that the [&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],"tags":[],"class_list":["post-344","post","type-post","status-publish","format-standard","hentry","category-grails"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v22.8 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Why Grails really matters for a Java developer (and actually rescues JEE from boredom) - \/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=344\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Why Grails really matters for a Java developer (and actually rescues JEE from boredom) - \/dev\/Kico\" \/>\n<meta property=\"og:description\" content=\"Why Grails matters? That&#8217;s a fair question if we take a look at the huge amount of web frameworks which an average Java developer is used to. Behind this question actually there&#8217;s another one hidden: &#8220;Does Grails really brings something new or is it just another web framework?&#8221;. Historically speakng, we can see that the [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/devkico.itexto.com.br\/?p=344\" \/>\n<meta property=\"og:site_name\" content=\"\/dev\/Kico\" \/>\n<meta property=\"article:published_time\" content=\"2009-03-23T01:14:38+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2009-03-29T14:57:14+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=\"7 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=344\",\"url\":\"https:\/\/devkico.itexto.com.br\/?p=344\",\"name\":\"Why Grails really matters for a Java developer (and actually rescues JEE from boredom) - \/dev\/Kico\",\"isPartOf\":{\"@id\":\"https:\/\/devkico.itexto.com.br\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/devkico.itexto.com.br\/?p=344#primaryimage\"},\"image\":{\"@id\":\"https:\/\/devkico.itexto.com.br\/?p=344#primaryimage\"},\"thumbnailUrl\":\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2009\/03\/grails_grails_logo.jpg\",\"datePublished\":\"2009-03-23T01:14:38+00:00\",\"dateModified\":\"2009-03-29T14:57:14+00:00\",\"author\":{\"@id\":\"https:\/\/devkico.itexto.com.br\/#\/schema\/person\/502ab8892631bb005d6da2269fe5a3a7\"},\"breadcrumb\":{\"@id\":\"https:\/\/devkico.itexto.com.br\/?p=344#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/devkico.itexto.com.br\/?p=344\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/devkico.itexto.com.br\/?p=344#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=344#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/devkico.itexto.com.br\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Why Grails really matters for a Java developer (and actually rescues JEE from boredom)\"}]},{\"@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":"Why Grails really matters for a Java developer (and actually rescues JEE from boredom) - \/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=344","og_locale":"pt_BR","og_type":"article","og_title":"Why Grails really matters for a Java developer (and actually rescues JEE from boredom) - \/dev\/Kico","og_description":"Why Grails matters? That&#8217;s a fair question if we take a look at the huge amount of web frameworks which an average Java developer is used to. Behind this question actually there&#8217;s another one hidden: &#8220;Does Grails really brings something new or is it just another web framework?&#8221;. Historically speakng, we can see that the [&hellip;]","og_url":"https:\/\/devkico.itexto.com.br\/?p=344","og_site_name":"\/dev\/Kico","article_published_time":"2009-03-23T01:14:38+00:00","article_modified_time":"2009-03-29T14:57:14+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":"7 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/devkico.itexto.com.br\/?p=344","url":"https:\/\/devkico.itexto.com.br\/?p=344","name":"Why Grails really matters for a Java developer (and actually rescues JEE from boredom) - \/dev\/Kico","isPartOf":{"@id":"https:\/\/devkico.itexto.com.br\/#website"},"primaryImageOfPage":{"@id":"https:\/\/devkico.itexto.com.br\/?p=344#primaryimage"},"image":{"@id":"https:\/\/devkico.itexto.com.br\/?p=344#primaryimage"},"thumbnailUrl":"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2009\/03\/grails_grails_logo.jpg","datePublished":"2009-03-23T01:14:38+00:00","dateModified":"2009-03-29T14:57:14+00:00","author":{"@id":"https:\/\/devkico.itexto.com.br\/#\/schema\/person\/502ab8892631bb005d6da2269fe5a3a7"},"breadcrumb":{"@id":"https:\/\/devkico.itexto.com.br\/?p=344#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/devkico.itexto.com.br\/?p=344"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/devkico.itexto.com.br\/?p=344#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=344#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/devkico.itexto.com.br\/"},{"@type":"ListItem","position":2,"name":"Why Grails really matters for a Java developer (and actually rescues JEE from boredom)"}]},{"@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\/344"}],"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=344"}],"version-history":[{"count":4,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=\/wp\/v2\/posts\/344\/revisions"}],"predecessor-version":[{"id":357,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=\/wp\/v2\/posts\/344\/revisions\/357"}],"wp:attachment":[{"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=344"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=344"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=344"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}