title: Ignite for Hibernate L2 is extremely slow
body: <p>I have system with Hibernate, Spring, PostgreSQL, MongoDB, Neo4j and ElasticSearch working with EhCache for Hibernate L2 and Spring Cache, it works well.</p>
  
  <p>I'm testing Ignite but the system became extremely slow when I put Ignite for Hibernate L2 (with Spring Cache works fast), I put JProfiler to see what is really slow and I just saw the follow methods extremely slow:</p>
  
  <pre><code>org.postgresql.core.VisibleBufferedInputStream.read(byte[ ], int, int)
  org.postgresql.jdbc2.AbstractJdbc2Statement.parseSql
  javax.persistence.EntityManager.find
  </code></pre>
  
  <p>This doesn't make much sense to me. I'm using Ignite 1.5.1.final-SNAPSHOT from Branch 1.5.1-2 with <a href="https://github.com/apache/ignite/pull/388" rel="nofollow">https://github.com/apache/ignite/pull/388</a> (I made a change to automatically create the caches for Hibernate L2), I tested with 1.4.0 and the problem is the same.</p>
  
  <p>Configuration for Ignite:</p>
  
  <pre><code>@Configuration
  public class CacheConfiguration {
  
      @Bean
      public DynamicClassLoaderWrapper dynamicClassLoaderWrapper() {
          return new DynamicClassLoaderWrapper(this.getClass().getClassLoader());
      }
  
      @Bean
      @SuppressWarnings("unchecked")
      public CacheManager cacheManager() {
          IgniteConfiguration igniteConfiguration = new IgniteConfiguration();
          igniteConfiguration.setGridName("meceap-grid");
          igniteConfiguration.setClassLoader(dynamicClassLoaderWrapper());
  
          igniteConfiguration.setCacheConfiguration(this.createDefaultCache("br.com.bruno.model.*"),
                  this.createDefaultCache("org.hibernate.cache.spi.UpdateTimestampsCache"),
                  this.createDefaultCache("org.hibernate.cache.internal.StandardQueryCache"));
  
          SpringCacheManager springCacheManager = new SpringCacheManager();
          springCacheManager.setConfiguration(igniteConfiguration);
          springCacheManager.setDynamicCacheConfiguration(this.createDefaultCache(null));
          return springCacheManager;
      }
  
      private org.apache.ignite.configuration.CacheConfiguration createDefaultCache(String name) {
          org.apache.ignite.configuration.CacheConfiguration cacheConfiguration = new org.apache.ignite.configuration.CacheConfiguration();
          cacheConfiguration.setName(name);
          cacheConfiguration.setCacheMode(CacheMode.PARTITIONED);
          cacheConfiguration.setAtomicityMode(CacheAtomicityMode.ATOMIC);
          cacheConfiguration.setWriteSynchronizationMode(CacheWriteSynchronizationMode.FULL_SYNC);
          cacheConfiguration.setStatisticsEnabled(true);
          cacheConfiguration.setEvictSynchronized(true);
          return cacheConfiguration;
      } 
  </code></pre>
  
  <p>}</p>
  
  <pre><code>public class RepositoryConfiguration {
  
      @Bean
      public LocalContainerEntityManagerFactoryBean meceapEntityManagerFactory() {
          LocalContainerEntityManagerFactoryBean bean = new LocalContainerEntityManagerFactoryBean();
          bean.setPersistenceUnitName(PERSISTENCE_UNIT_NAME);
          bean.setDataSource(dataSource);
  
          bean.getJpaPropertyMap().put("hibernate.dialect", hibernateDialect);
          bean.getJpaPropertyMap().put("hibernate.ejb.naming_strategy", NamingStrategyLowerCase.class.getCanonicalName());
          bean.getJpaPropertyMap().put("hibernate.jdbc.batch_size", 0);
          bean.getJpaPropertyMap().put("hibernate.use_sql_comments", true);
          bean.getJpaPropertyMap().put("hibernate.show_sql", false);
          bean.getJpaPropertyMap().put("org.apache.ignite.hibernate.grid_name", "meceap-grid");
          bean.getJpaPropertyMap().put("hibernate.cache.region.factory_class", HibernateRegionFactory.class.getCanonicalName());
          bean.getJpaPropertyMap().put("hibernate.cache.use_second_level_cache", true);
          bean.getJpaPropertyMap().put("hibernate.cache.use_query_cache", true);
          bean.getJpaPropertyMap().put("javax.persistence.sharedCache.mode", SharedCacheMode.ALL);
          bean.getJpaPropertyMap().put("hibernate.cache.default_cache_concurrency_strategy", "read-write");
          bean.getJpaPropertyMap().put("hibernate.generate_statistics", true);
          bean.getJpaPropertyMap().put("javax.persistence.validation.factory", validator);
  
          bean.setPersistenceProviderClass(HibernatePersistenceProvider.class);
          bean.setPackagesToScan("br.com.me.ceap.model");
  
          meceapEntityManagerFactoryRef = bean;
  
          return bean;
      }
  </code></pre>
  
  <p>}</p>