The Hibernate team is pleased to announce the release of Hibernate Core 4.0.0.Alpha1. Pieces of changes in this release have been in the work for a long time, so even though it is an alpha the changes should all be really really well vetted and tested.
On February 16th I will be doing a presentation on multi-tenacy and Hibernate as part of the JBoss Developer Webinar Series. Some background can be found in my earlier Multi-tenancy in Hibernate blog entry. In the presentation I will cover approaches to handling multi-tenancy in Hibernate today as well as touching on the planned support upcoming in Hibernate 4.
Hibernate has moved to Git (hosted on GitHub) for source control. That has been well documented. I wanted describe the approach Hibernate takes to branching, versioning and releasing as it is something that has come up a number of times, even prior to the move to Git.
This has come up a few times so I thought I'd write up the ways to handle multi-tenancy in Hibernate. This is not an exhaustive list. We wont go into database vendor specific features (Oracle VPD, etc) for example. Generally speaking there are 3 ways to factor multi-tenancy into your database design:
In Hibernate there is a particular branch of logic where we need to parse and validate an org.xml.sax.InputSource that might represent either a Hibernate mapping (hbm.xml) file, a 1.0-compliant orm.xml file or a 2.0-compliant orm.xml file. Now currently Hibernate mapping files are defined by a DTD and both versions of the orm.xml files by an XSD. Currently the code builds a SAXReader with DTD and Schema validation enabled and tries to read in the source. It first maps Schema validation to the 2.0 version of the XSD; if an error occurs it then tries re-parsing mapping Schema validation to 1.0 version of the XSD.
Hibernate 3.6.0.Beta4 has been released incorporating mostly minor bugfixes and improvements. Most of the work this cycle went into the improved documentation. For those not aware we are planning on splitting the documentation into 2 books:
Kind of knew people would ask about this... So why did we decide to deprecate CGLIB support in Hibernate? First I want to point out that Hibernate and CGLIB have a very long history (and a largely good history) in terms of working together. This is not an indictment against any of the CGLIB developers. They are good guys and as I stated above for many years Hibernate and CGLIB have worked well together.