r3041 - in branches/topia-2.8.1.x: . topia-persistence/src/main/java/org/nuiton/topia/framework topia-persistence/src/test/java/org/nuiton/topia/framework
Author: athimel Date: 2014-04-03 17:59:40 +0200 (Thu, 03 Apr 2014) New Revision: 3041 Url: http://forge.nuiton.org/projects/topia/repository/revisions/3041 Log: refs-50 #3139 Updates to Hibernate 4.3.x Modified: branches/topia-2.8.1.x/pom.xml branches/topia-2.8.1.x/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaConnectionProvider.java branches/topia-2.8.1.x/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaContextImpl.java branches/topia-2.8.1.x/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaFiresSupport.java branches/topia-2.8.1.x/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaUtil.java branches/topia-2.8.1.x/topia-persistence/src/test/java/org/nuiton/topia/framework/TopiaConnectionProviderHardCoded.java Modified: branches/topia-2.8.1.x/pom.xml =================================================================== --- branches/topia-2.8.1.x/pom.xml 2014-04-03 15:28:03 UTC (rev 3040) +++ branches/topia-2.8.1.x/pom.xml 2014-04-03 15:59:40 UTC (rev 3041) @@ -66,7 +66,7 @@ <processorPluginVersion>1.3</processorPluginVersion> <nuitonI18nVersion>3.1-SNAPSHOT</nuitonI18nVersion> <xmlrpcVersion>3.1.2</xmlrpcVersion> - <hibernateVersion>4.2.11.Final</hibernateVersion> + <hibernateVersion>4.3.5.Final</hibernateVersion> <sl4jVersion>1.7.6</sl4jVersion> <h2Version>1.3.175</h2Version> <hamcrestVersion>1.3</hamcrestVersion> Modified: branches/topia-2.8.1.x/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaConnectionProvider.java =================================================================== --- branches/topia-2.8.1.x/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaConnectionProvider.java 2014-04-03 15:28:03 UTC (rev 3040) +++ branches/topia-2.8.1.x/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaConnectionProvider.java 2014-04-03 15:59:40 UTC (rev 3041) @@ -36,10 +36,10 @@ import org.apache.commons.logging.LogFactory; import org.hibernate.HibernateException; import org.hibernate.cfg.Environment; +import org.hibernate.engine.jdbc.connections.internal.ConnectionProviderInitiator; +import org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl; import org.hibernate.internal.util.ReflectHelper; import org.hibernate.internal.util.config.ConfigurationHelper; -import org.hibernate.service.jdbc.connections.internal.ConnectionProviderInitiator; -import org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl; /** * Customized connection provider. Modified: branches/topia-2.8.1.x/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaContextImpl.java =================================================================== --- branches/topia-2.8.1.x/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaContextImpl.java 2014-04-03 15:28:03 UTC (rev 3040) +++ branches/topia-2.8.1.x/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaContextImpl.java 2014-04-03 15:59:40 UTC (rev 3041) @@ -61,13 +61,18 @@ import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; +import org.hibernate.boot.registry.StandardServiceRegistry; +import org.hibernate.boot.registry.StandardServiceRegistryBuilder; import org.hibernate.cfg.Configuration; +import org.hibernate.engine.spi.SessionFactoryImplementor; import org.hibernate.event.service.spi.EventListenerRegistry; import org.hibernate.event.spi.EventType; import org.hibernate.internal.SessionFactoryImpl; import org.hibernate.jdbc.Work; +import org.hibernate.service.Service; import org.hibernate.service.ServiceRegistry; import org.hibernate.service.ServiceRegistryBuilder; +import org.hibernate.service.spi.SessionFactoryServiceRegistry; import org.hibernate.tool.hbm2ddl.SchemaExport; import org.hibernate.tool.hbm2ddl.SchemaUpdate; import org.nuiton.topia.TopiaContext; @@ -499,6 +504,69 @@ return hibernate; } + /** + * Method to extract from the given Hibernate SessionFactory a working instance of StandardServiceRegistry + * <p/> + * IMPORTANT : As much as possible, prefer using the + * {@link #getSessionFactoryServiceRegistry(org.hibernate.SessionFactory)} mthod instead of the current one because + * the SessionFactoryServiceRegistry is a child of the StandardServiceRegistry + * <p/> + * NB: This method is static to make sure it does not depend on the current instance + * + * @param sessionFactory the Hibernate's SessionFactory instance + * @return the StandardServiceRegistry instance used by the given SessionFactory + */ + protected static StandardServiceRegistry getStandardServiceRegistry(SessionFactory sessionFactory) { + + // AThimel 03/04/14 The next two lines are the good way to get the StandardServiceRegistry in Hibernate 4.3 + SessionFactory.SessionFactoryOptions sessionFactoryOptions = sessionFactory.getSessionFactoryOptions(); + StandardServiceRegistry result = sessionFactoryOptions.getServiceRegistry(); + + return result; + } + + /** + * Method to extract from the given Hibernate SessionFactory a working instance of SessionFactoryServiceRegistry + * <p/> + * IMPORTANT : If possible, prefer using this method instead of + * {@link #getStandardServiceRegistry(org.hibernate.SessionFactory)} because the SessionFactoryServiceRegistry is a + * child of the StandardServiceRegistry + * <p/> + * NB: This method is static to make sure it does not depend on the current instance + * + * @param sessionFactory the Hibernate's SessionFactory instance + * @return the SessionFactoryServiceRegistry instance used by the given SessionFactory + */ + protected static SessionFactoryServiceRegistry getSessionFactoryServiceRegistry(SessionFactory sessionFactory) { + + // AThimel 03/04/14 The next two lines are the good way to get the SessionFactoryServiceRegistry in Hibernate 4.3 + SessionFactoryImplementor sessionFactoryImplementor = (SessionFactoryImplementor) sessionFactory; + SessionFactoryServiceRegistry result = (SessionFactoryServiceRegistry)sessionFactoryImplementor.getServiceRegistry(); + + return result; + } + + /** + * Method to get an Hibernate service instance from a given Hibernate SessionFactory + * <p/> + * NB: This method is static to make sure it does not depend on the current instance + * + * @param sessionFactory the Hibernate's SessionFactory instance + * @param serviceClass the expected service class + * @return the found service instance + * @throws org.hibernate.service.UnknownServiceException Indicates the service was not known. + * @see org.hibernate.service.ServiceRegistry#getService(Class) + */ + public static <S extends Service> S getHibernateService(SessionFactory sessionFactory, Class<S> serviceClass) { + + // Hibernate 4.3.x : prefer using the SessionFactoryServiceRegistry method instead of StandardServiceRegistry + // because SessionFactoryServiceRegistry is a child of the StandardServiceRegistry + ServiceRegistry serviceRegistry = getSessionFactoryServiceRegistry(sessionFactory); + + S result = serviceRegistry.getService(serviceClass); + return result; + } + @Override public SessionFactory getHibernateFactory() throws TopiaNotFoundException { if (hibernateFactory == null) { @@ -507,15 +575,20 @@ } else { // init service registry - ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings( - getHibernateConfiguration().getProperties()).buildServiceRegistry(); - - hibernateFactory = getHibernateConfiguration().buildSessionFactory(serviceRegistry); + // Hibernate 4.2 +// ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings( +// properties).buildServiceRegistry(); +// +// hibernateFactory = getHibernateConfiguration().buildSessionFactory(serviceRegistry); - // we can't reuse original serviceRegistry instance - // we must call getServiceRegistry on factory to get a working one - ServiceRegistry serviceRegistryInit = ((SessionFactoryImpl)hibernateFactory).getServiceRegistry(); - EventListenerRegistry eventListenerRegistry = serviceRegistryInit.getService(EventListenerRegistry.class); + // Hibernate 4.3 + Properties properties = getHibernateConfiguration().getProperties(); + StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder(); + StandardServiceRegistry standardServiceRegistry = builder.applySettings(properties).build(); + hibernateFactory = getHibernateConfiguration().buildSessionFactory(standardServiceRegistry); + + EventListenerRegistry eventListenerRegistry = getHibernateService(hibernateFactory, EventListenerRegistry.class); + TopiaFiresSupport.TopiaHibernateEvent listener = new TopiaFiresSupport.TopiaHibernateEvent(this); eventListenerRegistry.appendListeners(EventType.PRE_INSERT, listener); Modified: branches/topia-2.8.1.x/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaFiresSupport.java =================================================================== --- branches/topia-2.8.1.x/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaFiresSupport.java 2014-04-03 15:28:03 UTC (rev 3040) +++ branches/topia-2.8.1.x/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaFiresSupport.java 2014-04-03 15:59:40 UTC (rev 3041) @@ -55,6 +55,7 @@ import org.hibernate.event.spi.PreLoadEventListener; import org.hibernate.event.spi.PreUpdateEvent; import org.hibernate.event.spi.PreUpdateEventListener; +import org.hibernate.persister.entity.EntityPersister; import org.nuiton.topia.TopiaContext; import org.nuiton.topia.TopiaException; import org.nuiton.topia.TopiaVetoException; @@ -553,6 +554,13 @@ this.rootContext = rootContext; } + // Hibernate 4.3.x + @Override + public boolean requiresPostCommitHanding(EntityPersister persister) { + // TODO AThimel 17/12/13 I don't know what to return + return false; + } + /** * Recherche le context utilisant la session hibernate passe en * parametre Modified: branches/topia-2.8.1.x/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaUtil.java =================================================================== --- branches/topia-2.8.1.x/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaUtil.java 2014-04-03 15:28:03 UTC (rev 3040) +++ branches/topia-2.8.1.x/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaUtil.java 2014-04-03 15:59:40 UTC (rev 3041) @@ -26,13 +26,16 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.hibernate.SessionFactory; +import org.hibernate.boot.registry.StandardServiceRegistry; +import org.hibernate.boot.registry.StandardServiceRegistryBuilder; import org.hibernate.cfg.Configuration; import org.hibernate.dialect.Dialect; +import org.hibernate.engine.jdbc.connections.spi.ConnectionProvider; import org.hibernate.mapping.PersistentClass; import org.hibernate.mapping.Table; import org.hibernate.service.ServiceRegistry; import org.hibernate.service.ServiceRegistryBuilder; -import org.hibernate.service.jdbc.connections.spi.ConnectionProvider; import org.hibernate.tool.hbm2ddl.DatabaseMetadata; import org.hibernate.tool.hbm2ddl.TableMetadata; import org.nuiton.topia.TopiaContext; @@ -42,6 +45,8 @@ import org.nuiton.util.RecursiveProperties; import org.nuiton.util.Resource; +import java.io.Closeable; +import java.io.IOException; import java.net.URL; import java.sql.Connection; import java.sql.SQLException; @@ -50,6 +55,9 @@ import java.util.StringTokenizer; import java.util.regex.Pattern; +import com.google.common.base.Preconditions; +import com.google.common.base.Supplier; + /** * TODO-fdesbois-20100507 : Need javadoc + translations for existing methods. * @@ -366,8 +374,10 @@ } protected static ConnectionProvider getConnectionProvider(Configuration configuration) { - ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings( - configuration.getProperties()).buildServiceRegistry(); + Properties properties = configuration.getProperties(); + StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder(); + ServiceRegistry serviceRegistry = builder.applySettings(properties).build(); + // FIXME AThimel 03/04/14 serviceRegistry must be closed return serviceRegistry.getService(ConnectionProvider.class); } Modified: branches/topia-2.8.1.x/topia-persistence/src/test/java/org/nuiton/topia/framework/TopiaConnectionProviderHardCoded.java =================================================================== --- branches/topia-2.8.1.x/topia-persistence/src/test/java/org/nuiton/topia/framework/TopiaConnectionProviderHardCoded.java 2014-04-03 15:28:03 UTC (rev 3040) +++ branches/topia-2.8.1.x/topia-persistence/src/test/java/org/nuiton/topia/framework/TopiaConnectionProviderHardCoded.java 2014-04-03 15:59:40 UTC (rev 3041) @@ -36,10 +36,10 @@ import org.apache.commons.logging.LogFactory; import org.hibernate.HibernateException; import org.hibernate.cfg.Environment; +import org.hibernate.engine.jdbc.connections.internal.ConnectionProviderInitiator; +import org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl; import org.hibernate.internal.util.ReflectHelper; import org.hibernate.internal.util.config.ConfigurationHelper; -import org.hibernate.service.jdbc.connections.internal.ConnectionProviderInitiator; -import org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl; /** * Customized connection provider.
participants (1)
-
athimelï¼ users.nuiton.org