/**
  * Create a new SpringSessionContext for the given Hibernate SessionFactory.
  *
  * @param sessionFactory the SessionFactory to provide current Sessions for
  */
 public SpringSessionContext(SessionFactoryImplementor sessionFactory) {
   this.sessionFactory = sessionFactory;
   JtaPlatform jtaPlatform = sessionFactory.getServiceRegistry().getService(JtaPlatform.class);
   TransactionManager transactionManager = jtaPlatform.retrieveTransactionManager();
   this.jtaSessionContext =
       (transactionManager != null ? new SpringJtaSessionContext(sessionFactory) : null);
 }
  @Override
  public void start() {
    final Configuration configuration = ConfigurationFactory.parseConfiguration(config.getUrl());
    if (jtaPlatform != null) {
      OgmTransactionManagerLookupDelegate.transactionManager =
          jtaPlatform.retrieveTransactionManager();
      final FactoryConfiguration transactionManagerLookupParameter = new FactoryConfiguration();
      transactionManagerLookupParameter.setClass(
          OgmTransactionManagerLookupDelegate.class.getName());
      configuration.addTransactionManagerLookup(transactionManagerLookupParameter);
    }
    cacheManager = CacheManager.create(config.getUrl());

    entityCache =
        new Cache<SerializableKey>(cacheManager.getCache(DefaultDatastoreNames.ENTITY_STORE));
    associationCache =
        new Cache<SerializableKey>(cacheManager.getCache(DefaultDatastoreNames.ASSOCIATION_STORE));
    identifierCache =
        new Cache<SerializableKey>(cacheManager.getCache(DefaultDatastoreNames.IDENTIFIER_STORE));
  }
 @Override
 public TransactionManager getTransactionManager() throws Exception {
   return jtaPlatform == null ? null : jtaPlatform.retrieveTransactionManager();
 }