Summary of the event (in English)
Java IDE day is supported by
Java IDE Day 2008
When last year Fabrizio Giudici "threw" the idea of organizing a follow-up to the very successfull IDE shootout in Cologne, we were enthusiastic at first... but then we took some time to evaluate the whole thing. Our JUG Genova is quite small. Even if on paper it dates back to several years ago, it used to be no more than a low participation mailing list until a new group of participants brought it back to activity at the beginning of 2007.
But the idea was fascinating, and so we decided to take this challenge... together with JUG Roma, which also was interested in the proposal, we invited representatives from the four major IDEs (NetBeans, Eclipse, IntelliJ IDEA, JDeveloper); everyone was very interested and supportive, although, unfortunately, Eclipse was unable to participate because it was already involved in other events (including, obviously, EclipseCon) in the same period.
We decided that the event had to be less than a "confrontation" of the IDEs and more of a community event, where experts, developers and students could discuss the innovation and the future of Java development tools.
We think that this idea did resonate in many places, since we received significant (and absolutely necessary) support in organizing the IDE day not only from Sun, Oracle and JetBrains, from the Faculties of Engineering of Genova and Rome Universities, but also from the Open-Lab student association and O'Reilly UK.
Moreover, a number of local companies active in Java development, traning and consulting were happy to support the event. They offered a coffee break and, more importantly, promoted the Java IDE Day among their employees and contacts: Eptamedia, Finsa Consulting, ManyDesigns, NIS and K-Tech.
The IDE day took place in Genova on the 10th of March and in Rome the following 12th. It definitely was a success: more than 200 developers attended it overall (130 in Genova and 70 in Rome). Beside the number, a positive result has been that everyone could appreciate three very interesting speakers showing not just very high quality technical content but more significantly, a lot of collaboration between them.
This report is more focused on the Genova event; for more information on the Rome event you can visit Report on javaportal.it (in Italian).
For more pictures, see the photo gallery.
Opening by JUG Genova
The Genoa IDE Day began at 14.30 in the main B1 classroom at the Faculty of Engineering... when we were allowed to use the main faculty room we did fear a bit that it could look too "empty", but this was not the case! In fact as soon as the registrations started coming through via the very effective http://www.jugevents.org website, we understood that a big room was definitely needed. In fact, more than 130 passionate Java developers attended the event.
Carlo Bonamico then gave a short welcome on behalf of the JUG Genova, where he first thanked everyone who made the event possible and stressed that the IDE day was about sharing and exchanging the interest and knowledge of Java tools and being a meeting opportunity for the many people who, even if Genova is definitely no Silicon Valley, work on similar technologies and projects without knowing each other.
Carlo summarized the main activities of JUG Genova (to keep in touch with future activities organized by JUG Genova, you can subscribe to the low traffic mailing list http://groups.google.com/group/jug-genova-announce or contact juggenova AT gmail DOT com; a discussion group is also available at http://groups.google.com/group/jug-genova).
Carlo finally announced the upcoming JUG meeting on Maven 2 and then introduced Roman Strobl, Sun's NebBeans evangelist.
Slides from all talks and online screencast corresponding to the live demos which were performed at the event are available on the Presentations page.
He demonstrated the beta release of NetBeans 6.1 which includes significant performance improvements both in startup and editor responsiveness. Release 6.1 has also better support for sharing projects with team members.
Roman showcased a number of wizards that help setting up a project quickly, while at the same time producing code which is simple, readable and modifiable, in three key areas: persistence, Swing and JSF.
In the first part, Roman demonstrated the creation of a Swing-based Deskop application able to perform CRUD operations on a music database. He used a MySQL database (guess what... after Sun's acquisition of MySQL ;-) ).
He showed how to quiclky create a JPA entity from a database table (selected using NetBeans' easy to use DB explorer), complete with annotations.
A very interesting feature of NetBeans is that for all projects a Java Web Start (i.e. JNLP) support is generated automatically.
In the second part of his speech, Roman took advantage of JSF support in NetBeans to automatically generate a basic set of JSF pages performing CRUD operations on an annotated Entity ("JSF from Entity"). He compared the support of JSF manual editing with the Visual JSF framework that allows the drag-and-drop creation of web pages. Visual JSF has become more sophisticated in version 6.1, and produces simpler code.
He said that the latter is more suited to small-to-medium sized projects, while in bigger ones where different parts of the system are created using different tools manual JSF support is more suitable. The JSF editor has been improved in 6.1 with Expression Language completion, and inline documentation tooltip window.
A third part of the presentation concerned the Profiler, which has been greatly improved and now allows live monitoring of a running application, by analyzing execution times, memory consumption, and visually exploring object instance trees. Being asked if the profiler is able to export test results in a report format, Roman said that this at the moment is not supported while exporting the tracing data in the dump binary format understood by JDK tools is possible.
He finally showed the Quick Fixes and warnings feature that continuously outlines potential issue with your code from unused variables to missing imports.
NetBeans is a quickly developing platform, also thanks to the vast amount of plugins (although not as vast as Eclipse's) which are available. Towards the end of his talk Roman asked how much time was left and when we said "well, three minutes", he answered with "and I will now show how to build a NetBeans plugin in three minutes", which he did. The NetBeans platform is quite powerful and well supported by the IDE, which means that he could actually create the plugin module (.nbm) and design the plugin GUI with Matisse in a few minutes. NetBeans also allows you to test the plugin within the IDE without having to launch a separate IDE/NetBeans platform instance.
At the same time Roman was throwing T-Shirts to participants asking questions during his talk... the main questions involved AJAX support (which is available through jMaki and through JSF component libraries), PHP support (which si coming), hardware requirements (512 MB but 1 GB is better), SWT support in Matisse (not there, but theoretically feasible through plugins).
Slides from all talks and online screencasts corresponding to the live demos which were performed at the event are available on the Presentations page.
After a quick laptop switch, the second speaker, Paolo Ramasso from Oracle, immediately started his 45 minutes slot.
He demonstrated the latest TP3 of the upcoming JDeveloper Release 11. While the beta nature of the IDE did actually cause a few glitches in the editors which put Paolo under pressure, it also allowed him to show a number of innovative features.
jDeveloper is based on the JSR-198 IDE plugin architecture, making it quite extensible, and focuses on full lifecycle support for the project, from analysis to deployment and maintenance.
Paolo started with demonstrating the object-relational mapping capabilities of EJB 3.0, by quickly creating an Entity class from a DB table (Oracle, of course! but he stressed that jDev is not Oracle specific and supports any DB with JDBC support). The wizard also automatically handles relationships, so if you select more than one table, the corresponbding Entities will reference each other in Java, too. This feature definitely looks as a time-saver when you have to deal with complex data mappings, as it handles the simplest mappings for you and let you concentrate on fine tuning the configuration.
By default, the open source toplink essential engine is used.
An easy to understand EJB diagram is generated automatically, and new beans (such as Session Bean front-ends to Entities) can be added both visually and in the code.
After defining a few queries using annotations, the New Service Fašade from EJB Entity wizard automatically generated both the normal CRUD code and a series of query methods linked to the @NamedQuery annotations, which are easily completed by the programmer.
The IDE is also able to generate Fašades to be used in J2SE, which simplifies testing and Rich Client development. The generated code includes transaction management and the IDE is able to run and test session beans as soon as they are completed.
Paolo then moved to the presentation layer, where he discussed the support for Java Server Faces and particularly Oracle's own ADF framework. ADF is composed of two parts: a component libray (now open source under the Apache Trinidad project), and an application model framework which is able to abstract all types of business services (EJBs, BPEL, Web Services, XML, portlets) and easily develop an application which is decoupled from the data sources and business services it uses.
ADF Rich Client (JSF extensions) are based on facelets, which means that the layout and presentation options are very powerful and extensible.
The ADF Data Controls are based on a Model-View-Controller architecture, which hides a range of different models (EJBs, Web Services, ...) under a common model layer. This is the only part of jDeveloper platform which requires a commercial license.
The IDE also supports visual editing of facelets-based pages, where it is possible to drag a JSF managed bean/controller method into a page section to have it populated with the data returned by the bean.
Paolo concluded his talk with a review of the other main features of JDeveloper, with a particular focus on JAX-WS Web Service support, SOA and BPEL design.
Questions mostly involved the licensing options (JDeveloper is free except for the ADF layer, which is not optional) and the application server support. Paolo stressed that jDeveloper has very good support for deploying not just to OC4J but also to many applications servers, including JBoss, WebSphere and Glassfish, and deploying/connecting to an already running server is a breeze. All DB/server connection dialogs allow you to test the parameters before actually confirming them.
Slides from all talks and online screencasts corresponding to the live demos which were performed at the event are available on the Presentations page.
After a coffee break with the typical local focaccia, fruit juice, and italian coffee at the caffetteria, during which technical discussions continued in smaller groups, it was Vaclav Pech's turn. Vaclav really did engage the audience also thanks to his very clear English.
Vaclav focused on Spring and Hibernate support in his demo, showing how IDEA also gives strong emphasis to cross-technology support, allowing autocompletion and refactoring to cross language and framework boundaries: Vaclav demonstrated refactoring in a Spring application context xml file that propagates seamlessly to Java code, or refactoring involving JSP pages and Java classes at the same time.
The Spring support includes a visual bean view which outlines dependency-injection relationships.
Similarly, he showed how autocompletion can suggest which properties to inject into a Spring bean definition. Conversely, IDEA takes the idea of programming by intention to a new level: in general, you can start outlining the main structure of a method or definition, and use methods or bean properties that you have not written yet, and IDEA will not complain! On the contrary, it lets you continue specifying the main method body without losing the conceptual flow, and then come back and have the missing methods or bean properties automatically created by the IDE.
But it is refactoring the area where IDEA really shines: it is possible to refactor broken code (Vaclav demonstrated this by filling a body method with random keypresses) and also use and then refactor classes which have not been declared yet, as the IDE simply infers their structure from the code you have already written. He demonstrated this by using an array of istances of a new Apple class, and having the IDE autocomplete and then refactor a foreach loop on it before actually coding the Apple class.
At this point there was a nice surprise in that Vaclav asked how many mouse movements did he need to write and refactor all that code... and the answer was clearly zero! He confirmed it by showing that the mouse was unplugged (a new meaning of unplugged performance...). IDEA has very intuitive keyboard shortcuts to avoid intterrupting your concentration and coding flow.
Throughout the coding session the IDE was providing hints and warnings by means of yellow outlines, which automatically detected things like potential NullPointerExceptions, inverted if logic, swapped width and height parameters in a setSize() method call, demonstrating IDEAs powerful static code analysis features.
Moving on to Hibernate support, IDEA automatically creates a relationship diagram for hibernate entities, starting from either JPA annotations or XML mappings. The editor automatically handles code-completion of mapping parameters starting from DB metadata (e.g. column names and types).
IDEA powerful refactoring capabilities even allow refactoring in the EJB Query Language to propagate to the Java code and viceversa.
Vaclav concluded his talk by demonstrating a range of innovative features of IDEA 7:
Questions involved the support for conditional breakpoints (which is available), the possibility of temporarily disabling refactorings, the license (commercial, but with special pricing for individuals, and free for classroom use and open source projects) and the support for plugins. IntelliJ IDEA, too, supports external plugins that add more language/framework support, and there is a plugin SDK available. It is also possible to join an early access program which allow developers to participate in shaping the future of IDEA.
Free books, DVDs and licenses
After the question time, Vaclav finished his talk by giving away free IntelliJ licenses to a number of randomly selected participants; during the coffee break, Roman, too, had given away about 50 NetBeans DVDs in an incredibly short amount of time :-)! All the speakers been very supportive of the event and of our JUG activities in general.
Panel on the future of Java IDEs
The Java IDE day ended with a very interesting discussion where the three speakers answered questions asked by JUG members. The full transcript is available in the Panel page.
Again, a huge THANK YOU to everyone who made the IDE day a reality, and particularly to Paolo, Angelo, Alessandro, Giampiero, Corrado A, Corrado L, Fabio, Fabrizio, Mara, Giorgio, Carlo