It’s been a while since I had time to blog. We’ve been busy. We raised $10m. As Adrian has pointed out, we’ve been very active in product development. I’ve written more code myself than usual in the last couple of months. (Mainly on experimental stuff, which may or may not see the light of day, but it’s fun, and sometimes I do something that turns out to be useful.) I’ve spent a lot of time speaking to press and analysts; we’re getting huge press interest these days. Press/analyst calls can be tiring, but can also be valuable, as many of these guys are smart and ask thought-provoking questions.
The Spring Blog
Late last year we started talking about the notion of a Spring “release train”. The idea behind the release train is that we put out co-ordinated releases of the products in the Spring Portfolio: tested together and working together. You can still pick and choose the pieces you need, but it will be easier to use the various products together when you want to. We’re not there yet, but we’re on our way.
One of the struggles for us at Interface21 has been that the demand for our support services, training, and consultancy has been so high that we’ve been working everyone flat out to try and meet it. This has made it hard to get the consistent and predictable product development time we need to pull off something like a release train. That’s just one of the many reasons that I’m so excited about the recent announcement of the $10M investment that Benchmark Capital is making in Interface21 (press release). It will enable us to accelerate our product development efforts and bring you more great releases more quickly than we could in the past.
When Sun scheduled my JavaOne 2007 session on Spring Web Flow for Friday, the last day of the conference, I wasn’t sure what to expect. I was honored to have been accepted again this year, but I wondered what I would see in terms of attendance presenting on the last day of the 4-day conference.
I could not have been more pleased with how things transpired. When I checked in at speaker setup on Thursday 800 people had pre-registered for my Friday session. Fifteen minutes before my talk was to begin the room had reached that number. In the end, 1000 JavaOne attendees came to room 307-310 of the Moscone center to experience an adrenaline-powered Spring Web Flow test drive.
Spring 2.0 introduced annotation support and annotation-aware configuration options that can be leveraged by Spring users who are developing with Java 5 (or later versions):
|@Transactional||for demarcating and configuring transaction definitions|
|@Aspect (AspectJ)||for defining aspects along with @Pointcut definitions and advice (@Before, @After, @Around)|
|@Repository||for indicating a class that is operating as a repository (a.k.a. Data Access Object or DAO)|
|@Required||for enforcing annotated bean properties are provided a value|
I’ve recently finished up an interesting issue in Spring Web Flow. This issue (SWF-163) dealt with adding Spring 2.0 bean scoping support for Spring Web Flow’s internal scopes. The implementation isn’t really that interesting (the Scope interface is pretty easy to implement after all), but I wanted to mention exactly how you would use something like this in your application.
Spring 2.0 Scoping
In Spring 1.x, we had the idea of singleton and prototype bean scopes, but the notation was fixed and not especially descriptive with singleton=“[true | false]”. So in Spring 2.0, this notation was removed from the XSD style of configuration and now you see a notation that is more clear with scope=“[singleton | prototype | …]”. Spring itself adds three more bean scopes; request, session, and globalSession which are related to web applications.
I’ve been working hard with a couple of clients on a new product called Spring Batch. The aim is to provide tools and applications to support bulk processing in an enterprise environment. Spring Batch is part of the Spring Portfolio with an initial release in the Spring 2.1 release train.
The original impetus to build some prototype code actually came independently from a number of Interface21 clients. This provides some useful additional detail and some constraints on the implementation so that it can be applied to the real-world problems posed by the clients. I hope that this article will stimulate some more interest and provide feedback on the general approach.
No, that’s not my headline, it’s actually the title of a white paper recently published by Open SOA collaboration. To quote from the news announcement accompanying the whitepaper:
“Based upon user feedback, the OSOA Collaboration are publishing a white paper highlighting the powerful combination of the SCA, Spring and OSGi technologies aimed to help Developers simplify the creation and composition of services critical to building applications based on an SOA approach.”
The white paper provides a short overview of SCA, OSGi and Spring, and then describes how they can be used together. Quoting from the summary:
In a previous post, I described how we use a custom ANT task to upload nightly snapshots from the ANT based projects in the Spring portfolio. In this post I’ll describe how we use Amazon S3 to generate pages for the snapshots from each project and allow users to download the snapshots.
As I mentioned in the previous post, S3 is primarily used as a REST-ful service. This means that while I used Java for the upload portion, I was free to use other languages for the download portion. I chose to use PHP in this case because it was already available on the server I was working with, and was the path of least resistance.
One of the interesting side effects of a solid CI structure is that when things are running reliably, new problems start to crop up. Shortly after Spring’s CI system started running smoothly, our occasional space and bandwidth issues on static.springframework.org became more pronounced. Colin Sampaleanu had done research earlier on how to alleviate some of these problems and had settled on Amazon S3.
Amazon S3 is part of the Amazon Web Services umbrella and provides an incredibly cheap online file storage service. What does ‘incredibly cheap’ mean? Well, from the website, it appears that 1 GB*month of storage costs US$0.15 and 1 GB of bandwidth costs US$0.20. Add to that, a high-bandwidth transparent mirroring service, and S3 becomes very appealing for storing our nightly snapshots. On a tangent, Amazon actually uses the exact same infrastructure internally, so you know that there is a team of admins guaranteeing their five 9’s promise.
This happened in Atlanta last week while I was in a Barnes & Noble bookstore. I circled around to the computer section and began scanning titles. With my head tilted I overheard a conversation about a job. I wasn’t actively listening but I knew one side was pitching a job while the other was inquiring about it.
A couple of minutes later it was just me and the guy who was looking for talent. I was sure he would start speaking. Soon after he said ‘so you’re in J2EE?’ and so the conversation began. He asked me about my work. He didn’t know about Interface21 but upon hearing it’s the company behind Spring his face lit. He said he hadn’t tried Spring yet and then added he was currently using Struts.