package net.techreadiness.persistence;
import java.util.Map;
import javax.persistence.EntityManagerFactory;
import javax.persistence.spi.PersistenceUnitInfo;
import org.hibernate.ejb.Ejb3Configuration;
import org.hibernate.ejb.HibernatePersistence;
import org.hibernate.event.PreInsertEventListener;
import org.hibernate.event.PreUpdateEventListener;
/**
* Allows us to wire up spring beans inside of the event listeners. We use this mechanism for auditing purposes. eg. setting
* the username of the person updating an entity.
*
*/
public class HibernateExtendedPersistenceProvider extends HibernatePersistence {
private PreInsertEventListener[] preInsertEventListeners;
private PreUpdateEventListener[] preUpdateEventListeners;
@Override
public EntityManagerFactory createEntityManagerFactory(String persistenceUnitName, Map properties) {
Ejb3Configuration cfg = new Ejb3Configuration();
setupConfiguration(cfg);
Ejb3Configuration configured = cfg.configure(persistenceUnitName, properties);
return configured != null ? configured.buildEntityManagerFactory() : null;
}
@Override
public EntityManagerFactory createContainerEntityManagerFactory(PersistenceUnitInfo info, Map properties) {
Ejb3Configuration cfg = new Ejb3Configuration();
setupConfiguration(cfg);
Ejb3Configuration configured = cfg.configure(info, properties);
return configured != null ? configured.buildEntityManagerFactory() : null;
}
private void setupConfiguration(Ejb3Configuration cfg) {
cfg.getEventListeners().setPreUpdateEventListeners(preUpdateEventListeners);
cfg.getEventListeners().setPreInsertEventListeners(preInsertEventListeners);
}
public void setPreUpdateEventListeners(PreUpdateEventListener[] preUpdateEventListeners) {
this.preUpdateEventListeners = preUpdateEventListeners;
}
public void setPreInsertEventListeners(PreInsertEventListener[] preInsertEventListeners) {
this.preInsertEventListeners = preInsertEventListeners;
}
}