package uk.ac.cam.echo.server.filters; import org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider; import org.hibernate.Session; import org.hibernate.Transaction; import uk.ac.cam.echo.server.HibernateUtil; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.MultivaluedMap; import java.io.IOException; import java.io.OutputStream; import java.lang.annotation.Annotation; import java.lang.reflect.Type; public class JacksonWithHibernateJsonProvider extends JacksonJaxbJsonProvider { @Override public void writeTo(Object value, Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType, MultivaluedMap<String, Object> httpHeaders, OutputStream entityStream) throws IOException { try { HibernateUtil.getTransaction(); super.writeTo(value, type, genericType, annotations, mediaType, httpHeaders, entityStream); closeHibernateSession(); } catch(Throwable plm) { plm.printStackTrace(); } } private void closeHibernateSession() { System.out.println("Closing session"); Session session = HibernateUtil.getSessionFactory().getCurrentSession(); Transaction transaction = session.getTransaction(); if (transaction.isActive()) { session.getTransaction().commit(); } } }