Last week, I had the privilege of speaking at SpringOne 2GX in Santa Clara. As the name implies, the conference was focused around Spring, Groovy and Grails. The conference tagline was “The Spring Groovy, Grails & Cloud Event of the Year!”, and I must admit that resonates well my personal experience, and I strongly encourage you to go next time if you have the opportunity. So what was so great about the conference?
First, many speakers had in-depth knowledge about the subjects that they were presenting, much more so than in other conferences that I have attended. With titles like “founder”, “core committer”, “project lead”, it is no doubt about that these guys know.
Secondly, the conference provided full day schedules with good mingle opportunities. All activities took place in the same venue. You could have breakfast together with one of the core committers of a framework, lunch with a potential customer, listen to the evening keynote together with a passionate developer, and then have intrigued discussions with other speakers over a beer in the bar in the evening. One cannot overestimate the value of these occasional, unplanned meetings between bright minds.
During the first keynote, Spring’s new web site http://spring.io was not only officially announced, it was actually live deployed to production on stage by Chris Beams. Like the previous website, it contains detailed reference documentation and API documentation for the various Spring projects, but in a more clear way than before. A lot of effort has also been added to make it easier Spring easier for those that have note used Spring before, for example by providing simple getting started guides for common problems. Another motivation for the update was that the new website will serve as a reference project for a Spring / Cloud Foundry based web app (the site will be open sourced eventually), Spring’s way of “eating your own dog food”.
Juergen Hoeller presented the next major version of the Spring Framework that will be released by the end of this year. The 4.0 release is prepared for the upcoming Java SE 8 release, and will provide first class support for features like Lambdas and the new Date and Time API, JSR 310. Moreover, it will act as a new baseline, which means that deprecated classes and methods will be removed, and at the same time old third party libraries will not be supported any more. As a rule of thumb, dependencies that were released before mid 2010 will dropped in favour of their younger siblings.
Spring 4.0 will also provide support for WebSockets, which was presented by Rossen Stoyanchev. Acknowledging that the WebSocket is a rather low level protocol, Spring’s implementation of WebSocket will provide support for the STOMP (Simple/Streaming Text-Oriented Messaging Protocol). There are many browser that do not support WebSockets, but Spring provides automatic fallback solutions based on SockJS.
During one of the keynotes, Spring Boot was presented. In just a few minutes, a full Spring application was created from scratch and up and running. Copied from the project site:
Spring Boot makes it easy to create stand-alone, production-grade Spring based Applications that can you can “just run”. We take an opinionated view of the Spring platform and third-party libraries so you can get started with minimum fuss.
Notably, a Spring Boot application comes with devops features for health checks and application metrics.
Spring has an increasing number of projects that adds support for big data, batch, integration and database solutions. A few of them are brand new, whereas others have received welcome maintenance updates. In my mind, there is some overlap between the different projects, and I assume that you will frequently use a combination of them when building applications.
Jon Brisbin presented Reactor. He described the project as “a library with runtime features” to be used for high performance, asynchronous applications without the need of callbacks. It is built around the Reactor Pattern, which means that it is both event driven and reactive. Depending on your needs, different event dispatcher implementations can be used, such as a blocking queue, thread pool solutions or a LMAX Disruptor RingBuffer, which enables a very high throughput (100 million events per seconds has been recorded during benchmark tests on a MacBook Pro).
If you your application interacts with other applications, the Spring Integration presented by Gunnar Hillert project is the right place to look. It is based on the Enterprise Integration Patterns. As can be expected, it provides a wide range of components and adapters.
Does your project have long running jobs that do lots of data crunching on regular intervals? Michael Minella presented the internals of the Spring Batch and its support for Batch Applications, JSR 352. A unit of work is called a
Job, which is divided into one or more
Steps, that consist of multiple
Chunks that operates on
Items. Spring Batch also comes with a nice web ui, in which you can see the status of your batch jobs. Additionally, the 3.0 release will add support for Java based configuration.
The Spring XD (eXtreme Data) project. It is built on Spring Integration, and on its website, it is stated that:
Spring XD is a unified, distributed, and extensible system for data ingestion, real time analytics, batch processing, and data export. The project’s goal is to simplify the development of big data applications. […]
One of our first features is to create an out-of-the-box server that provide a consistent configuration model and runtime that spans the four use-case categories listed above.
For those of you that missed the conference will be happy to know that the sessions were recorded. Hopefully, they will start appearing on the Spring Developer Channel soon, probably with an accompanying comment on the Spring Blog.
My presentation is now available on the Spring Blog (which links to the recording published at YouTube). The source code used in the presentation can be found in my GitHub repository (the exact version is tagged with