r2474 - trunk/topia-persistence/src/main/java/org/nuiton/topia/framework
Author: athimel Date: 2012-05-14 11:58:22 +0200 (Mon, 14 May 2012) New Revision: 2474 Url: http://nuiton.org/repositories/revision/topia/2474 Log: Review the way JPAConfiguration is built Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaContextImpl.java trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaUtil.java Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaContextImpl.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaContextImpl.java 2012-05-10 17:05:07 UTC (rev 2473) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaContextImpl.java 2012-05-14 09:58:22 UTC (rev 2474) @@ -26,7 +26,9 @@ package org.nuiton.topia.framework; import com.google.common.base.Splitter; -import org.apache.commons.lang3.StringUtils; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Maps; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.topia.TopiaContext; @@ -322,7 +324,7 @@ if (getParentContext() != null) { entityManagerFactory = getParentContext().getEntityManagerFactory(); } else { - Map params = getJPAConfiguration(); + Map<String, Object> params = getJPAConfiguration(); entityManagerFactory = Persistence.createEntityManagerFactory( TopiaPersistenceProvider.TOPIA_PERSISTENCE_UNIT_NAME, params); } @@ -383,53 +385,62 @@ String listPersistenceClasses = getConfig().getProperty( TopiaContextFactory.CONFIG_PERSISTENCE_CLASSES, ""); - Iterable<String> classes = Splitter.on(",") + Iterable<String> classNames = Splitter.on(",") .trimResults() .omitEmptyStrings() .split(listPersistenceClasses); - for (String className : classes) { - className = className.trim(); + // Loop on classNames, and check if each Class exists + // If a of the class does not exist, throw a TopiaNotFoundException + for (String className : classNames) { - if (StringUtils.isNotEmpty(className)) { - if (log.isDebugEnabled()) { - log.debug("Load persistent class : " + className); - } + if (log.isDebugEnabled()) { + log.debug("Load persistent class : " + className); + } - // XXX echatellier 20111007 ce cqui est dommage ici, c'est - // la definition de cette classe ne sert a rien (apart security) - // car pour hibernate hibernateConfiguration.addClass(persistanceClass) - // il ne se sert pas de la classe en fait et fait seulement - // un className.replace( '.', '/' ) + ".hbm.xml"; - // pour obtenir le mapping et la reinstancier ensuite - - Class<?> clazz; - try { - clazz = Class.forName(className); - } catch (ClassNotFoundException eee) { - String message = String.format( - "Persistent class %s not found", - className); - if (log.isWarnEnabled()) { - log.warn(message); - } - throw new TopiaNotFoundException(message, eee); + Class<?> clazz; + try { + clazz = Class.forName(className); + } catch (ClassNotFoundException eee) { + String message = String.format( + "Persistent class '%s' not found", + className); + if (log.isWarnEnabled()) { + log.warn(message); } - persistenceClasses.add(clazz); + throw new TopiaNotFoundException(message, eee); } + persistenceClasses.add(clazz); } - jpaConfiguration.put(TopiaPersistenceProvider.TOPIA_ENTITIES, persistenceClasses); - jpaConfiguration.put(TopiaPersistenceProvider.TOPIA_CONTEXT, this); + // allProperties will be a flatten version of all the properties + Properties allProperties = new Properties(); + allProperties.putAll(getConfig()); - // FIXME AThimel 10/05/2012 Don't push all the configuration, maybe only a part of it ? - for (Map.Entry<Object, Object> entry : getConfig().entrySet()) { - Object key = entry.getKey(); - if (key instanceof String) { - jpaConfiguration.put((String)key, entry.getValue()); + // Strange behavior, all properties are already loaded from + // constructor. Difficult to use this behavior, need to have + // TOPIA_PERSISTENCE_PROPERTIES_FILE in config. + Properties propertiesFromClasspath = + TopiaUtil.getProperties(getConfig(). + getProperty(TopiaContextFactory.CONFIG_PERSISTENCE_PROPERTIES_FILE)); + + if (!propertiesFromClasspath.isEmpty()) { + if (log.isDebugEnabled()) { + log.debug("Load properties from file : " + + propertiesFromClasspath); } + allProperties.putAll(propertiesFromClasspath); } + // Push all properties from Properties to jpaConfiguration Map + ImmutableMap<String,String> allPropertiesMap = Maps.fromProperties(allProperties); + jpaConfiguration.putAll(allPropertiesMap); + + // Add mandatory properties + ImmutableSet<Class<?>> entitiesClasses = ImmutableSet.copyOf(persistenceClasses); + jpaConfiguration.put(TopiaPersistenceProvider.TOPIA_ENTITIES, entitiesClasses); + jpaConfiguration.put(TopiaPersistenceProvider.TOPIA_CONTEXT, this); + } } return jpaConfiguration; @@ -526,86 +537,7 @@ // hibernateConfiguration.addDirectory(new File(dir)); // } // } -// -// // ajout des classes dites persistentes -// Set<Class<?>> hibernatePersistanceClasses = new HashSet<Class<?>>(); -// for (TopiaService service : getServices().values()) { -// Class<?>[] classes = service.getPersistenceClasses(); -// -// // certains service n'ont pas de classe persistantes -// if (classes != null) { -// // sletellier 20110411 : http://www.nuiton.org/issues/show/1454 -// hibernatePersistanceClasses.addAll(Arrays.asList(classes)); -//// for (Class<?> clazz : classes) { -//// hibernateConfiguration.addClass(clazz); -//// } -// } -// } -// -// String listPersistenceClasses = getConfig().getProperty( -// TopiaContextFactory.CONFIG_PERSISTENCE_CLASSES, ""); -// -// String[] classes = listPersistenceClasses.split(","); -// for (String classname : classes) { -// classname = classname.trim(); -// if (StringUtils.isNotEmpty(classname)) { -// if (log.isDebugEnabled()) { -// log.debug("Load persistent class : " + classname); -// } -// -// // XXX echatellier 20111007 ce cqui est dommage ici, c'est -// // la definition de cette classe ne sert a rien (apart security) -// // car pour hibernate hibernateConfiguration.addClass(persistanceClass) -// // il ne se sert pas de la classe en fait et fait seulement -// // un classname.replace( '.', '/' ) + ".hbm.xml"; -// // pour obtenir le mapping et la reinstancier ensuite -// -// Class<?> clazz; -// try { -// clazz = Class.forName(classname); -// } catch (ClassNotFoundException eee) { -// if (log.isDebugEnabled()) { -// log.debug("Class " + classname + " not found"); -// } -// throw new TopiaNotFoundException( -// _("topia.persistence.error.class.not.found", -// classname)); -// } -// persistenceClasses.add(clazz); -// -// // sletellier 20110411 : http://www.nuiton.org/issues/show/1454 -//// hibernateConfiguration.addClass(clazz); -// hibernatePersistanceClasses.add(clazz); -// } -// } -// -// // sletellier 20110411 : http://www.nuiton.org/issues/show/1454 -// // Add persistance classes in hibernate config -// for (Class<?> persistanceClass : hibernatePersistanceClasses) { -// hibernateConfiguration.addClass(persistanceClass); -// } -// -// Properties prop = new Properties(); -// prop.putAll(hibernateConfiguration.getProperties()); -// prop.putAll(getConfig()); -// -// // Strange behavior, all properties are already loaded from -// // constructor. Difficult to use this behavior, need to have -// // TOPIA_PERSISTENCE_PROPERTIES_FILE in config. -// Properties propertiesFromClasspath = -// TopiaUtil.getProperties(getConfig(). -// getProperty(TopiaContextFactory.CONFIG_PERSISTENCE_PROPERTIES_FILE)); -// -// if (!propertiesFromClasspath.isEmpty()) { -// if (log.isDebugEnabled()) { -// log.debug("Load properties from file : " + -// propertiesFromClasspath); -// } -// prop.putAll(propertiesFromClasspath); -// } -// -// hibernateConfiguration.setProperties(prop); -// + // // tchemit 2011-05-26 When using hibernate > 3.3, need to make sure all mappings are loaded (the one from directory files are not still done). // hibernateConfiguration.buildMappings(); // } Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaUtil.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaUtil.java 2012-05-10 17:05:07 UTC (rev 2473) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaUtil.java 2012-05-14 09:58:22 UTC (rev 2474) @@ -26,25 +26,12 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -//import org.hibernate.cfg.Configuration; -//import org.hibernate.connection.ConnectionProvider; -//import org.hibernate.connection.ConnectionProviderFactory; -//import org.hibernate.dialect.Dialect; -//import org.hibernate.mapping.PersistentClass; -//import org.hibernate.mapping.Table; -//import org.hibernate.tool.hbm2ddl.DatabaseMetadata; -//import org.hibernate.tool.hbm2ddl.TableMetadata; -import org.nuiton.topia.TopiaContext; -import org.nuiton.topia.TopiaContextFactory; import org.nuiton.topia.TopiaNotFoundException; import org.nuiton.topia.persistence.TopiaEntity; import org.nuiton.util.RecursiveProperties; import org.nuiton.util.Resource; import java.net.URL; -import java.sql.Connection; -import java.sql.SQLException; -import java.util.Iterator; import java.util.Properties; import java.util.StringTokenizer; import java.util.regex.Pattern;
participants (1)
-
athimelï¼ users.nuiton.org