New-age Transactional Systems - Not Your Grandpa's OLTP
John Hugg discusses high volume transaction processing applications with high and low frequency profiles, and how VoltDB can be used for that purpose.
The content has been bookmarked!
There was an error bookmarking this content! Please retry.
Posted by Charles Humble on Jan 15, 2008
Whilst the public details are still a little sketchy, the general direction of Java EE 6 is becoming apparent and reflects the changing role of the Java EE standard. Originally envisaged as a complete stack for enterprise computing, open source projects such as Struts, Hibernate and Seam have seen increasingly wide enterprise adoption to fill in gaps in the current version of Java EE. In some cases these open source projects have in turn influenced the next revision of the specification. As such, the role of Java EE is becoming less about providing a complete solution and more about providing a robust set of infrastructure code that vendors and open source developers can build on top of. JSR 316, the umbrella JSR for the next revision of Java EE, looks to put this new relationship on a more formal basis by making extensibility a core aim of the expert group. In addition, the specification acknowledges that Java EE has become large and complex and proposes both the pruning of specific elements of the specification and the introduction of profiles to provide focused subsets of EE functionality targeted at particular groups of developers. It will also build on the simplification work begun in the previous version, including the use of annotations to further reduce the dependency on the external configuration files.
The approach taken to pruning will be identical to that taken for Java SE 6 and is described in a blog entry here. It is performed as a multistep process where a candidate is declared in one release but may be relegated to an optional component in the next release, depending on community reaction. The JSR proposal suggests a couple of initial pruning candidates - JAX-RPC [JSR 101, Java APIs for XML-Based RPC] which is effectively replaced by JAX-WS [JSR 224, Java API for XML-Based Web Services], and EJB CMP now replaced by the Java Persistence API [originally defined as part of JSR 220, Enterprise JavaBeans 3.0]. During an interview with Artima, the EE 6 specification leads Roberto Chinnici and Bill Shannon suggested that the JAXR API [JSR 93, Java API for XML Registries 1.0], an API for accessing web service registries which hasn't seen wide adoption, may be added to the pruning candidate list.
Whilst pruning has been largely uncontroversial, Sun's use of profiles has sparked some debate. SpringSource's CEO Rod Johnson is certainly in favour of them:
"At last, users will have the power to shop around for what they want, rather than what a specification committee thought they wanted, two years before the users start building the application," Johnson said. "It's high time that a Soviet style command economy was replaced by some healthy competition."
But OSGi evangelist Peter Kriens is less than impressed:
"To address the problem that one size does not fit all, Sun proposes to create a few more sizes, called profiles. Surely that should fit all? Well, profiles have been tried in J2ME [Java 2 Micro Edition] and they failed in my opinion."
The first new profile planned for EE 6 is the Web Profile aimed at web application developers. As well as introducing this new profile, the specification will define rules for creating additional profiles for other market segments, for example for telecommunications or financial applications.
The technical details for extensibility are less clear although the JSR sets out some ambitious goals: "...we believe it is desirable to enable more of these technologies to cleanly layer on or plug in to Java EE application servers," the JSR 316 specification states. "By adding more extensibility points and more service provider interfaces, these other technologies can plug in to platform implementations cleanly and efficiently, and be just as easy to use for developers as the facilities that are built into the platform."
One example of this approach is JSR 196: Java Authentication Service Provider Interface for Containers, one of a trio of APIs originally planned for J2EE 1.4. It offers a standard service provider interface to allow authentication mechanism providers to be integrated with containers. Providers using the interface will be employed to establish the authentication identities for container access decisions, including those used by the container in invocations of components in other containers. The specification reached final release in October 2007 and is available for download.
Also originally planned for 1.4, Java EE 6 should finally see the formal release of a timer API suitable for use in managed environments, and a container-manageable programming model for the concurrent execution of work using a thread pool managed by the container. These two APIs, jointly developed by IBM and BEA and already supported in both BEA's WebLogic and IBM's WebSphere, are described here (PDF document).
There are two new APIs planned for inclusion in EE 6. The first is WebBeans, heavily influenced by JBoss' Seam and Google's Guice, which aims to simplify the programming model for web based applications in Java EE by unifying the web and transactional tier component models. In addition the WebBeans specification provides a conversation model and persistence context, providing finer grained state management and allowing a series of web transactions (a conversation) to be treated as a unit of work. Jacob Orshalick has provided a detailed write-up of the finer points of the Seam conversation model here and how timeouts are handled here. The WebBeans model is given extensive preview coverage by Gavin King through a manifesto and a four part (one, two, three, four) write-up.
Whilst reaction to the WebBeans JSR has been broadly positive, IBM did express some dissent on the ballot for JSR 316:
"We are becoming concerned with the direction that JSR 299 seems likely to take in going beyond its stated charter of integrating JSF and EJB components and believe that continued efforts in this direction could warrant its removal from Java EE 6. We do not believe that our customers would find it easy to adopt a Java EE 6 platform that adds yet another component model definition."
JSR 311: a Java API for RESTful Web Services is the second of the new APIs and has been generating an even more mixed response. A previous article on InfoQ provides good coverage of the community reaction. Brian Leonard's blog and associated links provides more detail on the proposal and Bill Burke has provided some feedback.
Java EE 6 will see revisions to a number of core APIs. Major updates are planned for:
Finally, there will be some more minor updates to:
A number of APIs didn't make the final cut for Java EE 6. Two notable ones are JSR 168, the Java Portlet specification, which has been embraced by several major portal players, and JSR 208, Java Business Integration (JBI), a specification for service mediation that has been endorsed by everyone except BEA and IBM.
The EE 6 specification has quite an aggressive timeframe, with the final release targeted for Q4 2008.
1.) I thought JPA 2.0 would provide a criteria api?
2.) I thought JSF 2.0 would have a new templating mechanism like Facelets and line precise error reporting (both are a must imo)?
1) Can't really say. Not my area. :)
2) JSF 2 will have a Facelets-style templating. I'm not aware that we've talked specifically about line-precise error reporting, and I'm not sure if we'd formalize that in the spec, but, at the very least, implementations should be free to provide that. Time will tell what is finally codified in the final spec, but we'll certainly see Facelets, after a fashion.
By the way, we hope to have an early release available before JavaOne this year.
1.) I thought JPA 2.0 would provide a criteria api?
JPA 2.0 should not only have a criteria API, it should also have a configuration API like Hibernate. Anything less than this is a waste of everybody's time.
line precise error reporting in the spec
"Vastly improve the developer experience with regard to error messages that happen during iterative development, and even during deployment of the application. For example the EG will consider options including, allowing the developer to tell the runtime what stage of development the web application is in, and take action accordingly: Development, Test, Deployment. Line precise error reporting. Pluggable Exception Handling."
John Hugg discusses high volume transaction processing applications with high and low frequency profiles, and how VoltDB can be used for that purpose.
Kevlin Henney examines code samples to see what can be learned from them starting from the premise that one won’t write great code unless he knows how to read it.
Jason Ayers share the observations he made watching a team of developers collaborating in real time on the same code base, pushing XP, pair programming and continuous integration to their extremes.
Michael Snoyman presents Yesod, a web framework written in Haskell and containing a web server, templating, ORM, libraries (templating, gravatar, etc.).
Richard Kreuter and Kyle Banker on how to avoid classical RDBMS transactional systems by using compensation mechanisms, transactional messaging or transactional procedures.
Attila Szegedi talks about performance tuning Java and Scala programs at Twitter: how to approach GC problems, the importance of asynchronous I/O, when to use MySQL/Cassandra/Redis, and much more.
One category of risk that project teams need to ensure they address is business value failure – delivering a product that fails to provide value for the business investor.
InfoQ spoke to the authors of Software Systems Architecture on a couple of new topics, the System Context viewpoint and Agile, which have been added to the second edition.
4 comments
Watch Thread Reply