//$Id: EntityManagerFactory.java 6280 2007-09-27 15:29:56Z pmuir $ package org.jboss.seam.persistence; import java.util.HashMap; import java.util.Hashtable; import java.util.Map; import javax.persistence.Persistence; import org.hibernate.cfg.Environment; import org.jboss.seam.Component; import org.jboss.seam.ScopeType; import org.jboss.seam.annotations.Create; import org.jboss.seam.annotations.Destroy; import org.jboss.seam.annotations.Scope; import org.jboss.seam.annotations.Startup; import org.jboss.seam.annotations.Unwrap; import org.jboss.seam.annotations.intercept.BypassInterceptors; import org.jboss.seam.util.Naming; /** * A Seam component that bootstraps an EntityManagerFactory, * for use of JPA outside of Java EE 5 / Embedded JBoss. * * @author Gavin King */ @Scope(ScopeType.APPLICATION) @BypassInterceptors @Startup public class EntityManagerFactory { private javax.persistence.EntityManagerFactory entityManagerFactory; private String persistenceUnitName; private Map<String, String> persistenceUnitProperties; @Unwrap public javax.persistence.EntityManagerFactory getEntityManagerFactory() { return entityManagerFactory; } @Create public void startup(Component component) throws Exception { if (persistenceUnitName==null) { persistenceUnitName = component.getName(); } entityManagerFactory = createEntityManagerFactory(); } @Destroy public void shutdown() { if (entityManagerFactory!=null) { entityManagerFactory.close(); } } protected javax.persistence.EntityManagerFactory createEntityManagerFactory() { Map properties = new HashMap(); Hashtable<String, String> jndiProperties = Naming.getInitialContextProperties(); if ( jndiProperties!=null ) { // Prefix regular JNDI properties for Hibernate for (Map.Entry<String, String> entry : jndiProperties.entrySet()) { properties.put( Environment.JNDI_PREFIX + "." + entry.getKey(), entry.getValue() ); } } if (persistenceUnitProperties!=null) { properties.putAll(persistenceUnitProperties); } if ( properties.isEmpty() ) { return Persistence.createEntityManagerFactory(persistenceUnitName); } else { return Persistence.createEntityManagerFactory(persistenceUnitName, properties); } } /** * The persistence unit name */ public String getPersistenceUnitName() { return persistenceUnitName; } public void setPersistenceUnitName(String persistenceUnitName) { this.persistenceUnitName = persistenceUnitName; } /** * Properties to pass to Persistence.createEntityManagerFactory() */ public Map<String, String> getPersistenceUnitProperties() { return persistenceUnitProperties; } public void setPersistenceUnitProperties(Map<String, String> persistenceUnitProperties) { this.persistenceUnitProperties = persistenceUnitProperties; } }