# Session factory instance Initialization time

**URL:** <https://discourse.hibernate.org/t/session-factory-instance-initialization-time/999>\
**Category:** Hibernate ORM\
**Created:** [June 29, 2018, 3:41pm UTC](https://discourse.hibernate.org/t/session-factory-instance-initialization-time/999 "2018-06-29T15:41:11Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![azardi](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.hibernate.org/azardi/32/24_2.png) [@azardi](https://discourse.hibernate.org/u/azardi)\
**Post date:** [June 29, 2018, 3:41pm UTC](https://discourse.hibernate.org/t/session-factory-instance-initialization-time/999/1 "2018-06-29T15:41:11Z")

</div>

We migrated a Hibernate layer of a Java-Desktop-application from 4 (4.1.19) to Hibernate 5 (5.2.17).  
We still use legacy HBM mapping-files. The initialization of the Session factory instance takes now more time (double).

// Initialization-Method - Hibernate 4.1.19 - ~ 5 seconds

```auto
public synchronized SessionFactory getSessionFactory() {
	private SessionFactory sessionFactory = null;

	try {
		Configuration configuration = new Configuration();
		configuration.configure();

		// add custom-Hibernate-Interceptor
		configuration.setInterceptor(new myInterceptor());
				
		// Build a Service-Registry
		ServiceRegistry aRegistry = new ServiceRegistryBuilder()
                        					.applySettings(configuration.getProperties())
											.buildServiceRegistry();
				
		// Build the SessionFactory
		sessionFactory = (SessionFactoryImpl) configuration.buildSessionFactory(aRegistry);

	} 
	catch (Throwable ex) {
		....
	}

	return sessionFactory;		
}

```

// Initialization-Method - Hibernate 5.2.17 ~10 seconds

```auto
private synchronized SessionFactory getSessionFactory() {
	private SessionFactory sessionFactory = null;
	
	try {
         // create configuration 
		 Configuration configuration = new Configuration();

		 // add custom-Hibernate-Interceptor
  	     configuration.setInterceptor(new myInterceptor());
				
		// Build a Service-Registry
		aServiceRegistry = new StandardServiceRegistryBuilder(bootstrapRegistry)
				                                       .applySettings(configuration.getProperties())
				                                       .configure()
				                                       .build();

        // Build the MetadataSources
		MetadataSources aSources = new MetadataSources(aServiceRegistry);
				
		// Build the Metadata
		Metadata metadata = aSources.getMetadataBuilder().build();				
				
		// Build the SessionFactory
		sessionFactory = metadata.getSessionFactoryBuilder().build();
	}
				
	catch (Throwable ex) {
		....
	}
	
	return sessionFactory;
}

```

---

<div class="post-metadata">

**Author:** ![vlad](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.hibernate.org/vlad/32/658_2.png) [@vlad](https://discourse.hibernate.org/u/vlad)\
**Post date:** [June 29, 2018, 3:42pm UTC](https://discourse.hibernate.org/t/session-factory-instance-initialization-time/999/2 "2018-06-29T15:42:45Z")

</div>

Try to use a Profiler to identify the issue. Thanks.

---

<div class="post-metadata">

**Author:** ![azardi](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.hibernate.org/azardi/32/24_2.png) [@azardi](https://discourse.hibernate.org/u/azardi)\
**Post date:** [June 29, 2018, 3:51pm UTC](https://discourse.hibernate.org/t/session-factory-instance-initialization-time/999/3 "2018-06-29T15:51:39Z")

</div>

OK. Thanks. We try it out.

---

<div class="post-metadata">

**Author:** ![azardi](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.hibernate.org/azardi/32/24_2.png) [@azardi](https://discourse.hibernate.org/u/azardi)\
**Post date:** [June 29, 2018, 4:50pm UTC](https://discourse.hibernate.org/t/session-factory-instance-initialization-time/999/4 "2018-06-29T16:50:58Z")

</div>

```auto
 // Build the MetadataSources
MetadataSources aSources = new MetadataSources(aServiceRegistry);
				
// Build the Metadata
Metadata metadata = aSources.getMetadataBuilder().build();

// Build the SessionFactory
sessionFactory = metadata.getSessionFactoryBuilder().build();

```

The Methods

- SessionFactoryBuilderImpl.build() [MetamodelImpl.initialize() + SessionFactoryImpl.applyCfgXmlValues()]

and

- MetadataBuildImpl.build() [MappingReference.apply() + MetadataBuildingProcess.build()]

takes more time than

```auto
// Build the SessionFactory
sessionFactory = (SessionFactoryImpl) configuration.buildSessionFactory(aRegistry);

```

from 4.1.19 to build the factory.

Is Metadata necessary to build the factory?

---

<div class="post-metadata">

**Author:** ![vlad](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.hibernate.org/vlad/32/658_2.png) [@vlad](https://discourse.hibernate.org/u/vlad)\
**Post date:** [June 29, 2018, 6:02pm UTC](https://discourse.hibernate.org/t/session-factory-instance-initialization-time/999/5 "2018-06-29T18:02:55Z")

</div>

Yes, it is. You need to break down to see what exactly it is that takes more time now, not just the higher level calling methods.
