Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Hibernate, Relational Persistence for Idiomatic Java
   *
   * Copyright (c) 2011, Red Hat Inc. or third-party contributors as
   * indicated by the @author tags or express copyright attribution
   * statements applied by the authors.  All third-party contributions are
   * distributed under license by Red Hat Inc.
   *
   * This copyrighted material is made available to anyone wishing to use, modify,
  * copy, or redistribute it subject to the terms and conditions of the GNU
  * Lesser General Public License, as published by the Free Software Foundation.
  *
  * This program is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
  * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
  * for more details.
  *
  * You should have received a copy of the GNU Lesser General Public License
  * along with this distribution; if not, write to:
  * Free Software Foundation, Inc.
  * 51 Franklin Street, Fifth Floor
  * Boston, MA  02110-1301  USA
  */
 package org.hibernate.ejb.internal;
 
 import java.util.Set;
 
 
An internal registry of all org.hibernate.ejb.EntityManagerFactoryImpl instances for the same classloader as this class. This registry is used for serialization/deserialization of entity managers.

Author(s):
Scott Marlow
 
 public class EntityManagerFactoryRegistry {
 	private static final CoreMessageLogger LOG = Logger.getMessageLogger(
 	);
 
 
 
 		.debugf"Initializing EntityManagerFactoryRegistry : %s"this );
 	}

register the specified entity manager factory

Parameters:
name to register the passed entity manager factory
entityManagerFactory
 
 	public void addEntityManagerFactory(String nameEntityManagerFactory entityManagerFactory) {
 		.debugf"Registering EntityManagerFactory: %s "name );
 		if (name == null) { // allow unit tests that don't specify the pu name to succeed
 			.tracef"not registering EntityManagerFactory because name is null");
 			return;
 		}
 		Set<EntityManagerFactoryentityManagerFactorySet = new HashSet<EntityManagerFactory>();
 		entityManagerFactorySet.add(entityManagerFactory);
 		Set<EntityManagerFactoryprevious = .putIfAbsentnameentityManagerFactorySet);
 
 		// if already added under 'name'.  Where 'name' could be session factory name, pu name or uuid (previous
 		// will be null).  We will give a warning that an EntityManagerFactory is created with the same name
 		// as is already used for a different EMF.  The best way to avoid the warning is to specify the AvailableSettings.SESSION_FACTORY_NAME
 		// with a unique name.
 		if (previous != null) {
 			boolean done = false;
 			while( !done) {
 				synchronized (previous) {
 					if (.get(name) == previous) {  // compare and set EMF if same
 						previous.add(entityManagerFactory);
 						done = true;
 					}
 					else {												// else it was removed or a new set added
 						previous = .get(name);	// get the set added by another thread
 						if (null == previous) {							// or add it here if not
 							previous = .get(name);// use the current set
 						}
 
 					}
 				}
 			}
 		}
 	}

remove the specified entity manager factory from the EntityManagerFactoryRegistry

Parameters:
name
entityManagerFactory
Throws:
org.hibernate.HibernateException if the specified entity manager factory could not be found in the registry
	public void removeEntityManagerFactory(String nameEntityManagerFactory entityManagerFactorythrows HibernateException {
		.debugf"Remove: name=%s"name );
		if (name == null) { // allow unit tests that don't specify the pu name to succeed
			.tracef"not removing EntityManagerFactory from registry because name is null");
			return;
		}
		Set<EntityManagerFactoryentityManagerFactorySet = .get(name);
		if (entityManagerFactorySet == null) {
			throw new HibernateException"registry does not contain entity manager factory: " + name);
		}
		synchronized (entityManagerFactorySet) {
			boolean removed = entityManagerFactorySet.remove(entityManagerFactory);
			if (entityManagerFactorySet.size() == 0) {
			}
		}
	}

Lookup the specified entity manager factory by name

Parameters:
name
Returns:
Throws:
org.hibernate.HibernateException if entity manager factory is not found or if more than one entity manager factory was registered with name.
		.debugf"Lookup: name=%s"name );
		Set<EntityManagerFactoryentityManagerFactorySet = .get(name);
		if (entityManagerFactorySet == null) {
			throw new HibernateException"registry does not contain entity manager factory: " + name);
		}
		if (entityManagerFactorySet.size() > 1) {
			throw new HibernateException"registry contains more than one (" + entityManagerFactorySet.size()+ ") entity manager factories: " + name);
		}
		return entityManagerFactorySet.iterator().next();
	}
New to GrepCode? Check out our FAQ X