/**
* This filter open and close HibernateTransaction
*/
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
Session session = HibernateSessionFactory.getSession();
Transaction tx = null;
try {
logger.debug("Starting a database transaction");
tx = session.beginTransaction();
chain.doFilter(request, response);
if (tx.isActive()) {
logger.debug("Committing the database transaction");
tx.commit();
}
} catch (Throwable ex) {
logger.debug("failed to process the request!", ex);
if ((tx != null) && tx.isActive())
tx.rollback();
if (session.isOpen())
session.close();
ex.printStackTrace();
}
}
/**
* Create if necessary, and return the singleton Hibernate SessionFactory.
*/
public static SessionFactory getSessionFactory() {
try {
if (sessionFactory == null) {
Configuration configuration = new Configuration().configure(CONFIG_FILE_LOCATION);
StandardServiceRegistryBuilder serviceRegistryBuilder = new StandardServiceRegistryBuilder();
serviceRegistryBuilder.applySettings(configuration.getProperties());
ServiceRegistry serviceRegistry = serviceRegistryBuilder.build();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
}
return sessionFactory;
} catch (Throwable ex) {
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}
/**
* This method use sessionFactory to get current session
*/
@Override
public T getById(PK pk) {
T entity = (T) getSessionFactory.getSession().get(getTypeClass(), pk);
logger.info("getById loaded successfully, Entity details=" + entity + " / PK=" + pk);
return entity;
}
/**
* This method get object and set a new value into property [used].
*/
@Override
public Downloader setUsedById(Long id) {
Downloader down = getById(id);
down.setUsed(1);
return down;
}