package com.espirity.survey.persistence; import java.util.List; import com.espirity.survey.model.HitCounter; import net.sf.hibernate.Hibernate; import net.sf.hibernate.HibernateException; import net.sf.hibernate.Session; import net.sf.hibernate.Transaction; public class HibernateDatabaseHitCounterManager implements IHitCounterManager{ private static String SELECT_HITCOUNTER_WITH_NAME = "from HitCounter as hitCounter where hitCounter.name = ?"; public HibernateDatabaseHitCounterManager(){ super(); } private void rollback (Transaction transaction){ try { if (transaction != null) transaction.rollback(); } catch (HibernateException ex) { ex.printStackTrace(); } } private void closeSession (){ try { HibernateUtil.closeSession(); } catch (HibernateException ex) { ex.printStackTrace(); } } /** * Updates anObject in the database. */ public boolean update(HitCounter hitCounter){ Transaction transaction = null; Session session = null; try { session = HibernateUtil.currentSession(); transaction = session.beginTransaction(); session.update(hitCounter); transaction.commit(); closeSession(); return true; } catch (HibernateException ex) { ex.printStackTrace(); rollback(transaction); return false; } finally { closeSession(); } } public HitCounter getHitCounterByName(String name){ Transaction transaction = null; Session session = null; try { session = HibernateUtil.currentSession(); transaction = session.beginTransaction(); List hitCounters = session.find( SELECT_HITCOUNTER_WITH_NAME, name, Hibernate.STRING); if (hitCounters.isEmpty()) { closeSession(); return null; } else { closeSession(); return (HitCounter)hitCounters.get(0); } } catch (HibernateException ex) { ex.printStackTrace(); return null; } finally { closeSession(); } } public synchronized void incrementHitCounterByName(String name){ HitCounter hitCounter = getHitCounterByName(name); if(hitCounter != null){ hitCounter.increment(); update(hitCounter); } } }