1,42 → 1,14 |
package ak.hostadmiral.util; |
|
import java.util.Collection; |
|
import net.sf.hibernate.*; |
import net.sf.hibernate.cfg.*; |
|
public class HibernateUtil |
{ |
public static final int DATABASE_VERSION = 1; |
|
private static Configuration configuration; |
private static SessionFactory sessionFactory; |
private static final ThreadLocal hibernateBean = new ThreadLocal(); |
private static boolean validated = false; |
|
private static void validate() |
throws HibernateException, ModelException |
{ |
synchronized(HibernateUtil.class) { |
if(validated) return; |
|
Collection versions = currentSession().find("from DatabaseVersion"); |
|
if(versions == null || versions.size() == 0) |
throw new ModelException("Database structure version not found"); |
|
if(versions.size() > 1) |
throw new ModelException("Too much entries in database structure version table"); |
|
int version = ((DatabaseVersion)versions.iterator().next()).getVersion(); |
if(version != DATABASE_VERSION) |
throw new ModelException("Expected database structure version " |
+ DATABASE_VERSION + ", found " + version); |
|
validated = true; |
} |
} |
|
public static Configuration getConfiguration() |
throws HibernateException |
{ |
95,10 → 67,6 |
throw new ModelException("Transaction is already open"); |
|
currentBean().transaction = currentSession().beginTransaction(); |
|
// validate database structure version |
if(!validated) // just try to speed up by avoiding synchronization |
validate(); |
} |
|
public static boolean isTransactionOpen() |