Think of CDI as the core of Seam 3.
Seam 3 Interview
Java Magazin author Michael Schütz met up with Seam project lead Pete Muir at JUDCon 2010 in Berlin, to ask him about the upcoming Seam 3 release, as well as finding out whether we can expect Seam in the Cloud anyime soon......
Michael Schütz: Hi Pete, thanks for your time. Could you please briefly tell us about yourself and your current jobs and responsibilities?
Pete Muir: Hi Michael. I'm currently the project lead for Seam, Weld, and the CDI TCK. I'm also a co-founder of the Arquillian project, and work with the JBoss AS team. I've worked for Red Hat on JBoss projects for the last 3 years, and before that was involved in the Seam community for a year or so.
Michael Schütz: Are you having a good time here in Berlin?
Pete Muir: I'm having a really good time, thanks. It's been a while since I visited, it's a great city! I'm in town for the 2nd JUDCon (the JBoss Users and Developers Conference), which is focused on technical presentations of JBoss projects, giving attendees a great chance to discuss their favourite projects, and to influence the direction of them. I'm a great believer that what makes a good framework developer is really understanding the problems the framework solves - this is obviously at odds with working on the framework full time, so I really value the chance to talk to people in depth about how they are using the projects I work on and listen to their pains.
Michael Schütz: That makes a lot of sense. OK, let's talk about Seam 3. What most people probably might be interested in most is when will Seam 3 be GA- ready? Which parts of Seam 3 can I use just now?
Pete Muir: Seam 3 is a superset of CDI. Think of CDI as the core of Seam 3 - it's the basic programming model for your application components, and for the built-in components that make up the Seam framework. Weld is our implementation of this programming model. Based on this programming model, Seam provides a full framework for application development, including integration with various non-standard open source technologies. JSR-299 defines a very powerful framework for portable extensions. Seam 3 is implemented as a set of portable extensions, or modules, for JSR-299, that run in any environment which supports JSR-299 (including any Java EE 6 environment).
The following diagram illustrates the relationship between Seam 2, Seam 3 and Weld/JSR-299:
Seam is the vehicle which delivers BPM integration, Seam Security, Drools integration, RESTeasy integration, PDF and email templates, Excel generation, etc. You can think of Seam as the goodies. Seam will also contain patches for Java EE, like JSF fixes (yes, still) and Seam-managed persistence.
We are aiming to deliver the full 3.0.0 release of Seam this year, however some of the many components are already available. These include the CDI core contextual DI engine, and integrations with the Java EE platform, including JSF, Servlet, JAX-RS, EJB and WS. These are all stable. There is also a beta of Weld Extensions, which is the base on which we build Seam + common beans such as logging and resource loading. Also in beta, are GWT integration, Seam Remoting and Seam XML. There are alphas currently available for Seam Faces, Seam Persistence, Seam Drools and Seam Security.
You can find out more about these modules at the Seam framework website.
Michael Schütz: What are the issues delaying the shipping of Seam 3? Are the independent modules slowing down the process?
Pete Muir: A number of things have delayed the release beyond original estimates.
These include a decision to concentrate resources onto Arquillian (a framework for testing your applications in the container, find out more at the Arquillian website), and onto Seam Forge (the successor to seam-gen, this tool aims to provide an excellent environment in which to scaffold new projects, not just for Seam, but for any project). We believe that both of these projects are very important for the Java enterprise community, and, from chatting to the community, I can tell you that they appreciate the time and effort we have put into creating Arquillian (and I think Seam Forge will meet with a similar reaction!).
I don't think the independent modules have extensively slowed down the shipment, however I think it has slowed down some of the alpha/beta releases of certain modules, which are waiting on functionality provided by other modules (we have, however, used this delay to make sure that other features of the modules are complete). Weld Extensions, mentioned above, has been the principle bottleneck, as it forms the base of pretty much every module; however I'm pleased to say I just released a beta of this, which is aimed to be API stable and should allow the other modules to steam forward. A lot of modules have hit beta during October.
Michael Schütz: Looking at the variety of Seam 3 modules and their unfinished state, it looks like the project added too many features into the first release. Would it make more sense to scale down the first release?
Pete Muir: This is a question with which I have grappled on numerous occasions. We already decided to cut quite a few features from Seam 2 from the Seam 3 release (the prominent one being the Seam 2 bridge), and I do strongly believe that cutting any more would have not been possible. It's also worth noting that Seam 3 has many passionate contributors from the community, and many of the modules included in Seam 3 are developed by these contributors and hence are not taking time away from developing the "core" modules.
Michael Schütz: How about adding new modules? Is there a CDI plugin center? Who would manage this?
Pete Muir: We encourage contributions from anyone in the community (just get in contact!) who wants to develop a new module for Seam. If we feel it fits well into the Seam stack and it meets our guidelines for code quality, documentation and examples then we will include it in a release of Seam.
We also moderate a social bookmarking group where anyone can link to a CDI extension. This is open to anyone, and we encourage anyone with an extension, or blog with ideas to link to it from the group.
Michael Schütz: Seam 3 requires a Java EE 6-compliant Application Server. How important is the release of JBoss AS 6 for Seam 3?
Pete Muir: Much of Seam 3 will run in any CDI container (for example as I mentioned above, the Seam persistence module has a goal of allowing you to use JPA easily outside of a Java EE environment). Current targeted environments include Java EE 6 servers, Servlet containers such as Tomcat, Jetty and Google App Engine as well as Java SE (of course some modules, such as JMS support make most sense in Java EE).
However, at JBoss, we strongly believe that a Java EE 6 server is the best way to run a Seam application, and of course we think JBoss AS 6 is the best application server to use. We also do most testing on JBoss AS, and, of course, Red Hat's commercial support for Seam 3 will be available for apps running on JBoss AS.
Michael Schütz: You are Seam and Weld project lead and involved in a couple of other projects. How do you coordinate all the projects? Do you still have time for coding?
Pete Muir: I'm lucky that I have a great team who are very independent, and can take an idea that we discuss and run with it! In fact, this is pretty much a pre-requisite for being on the team. Trust is a critical component of the way we work - trust on my part that people will deliver what they promised, and trust on the team's part that they can ask questions or for advice at any time.
I tend to work mainly through blogs, email and IRC, which I find are great mediums for communication, and allow a great degree of openness in the way we work. I'm not a huge user of more modern communication mechanisms like Twitter (I'm not sure why, I just never really got on with them), but luckily others on the team seem to be able to cover this area. I'm also lucky that I have good memory (especially for structural information).
I still code a lot, probably about 50% of the time (I'm lumping all development in there actually, including fixing build systems, debugging examples etc.). Development is why I'm here.
Michael Schütz: A lot of things are going on in the area of infrastructure: Maven, Git, Arquillian etc. What's the status here?
Pete Muir: Let's take each of these one by one.
Git -- we've started moving all Seam and Weld projects to Git, as we believe to be a much better VCS tool than SVN, and one that fits the open source project workflow very well. Additionally, we encourage people to fork the project and make enhancements, and contribute them back to us, something Git makes very simple. At the moment Weld is fully migrated to Git, and Seam is moving over (expect this very soon).
Maven -- As we've been developing Seam 3, Maven 3 has also been under development and is approaching release. Maven 3 appears to fix most of the issues with Maven 2, critically supporting BOMs (or stack POMs) which we think are critical for consumption of Seam 3 (they allow us to provide a developer with a stack of versions and dependencies to import into their project). Seam 3 will require the use of Maven 3 (or of course you can use a tool such as Ant or Ivy).
Arquillian-- Arquillian is a critical part of the Seam infrastructure, both for end users (who want to test their applications) and for the Seam project (we use it to test all of our modules). We are aiming to release Arquillian 1.0.0 this year.
Seamframework.org -- All of the projects are hosted on seamframework.org which provides forums, wiki and project pages. Seamframework has recently undergone a move (to a US datacenter with better peering arrangements than the German datacenter it was previously hosted at), and a software upgrade which removed the bottlenecks in the forum software. It is running very well now.
Weld -- perhaps a strange one to place under "infrastructure", but Seam 3 is built atop of CDI... We are aiming to include Weld 1.1.0 in both JBoss AS 6.0 and GlassFish 3.1. Weld 1.1.0 contains performance and memory improvements, and under our internal testing it is performing better than Seam 2 ever did.
Michael Schütz: Do I need IDE support for CDI/Seam? What about Eclipse/IDEA/Netbeans?
Pete Muir: At JBoss, Eclipse is our primary focus, and through the JBoss Tools project we deliver excellent support for CDI. It provides the regular set of deployment options, as well as extensive validations -- we aim to cover the entire spec, and currently are validating around 100 conditions (by my reckoning that's the 50% of the spec you are likely to run into!). JBoss Tools also offers auto completion and refactoring support, not to mention support for other related projects such as JSF 2, Drools etc. We're planning on adding specific Seam support to JBoss Tools soon.
I know that Netbeans and IDEA also have CDI support.
Michael Schütz: How many developers are working fulltime on Seam 3, at the moment?
Pete Muir: The Red Hat funded Seam team is 6 strong -- myself (working on Weld, the CDI TCK, Seam 3, Arquillian etc.) Shane Bryzak (focused on Seam 3), Marek Novotny (focused on Seam 2 in our commercially supported JBoss EAP and on JBoss AS 6 compatibility for Seam 2), Dan Allen (working on Arquillian and delivering the all important content explaining how to use Seam), Aslak Knutsen (working on Arquillian) and Lincoln Baxter (working on Seam Forge with a bit of Seam 3). We're backed by a 3 strong QA team.
Some of our key developers are community contributors (for example David Allen who is focusing on performance and scalability for Weld or Stuart Douglas who is co-lead on Weld Extensions, as well as writing Seam XML and Seam Persistence). Our community contributors play a critical role in the project. Thanks guys!
We also get a lot of support from other Red Hat guys (e.g. Marius Bogoevici who works on JBoss AS integration for Weld and Weld core and Heiko Braun who is working on CDI integration for GWT and Google App Engine support).
Michael Schütz: Which piece of technology currently attracts you the most?
Pete Muir: I've always been pretty interested in some of the more fundamental concerns of programming, and have been following the future of Java with a lot of interest, along with the proliferation of other languages such as Scala and Groovy. I'm intrigued to see where that goes. The most impressive piece of technology I've started using recently is definitely Git.
Outside of work I tend to eschew technology for the outdoors and books -- I'm not a gadgets man beyond my trusty MacBook and my Hifi (and I don't think these have counted as exciting new gadgets for at least a couple of decades!).
Michael Schütz: Everyone is talking "Cloud" at the moment. Are there plans within the Seam Framework to provide Cloud support in any way?
Pete Muir: Yes. We're starting by providing integration for JClouds and Infinispan (to give you access to Data Grids and blobs stored in the cloud) -- expect an alpha any day. We're also developing demos that show off running Seam on JBoss AS in EC2 (Google App Engine support is also planned). We're using Red Hat developed tools such as Deltacloud, JBoss Tools and SteamCannon to run the JBoss AS instances and deploy the application.
Michael Schütz: A couple of weeks ago I read in a posting by Gavin King about a "super secret" new project he is working on. Is he still involved in the development process of Seam 3?
Pete Muir: Gavin still takes a keen interest in Seam, and I've sat with him one afternoon and run through all the modules we are working on to get his feedback (which I'm pleased to say was positive!). I'm also looking forward to Gavin's super secret project becoming less secret :-)
Michael Schütz: Do you have a concluding message for our readers?
Pete Muir: Coming up, we'll start to see GWT really take its place as a first-class option for writing your view layer. The GWT integration for Seam 3 will focus heavily on integration with Errai, which provides the necessary plumbing to export the CDI programming model directly into browser client code. Specifically, support for CDI eventing as well as first-class support for using Errai's messaging framework will allow developers to built rich, asynchronous web-based clients for their software that break free of the traditional constraints associated with most web frameworks.
Errai provides first-class support for object serialization, push messaging, straight-forward conversation management, as well as providing an in-browser IOC/DI framework that implements the JSR-330 spec and portions of the JSR-299 specification for the CDI integration. The result is client code that is Java-based, type-safe, and truly shares common APIs across server and client code.
Michael Schütz: Pete, thanks a lot for your time.