{"id":1716,"date":"2010-08-04T22:30:11","date_gmt":"2010-08-04T22:30:11","guid":{"rendered":"http:\/\/justthesam.com\/2010\/08\/groovy-and-grails-thoughts\/"},"modified":"2010-08-04T22:30:11","modified_gmt":"2010-08-04T22:30:11","slug":"groovy-and-grails-thoughts","status":"publish","type":"post","link":"https:\/\/justthesam.com\/?p=1716","title":{"rendered":"Groovy and Grails thoughts"},"content":{"rendered":"<p>I&#39;ve been slowly banging away at a small Grails app on the train to and from work, to teach myself <a href=\"http:\/\/groovy.codehaus.org\/\" target=\"_blank\" rel=\"noopener\">Groovy<\/a> the language and <a href=\"http:\/\/www.grails.org\/\" target=\"_blank\" rel=\"noopener\">Grails<\/a> the web framework. I already had a good familiarity with Java, Spring and Hibernate so it is mostly a case of learning what Groovy and Grails add on top of those. I&#39;ve still got a long way to go, but I thought it worth jotting down some thoughts in case they help somebody else work their way into this particular world.<\/p>\n<p>Overall, it&#39;s been fairly pleasant and I&#39;m optimistic that it&#39;s probably as good a way to go about your average web app as any I&#39;ve found before, and I&#39;ve tried plenty over the past decade, including a few fairly obscure ones. I should point out that I don&#39;t believe in silver bullets any more. There are always going to be frustrations along the way when using any technology for a non-trivial project involving real-world customer requirements, but it&#39;s instructive to see just how many of those frustrations there are, and how hard they are to get past. I&#39;m pleased to say that each time I&#39;ve got a bit stuck with Grails I&#39;ve been able to dig myself out fairly swiftly with the help of the existing documentation, other web resources, the #grails channel on freenode IRC and the grails-user mailing list. Furthermore, the principle of least surprise (POLS) is alive and well, meaning that when I hope that I&#39;d find a particular feature to solve my problem du jour, it&#39;s usually there for me to find.<\/p>\n<p>It&#39;s not all sunshine and roses though. For instance when I upgraded to Grails 1.3.3 my unit tests started failing with a strange and unhelpful stack trace emanating deep from within the guts of the plugin framework. Turns out this is a bug introduced in 1.3.3 that plenty of people have been caught out by. I&#39;ve had to go back to 1.3.2 for now. It&#39;s a shade surprising and disappointing that a release could contain a bug like this, and that it&#39;s not been fixed and re-released yet. I worry that people trying Grails out for the first time with 1.3.3 will have a bad experience and give up early because of issues like this.<\/p>\n<p>I had a struggle to find half decent tools. I&#39;ve been a huge fan of Netbeans over the past several years and it claims to have great Groovy and Grails support, but I found it to be woeful I&#39;m afraid. Common GSP tags completely confused the GSP editor (it claims the syntax is wrong) so I struggle to believe that those claiming it has this great support have actually tried developing a non-toy Grails app with it. I&#39;ve settled on SpringSource Tool Suite (a bastardised Eclipse) which isn&#39;t bad &#8211; though as of this writing you definitely want to get the 2.3.3 M2 version for the latest Groovy and Grails support that&#39;s not yet in the stable release.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I&#39;ve been slowly banging away at a small Grails app on the train to and from work, to teach myself Groovy the language and Grails the web framework. I already had a good familiarity with Java, Spring and Hibernate so it is mostly a case of learning what Groovy and Grails add on top of [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[22,23,33],"tags":[],"class_list":["post-1716","post","type-post","status-publish","format-standard","hentry","category-programming","category-ruby","category-webtech"],"_links":{"self":[{"href":"https:\/\/justthesam.com\/index.php?rest_route=\/wp\/v2\/posts\/1716","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/justthesam.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/justthesam.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/justthesam.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/justthesam.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1716"}],"version-history":[{"count":0,"href":"https:\/\/justthesam.com\/index.php?rest_route=\/wp\/v2\/posts\/1716\/revisions"}],"wp:attachment":[{"href":"https:\/\/justthesam.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1716"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/justthesam.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1716"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/justthesam.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1716"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}