This is the second article of the Devoxx 2008 conference, in which the most important event was my only presentation on JavaFX: Animations, Timelines and Collision Analysis for Project Goliath. The slides of the my JavaFX presentation are now available.
Photo courtesy of Dan Hardiker (dhardiker) uploaded onto Flickr.
Seam in Action
This university session was a really good introduction into the SEAM Framework, by a really passionate speaker. SEAM has support for EJB 3, but did you know it can work just as well with simple POJO (Plain Old Java Objects) as well. Dan Allen explained the rapid prototyping of the SEAM-GEN, although it was not so clear from the fast typing what menus to select in the Eclipse JBoss Tools IDE 2.0. I think it was so new. What was clear is that you do not need to write lot of XML, instead just add a whole suite of Java annotation into your code. This is fine, because I do not like a lot of XML anyway, now that I can program with Java 6 at work and at home. Allen did a very good job of explaining the purpose of a SEAM component. An EJB stateful can be a component or a POJO, but what blew me away was that you can program a SEAM component as a Groovy objection. Then, Allen, moved on to the tricky subjection of bijection (bidirectional inversion of control injection) with a consistent Golf theme. Sadly, I had to leave this university session halfway through it and then prepare for my own JavaFX talk. I missed, therefore, the rather nice stuff about AJAX rich components, SEAM conversations and general best practice deployment advice. I very recently invested in his book Seam in Action. I read the first chapter, I wish this book was the first book and only one on SEAM that I bought.
Filthy Rich Clients: Beyond Java
Romain Guy and Chet Haase
As you most of you already know, these guys, wrote the great book, first, on writing better richer and beautiful user interfaces in Java. Long before JavaFX, Guy and Haase, invented Aerith and MP3 media player. So yours truly was very interested to getting an update on their new platforms, respectively Google Android, for mobile phones, and Adobe Flex, a competing Rich Internet Application solution for desktop computing.
Both of the speakers, took turns talking about their platform solutions and giving demonstrations. The Android demos were limited with certains effects, where as the Flex one had the rull resources of the desktop to use. Both of these guys are great engineers, they explained that performance was critical. It was the key message. You have really understand buffered images, the composition of these images, by pixel structure and the target device that the images are going to be rendered to. Better to have compatible images of the video device and working on bitmaps of them in your code, than to not to do so, because of lack of knowledge.
The Google Android phone with it pull up and down slider menu made heavy use of managed bitmapped images. Why? Some operations such as Blurring, Glowing, and Distortion effects means almost certainly going back to the Video Ram in order to read individual neighbouring pixels from the screen and merging them together with the managed bitmap image. This is a round trip and cost of performance dearly. In fact anything that uses opacity can be a performance headache. So both platforms made great use of caches and captured bitmaps, especially in animations, such a drag and drop icon images. I think Guy quipped about the performance of JavaFX SDK 1.0 when he tried it on the release day. Clearly Flex is way ahead in some features such as performance, scalability and smoothness of animations.
I was particularly intrigued by the apparent ease-of-programming of the Android platform from Guy's presentation and the one that he did on Monday. So much so that I bought the Apress Early access book for Android Programming from the book seller downstairs in the exhibition for 16 Euros.
Sharding in Hibernate: funny word, serious scaling
Now a word for the wise, partitioning of databases and data sets, has been around a long time. Oracle has a product and can support partitioning of table spaces across a database. Various database vendors and independent solution providers can point to their proprietary solutions. This is the first time that I see open source solution partitioning. Andrew Glover spoke to the hall and introduced the concept of Sharding in Hibernate. It is an add- on for Hibernate created by Google engineers. Glover correctly explained that Sharding is a big mallet to solve the process of a splitting large databases into separate instances (or shards) for performance and scalability reasons. A Hibernate shard is horizontal, applies to rows of data, whereas partitioning can also be column based. For instance you may want to split a high volume customer database by surname into shards A-H, G-M, N-S and T-Z. Each of these shards would point to a different database cluster. Sharding allows better scalability if the query are restricted to a single shard. Joining and merging wholesale query would immediately negate the benefits of sharding. Glover also explained that there were incompatibility with Spring Framework and Hibernate Shards. In order words to get a ShardHibernateSession to work successfully, he had to shoehorn his own implementation as a bean factory and custom beans. Overall I found this talk interesting and maybe sharding will effect me in the mid-to-long term future.
RESTing easy with Grails
Sadly, I only got to see the first fifthteen minutes of this talk. I already attempted to write a Grails web application earlier in the year. I think Grails is very useful for a company to get their first web site up and running with a JVM language. Provided that their volume will be mid-range and the stake holders understand the benefits of investing on the JVM. In other words there are lots of Java open source libraries to take advantage of and the fact that recruitment of developers in neither sparse nor unskilled. This, then, was update, for me at least, on the RESful capabilities of Grails. It does look very easy get RESTful interfaces and mix them with regular HTML (Groovy Server Pages) output. Glover explained it is possible by looking at the content type parameter in the HttpRequest and then decide whether to return the appropriate response (i.e. "content-type = text/html, text/xml or text/json" }. The secret to getting RESTful service in any Grails is to modify the mapping of actions to Http Input.
Al CodaJavaFX had a big launch yesterday with a full University Session of its own. Today was the day for the competing solutions like SEAM, Flex and Android. Who would be the architect sitting on a meeting with management attempting to advice the best technologies for a project?
For my money. Excuse me! For your money.
You are a small company. You need a web site with a time-to-market really fast and accept dynamic changes regularly. You volume is small to mid range. You can afford to small to mid-level wages then go for Groovy and Grails.
You are a medium company. You also need a web site, but your time-to-market is medium. You want due care and attention for your web presence. Your changes are average in comparison with Grails and Ruby. You need integration with other Java EE applications and a comprehensive migration path to future proof your enterprise. You care afford the salaries of mid-level Java EE developers then go for SEAM.
You are a small, medium company or you are part of internal department of a large company. You need a better-than average web application, because you have high performance graphical requirements. You want to forgo all the cross-browser incompatibilities. You should then go for a RIA solution. If you want complete integration with Java, then your only new choice is JavaFX, but you will lose out on expertise, because FX is so new! If you cannot afford to wait for FX to mature and you really need that company department dashboard yesterday (and also have the deep pockets to hire contract engineers and designers in to do the work. In other word build an agile team from scratch) then you will probably look at Flex 3 for now. I would not bother with SilverLight, unless you are going to be 100% only deploying to a Microsoft operating system computer.
Louis Emmett, JAVAWUG speaker and member.
Vaclav Pech, JetBrains Engineer, thanks for the shirt
Markus Kobler, thanks again for taking that video feed of my JavaFX presentation.
Peter Kriens, thanks for the car ride from the Metropolis to Parkhuis.
Phil Zoio, who made to the Speaker's dinner at Parkhuis
Darius, of the Stuttgart JUG
Federic Simon, Co-founder chief architect of Arifactory