<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-2109140610958631949</id><updated>2011-12-27T20:17:38.175-08:00</updated><category term='grails'/><category term='ajp'/><category term='idea'/><category term='javaone 2011'/><category term='ant'/><category term='grails groovy i18n richui'/><category term='spring aop aspectj jboss'/><category term='javaone 2011 javafx'/><category term='java'/><category term='seam'/><category term='groovy'/><category term='spring springone2gx  groovy grails'/><category term='java groovy griffon'/><category term='groovy webservices intellij'/><category term='Intellij IDEA'/><category term='javaone 2011 javafx groovyfx'/><category term='grails flex flexbuilder blazeds'/><category term='maven'/><category term='tomcat'/><category term='eclipse'/><category term='intellij'/><category term='j2ee'/><category term='flex'/><title type='text'>Bill Pfeiffer's Groovy  and Java Dev Blog</title><subtitle type='html'>Notes on my usage of java, groovy and groovy related frameworks</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://wpfeiffe.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2109140610958631949/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://wpfeiffe.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Bill Pfeiffer</name><uri>http://www.blogger.com/profile/13198536393187596944</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Htf8jNfGeA0/SgEFT_NuEaI/AAAAAAAAAVI/LXRysXEs1b4/S220/BillPfeiffer-SouthPark-Avatar-184px.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>19</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2109140610958631949.post-5685039289009583264</id><published>2011-12-14T03:15:00.000-08:00</published><updated>2011-12-15T20:09:17.875-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='intellij'/><category scheme='http://www.blogger.com/atom/ns#' term='idea'/><category scheme='http://www.blogger.com/atom/ns#' term='ajp'/><category scheme='http://www.blogger.com/atom/ns#' term='grails'/><category scheme='http://www.blogger.com/atom/ns#' term='tomcat'/><category scheme='http://www.blogger.com/atom/ns#' term='groovy'/><title type='text'>Notes on Upgrading to Grails 2.0 from Grail 1.3.7</title><content type='html'>&lt;b&gt;Background. &amp;nbsp;&lt;/b&gt;I have a small grails application that I host on a VPS server. &amp;nbsp;The app makes extensive use of jquery, jqgrid, and the jquery layout plugin. &amp;nbsp;The purpose of the app is to import lab data for display back to the lab's customers. &amp;nbsp;I use the Spring Security core and ui plugins for auth and user management. &amp;nbsp;The app has lots of rest type xml posting for import and I use Postgres for the database. &amp;nbsp;I also use Intellij IDEA as my IDE.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Approach.&lt;/b&gt; &amp;nbsp;When I started thinking about how I would want to upgrade, the obvious or maybe easy path I thought of first was to just do an upgrade from within IDEA. &amp;nbsp;IDEA offers a nice "change sdk version" feature for grails. &amp;nbsp;After thinking about what MIGHT result, I thought maybe the start from scratch and layer in my code approach might yield a cleaner project. &amp;nbsp;I waffled a bit and decided to do both (in&amp;nbsp;separate&amp;nbsp;trial projects).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;"Change SDK Version" Approach.&lt;/b&gt;&amp;nbsp; This actually started out pretty promising. &amp;nbsp;I did the change sdk thing and idea/grails re-pulled all the plugins without a hitch. &amp;nbsp;As grails was starting, I saw a few [Deprecated] messages that I will have to run down. &amp;nbsp;Once the app started, IDEA then launched the browser to the default page (http://localhost:8080/myapp/).&lt;br /&gt;&lt;br /&gt;&lt;myapp&gt;&lt;b&gt;Grails 2.0.0 / Tomcat 7.0.16.&lt;/b&gt; &amp;nbsp;I front end my app with apache (even in the dev env) so the default page doesn't work right as the first thing Spring Security does is redirect to a secure port which tomcat isn't listening on. &amp;nbsp;I next try the straight apache link: http://localhost/myapp/ which is my usual entry point to testing the main page, and still no go. &amp;nbsp;I get the usual apache message for when apache can't reach the tomcat ajp connector. &amp;nbsp;After doing some &lt;a href="http://tomcat.apache.org/tomcat-7.0-doc/config/ajp.html"&gt;research&lt;/a&gt;, I see that tomcat 7 changed the ajp connector class. &amp;nbsp;I have code in the _Event.groovy file in the scripts directory to handle initializing the Tomcat ajp connector for when grails is in dev mode. Once I adjusted the connector class to AjpProtocol, I can hit my main page (login page). Here's the code for my updated _Event.groovy file:&lt;br /&gt;&lt;br /&gt;&lt;/myapp&gt;&lt;br /&gt;&lt;pre class="brush: groovy"&gt;import grails.util.GrailsUtil&lt;br /&gt;import org.apache.catalina.connector.Connector&lt;br /&gt;import org.apache.coyote.http11.Http11AprProtocol&lt;br /&gt;&amp;nbsp; &lt;br /&gt;// hook to get tomcat ajp going&lt;br /&gt;eventConfigureTomcat = {tomcat -&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; if (GrailsUtil.environment == 'development')&lt;br /&gt;&amp;nbsp; &amp;nbsp; {&lt;br /&gt;        // OLD Handler:&lt;br /&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// def ajpConnector =&amp;nbsp;&lt;br /&gt;        //  new Connector("org.apache.jk.server.JkCoyoteHandler"&lt;br /&gt;        // NEW Handler:&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; def ajpConnector = new Connector("org.apache.coyote.ajp.AjpProtocol"&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ajpConnector.port = 8009&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ajpConnector.protocol = "AJP/1.3"&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ajpConnector.redirectPort = 8443&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ajpConnector.enableLookups = false&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ajpConnector.setProperty("redirectPort", "8443")&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ajpConnector.setProperty("protocol", "AJP/1.3")&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ajpConnector.setProperty("enableLookups", "false")&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; tomcat.service.addConnector ajpConnector&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; println "Added ajp connector"&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;pre class="brush: groovy"&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div&gt;&lt;b&gt;More errors. &amp;nbsp;&lt;/b&gt;&amp;nbsp;I still have to deal with the deprecated messages and my first page after login spit up some nice ajax xml failure message. &amp;nbsp;I'll create another blog entry on running those down...&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2109140610958631949-5685039289009583264?l=wpfeiffe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wpfeiffe.blogspot.com/feeds/5685039289009583264/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2109140610958631949&amp;postID=5685039289009583264' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2109140610958631949/posts/default/5685039289009583264'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2109140610958631949/posts/default/5685039289009583264'/><link rel='alternate' type='text/html' href='http://wpfeiffe.blogspot.com/2011/12/notes-on-upgrading-to-grails-20-from.html' title='Notes on Upgrading to Grails 2.0 from Grail 1.3.7'/><author><name>Bill Pfeiffer</name><uri>http://www.blogger.com/profile/13198536393187596944</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Htf8jNfGeA0/SgEFT_NuEaI/AAAAAAAAAVI/LXRysXEs1b4/S220/BillPfeiffer-SouthPark-Avatar-184px.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2109140610958631949.post-5371782188948598645</id><published>2011-10-25T18:57:00.000-07:00</published><updated>2011-10-26T07:11:22.156-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='spring springone2gx  groovy grails'/><title type='text'>Springone 2gx 2011, day 1</title><content type='html'>&lt;b&gt;Registration and Reception.&lt;/b&gt; Arrived at Chicago miracle mile Marriott at about 3pm.  Just in time to register, collect conference goodies, and enjoy the good food and drink provided by conference organizers.  It appears to be an excellent turnout and a very different crowd from javaone.  I think it just feels that this audience is more engaged perhaps.  I've already had several strangers ask me about what technologies I'm using and why.  Several good conversations at dinner, that, for me, just didn't materialize at javaone.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Keynote.&lt;/b&gt; Adrian Colyer stood in for Rod Johnson who broke his collar bone biking and could not make the conference.  Adrian is a good dynamic speaker with a decent sense of humor.  I didn't mind too much wading through the obligatory Spring history in order to get to the new stuff spring is doing around data, social, etc.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;GROOVY/GRAILS!&lt;/b&gt; Graeme Rocher is going over the groovy changes in 1.8. Static typing changes, etc.  Grails 2.0 changes include new ui, cli enhancements, multiple data sources, more nosql options, db migrations, mixins with spock.  Graeme went on to demo the 'where' syntax/dsl which allows you to use basic groovy logic code to specify a finder for an entity.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Cloud.&lt;/b&gt; Cloud cloud cloud.  Live in the cloud.  Develop in the cloud.  Deploy to the cloud.  Jaysus, enough.  We get it.  A cloud foundry rep talked about having a local cloud.  Ok it was cool that he spun up 100 copies of his app locally with a bunch of different services. They are going to do a cloud foundry contest that may be interesting.&lt;br /&gt;&lt;br /&gt;&lt;p class='blogpress_location'&gt;Location:&lt;a href='http://maps.google.com/maps?q=N%20State%20St,Chicago,United%20States%4041.890408%2C-87.628017&amp;z=10'&gt;N State St,Chicago,United States&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2109140610958631949-5371782188948598645?l=wpfeiffe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wpfeiffe.blogspot.com/feeds/5371782188948598645/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2109140610958631949&amp;postID=5371782188948598645' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2109140610958631949/posts/default/5371782188948598645'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2109140610958631949/posts/default/5371782188948598645'/><link rel='alternate' type='text/html' href='http://wpfeiffe.blogspot.com/2011/10/springone-2gx-2011-day-1.html' title='Springone 2gx 2011, day 1'/><author><name>Bill Pfeiffer</name><uri>http://www.blogger.com/profile/13198536393187596944</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Htf8jNfGeA0/SgEFT_NuEaI/AAAAAAAAAVI/LXRysXEs1b4/S220/BillPfeiffer-SouthPark-Avatar-184px.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2109140610958631949.post-3983750282231218509</id><published>2011-10-06T09:32:00.000-07:00</published><updated>2011-10-06T09:32:32.830-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javaone 2011 javafx groovyfx'/><title type='text'>JavaOne 2011 Trip Day 3 - Groovy FX</title><content type='html'>&lt;b&gt;&lt;a href="http://javafx.com/"&gt;JavaFX&lt;/a&gt;.&amp;nbsp; &lt;/b&gt;I went to a few &lt;a href="http://javafx.com/"&gt;JavaFX&lt;/a&gt; sessions, one concerning layout and the other showing the GUI designer.&amp;nbsp; No live coding here, lots of slides, although the demo of the Scene Builder looks real cool.&amp;nbsp; So this got me wanting to play with this stuff.&amp;nbsp; I downloaded the EA JavaFX for mac osx.&amp;nbsp; I copied the JavaFX package into my usual /usr/share/XXXXX directory, then installed the new Netbeans and pointed its JavaFX profile at it.&amp;nbsp; Once I got Netbeans to combine a jvm profile with my JavaFX runtime, I had the Ensemble app running.&amp;nbsp; Sadly, it appears that JavaFX on the mac won't run in browser, but it runs just fine as a standalone&lt;b&gt;.&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;a href="http://groovy.codehaus.org/GroovyFX"&gt;GroovyFX&lt;/a&gt;.&amp;nbsp; &lt;/b&gt;Now that I had the JavaFX runtime up and running on the mac, I wanted to start coding and I wanted to start coding in Groovy in Intellij Idea.&amp;nbsp; I pulled down the source for the GroovyFX project and built the jar for it.&amp;nbsp; I was able to run the GroovyFX demos right from within Idea.&amp;nbsp; I next attempted to create my own project from scratch in Idea using GroovyFX.&amp;nbsp; I included the build GroovyFX jar and a simple cut and paste of one of the demo's code.&amp;nbsp; It blew up immediately and it appeared the problem was locating the JavaFX runtime.&amp;nbsp; It turns out I missed and 'asm-3.2.jar' which mangles bytecode and makes bad things happen when missing.&amp;nbsp; I put the right libraries in place and my simple demo class ran fine.&amp;nbsp; What's cool about this is I now have a platform to build GroovyFX apps within Intellij and have it recognize the JavaFX runtime on the mac.&amp;nbsp; This kinda stuff should just work, but it still feels like I had to jump over a lot of hurdles to get it there.&amp;nbsp;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2109140610958631949-3983750282231218509?l=wpfeiffe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wpfeiffe.blogspot.com/feeds/3983750282231218509/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2109140610958631949&amp;postID=3983750282231218509' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2109140610958631949/posts/default/3983750282231218509'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2109140610958631949/posts/default/3983750282231218509'/><link rel='alternate' type='text/html' href='http://wpfeiffe.blogspot.com/2011/10/javaone-2011-trip-day-3-groovy-fx.html' title='JavaOne 2011 Trip Day 3 - Groovy FX'/><author><name>Bill Pfeiffer</name><uri>http://www.blogger.com/profile/13198536393187596944</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Htf8jNfGeA0/SgEFT_NuEaI/AAAAAAAAAVI/LXRysXEs1b4/S220/BillPfeiffer-SouthPark-Avatar-184px.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2109140610958631949.post-1048014404863893115</id><published>2011-10-05T11:58:00.000-07:00</published><updated>2011-10-06T08:55:55.817-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javaone 2011'/><category scheme='http://www.blogger.com/atom/ns#' term='groovy'/><title type='text'>JavaOne 2011 Trip Day 3 - Script Bowl</title><content type='html'>Walked in about 10 minutes late on this one.&amp;nbsp; Guillaume Laforge was just going over an example of a pharmacy DSL that represents a real world example of Groovy contorted to a very English like syntax.&amp;nbsp; The panel member to his left asked why, if Groovy is supposed to be "java-like", would one want such a syntax.&amp;nbsp; I'm pretty sure Guillaume said the word "DSL" several times.&amp;nbsp; Apparently his neighbor doesn't quite get the purpose of a DSL and that reworking syntax for domain expert manipulation is desirable.&amp;nbsp;&amp;nbsp; The developer will, in most cases, work in idiomatic groovy.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;Turns out the guy to the left represented Ruby and he really represented consistently with the Ruby community.&amp;nbsp; The others, specifically Dick Wall (scala) represented their technologies with a positive enthusiasm that reflected well on their communities.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;In the end, the Oracle host announced a tie between Groovy and Scala.&amp;nbsp; Even though I showed up to give my complete and openly biased support to Groovy, it was clear that Scala won.&amp;nbsp; I don't quite understand why the Oracle guy made it a tie, but it was funny to watch the Ruby guy go into fits when Scala did not win.&amp;nbsp;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2109140610958631949-1048014404863893115?l=wpfeiffe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wpfeiffe.blogspot.com/feeds/1048014404863893115/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2109140610958631949&amp;postID=1048014404863893115' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2109140610958631949/posts/default/1048014404863893115'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2109140610958631949/posts/default/1048014404863893115'/><link rel='alternate' type='text/html' href='http://wpfeiffe.blogspot.com/2011/10/javaone-2011-trip-day-3-script-bowl.html' title='JavaOne 2011 Trip Day 3 - Script Bowl'/><author><name>Bill Pfeiffer</name><uri>http://www.blogger.com/profile/13198536393187596944</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Htf8jNfGeA0/SgEFT_NuEaI/AAAAAAAAAVI/LXRysXEs1b4/S220/BillPfeiffer-SouthPark-Avatar-184px.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2109140610958631949.post-6641753655754304956</id><published>2011-10-04T14:08:00.000-07:00</published><updated>2011-10-06T08:55:39.454-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javaone 2011'/><category scheme='http://www.blogger.com/atom/ns#' term='groovy'/><title type='text'>JavaOne 2011 Trip Day 2 - Groovy 1.8 What's New</title><content type='html'>Guilliame Laforge is giving his what's new in Groovy 1.8.&amp;nbsp; He opened with a cool deconstruction of a java class into a much smaller and easy to read groovy class and then script.&amp;nbsp; He then wen through the new 1.8 features.&amp;nbsp; I know this stuff is on the web but I took it down to help me remember what's there:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Some cool new enhancments that allow the removal of parens, other stuff that allows for build DSL's that read like English.&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/li&gt;&lt;li&gt;Upped performance in Groovy such that the Fibonacci demo runs almost as fast as java.&amp;nbsp;&lt;/li&gt;&lt;li&gt;He added a feature where a closure can be used as a parameter of an annotation.&amp;nbsp; His example for this was the annotation "Invariant" which is perfect to take a closure as the invariant test parameter.&lt;/li&gt;&lt;li&gt;Closure composition(?) allows you to append closures to each other&lt;/li&gt;&lt;li&gt;Closure memoization allows a closure to remember a result for a given set of parameters such that the next run will return the result immediatly from cache.&amp;nbsp; Groovy gives a high degree of control over how this caching of result is managed. &lt;/li&gt;&lt;li&gt;Currying improvements that blew right by me.&lt;/li&gt;&lt;li&gt;Builtin JSON support.&amp;nbsp; Allows for both read and right of JSON.&amp;nbsp; The JSON slurper allows for the dot notated traversal of the JSON object as well as collection semantics where appropriate.&amp;nbsp; Nice pretty print feature as well.&lt;/li&gt;&lt;li&gt;Cool looking AST transform annotations.&amp;nbsp; I still haven't wrapped my head around the AST transforms.There are a BUNCH of very useful new annotations.&lt;/li&gt;&lt;/ul&gt;1.9 Improvements included alignment with the java 7 invoke dynamic and java 7 modularity&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2109140610958631949-6641753655754304956?l=wpfeiffe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wpfeiffe.blogspot.com/feeds/6641753655754304956/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2109140610958631949&amp;postID=6641753655754304956' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2109140610958631949/posts/default/6641753655754304956'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2109140610958631949/posts/default/6641753655754304956'/><link rel='alternate' type='text/html' href='http://wpfeiffe.blogspot.com/2011/10/javaone-2011-trip-day-2-groovy-18-whats.html' title='JavaOne 2011 Trip Day 2 - Groovy 1.8 What&apos;s New'/><author><name>Bill Pfeiffer</name><uri>http://www.blogger.com/profile/13198536393187596944</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Htf8jNfGeA0/SgEFT_NuEaI/AAAAAAAAAVI/LXRysXEs1b4/S220/BillPfeiffer-SouthPark-Avatar-184px.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2109140610958631949.post-64059277564016243</id><published>2011-10-04T12:23:00.000-07:00</published><updated>2011-10-06T08:59:15.730-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javaone 2011 javafx'/><title type='text'>JavaOne 2011 Trip Day 2 - JavaFX Arch and Prog Model</title><content type='html'>Getting my mac set up for JavaFX Architecture and Programming Model session.&amp;nbsp; Netbeans and JavaFX installed.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Architecture.&amp;nbsp; &lt;/b&gt;JavaFX Api sits on a Tookit interface which sits on the Quantum Tookit.&amp;nbsp; This sits on Prism and Glass.&amp;nbsp; Prism is the Graphics API.&amp;nbsp; Glass is the OS layer for implmention primitives (I think).&amp;nbsp; Presenter has a nice graphic for this, but I wanted to capture it.&lt;br /&gt;&lt;br /&gt;Prism uses hardware where it can.&amp;nbsp; Expects that all state of graphics will be handled at high level and then pipelined to hardware.&amp;nbsp; This eliminates cycles created by context switching.&amp;nbsp;&amp;nbsp; Prism will fall back to software where it has to.&lt;br /&gt;&lt;br /&gt;Speaker talked about the IOS demo and mentioned that they really do have a vm that the code runs on. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Pulse and Sync.&amp;nbsp; &lt;/b&gt;Pulse occurs on regualar interval 60fps.&amp;nbsp; Event goes into queue.&amp;nbsp; On each pulse, update CSS, advanced animations, perform layout, sync state down to toolkit.&amp;nbsp; Again idea is to build picture before render to perform layout only once, before pulse.&amp;nbsp; Developer has a scene grapch and prism has a peer pulse.&amp;nbsp; Dev interacts with his and javafx copies to prism.&amp;nbsp; Need to have an atomic snapshot of scene before copy and render to prevent half picture.&amp;nbsp; 2 Threads: FX thread where all drawing work is done, Render thread is pipline to render/display.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Observable Collections.&amp;nbsp;&lt;/b&gt; As app moves data in and out, observable allows the UI to react to changes in data model as they happen.&amp;nbsp; JavaFX had to make collections observable, efficient, able to veto changes, easy to code.&amp;nbsp; New observable lists and maps are introduced.&amp;nbsp; Speaker continues on talk about how collections had to be enhanced to support UI stuff.&amp;nbsp; Strikes me that Groovy has most of these "enhancements".&lt;br /&gt;&lt;br /&gt;&lt;b&gt;GroovyFX.&amp;nbsp;&lt;/b&gt; Properties, Events, Lambdas, Callbacks.....&amp;nbsp; So I just downloaded the GroovyFX code from svn and am now running the demo from it.&amp;nbsp; Played with the FXML stuff in GroovyFX.&amp;nbsp; Good stuff but they are kicking me out of the room&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;table border="0" cellpadding="3" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="formPromptTd"&gt;&lt;/td&gt;&lt;td class="formReqTd"&gt;&lt;br /&gt;&lt;/td&gt;&lt;td class="formElementTd"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2109140610958631949-64059277564016243?l=wpfeiffe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wpfeiffe.blogspot.com/feeds/64059277564016243/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2109140610958631949&amp;postID=64059277564016243' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2109140610958631949/posts/default/64059277564016243'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2109140610958631949/posts/default/64059277564016243'/><link rel='alternate' type='text/html' href='http://wpfeiffe.blogspot.com/2011/10/javaone-2011-trip-day-2-javafx-arch-and.html' title='JavaOne 2011 Trip Day 2 - JavaFX Arch and Prog Model'/><author><name>Bill Pfeiffer</name><uri>http://www.blogger.com/profile/13198536393187596944</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Htf8jNfGeA0/SgEFT_NuEaI/AAAAAAAAAVI/LXRysXEs1b4/S220/BillPfeiffer-SouthPark-Avatar-184px.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2109140610958631949.post-2866396418312483452</id><published>2011-10-04T09:58:00.000-07:00</published><updated>2011-10-06T08:54:52.260-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javaone 2011'/><title type='text'>JavaOne 2011 Trip Day 2 - Keynote</title><content type='html'>&lt;b&gt;Network Aware Business Apps&lt;/b&gt;.&amp;nbsp; So I'm listening to how I'm supposed to spend my time writing "network aware" apps for my customers.&amp;nbsp; Make them "smart" in regards to networking.&amp;nbsp;&amp;nbsp; I think I represent, not all, but a fair share of the developers in attendance.&amp;nbsp; My customers want me and my developers writing business functionality.&amp;nbsp; They want it to perform, and my architecture will build that in, but they want the business functionality.&amp;nbsp;&amp;nbsp;&amp;nbsp; Good choices in high level architecture will, in most cases, I think, solve potential issues, without resorting to coding low level network choices.&amp;nbsp; I think their are a class of applications for which the net technology discussion is appropriate.&amp;nbsp; I don't know that its the general population business app.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Java 7 on Mac OS X (and IOS??).&amp;nbsp; &lt;/b&gt;Java 7 for OS X was just announced.&amp;nbsp; I tried to get it but either the site is getting hammered or the wireless network at the Hilton is getting hammered (for some reason the image of a hamster spinning a wheel that powers the Hilton network comes to mind).&amp;nbsp; Either way, can't get it, even though it went GA today.&amp;nbsp; Also while showing some JavaFX stuff, it was slipped in that Oracle has a version of Java (Compiled, not jvm based) running of IOS and showed a JavaFX game on an iPad.&amp;nbsp; They had little to say about it except that it was in the R&amp;amp;D phase, not officially on a roadmap.&amp;nbsp; Still.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2109140610958631949-2866396418312483452?l=wpfeiffe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wpfeiffe.blogspot.com/feeds/2866396418312483452/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2109140610958631949&amp;postID=2866396418312483452' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2109140610958631949/posts/default/2866396418312483452'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2109140610958631949/posts/default/2866396418312483452'/><link rel='alternate' type='text/html' href='http://wpfeiffe.blogspot.com/2011/10/javaone-2011-trip-day-2-keynote.html' title='JavaOne 2011 Trip Day 2 - Keynote'/><author><name>Bill Pfeiffer</name><uri>http://www.blogger.com/profile/13198536393187596944</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Htf8jNfGeA0/SgEFT_NuEaI/AAAAAAAAAVI/LXRysXEs1b4/S220/BillPfeiffer-SouthPark-Avatar-184px.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2109140610958631949.post-3448211590421044275</id><published>2011-10-04T08:19:00.000-07:00</published><updated>2011-10-06T08:54:52.260-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javaone 2011'/><title type='text'>JavaOne 2011 Trip Day 2 - Pre Keynote</title><content type='html'>&lt;b&gt;Oracle Loves their DBA's&lt;/b&gt;.&amp;nbsp; My coworkers and I attended the OTN event in front of the Moscone.&amp;nbsp; We joked about how the Java developers were kinda second tier at the event.&amp;nbsp; Kinda.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;All Day JavaFX.&amp;nbsp; &lt;/b&gt;I'm sitting at a Starbucks and have just completed selecting my sessions for the day.&amp;nbsp; Mostly javafx.&amp;nbsp; Not what I came for but I am curious about doing rich apps in java.&amp;nbsp; Between the OTN event last night and Starbucks this morning, I managed to download JavaFX 2.0 for the mac with its Netbeans counterpart and get the Ensemble app running in the debugger.&amp;nbsp; I saw a notice that said the in browser stuff for JavaFX does not yet work on the Mac. Oh well.&amp;nbsp;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2109140610958631949-3448211590421044275?l=wpfeiffe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wpfeiffe.blogspot.com/feeds/3448211590421044275/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2109140610958631949&amp;postID=3448211590421044275' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2109140610958631949/posts/default/3448211590421044275'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2109140610958631949/posts/default/3448211590421044275'/><link rel='alternate' type='text/html' href='http://wpfeiffe.blogspot.com/2011/10/javaone-2011-trip-day-2-pre-keynote.html' title='JavaOne 2011 Trip Day 2 - Pre Keynote'/><author><name>Bill Pfeiffer</name><uri>http://www.blogger.com/profile/13198536393187596944</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Htf8jNfGeA0/SgEFT_NuEaI/AAAAAAAAAVI/LXRysXEs1b4/S220/BillPfeiffer-SouthPark-Avatar-184px.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2109140610958631949.post-1925678512763381868</id><published>2011-10-03T11:36:00.001-07:00</published><updated>2011-10-06T08:54:52.261-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javaone 2011'/><title type='text'>JavaOne 2011 Trip Day 1 - Spring to JEE</title><content type='html'>&lt;br /&gt;Presenter is spending lots of time talking about why one would migrate to JEE from Spring.  Do I give up dependency injection, aop, unit testing?  New JEE solves a lot of this.  Presenter gave nice slide comparing features of Spring compared with modern JEE.  Good slide, but makes me wish i was in a grails discussion which has great alternatives for each category of comparison.  They are moving on to the mechanics of the migration. I kind of get it and am going to prep for next session.&lt;br /&gt;&lt;br /&gt;&lt;p class='blogpress_location'&gt;Location:&lt;a href='http://maps.google.com/maps?q=Sutter%20St,San%20Francisco,United%20States%4037.788680%2C-122.412619&amp;z=10'&gt;Sutter St,San Francisco,United States&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2109140610958631949-1925678512763381868?l=wpfeiffe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wpfeiffe.blogspot.com/feeds/1925678512763381868/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2109140610958631949&amp;postID=1925678512763381868' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2109140610958631949/posts/default/1925678512763381868'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2109140610958631949/posts/default/1925678512763381868'/><link rel='alternate' type='text/html' href='http://wpfeiffe.blogspot.com/2011/10/javaone-2011-trip-day-1-spring-to-jee.html' title='JavaOne 2011 Trip Day 1 - Spring to JEE'/><author><name>Bill Pfeiffer</name><uri>http://www.blogger.com/profile/13198536393187596944</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Htf8jNfGeA0/SgEFT_NuEaI/AAAAAAAAAVI/LXRysXEs1b4/S220/BillPfeiffer-SouthPark-Avatar-184px.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2109140610958631949.post-2099985686521431964</id><published>2011-10-03T11:08:00.000-07:00</published><updated>2011-10-06T08:53:48.133-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javaone 2011'/><title type='text'>JavaOne 2011 Trip Day 1 Keynote Rough Notes</title><content type='html'>&lt;b&gt;Morning. &lt;/b&gt;Woke up 7am EST, which is 4 am here, so I used my alone time to schedule my sessions with the schedule builder.  I think enough people have complained about the scheduler so I won't pile on  here.  Just started using the FaceTime app so I was able to see my kids as they headed off to school. &lt;br /&gt;Currently piling into the Hilton ballroom for the keynote.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Video. &lt;/b&gt;Keynote opened up with Code Hard in these Cubicles rap video.  It had a potential to be a bit cheesy but was actually pretty well done and funny. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Intel and Oracle.  &lt;/b&gt;After the video, Mark Reinhold was announced to speak but a middleware guy came out to speak with no explanation as to where Mark was.  He introduced a couple of guys from Intel and Oracle talking about collaboration on the jvm on Intel platforms.  Having to support several Intel based Linux java server deployments, the performance improvements are good news.  Oracle and Intel, marriage made at conference.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Mark Reinhold &lt;/b&gt;did make it to the stage at about 9am,  He discussed the history of how java 7 got broken into java 7 and 8.  He proceeded to discuss the java 7 changes: &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Java 7&lt;/b&gt;.  Project coin features: small change to language.  First in is the verbosity of generics.  New construct called diamond copies generics declaration on left to the creation new on right.   Next up is strings in switch statements.  New try catch feature: Multicatch allows for catching exceptions of multiple types.  Next up is how to nicely clean up multiple resources in try/catch.  Java 7 has try with resources feature to automagically close resources.  Makes use of AutoCloseable interface to make this happen.  Other smaller features blew by too quick to catch up with.  Introduction of these features caused refactor of the JDK to take advantage of them.&lt;br /&gt;&lt;br /&gt;InvokeDynamic.  Charles Nutter was brought up to introduce how the InvokeDynamic work in JRuby.  Problem is that the manual method of call dynamic methods tended to prevent jvm optimizations from taking place.  InvokeDynamic allows for a mixed inlining of java and other dynamic languages.  I was hoping Guillaume Laforge would be up for this, but Charles did a good job&lt;br /&gt;&lt;br /&gt;Fork Join framework features support for multicore processers.  Explained as a good way to split tasks into small tasks that can bubble up a result.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Java 8&lt;/b&gt;.  Lambda expressions.  Introduced as a simple solution to parrallelism.  He gave a map reduce example and indeed those methods (a pattern?) seem to be built into the language.  Need to research this more.&lt;br /&gt;&lt;br /&gt;Project jigsaw:  Declare a modules version and dependencies to yeild new package (not jar), called jmod (and rpg, deb).  Experimenting with making this work with maven repositories.  &lt;br /&gt;&lt;br /&gt;Using module system to kind of re-compose the jdk in terms of the components or modules that depend on each other to make up the jdk.  Mentioned that java is attempting to make this work well with osgi, but thin on details.&lt;br /&gt;&lt;br /&gt;JRockit, Type annotations, DataTime, etc..&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;JavaFX 2.0&lt;/b&gt;.  Talking about what a good choice it was to go back to java language!!  Beating the point severely.   Announced JavaFX 2.0 GA for windows and dev preview for Mac OS X.  Also announced the Netbeans based SceneBuilder to GUI design.  Wonder if any of this will make its way into Eclipse or Intellij.  They are adding binding in and I'm wondering how much of this will make its way into general use for Swing.  FXML introduced to do UI markup.   Integrated web content, which I think will make for an interesting mix from a design standpoint.  Demoed an app call Ensemble which looks very cool and provides great examples for running JavaFX 2 code.  Henley car site demo looked cool as well.  I think its point is that it is a full client server style type using glassfish and a bunch of other server side tech in conjunction with JavaFX.   More really cool demos with 2d and 3d graphs, rotating rubiks cubes, and low latency audio.  Awesome demo of a 3d Duke mimicking the presenter who was hooked up to a Microsoft Connect.  Very cool stuff.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Java EE 7 Cloud&lt;/b&gt;.  Linda DeMichiel discussing how JEE will be modified to play well in a cloud environment.  She layed out the different roles that Oracle sees will be played when deploying an app into a PaaS environment.  Reminds me of the early J2EE days when they got these roles SO wrong.  I hope they don't bake these role assumptions to deeply into the API's such that you end up writing boilerplate to address a perceived Oracle need that never practically arrives.  It seems that trying to lead with a spec, rather than waiting for the community to evolve, never really pans out.   The current JEE success is directly related to the outside community evolving (Hibernate, Spring, etc).   I think cloud is too young to start building specs around.   At this point, products (open or no), not specs seems to make sense.  Demo of glassfish demo for scaling in cloud..I guess.  Linda continued on some of the addition ways that the JEE spec will take advantage of managing beans with CDI in different areas of the spec.  Old JEE technologies are now being made optional.   Maybe to make room for all the new specs that are to be included.  Again, let the community lead.  Curious as to the community reaction to the number of the new proposed set of specs that will make up JEE.  It is formidable.&lt;br /&gt;&lt;br /&gt;Had to miss the mobile stuff to make the next/first session.&lt;br /&gt;&lt;div class="blogpress_location"&gt;Location:&lt;a href="http://maps.google.com/maps?q=Sutter%20St,San%20Francisco,United%20States%4037.788680%2C-122.412619&amp;amp;z=10"&gt;Sutter St,San Francisco,United States&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2109140610958631949-2099985686521431964?l=wpfeiffe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wpfeiffe.blogspot.com/feeds/2099985686521431964/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2109140610958631949&amp;postID=2099985686521431964' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2109140610958631949/posts/default/2099985686521431964'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2109140610958631949/posts/default/2099985686521431964'/><link rel='alternate' type='text/html' href='http://wpfeiffe.blogspot.com/2011/10/javaone-2011-trip-day-1-keynote-rough.html' title='JavaOne 2011 Trip Day 1 Keynote Rough Notes'/><author><name>Bill Pfeiffer</name><uri>http://www.blogger.com/profile/13198536393187596944</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Htf8jNfGeA0/SgEFT_NuEaI/AAAAAAAAAVI/LXRysXEs1b4/S220/BillPfeiffer-SouthPark-Avatar-184px.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2109140610958631949.post-6075855131559900018</id><published>2011-10-02T17:05:00.000-07:00</published><updated>2011-10-06T08:52:53.269-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javaone 2011'/><title type='text'>JavaOne 2011 Trip Day 0</title><content type='html'>First day at JavaOne and I found my "boutique" hotel.  Five minutes into being out on the street, I had a homeless person knock back a beer and throw it at the attendees walking with me.  Yea!!&lt;br /&gt;&lt;br /&gt;Registration went extremely smooth.  Its been almost ten years since I was here last (John Gage and Douglas Adams had keynotes), and the registration that year was a complete nightmare.  Lines that stretched around the block.  This year, I walked up to a registration computer, logged in, had my badge printed, collected my goodies, and I was done in five minutes.&lt;br /&gt;&lt;br /&gt;Now I have to navigate the new JEE sessions vs. the Groovy based sessions vs. Cloud Stuff...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2109140610958631949-6075855131559900018?l=wpfeiffe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wpfeiffe.blogspot.com/feeds/6075855131559900018/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2109140610958631949&amp;postID=6075855131559900018' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2109140610958631949/posts/default/6075855131559900018'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2109140610958631949/posts/default/6075855131559900018'/><link rel='alternate' type='text/html' href='http://wpfeiffe.blogspot.com/2011/10/javaone-2011-trip-day-0.html' title='JavaOne 2011 Trip Day 0'/><author><name>Bill Pfeiffer</name><uri>http://www.blogger.com/profile/13198536393187596944</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Htf8jNfGeA0/SgEFT_NuEaI/AAAAAAAAAVI/LXRysXEs1b4/S220/BillPfeiffer-SouthPark-Avatar-184px.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2109140610958631949.post-5414552890938037111</id><published>2009-05-05T20:36:00.000-07:00</published><updated>2009-05-05T21:21:38.501-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java groovy griffon'/><title type='text'>Checking in on Groovy experience...</title><content type='html'>So I thought I'd write once a week on this blog when I created it and as I look at the last entry dated September '08, well, the best laid plans...&lt;br /&gt;&lt;br /&gt;One thing such a long intermission allows is to reflect on living with the programming language choices I've made.  Really that means: how is &lt;a href="http://groovy.codehaus.org/"&gt;Groovy&lt;/a&gt; doing for me as a language?  Frankly my daytime job has me in some weird Software Development Manager waterfall process paralysis that has me feeling like I'm watching an accident about to happen without being able to do anything about it.  The one thing I &lt;span style="font-style: italic;"&gt;have&lt;/span&gt; been able to do is introduce Groovy into our ancient J2ee / struts 1.x / EJB environment.  As I switch between Groovy and Java, I really start to feel the pain of the extra syntactical gymnastics that Java requires.  &lt;span style="font-style: italic;"&gt;Don't take this as Java bashing.  I really feel that Groovy stands on the shoulders of Java giants (the libraries).&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;On a regular basis I am surprised at the richness of solutions Groovy offers. Whether its sorting a list of model objects in a one liner, using ant to copy entire directories from web servers in a one liner, or complex xml rendering with XML Builder, Groovy seems to offer elegant, terse solutions.  Aside from my enterprisey type programming, I use the same language for quick scripting / bulk data / get'er done throw away type jobs as well.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Groovy Learning&lt;/span&gt;.  So I still feel like I have a LOT to learn in Groovy in terms on mastering the language.  I feel at home in my own codebase, but I don't feel like I have a mastery of the language that would let me jump into a project with a team of Groovy experts or even regular practioners.  I open &lt;a href="http://www.amazon.com/gp/product/1932394842/ref=cm_plog_item_link"&gt;GINA&lt;/a&gt; before I open &lt;a href="http://www.jetbrains.com/idea/"&gt;Intellij Idea&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Groovy Testing&lt;/span&gt;.  I list this here just as a tactic to shame myself into learning the proper methodology for test first development.  I really am bought into unit testing.  Really.  I just haven't had the practice/discipline to add the tests in as I go.  Something I plan to rectify.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Up Next&lt;/span&gt;.  I want to write my experiences with attempting several web solutions to get groovy on the google app engine.  Also plan on using &lt;a href="http://griffon.codehaus.org/"&gt;Griffon&lt;/a&gt; for an in house utility doing some web service, some database, a lot of file i/o stuff.  Curious if &lt;a href="http://griffon.codehaus.org/"&gt;Griffon &lt;/a&gt;&lt;a href="http://groovy.codehaus.org/Swing+Builder"&gt;SwingBuilder &lt;/a&gt;can ease the pain I last experienced with swing.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2109140610958631949-5414552890938037111?l=wpfeiffe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wpfeiffe.blogspot.com/feeds/5414552890938037111/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2109140610958631949&amp;postID=5414552890938037111' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2109140610958631949/posts/default/5414552890938037111'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2109140610958631949/posts/default/5414552890938037111'/><link rel='alternate' type='text/html' href='http://wpfeiffe.blogspot.com/2009/05/so-i-thought-id-write-once-week-on-this.html' title='Checking in on Groovy experience...'/><author><name>Bill Pfeiffer</name><uri>http://www.blogger.com/profile/13198536393187596944</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Htf8jNfGeA0/SgEFT_NuEaI/AAAAAAAAAVI/LXRysXEs1b4/S220/BillPfeiffer-SouthPark-Avatar-184px.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2109140610958631949.post-1513828683489475304</id><published>2008-09-22T18:21:00.000-07:00</published><updated>2008-09-22T20:04:10.967-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='groovy webservices intellij'/><title type='text'>Groovy Web Services vs. the 1990's</title><content type='html'>&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;My first job.  &lt;/span&gt;My first real programming job started off with me working on a computer I had never seen before (a DOS based PC) with my choice of Microsoft QuickC or Microsoft QuickBasic.  I was to write an address book application which could add, insert, delete and print a simple address record/structure.   I had programmed a lot of basic but of late was playing with C and thought I was pretty up on it.  I wasn't.  I hadn't yet mastered the nuances of pointers.   I finished my program with all functions working, but one of my functions ended the program with a mysterious (to me anyway) null pointer error.  Time was up...that's how I walked out of the test (this test was actually my interview for the job).   The woman who was offered the job first turned it down as she had found something else.   The offer defaulted to me and I lucked into my career. &lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Programming in the 90's.  &lt;/span&gt;This was kind of a cool time to learn how to program.  Netware was king.  Btrieve, our (ahem) database of choice, could run on the Netware server itself!  We wrote character mode user interfaces from scratch with menus, dialogs, etc.  My initial test that ended with null pointer error paled in comparison to  a near career ending stack overflow in my first QuickBasic application.   I had 640k and my app was overflowing due to about 10k of data!?!  At the time QBasic defaulted to a small stack which could be overridden by a command line settting in the compiler...that took me about 2 weeks to find.  One more week and I would have been let go.&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Fast Forward. &lt;/span&gt;QuickBasic, Math Co-processers, Microsoft C/C++, Visual Studio 1.0, PowerBuilder, and Java, lots of Java.&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Today.  &lt;/span&gt;So 18 years and 3 jobs later I find myself managing a group of devs with the standard medium size enterprisey legacy struts app.  I like to keep up on tech trends so I dabbled a little with Python, Ruby.  I was distracted during the Rails hype by a death march project so I missed out on that.   I didn't really take to dynamic languages until I was exposed to Groovy/Grails at a No Fluff Just Stuff in Orlando, 2007.  This was where I got the big wow factor that I think most people got a year or so before with Rails.  The thing about Grails that struck me was how it was composed of stuff I was already working with: Hibernate (check), Spring (check), Quartz (check), Transactional Services (check).   It just made working with these things about 50 times easier.&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Groovy looking backward.&lt;/span&gt;  A manager from my first company calls and wants an XML export of their data.  Several years back, I had done some part time work in PowerBuilder (32 bit AND 16 bit) and SQL Server that served as a waypoint for their customers who wanted a true windows app over the old DOS standby.   Now they wanted an xml export of the data.  When I drilled into the requirements it turns out that they really want to submit data to another company via a web service.  &lt;/div&gt;&lt;div&gt;I start down the PowerBuilder road but immediately hit several technical and business hurdles.  This app has to massage several sql server queries, read text files, dbf files, touch the registry, zip, unzip and finally call a web service.    Now I know that Groovy is my current hammer of choice, but man this thing sure looks like a nail!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Let's see:&lt;br /&gt;&lt;/div&gt;&lt;div&gt;SQL Server query = 1 line of code (after query is defined, db connected)&lt;br /&gt;&lt;/div&gt;&lt;div&gt;read text file into list = 1 line of code&lt;/div&gt;&lt;div&gt;dbf file = 1 line of code and uses jdbc-odbc bridge&lt;/div&gt;&lt;div&gt;file moves, zip/unzip = using AntBuilder this stuff was trivial&lt;/div&gt;&lt;div&gt;xml creation=using StreamingMarkupBuilder (not trivial, but terse and flexable)&lt;/div&gt;&lt;div&gt;web service=using GroovyWS and a little beating into submission, works awesome (2 lines of code)&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;GroovyWS Lessons.&lt;/span&gt;  Probably the hardest thing here was to figure out how to get raw xml (defined in the wsdl as s:any) to the web service.  The actual service took 3 args: The first 2 defined as strings, the last defined as the s:any, which I knew was to be raw xml.  Anybody out there know how to get raw xml across in GroovyWS? No?  &lt;/div&gt;&lt;div&gt;I tried the String of the xml.  I tried the Groovy closure from the builder that represented my xml.  GroovyWS (really apache cxf) puked.&lt;/div&gt;&lt;div&gt;I typed in every conceivable Google permutation of all related keywords I could think of.  And kept getting the same single post.  It wasn't exactly my problem so I overlooked it first 10 times I saw it.  Then I really read it.  The author discussed converting his xml into DOM object so he could return it.  But I didn't have a DOM object, I had this really cool Groovy structure made with builders that would spit out an xml string.  So here's how I got from the xml string (xmlString) to the DOM object that made GroovyWS work:&lt;/div&gt;&lt;div&gt;&lt;pre name="code" class="java"&gt;def fac = DocumentBuilderFactory.newInstance()&lt;br /&gt;def builder = fac.newDocumentBuilder()&lt;br /&gt;def xmlBytes = xmlString.getBytes()&lt;br /&gt;def is = new ByteArrayInputStream(xmlBytes)&lt;br /&gt;def doc = builder.parse(is)&lt;br /&gt;def root = doc.getDocumentElement()&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;Pass in the root object to the webservice parameter and all is good.  I did end up having to wrap the specified xml with an outer element that matched the parameter name in the wsdl.  I haven't figured that one out yet, but it works.&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Groovy Rocks.  &lt;/span&gt;I'm amazed at how easy it was to implement this program in Groovy.  When I think of all the business constraints that got put on the app as I was developing it, all the legacy stuff (dbf, sql server, Btrieve, text input, registry settings) I had to do, I'm amazed at the simplicity with which Groovy handles it.  I think I'll go update the GroovyWS wiki with my findings...&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2109140610958631949-1513828683489475304?l=wpfeiffe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wpfeiffe.blogspot.com/feeds/1513828683489475304/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2109140610958631949&amp;postID=1513828683489475304' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2109140610958631949/posts/default/1513828683489475304'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2109140610958631949/posts/default/1513828683489475304'/><link rel='alternate' type='text/html' href='http://wpfeiffe.blogspot.com/2008/09/groovy-web-services-vs-1990s.html' title='Groovy Web Services vs. the 1990&apos;s'/><author><name>Bill Pfeiffer</name><uri>http://www.blogger.com/profile/13198536393187596944</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Htf8jNfGeA0/SgEFT_NuEaI/AAAAAAAAAVI/LXRysXEs1b4/S220/BillPfeiffer-SouthPark-Avatar-184px.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2109140610958631949.post-9117323430945899746</id><published>2008-08-23T09:12:00.001-07:00</published><updated>2008-08-23T09:30:47.472-07:00</updated><title type='text'>No Fluff Just Stuff Orlando 2008</title><content type='html'>I'm at the &lt;a href="http://www.nofluffjuststuff.com/conference/orlando/2008/08/index.html"&gt;No Fluff conference in Orlando&lt;/a&gt; waiting for David Geary's talks on JSF/Facelets/Seam.  While waiting for those sessions, I've been splitting time between trying to work through a Seam book (&lt;a href="http://www.manning.com/dallen/"&gt;Seam in Action, MEAP&lt;/a&gt;)  and trying to either pay attention to the speakers or at least raise my head with a knowing look at all the appropriate moments.  There really are a good bunch of topics and and it is tough to sit in on the sessions and not get engrossed by whatever the subject is.&lt;br /&gt;&lt;br /&gt;&lt;rant&gt;It really doesn't help that I've hit upon another Seam book / tutorial that assumes that I've gone through the pains of JSF and Seam is here to rescue me.  Note to authors or tutorial creators:  I am a struts developer.  I haven't gone through the pains of JSF.  Leading me through the pains of JSF that Seam solves doesn't really help me in terms of getting up to speed with Seam itself.  I get it that I have to understand JSF (lifecycle, etc) to understand Seam, but starting your text with the assumption that I have an encyclopedic knowledge of JSF and all its issues is annoying.  I really don't want to keep a JSF reference pdf open while I'm working through your book.&lt;br /&gt;&lt;br /&gt;The Seam in Action book could use a little more action and a little less exposition.&lt;br /&gt;&lt;/rant&gt;&lt;br /&gt;With that off my chest, Seam in Action appears that it will be an invaluable resource once I get started.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2109140610958631949-9117323430945899746?l=wpfeiffe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wpfeiffe.blogspot.com/feeds/9117323430945899746/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2109140610958631949&amp;postID=9117323430945899746' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2109140610958631949/posts/default/9117323430945899746'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2109140610958631949/posts/default/9117323430945899746'/><link rel='alternate' type='text/html' href='http://wpfeiffe.blogspot.com/2008/08/no-fluff-just-stuff-orlando-2008.html' title='No Fluff Just Stuff Orlando 2008'/><author><name>Bill Pfeiffer</name><uri>http://www.blogger.com/profile/13198536393187596944</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Htf8jNfGeA0/SgEFT_NuEaI/AAAAAAAAAVI/LXRysXEs1b4/S220/BillPfeiffer-SouthPark-Avatar-184px.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2109140610958631949.post-8711589880624142136</id><published>2008-04-17T03:19:00.000-07:00</published><updated>2008-04-17T04:37:14.667-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='grails flex flexbuilder blazeds'/><title type='text'>FlexBuilder and Grails Flex Plugin</title><content type='html'>&lt;span style="font-weight: bold;"&gt;Blazing Grails.&lt;/span&gt;  I am currently considering using flex for my play project at home and I started tinkering with the &lt;a href="http://grails.org/Flex+Plugin"&gt;Grails Flex Plugin.&lt;/a&gt; I am simply amazed at how easy the Grails Flex stuff is to use compared with my Flex+WebServices approach to talking to my J2EE/Hibernate application.  Having gone through the pains of hand coding the retrieval of Hibernate model objects, stripping proxies, publishing wsdl, etc, using the Grails/BlazeDS approach is almost trivial.  Hats off to &lt;a href="http://marceloverdijk.blogspot.com/"&gt;Marcel Overdijk&lt;/a&gt; for providing another outstanding plugin, which allows you to very simply expose your Grails services for easy flex consumption.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;FlexBuilding in Grails.  &lt;/span&gt;One issue that I did run into is that, out the box, a flex application really doesn't know how to talk to &lt;a href="http://opensource.adobe.com/wiki/display/blazeds/BlazeDS"&gt;BlazeDS&lt;/a&gt;.  The Grails Flex Plugin does a bunch of automagic configuration to allow you to just drop a flex mxml application file into your webapp directory and have the server compile it for you and it works great.  The mxml compiles, swf downloads and talks to your service, no problem.  However, when I used &lt;a href="http://www.adobe.com/products/flex/"&gt;FlexBuilder 3.0&lt;/a&gt; to build the simple flex app listed in the Flex Plugin docs, I immediately encountered the following:&lt;br /&gt;&lt;br /&gt;RPC Fault faultString="[MessagingError message='Destination&lt;br /&gt;'employeeService' either does not exist or the destination has no&lt;br /&gt;channels defined (and the application does not define any default&lt;br /&gt;channels.)']" faultCode="InvokeFailed" faultDetail="Couldn't establish&lt;br /&gt;a connection to 'employeeService'"]&lt;br /&gt;&lt;br /&gt;After a little googling, it turns out that the flex compiler needs a couple of arguments to help it understand how to talk to BlazeDS services and to know the context root of where the services will live:&lt;br /&gt;&lt;br /&gt;--services (services-config.xml file)&lt;br /&gt;&lt;br /&gt;This file can be found in your &lt;grails&gt;/web-app/WEB-INF/flex directory when the flex plugin is installed.&lt;br /&gt;&lt;div id="1fw5" class="ArwC7c ckChnd"&gt;&lt;br /&gt;--context-root=(your context root)&lt;br /&gt;&lt;br /&gt;This is just the context root of you grails app and is usually the name of the directory where your grails app lives.&lt;br /&gt;&lt;br /&gt;You can get at the compiler settings in FlexBuilder by going to the "project properties | Flex Compiler | Additional compiler args" and appending in the two extra args I've shown above.&lt;br /&gt;&lt;br /&gt;One additional step I performed within FlexBuilder was to make my build output go directly into my webapp directory under my grails app. &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Why FlexBuilder?&lt;/span&gt; I know I can just hand code my mxml and actionscript.  I use Intellij and it actually has support for these file types (to what extent I'm not really sure).  However, I'm not someone who likes to hand code gui's when a good tool exists and I also really like using a real debugger.  FlexBuilder gives you that and more.   I'd love to  see a better  fit between a FlexBuilder project (eclipse project under the hood) and grails project infrastructure. &lt;br /&gt;&lt;br /&gt;Overall I'm pretty excited about the productivity gains that the Grails+Flex combination offers.&lt;br /&gt;&lt;br /&gt;Next to tackle: i18n and flex!&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2109140610958631949-8711589880624142136?l=wpfeiffe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wpfeiffe.blogspot.com/feeds/8711589880624142136/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2109140610958631949&amp;postID=8711589880624142136' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2109140610958631949/posts/default/8711589880624142136'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2109140610958631949/posts/default/8711589880624142136'/><link rel='alternate' type='text/html' href='http://wpfeiffe.blogspot.com/2008/04/flexbuilder-and-grails-flex-plugin.html' title='FlexBuilder and Grails Flex Plugin'/><author><name>Bill Pfeiffer</name><uri>http://www.blogger.com/profile/13198536393187596944</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Htf8jNfGeA0/SgEFT_NuEaI/AAAAAAAAAVI/LXRysXEs1b4/S220/BillPfeiffer-SouthPark-Avatar-184px.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2109140610958631949.post-7870501663532987062</id><published>2008-04-01T17:34:00.000-07:00</published><updated>2008-04-01T19:16:18.385-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='grails groovy i18n richui'/><title type='text'>Grails and i18n</title><content type='html'>I have a couple of different applications / data models that I use to play around with new technologies.  I've been experimenting with Grails of late and decided to take one of my apps to it.  A special requirement that I placed on this application is that it support multiple languages / locales / currencies.&lt;br /&gt;&lt;br /&gt;Grails has built in very nice support for resource files as a core part of its architecture.  Unfortunately the scaffolding templates do not take advantage of this and drop text strings right into the GSP's created.  I understand that the idea with this scaffolding is to rework it to fit your needs, but do I really want to do the rote replacement of text strings with g:message tags in ALL my generated gsp's? Umm.. No.   Fortunately for me, &lt;a href="http://marceloverdijk.blogspot.com/"&gt;Marcel Overdijk&lt;/a&gt; released a &lt;a href="http://www.grails.org/I18n+Templates+Plugin"&gt;plugin that addresses this issue&lt;/a&gt; by replacing the scaffolding templates with i18n versions AND adds commands to generate the necessary property resource files.  Very nice.&lt;br /&gt;&lt;br /&gt;My next hurdle was replacing what I believe EVERY grails developer feels compelled to replace.  The g:datepicker control/tag .  I really love Grails.  There are so MANY things to love about Grails its hard to say without making a very long list.  But the g:datepicker is just, well, funny.  I don't mean ODD funny (though it is that too), I mean HA! HA! &lt;span style="font-style: italic;"&gt;who would ever subject their customers to this brand of data input insanity&lt;/span&gt; funny. &lt;br /&gt;&lt;br /&gt;My first thought was to replace the datePicker with the &lt;a href="http://docs.codehaus.org/display/GRAILS/RichUI+Plugin"&gt;richui plugin&lt;/a&gt; calendar (dateChooser) control.  It works fine and does what you expect a popup calendar to do.  I then dug into what it would take to do i18n with it.  The &lt;a href="http://developer.yahoo.com/yui/calendar/"&gt;Yahoo docs on the calendar control&lt;/a&gt; (on which the richui dateChooser is based), give examples on how to render the calendar in other languages.  Unfortunately the code needed to perform this is all balled up in a standalone javascript file that supports English  (and I think German?). &lt;br /&gt;&lt;br /&gt;I don't write this to criticize the richui plugin, which has an awesome set of rich controls that I intend to exploit to their fullest.  I'm really just pointing out that you can't just have SOME i18n support in your app components and expect to have an easy ride of it.   i18n is something that you really have to think about and plan  for at the beginning of your project.  You must instill discipline.  And you will rewrite plugin code.  I ripped off code from a jsf calendar control and from some other javascript date pattern sources to rework the richui calendar control.  I've got it working, but the code is something that only its mother (father?) could love.&lt;br /&gt;&lt;br /&gt;And I haven't even STARTED to look at currency yet...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2109140610958631949-7870501663532987062?l=wpfeiffe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wpfeiffe.blogspot.com/feeds/7870501663532987062/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2109140610958631949&amp;postID=7870501663532987062' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2109140610958631949/posts/default/7870501663532987062'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2109140610958631949/posts/default/7870501663532987062'/><link rel='alternate' type='text/html' href='http://wpfeiffe.blogspot.com/2008/04/grails-and-i18n.html' title='Grails and i18n'/><author><name>Bill Pfeiffer</name><uri>http://www.blogger.com/profile/13198536393187596944</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Htf8jNfGeA0/SgEFT_NuEaI/AAAAAAAAAVI/LXRysXEs1b4/S220/BillPfeiffer-SouthPark-Avatar-184px.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2109140610958631949.post-3662968581544529526</id><published>2008-03-07T04:47:00.000-08:00</published><updated>2008-03-08T18:04:13.498-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='spring aop aspectj jboss'/><title type='text'>Spring AOP named appropriately</title><content type='html'>I just went a long way to find out that &lt;a href="http://static.springframework.org/spring/docs/2.0.x/reference/aop.html#aop-pointcuts"&gt;&lt;span style="font-style: italic;"&gt;Spring&lt;/span&gt; AOP (2.0.x)&lt;/a&gt; is named quite appropriately.  You won't be using it to do AOP on non-spring managed classes which is what I wanted to do.  Note that you can use &lt;a href="http://www.eclipse.org/aspectj/"&gt;AspectJ&lt;/a&gt; or &lt;a href="http://labs.jboss.com/jbossaop/"&gt;JBoss AOP&lt;/a&gt; or whatever to do a post compile step which would have solved my immediate problem, but I didn't want to add to our build times.&lt;br /&gt;&lt;br /&gt;However, I did get both the annotation and xml schema version of their AOP config working, so I thought I'd put it on the blog.&lt;br /&gt;&lt;br /&gt;The first class/interface pair presented is my utility class consisting of 2 trivial methods that just log to a file.  This will be the target defined by the pointcut expression:&lt;br /&gt;&lt;pre name="code" class="java"&gt;&lt;br /&gt;public class UtilityClassImpl implements UtilityClass {&lt;br /&gt;   static Logger log = Logger.getLogger(UtilityClassImpl.class.getName());&lt;br /&gt;&lt;br /&gt;   public void doUtilityWork(String message) {&lt;br /&gt;       log.info("In the UtilityClassImpl.doUtilityWork method: '" + message + "'");&lt;br /&gt;   }&lt;br /&gt;   public void doOtherWork(String message) {&lt;br /&gt;       log.info("In the UtilityClassImpl.doOtherWork method: '" + message + "'");&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;public interface UtilityClass{&lt;br /&gt;   void doUtilityWork(String message);&lt;br /&gt;   void doOtherWork(String message);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;My original need was to call invoke my aspect before the method ran so that's what this aspect class will do:&lt;br /&gt;&lt;pre name="code" class="java"&gt;&lt;br /&gt;@Aspect&lt;br /&gt;public class UtilityLogger{&lt;br /&gt;   static Logger log = Logger.getLogger(UtilityLogger.class.getName());&lt;br /&gt;&lt;br /&gt;   @Before("execution (* *UtilityClass.*(..))")&lt;br /&gt;   public void utilityAdvice() {&lt;br /&gt;       log.info("In the Before advice");&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Note the Aspect and Before annotations.  The Aspect annotation is simple enough in that it marks the class as an Aspect.  The Before annotation is interesting in that it specifies the pointcut definition (execution (*...)) as the parameter to the annotation.  This definition is a regex like expression that tells Spring AOP which joinpoints (?) (in this case method) to invoke the aspect for.  This usage of the pointcut is really a shortcut. Usually a pointcut is defined separately in a strange annotation/empty method combination that allows for the pointcut definition to be re-used across different aspects.  I avoided that.&lt;br /&gt;&lt;br /&gt;The above two classes really show all the interesting pieces.  I'll show the Main test class and spring config below in the spirit of completeness but leave out log4j config as its pretty big.&lt;br /&gt;&lt;pre name="code" class="java"&gt;&lt;br /&gt;public class Main{&lt;br /&gt;   public static ApplicationContext springAppContext = null;&lt;br /&gt;   private UtilityClass utilityClass = null;&lt;br /&gt;&lt;br /&gt;   public static void main(String[] args) {&lt;br /&gt;       DOMConfigurator.configure(Main.class.getResource("/log4j.xml"));&lt;br /&gt;       String[] configLocations = {"spring-config.xml"};&lt;br /&gt;       springAppContext = new ClassPathXmlApplicationContext(configLocations);&lt;br /&gt;       Main myMain = (Main) springAppContext.getBean("Main");&lt;br /&gt;       myMain.runInstance();&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   public void runInstance() {&lt;br /&gt;       getUtilityClass().doUtilityWork("Using Spring injected bean");&lt;br /&gt;       getUtilityClass().doOtherWork("Another Using Spring injected bean");&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   public UtilityClass getUtilityClass() {return utilityClass;}&lt;br /&gt;&lt;br /&gt;   public void setUtilityClass(UtilityClass utilityClass)&lt;br /&gt;   {this.utilityClass = utilityClass;}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;And spring config:&lt;br /&gt;&lt;textarea name="code" class="java"&gt;&lt;br /&gt;&lt;?xml version="1.0" encoding="UTF-8"?&gt;&lt;br /&gt;&lt;beans xmlns="http://www.springframework.org/schema/beans"&lt;br /&gt;       xmlns:aop="http://www.springframework.org/schema/aop"&lt;br /&gt;       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&lt;br /&gt;       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd&lt;br /&gt;                          http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd"&gt;&lt;br /&gt;&lt;br /&gt;  &lt;aop:aspectj-autoproxy/&gt;&lt;br /&gt;  &lt;!--&lt;aop:config&gt;--&gt;&lt;br /&gt;    &lt;!--&lt;aop:aspect id="logginAspect" ref="UtilityLogger"&gt;--&gt;&lt;br /&gt;      &lt;!--&lt;aop:before--&gt;&lt;br /&gt;          &lt;!--method="utilityAdvice"--&gt;&lt;br /&gt;          &lt;!--pointcut="execution (* *UtilityClass.*(..))"/&gt;--&gt;&lt;br /&gt;    &lt;!--&lt;/aop:aspect&gt;--&gt;&lt;br /&gt;  &lt;!--&lt;/aop:config&gt;--&gt;&lt;br /&gt;  &lt;br /&gt;  &lt;bean id="Main" class="Main"&gt;&lt;br /&gt;    &lt;property name="utilityClass" ref="utilityClass"/&gt;&lt;br /&gt;  &lt;/bean&gt;&lt;br /&gt;  &lt;bean id="utilityClass" class="UtilityClassImpl" /&gt;&lt;br /&gt;  &lt;bean id="utilityLogger" class="UtilityLogger"/&gt;&lt;br /&gt;&lt;/beans&gt;&lt;br /&gt;&lt;/textarea&gt;&lt;br /&gt;Note that the xml shows has a commented section that shows the schema based definition of the aspect.  Simply uncomment that section and comment out the aop annotations in UtilityLogger to use the schema approach.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2109140610958631949-3662968581544529526?l=wpfeiffe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wpfeiffe.blogspot.com/feeds/3662968581544529526/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2109140610958631949&amp;postID=3662968581544529526' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2109140610958631949/posts/default/3662968581544529526'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2109140610958631949/posts/default/3662968581544529526'/><link rel='alternate' type='text/html' href='http://wpfeiffe.blogspot.com/2008/03/spring-aop-named-appropriately.html' title='Spring AOP named appropriately'/><author><name>Bill Pfeiffer</name><uri>http://www.blogger.com/profile/13198536393187596944</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Htf8jNfGeA0/SgEFT_NuEaI/AAAAAAAAAVI/LXRysXEs1b4/S220/BillPfeiffer-SouthPark-Avatar-184px.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2109140610958631949.post-6112989025798021609</id><published>2008-03-03T02:14:00.000-08:00</published><updated>2008-03-03T03:07:42.389-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='j2ee'/><category scheme='http://www.blogger.com/atom/ns#' term='ant'/><category scheme='http://www.blogger.com/atom/ns#' term='maven'/><category scheme='http://www.blogger.com/atom/ns#' term='Intellij IDEA'/><title type='text'>Looking at Maven</title><content type='html'>&lt;span style="font-weight: bold;"&gt;&lt;a href="http://maven.apache.org/"&gt;Maven&lt;/a&gt; motivation.&lt;/span&gt;  One of the things on my todo list has been to rework our j2ee (or jee) application's project layout to better take advantage of the IDE's in use at our office.  We put the structure together with the build process (using &lt;a href="http://ant.apache.org/"&gt;ant&lt;/a&gt;) about 4-5 years ago.  At the time we thought it would be great to have the source for all artifacts (war, ejb jar, util jar) together in one big source tree. &lt;br /&gt;&lt;br /&gt;While there have been some advantages to the approach, two downsides have become apparent over the course of the application's lifetime:&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;1. Leakage of dependancy.&lt;/span&gt;  As of right now, we have bits from each artifact imported into all the others, resulting in circular dependancies.  Our util jar has imports from packages in our war file and ejb jar.  Our ejb jar has imports from packages in our util jar, etc.  The IDE's and ant handle this okay , but it really represents a leakage of concerns and will make it hard to me to separate out the individual source tree / packages to go with the resulting artifacts (war, ejb jar, util jar).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;2. IDE's don't understand my artifacts&lt;/span&gt;.  We've structured our app such that it is IDE agnostic.  The build is done with ant, dependant libraries are kept externally in their own project.  We actively maintain both &lt;a href="http://www.jetbrains.com/idea/"&gt;Intellij IDEA &lt;/a&gt;and &lt;a href="http://www.eclipse.org/"&gt;eclipse&lt;/a&gt; versions of their respective project files.  The issue we run into is that neither of these IDE's understand that our project results in deployable, debuggable artifacts.  Because our source is glommed together, it is difficult to tell the IDE (in my case Intellij) that I really to have a deployable say war file and that it can deploy an exploded version. We end up deploying the entire ear file to JBoss and waiting for that deploy to happen, and then use remote debugging.  Not ideal for quick turn around.&lt;br /&gt;&lt;br /&gt;I started to rip the app apart to have separate independent structures for each artifact we generate.  This is handled in Intellij by using separate modules and eclipse by setting up separate dependent projects. &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Maven as solution&lt;/span&gt;.  At the time I was considering this, one of my co-workers had just come back from the &lt;a href="http://www.softwaresummit.com/"&gt;Colorado Software Summit&lt;/a&gt; and had gotten a little Maven religion. My only experience with Maven previous to this has been using it to build a few of the OSS projects/libraries that we use.  These builds had about a 50% success rate.  My coworker assured me that Maven 2 had ironed out a lot of problems and that it made sense for what we are trying to accomplish: impose structure into our project.  So far I like what I see.  The structure that Maven dictates may seem an imposition to some, but I welcome a standard project structure approach. &lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;Library dependencies.&lt;/span&gt; I am also hoping that the IDE's will start to understand the Maven library dependencies.  One of the onerous tasks of maintaining the IDE projects is setting up the library dependencies for each environment, including ant.  It looks like the Maven support in Intellij reads the pom file to build its module library dependency but it doesn't scan it for changes.   I haven't even touched the eclipse Maven plugin, so that'll be more exploration.&lt;br /&gt;&lt;br /&gt;The refactoring starts today...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2109140610958631949-6112989025798021609?l=wpfeiffe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wpfeiffe.blogspot.com/feeds/6112989025798021609/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2109140610958631949&amp;postID=6112989025798021609' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2109140610958631949/posts/default/6112989025798021609'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2109140610958631949/posts/default/6112989025798021609'/><link rel='alternate' type='text/html' href='http://wpfeiffe.blogspot.com/2008/03/looking-at-maven.html' title='Looking at Maven'/><author><name>Bill Pfeiffer</name><uri>http://www.blogger.com/profile/13198536393187596944</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Htf8jNfGeA0/SgEFT_NuEaI/AAAAAAAAAVI/LXRysXEs1b4/S220/BillPfeiffer-SouthPark-Avatar-184px.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2109140610958631949.post-4775275047578117208</id><published>2008-03-01T17:46:00.000-08:00</published><updated>2008-03-03T02:04:52.829-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='seam'/><category scheme='http://www.blogger.com/atom/ns#' term='groovy'/><title type='text'>Java Web Choices</title><content type='html'>I'm taking my first steps into the blogosphere with some hesitation.  Enough of what I see on even the technical blog space can turn quickly in to ranting.  Not that I don't enjoy a good rant, but I don't see that type of blog as really contributing much to the the tech community.  I'm hoping to avoid that by focusing this blog on technical issues I encounter while trying to move our development team into a new java based web architecture.&lt;br /&gt;&lt;br /&gt;My dev group has been using the tried, true and long in the tooth architectures of struts 1.x, ejb 2.x, hibernate 2.x for going on 3+ years and really want to reap the benefits of the lighter technologies (productivity, more responsive ui in ria, etc).&lt;br /&gt;&lt;br /&gt;My plan is to implement a small piece of functionality from my company's enterprise legacy/client/server application that needs to be brought to the web.  I will gather requirements as normal but then implement it 4 separate times using the following combinations:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;1. &lt;a href="http://www.seamframework.org"&gt;Seam&lt;/a&gt; (+JSF).&lt;/span&gt;  Really this is just the basic Seam usage model, but really represents a major change for my group in the form of JSF.  Our group has been doing JSP's for so long that the idea of a component rendering framework with associated lifecycle is going to be quite a mind shift.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;2. Seam+Flex.&lt;/span&gt;  I did a trial balloon application in &lt;a href="http://www.adobe.com/products/flex/"&gt;Flex&lt;/a&gt; about 10 months ago.  Same type of app: reworking client server functionality for the web.  I really grew to love Flexbuilder and the mxml/actionscript model for developing GUI's for the web.  I didn't have &lt;a href="http://opensource.adobe.com/wiki/display/blazeds/BlazeDS"&gt;BlazeDS&lt;/a&gt; then so just used a combination of web svcs and http rest style calls which worked out fine, but led to a lot of infrastructure code I could have done without.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;3. &lt;a href="http://grails.org/"&gt;Grails&lt;/a&gt;.&lt;span style="font-weight:bold;"&gt;&lt;/span&gt;&lt;/span&gt;  The &lt;a href="http://groovy.codehaus.org/"&gt;Groovy&lt;/a&gt; Grails stack offers some much goodness to the java web developer that I would just point people to the web site.  It really shines for green field applications.  I have lots of investigating to do on making it work within our legacy environment.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;4. Grails+Flex.&lt;/span&gt;  Because I really enjoyed flex and saw some cool symbiosis between the two technologies at the &lt;a href="http://www.groovygrails.com/gg/2gexperience"&gt;G2x conference&lt;/a&gt; last week.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;A word about Groovy&lt;/span&gt;.  I took a brief look at Ruby about 2 years ago (or whenever the Rails hype started rolling).  I loved the language and what you could do with it, but I never really felt like I could make a reasonable transition to it within our (my company's) environment.  Groovy seems as if it were built from the ground up to answer my dilemma.  Gives me the dynamic language goodness and integrates as clean as possible with java.  I plan to use Groovy as the language (where java applies) for all 4 of the above scenarios. Obviously actionscript will be used for flex front ends.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I hope to post the first of my findings within the next few weeks.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2109140610958631949-4775275047578117208?l=wpfeiffe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wpfeiffe.blogspot.com/feeds/4775275047578117208/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2109140610958631949&amp;postID=4775275047578117208' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2109140610958631949/posts/default/4775275047578117208'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2109140610958631949/posts/default/4775275047578117208'/><link rel='alternate' type='text/html' href='http://wpfeiffe.blogspot.com/2008/03/java-web-choices.html' title='Java Web Choices'/><author><name>Bill Pfeiffer</name><uri>http://www.blogger.com/profile/13198536393187596944</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_Htf8jNfGeA0/SgEFT_NuEaI/AAAAAAAAAVI/LXRysXEs1b4/S220/BillPfeiffer-SouthPark-Avatar-184px.jpg'/></author><thr:total>0</thr:total></entry></feed>
