package cn.newgxu.jpamodel;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import org.springframework.orm.jpa.EntityManagerHolder;
import org.springframework.transaction.support.TransactionSynchronizationManager;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
import cn.newgxu.jpamodel.ModelContext.EntityManagerLookup;
/**
*
* @author wyx
* @date 2007-3-23--08:08:29
*/
public class JPAEmlookupRegister implements ServletContextListener {
public static final String DEFAULT_PERSISTENCE_MANAGER_FACTORY_BEAN_NAME = "entityManagerFactory";
private String entityManagerFactoryBeanName = DEFAULT_PERSISTENCE_MANAGER_FACTORY_BEAN_NAME;
public String getEntityManagerFactoryBeanName() {
return entityManagerFactoryBeanName;
}
public void setEntityManagerFactoryBeanName(
String entityManagerFactoryBeanName) {
this.entityManagerFactoryBeanName = entityManagerFactoryBeanName;
}
public void contextDestroyed(ServletContextEvent event) {
}
protected EntityManagerFactory lookupEntityManagerFactory(ServletContext sc) {
WebApplicationContext wac = WebApplicationContextUtils
.getRequiredWebApplicationContext(sc);
return (EntityManagerFactory) wac.getBean(
getEntityManagerFactoryBeanName(), EntityManagerFactory.class);
}
public void contextInitialized(final ServletContextEvent event)
{
EntityManagerLookup eml = new EntityManagerLookup()
{
public EntityManager lookupEntityManager()
{
EntityManagerFactory emf = lookupEntityManagerFactory(event.getServletContext());
if (TransactionSynchronizationManager.hasResource(emf))
{
EntityManagerHolder holder = (EntityManagerHolder) TransactionSynchronizationManager.getResource(emf);
EntityManager s = holder.getEntityManager();
return s;
} else {
// return lookupEntityManagerFactory(event.getServletContext()).createEntityManager();
return null;
}
}
};
ModelContext.registerEntityManagerLookup(eml);
}
}