I (Joe Wright) attended Devoxx 2009 on behalf of the JUG. Here are some notes from the talks I attended. Please email the mailing list with any questions you have, I'll do my best to answer them there.
Day 1
Keynotes: Oracle, Adobe
Oracle were expected to have bought over Sun by now, but as that's still on going they weren't able to talk about the merger. Essentially they just talked about their current Java portfolio and did a demo with Scala and Lift. They showed off a graphical architecture creation program that works with Weblogic DM. Bit of a lame duck, but lot's of great talks followed.
Adobe had a presentation with the amount of glitz you'd expect. The highlight was a new way of making Flex applications. A designer can give a programmer a Photoshop design with layers which can then be directly used to create a Flex app. It had tabular data and they showed creating a custom scrollbar straight from a graphic. Once finished the project was available within their Eclipse plugin called Flexbuilder as a normal project.
They focused on the work they are doing around Mobile devices and Air. They've drastically cut the memory footprint for mobile devices. They showed off a Palm Pre running a heavyweight Flex application in a live demo. Air is getting much better desktop support with USB access and an ability to use native OS launchers.
Java 7 by Mark Reinhold (Java 7 lead)
In Short: Faster JVM startup times, Jars being removed
Java 7 has 4 goals: Modular, Multi-Lingual, Productive, Performant. The talk was based around these themes.
Modular: Project Jigsaw is making Java modular, so you only load the parts you need (no CORBA for instance). Plans are afoot to remove jars entirely (they were an accident).
Multi-lingual: Focusing on Ruby and Python support, though there a lot of languages on the JVM. InvokeDynamic will be the first new bytecode keyword in 14 years.
Productive: Fork/Join framework for easy divide/conquer/merge. Mark wants simple closures included. Language Changes: new language features in Java 7
They've ported TimSort from Python, which is a faster QuickSort (pretty amazing that someone came up with a faster QuickSort after all this time). A library has been added to allow the creation of symbolic links.
The Java SE 7 is made via jcp.org and will be created next year. It is a separate process from the JDK.
The JDK for Java 7 will be feature complete by June and released in September (that's a 5 month slip from original estimates).
The Java Store by James Gosling
Sun are creating an online market place for Java applications at store.java.com. The talk was mainly about the legal and compliance issues you need to jump through to sell software. The store is US only for now and will use the 70/30 split used by Apple AppStore for sales.
The main thing that caught my attention was the very Sun type statement: "We are doing this for the developers, not to make money".
Programming Models by Cameron Purdy
Scalability talk as programming is now very multi-core based. The talk focused on code, database and server levels.
Ways to scale: Load balancing, sharding, caching, parallelism and queues.
His main theme was that we should stop thinking "for each do" and more "against each do".
Scala Test by Bill Venners
In Short: Could be a great way to write Integration tests as it operates at a higher level than JUnit
Background: There are a lot of testing frameworks cropping up which are promoting behaviour driven development. This is a higher level than Unit Testing. BDD tests are written in a natural language style and usually take the form of "Given, When, Then". The output is colour coded saying which parts of the test pass. Expected results can be tabular data. The test itself is parsed using regular expressions. See Cucumber for a mature example: http://cukes.info/
Scala Test is intended to be testing at a higher level than JUnit. Not how to test but what to test. The same way Java allows you to abstract from memory management.
Bill listed 4 features he likes from Scala Test other testing frameworks:
1. Better exception interception with blocks:
intercept(Exception.class){//code that throws desired exception }
2. Cleaner mocks, again using blocks
3. Focused tests with descriptive names (again blocks): test("that something happens"){}
BDD, Shoulda, Spec
4. More ways to reduce code duplication
He went over some gotchas for people migrating from JUnit and said that Scala Test is a great way to get started with Scala.
Project Coin by Joe Darcy
In Short: New code style for Java, focus on immutable collections
In detail. Sun expressed a preference for adding methods to libraries over changing the language. He quoted Guy Steele by saying "I can say yes to each of your suggestions, but I have to say no to all".
An example is people asked for String to be iterable. The main use case for this is for creating a delimitated version of it. For this reason String will now have a String.join method.
The Elvis operator from Groovy which does null checking and instantiation was rejected, but the multi catch exception blocks are under review.
There was a lot of talk about reification of types, and their reasoning compared to C#.
Day 2
Keynotes: Ivar Jacobson and Robert C. Martin
In Short: A way of describing the development methodology used could help us measure software
Both of these keynotes were more about the person than an individual technology. Both talks discussed methodology and the lack of standards or professionalism in some respects.
Ivar is trying to create a way of describing different methodologies that currently exist called SEMAT. He was upset by the trend in programming to jump on the next fashion trend (which costs money to change to as young programmers love to use new methodologies). He said that Scrum was just ideas that already existed used together.
His SEMAT initiative plans to describe existing methods to allow people to describe how they work. Example: Gathering Requirements, 3 standard approaches (he had a further breakdown).
• Model Driven through UML
• User Story based
• Requirements Gathering
He said that he did the keynote at a CMMI conference where his talks title was: "What CMMI doesn't give you: good software.". He wasn't invited back.
His sign off: "There is nothing as practical as a good theory"
Robert C. Martin (aka Uncle Bob) gave an entertaining talk about pride in craftsmanship. If anyone has ever seen George Carlin perform, imagine that but focused on being a professional software developer.
He pointed out that a lot of good programmers go on to become managers, thus removing their experience from the pool of active developers. He highlighted this by asking how many people in the audience had more than 10 years experience programming, about 35% raised their hand. He also asked how many people had over 80% test coverage, only 4 people out of 900 raised their hand.
Spring 3.0 by Arjean Poutsma
In Short: REST Support via Annotations, 95% compatible with Spring 2.5, Less casting objects (compile time checking possible) as Java 5 based. Java5 based (generics), Expression Language in Core, REST, Portlet, Validation and Backwards compatible to 2.5 in 95% of cases.
Their XML lib called OXOM which is similar to XStream is being used around the framework. The Expression Language from Webflow is also being promoted.
REST support is annotation based. They are leading JSR-330 which is the Dependency Injection framework for JEE6.
They are dropping Quartz in favour of there own cron which is annotation based: @Aync("cron pattern")
iBeans by Ross Mason
In a nutshell: "WSDL on steroids with no XML".
Ross is the creator of the Mule ESB. He's made a framework on top of it which integrates services like confluence, eBay, jira, facebook to make them very easy to use via annotations. He's created an online library for reuse of these beans. The interesting thing is that you install the framework into Tomcat, rather than your webapp. He's working on desktop support at present.
You end up with interfaces like this:
@Receive(uri=xmpp:server)
List<Messages> getPrivateMessages(String user)
JEE6 Deep Dive by Roberto Chinnici
In Short: No more web.xml, using Annotations. Pluggable Jars to allow reuse of servlets/static html in webapps. Glassfish has deploy on save functionality via IDE plugins.
This is released on the 10th December 2009. There are a lot of changes which are mainly annotation based with very little xml. web.xml is now optional as the container can find everything via the annotations on classes.
Modularity is supported by allowing you to create jars which only contain static files or other resources. A new web-fragment.xml (same schema as web.xml) can provide servlets from additional jars in your WEB-INF. The example was dropping in a monitoring service.
There was an impressive demo on Glassfish with Netbeans/Eclipse. The server startup time was under 3 seconds for an EJB container. It has deploy on save while preserving sessions. You can launch Glassfish (like others) by doing: java -jar glassfish.jar mywebapp.war
They are working with the maven2 team to provide integration. One nice feature was that the entire framework can be included by 1 dependency in a maven2 pom.xml
Glassfish is OSGI based and only the classes required are loaded. This is how they achieve the quick startup.
Maven3 by Jason Van Zyl
In Short: Eclipse RCP builds agnostic to Eclipse (using existing Manifest files), Multi-threaded speed boost, improved maven embedded, better usability, Pom.xml is exactly the same though can be written in another markup. MavenShell exists which caches and only compiles what's changed.
Why Maven3?
• They got the command line wrong
• They needed to change the architecture
• OSGI applications
• They wanted to put in a shell
Maven3 uses exactly the same pom format as Maven2. They are working with Cisco and SAP during their UAT phase to guarantee existing plugins will work. Only XDoclet has known bugs. The release is in January 2010.
Nifty things:
Multi threaded for downloads and all execution parts. Colour output and Growl support. Changed from using Plexus to Guice. Extensions points the same as Eclipse. Better error messages which print Wiki links rather than stack traces for common problems. A maven shell has been added for quick compilation (cache and multi-threaded).
Maven Embedded:
The execution plan is now available to maven embedded API users. This means you can change parts of the execution plan depending on your needs. M2Eclipse is made by the Maven3 team and they've made it support incremental builds by only recompiling classes which have changed
Maven Embedded essentially just ran the CLI before. Now it multi-threaded and has a cache. It's able to use the Eclipse JDT from within this itself now as well. Tests have shown this to be 200%-300% faster.
Tycho:
Tycho is a project that is designed to build Eclipse RCP applications from Maven3 by reverse engineering the existing metadata. Maven3 has changed it's architecture so it launches the P2 framework from within itself. As Maven3 is OSGI based, it just launches the Eclipse dependency resolver instead of it's own. This means it has the same abilities as the normal Eclipse headless build but with no nasty ant files.
One great feature is that it doesn't even need an installation of Eclipse. It's able to reference a target platform from a URL.
Polyglot:
Pom.xml can now be created by a ProjectBuilder class. Added built-in languages are Groovy and Json (pom.groovy and pom.js). A translator comes with Maven3 which converts the xml to Groovy.
There is a form on pom mixin supported which is intended to help plugin writers. The release plugin and Spring plugin are using these already.