The software development world is constantly changing, and that of course also affects well-known persistence frameworks. I sat down with Oliver Gierke (Spring Data) and Steve Ebersole (Hibernate) to get their opinion on the most important changes in 2015, current challenges and their big topics for this year.
I also tried to talk to Lukas Jungmann (JPA 2.2 and EclipseLink) from Oracle to learn more about the challenges and goals of the JPA reference implementation and the upcoming Maintenance Release of the JPA specification. Unfortunately, I got no answers to the questions below, and we can only guess about Oracle’s plans for this year.
But now, let’s here what Steve and Oliver had to say:
- 1 Hi, please introduce yourself and your project.
- 2 2015 brought several changes to the Java world like increased usage of Java 8 and NoSQL databases and, of course, the highly popular microservice architectures.
- 3 How did that influence your projects and what was the most important development in 2015?
- 4 After all these changes and improvements during the last year, what is the biggest challenge at the moment?
- 5 What can we expect in the upcoming months? What will be the big thing in 2016?
- 6 Before we leave, what can we expect next? What are you currently working on?
- 7 Thank you, Oliver and Steve, for the interview and the shared insides into the development of Spring Data and Hibernate!
Hi, please introduce yourself and your project.
My name is Oliver Gierke. I am working for Pivotal Software and am the project lead for Spring Data, an umbrella project within the Spring ecosystem that provides data access integration with relational and non-relational data stores.
So the familiarity with an API will inevitably become more of a burden than a benefit.
We decided not to hide all these technologies behind a unifying API as it would have to expose concepts that are valid for a certain set of stores but not for others. E.g., assume you’d hide e.g. MongoDB behind JPA and then have to answer the what’s supposed to happen on a transaction rollback. So the familiarity with an API will inevitably become more of a burden than a benefit. Instead, we’re rather providing a consistent, common programming model for data access layers on top of these stores but retaining store-specific features at the same time.
The relational side of the story is covered mostly by building a repository abstraction on top of JPA as the persistence providers already provide a great foundation in terms of object mapping and query execution. For NoSQL stores, we provide a template API that Spring users should be familiar with: it contains the usual resource management and exception translation as well as object to store mapping mechanisms. On top of that we usually also provide repository abstraction where it makes sense.
The Spring Data team currently takes care of 10 modules (Core, JPA, Envers, MongoDB, Solr, KeyValue, Redis, Gemfire, Cassandra, REST) while others are maintained by the Spring Data community (Neo4j, Elasticsearch, Couchbase and others).
I am a Java developer living in Austin, Texas in the US. I am the lead developer for the Hibernate ORM project. Hibernate began in 2001 by Gavin King as an effort to develop a better alternative to EJB2 entity beans. I joined Gavin in 2002 as we started work on version 2.0 coming from working with another Open Source ORM project from that time. 2.0 and then 3.0 launched Hibernate into a wildly successful Open Source project, which has always been amazing to me considering the small number of core developers working on it. Prior to 2002 I worked mainly in the data world (relational as well as pre-relational), with some forays into COBOL, Delphi and then Java.
2015 brought several changes to the Java world like increased usage of Java 8 and NoSQL databases and, of course, the highly popular microservice architectures.
How did that influence your projects and what was the most important development in 2015?
We’ve seen a lot of adoption of Java 8 and containerless deployments, especially in the context of Spring Boot and the trend of microservices in general. Especially the latter drives people towards Domain-Driven Design again — which repositories are a fundamental part of — which bestows quite a bit of attention upon us. Java 8 making its way into more and more development shops has resulted in requests for more advanced integration with it. We supported java.util.Optional and default methods the day JDK 8 shipped but we improved the support for e.g. CompletableFuture and stream based query execution in the recent release trains.
Other than that, we’re continuously improving the integration with other Spring projects (e.g. Spring Security) and are usually busy keeping up with the new features the stores develop, new releases of the stores, etc.
For a few years now Hibernate as a group has been expanding our solutions based around the Java domain model and efficient access whether that be full-text searching and indexing, NoSQL storage, data validation, etc.
The most important development in 2015 was bootstrap changes in Hibernate ORM.
We had major developments in all of these different areas last year: ElasticSearch integration in Hibernate Search; continuing maturation of Hibernate OGM and support for an expanding set of backends. I think the most important development in 2015 was bootstrap changes in Hibernate ORM because it affects all the other Hibernate projects and integrations, as well as user interactions. Essentially it allows better control of the process of building a SessionFactory or EntityManagerFactory in terms of how integrations are applied and providing a defined order in which these bootstrap steps happen.
After all these changes and improvements during the last year, what is the biggest challenge at the moment?
The project has seen 100% growth in terms of downloads from Maven Central in 2015.
The project has seen 100% growth in terms of downloads from Maven Central in 2015. Also, the number of community projects has been growing constantly, so that I spend a lot of time in coordinating the work and making sure we’re moving the ship forward smoothly. Making sure the individual modules maintain a certain set of consistency in their feature sets is part of that, too.
As a project that is Open Source and closing in on 15 years old, Hibernate has a very organic codebase in many respects. That can be a good thing in terms of many eyes, diverse ownership, etc. However, often it leads to code that feels disjointed where some pieces do not fit with the overall initial design. Unfortunately, in my experience, this often leads to subtle bugs. And the longer such disjoints exist and more and more code handle them, the harder it becomes to revamp these designs and improve the codebase.
What can we expect in the upcoming months? What will be the big thing in 2016?
After the upcoming release of Hopper, we’re gonna ship another release train in 2016 that will pick up features just like the other ones did before.
In parallel to that, we’re picking up on the reactive developments in the course of the work on Spring 5. We’re exploring options to take the reactive programming model in the core framework and bridge them with reactive database drivers that especially pop up in the non-relational world these days. While the development in the core framework has reached a certain level of maturity already, the data efforts are still experimental to explore different options of integration.
All of this will end up in something I’d call a Spring Data 2.0, which will also allow us to ship a couple of more far-reaching changes that we can’t incorporate in the existing model due to backwards compatibility constraints in the user facing APIs and abstractions.
I won’t get into too much detail, but a major change in how Hibernate generates and performs SQL is on the way.
Before we leave, what can we expect next? What are you currently working on?
We currently focused on the upcoming release train named after Grace Hopper.
It ships a few major upgrades in dependencies (Querydsl 4, Solr 5) and re-integrates new major versions of Spring Data modules into it (Neo4j 4.1, Couchbase 2.1). It also contains support for Redis Cluster and will introduce object mapping for Redis, too. Another big feature is a programming model for projections on repository queries that automatically translate into query execution optimizations. We’ve just released a first milestone for our users to try. The GA release of the Hopper release train is expected in March 2016.
Currently, I am working on the SQL generation changes I mentioned.