Monday, September 20, 2010

Grokking Java Persistence with Kevin Sutter

Note: Originally posted on the IBM Impact events blog for "App Infrastructure Tuesday."

Recently, I had the opportunity to interview Kevin Sutter. He is a subject matter expert for WebSphere Application Infrastructure and works as a Senior Software Engineer in the WebSphere Application Server development group. He is currently the lead architect for the Java Persistence API solution for WebSphere Application Server. Kevin is also a committer and a member of the PMC for the Apache OpenJPA open source project. Kevin's past roles include leadership and architecture of WebSphere solutions for J2EE Connector Architecture (JCA) and WebSphere eXtreme Scale (caching). It was good to catch up with Kevin for a look at the Java Persistence technology and it's usefulness to java developers.

Kevin, what is JPA in two sentences?
The Java Persistence API (JPA) is the persistence framework standard for both the Java SE and Java EE runtimes. At its core, JPA provides a conduit between the object-oriented data model and the relational database systems -- an object-relational mapper (ORM).

Open source software is a key part of the solution here. How did OpenJPA start and who was responsible for it?
The Apache OpenJPA project was a joint submission between IBM and BEA. BEA seeded the contribution with code based on its popular Kodo project (a recent acquisition). Contributors from IBM, BEA, Sun, and other independent sources worked with this code base through the incubation phase and, eventually, to produce the OpenJPA 1.0 release. Since that time, the OpenJPA team has produced several service releases and, most recently, produced an OpenJPA 2.0 release which supports the latest incarnation of the JPA specification. The WebSphere JPA solution is based on the Apache OpenJPA project. We do not try to keep that a secret. OpenJPA has been the JPA provider for the EJB3 Feature Pack for WAS v6.1, WAS v7, and the recent JPA Feature Pack for WAS v7. Of course, we additional features and function on top of the Apache OpenJPA deliverable to provide a better, more complete JPA solution for our WebSphere customers. But, the base code is the same. So, if a customer has written an application using the Apache OpenJPA code, it will run successfully using the WebSphere JPA solution. This allows customers to kick the tires and experiment with Apache OpenJPA before they deploy their application into WebSphere.

Why didn't people get involved with existing Apache persistence solutions like Cayenne?
Not sure. We investigated several projects inside and outside of Apache before deciding on the OpenJPA joint submission. OpenJPA has a very clean, flexible architecture, with a defined persistence kernel. This kernel is actually used by multiple persistence "personalities", including JPA and JDO. Since we made the decision to go with OpenJPA, we haven't looked back.

Why does IBM care about JPA and why should java developers care about JPA?
The persistence layer accounts for somewhere in the neighborhood of 75-80% of the processing of customer applications. Thus, the functional and performance features available to make these applications run more efficiently is very important to IBM's customers. This makes it important to IBM as we have the same development priorities.

What is an example of IBM's contribution to OpenJPA? Performance is a key focus, right?
Yes, performance improvements have been a key contribution from IBM. We have introduced several locking and caching improvements into OpenJPA to improve the throughput, scalability, and general performance of OpenJPA. We have also introduced several DB2, Informix, and Derby data dictionary improvements to better support the IBM databases. Fixes related to passing the TCK and CTS compliance tests for the Java SE and Java EE environments have also been contributed. Let's just say that my whole team is very focused on making OpenJPA the best open-source JPA offering.

Let's switch gears and talk about WebSphere, what's new since JPA v1?
We don't have enough room to document everything that is new since the JPA 1.0 specification... But, if I had to choose a couple of highlights, I would start with the Criteria and Metamodel APIs. This feature allows a customer to dynamically create queries via a defined programming model. It's very powerful. Another key feature in JPA 2.0 is the integration with the Bean Validation specification. Bean Validation allows an application to specify constraints on an Entity's fields or properties, which will then be validated later when the Bean Validator is invoked.

How does IBM's JPA solution compare to Hibernate or EclipseLink?
If you want to play in this game, you have to be specification compliant -- both JPA 1.0 and 2.0. So, from that narrow spec perspective, we're all about the same. Note: OpenJPA v2.0.1 was released in August 2010. However, the WebSphere JPA solution brings many other features to the table over and above the base specification. We've already mentioned the performance aspect. Our SpecJ [tm] performance numbers are fantastic. We take great pride in that achievement. The WebSphere JPA solution also integrates well with other IBM stack and complementary products, such as DB2 and eXtreme Scale. From a DB2 perspective, the pureQuery feature provides static SQL and performance improvements for the WebSphere JPA solution. And, there is an eXtreme Scale plugin which allows this caching technology to be used with OpenJPA.

Can you talk about integration between IBM products and JPA?
I mentioned the stack products above (DB2 and eXtreme Scale). There are several other projects (especially acquisitions) that have migrated from Hibernate to OpenJPA. Even the WebSphere product itself uses JPA to provide the persistence layer for its systems management data.

What are the current hot topics in this technology space?
Caching, or in-memory databases. Having the ability to execute thousands and thousands of transactions to an in-memory cache or store, while ensuring that this data will also get persisted to a "real" database is a very real, hot topic in this space.

Where can we find more information on the web?
Check out my team's blog about WebSphere and Java Persistence and the Apache OpenJPA project site. Periodically, we provide white papers, comment lines articles, and presentations via Developer Works.

Where can people meet you (and the team) at upcoming events?
JPA is always represented at IBM Impact. This year, we had over ten sessions related to JPA! We also try to get to the core Java developers to JavaOne. This year, one of my team members and an OpenJPA committer, Pinaki Poddar, is presenting an OpenJPA topic on distributed persistence.

And for a quick diversion - would you please tell us about your favorite hobby, tech related or not?
I really enjoy working on cars. Anything from changing oil, to changing oxygen sensors, to replacing control arms. As long as I have the tools and the time, it's a good stress reliever. I also have a fun car -- 1989 Mustang 5.0 Convertible, which I thoroughly enjoy in our Minnesota summers.

Thanks to Kevin for providing a look into Java Persistence and WebSphere application infrastructure software.
You can also find more information about JPA, OSGi, eXtreme Scale and other emerging technology from the WebSphere Emerge team.

Final question goes to you the reader:
What topic would you like to see featured in future application infrastructure SME interviews?
Until next time,
Ryan Boyles

No comments:

Post a Comment