Java tutorial
/* * Copyright (C) 2010 Viettel Telecom. All rights reserved. * VIETTEL PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */ package com.viettel.model; import org.apache.log4j.Logger; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; public class HibernateUtils { /** * log tool. */ private static Logger log = Logger.getLogger(HibernateUtils.class); /** * Hibernate SessionFactory. */ private transient static SessionFactory sessionFactory; /** * error message . */ private static final String TRANS_EX_MSG_TRANSNOTSTARTED = "Transaction not successfully started"; static { try { Configuration dbConfig = new Configuration().configure("hibernate.cfg.xml"); sessionFactory = dbConfig.buildSessionFactory(); } catch (Throwable ex) { log.error(ex); ex.printStackTrace(); } } /** * Private constructor : don't allow instanciation of this class */ private HibernateUtils() { } /** * Init hibernate resource */ public static void startup() { //Duoc goi khi bat dau start web app log.info("Khi to HibernateUtil"); } /** * Destroy hibernate resource */ public static void shutdown() { log.info("Destroy HibernateUtil"); sessionFactory.close(); } public static SessionFactory getSessionFactory() { return sessionFactory; } public static Session getSession() { return getSessionFactory().getCurrentSession(); } public static Session getCurrentSession() { if (getSessionFactory() == null) { try { Configuration dbConfig = new Configuration().configure("hibernate.cfg.xml"); sessionFactory = dbConfig.buildSessionFactory(); } catch (Throwable ex) { log.error(ex); ex.printStackTrace(); } } return getSessionFactory().getCurrentSession(); } /** * Get hibernate session and begin transaction, * * @return Hibernate session bound to thread */ public static Session getSessionAndBeginTransaction() { Session session = getCurrentSession(); session.beginTransaction(); return session; } /** * Commit current sessions * * @return sessions need to rollback * @throws Throwable Throwable */ public static Session commitCurrentSessions() { //sessions need rollback Session sessionsToRollBack = null; Session session = getCurrentSession(); if (session.isOpen()) { Transaction t = session.getTransaction(); /* * Nu Transaction c begin v khng c li no trong ln commit trc * (hasExceptionDuringCommit = false) * * Thc hin commit transaction ca session tip theo * Nu c li t c? (hasExceptionDuringCommit = true). * khng commit na m gn session tip theo vo bin localSessionsWillRollBack * * hasExceptionDuringCommit = true: * khng commit na m gn session tip theo vo bin localSessionsWillRollBack */ if (t.isActive()) { try { t.commit(); } catch (Throwable ex) { ex.printStackTrace(); sessionsToRollBack = session; log.error("Co loi xay ra khi commit transaction cua session", ex); } } } return sessionsToRollBack; } /** * rollback session * * @param sessionToRollBack sessions need to rollback */ public static void rollBackSession(Session sessionToRollBack) { if (sessionToRollBack != null) { if (sessionToRollBack.isOpen()) { Transaction t = sessionToRollBack.getTransaction(); try { t.rollback(); } catch (Exception ex) { if (ex.getMessage().equals(TRANS_EX_MSG_TRANSNOTSTARTED)) { //B? qua li khng rollback c khi transaction c begin; log.info("Khng rollback do cha c khi to"); } else { log.error("C li xy ra khi rollback session", ex); } } catch (Throwable ta) { log.error("C li xy ra khi rollback session", ta); } } } } /** * Close current sessions * * @throws Exception Exception */ public static void closeCurrentSession() { try { if (getCurrentSession().isOpen()) { getCurrentSession().close(); } } catch (Exception ex) { log.error("Li khi ng session", ex); throw new RuntimeException("Li khi ng session", ex); } } public static String getPointString(double lon, double lat) { String str = "POINT("; str += lon; str += " "; str += lat; str += ")"; return str; } }