private void applyCacheSettings(Configuration configuration) {
   if (settings.getCacheConcurrencyStrategy() != null) {
     Iterator iter = configuration.getClassMappings();
     while (iter.hasNext()) {
       PersistentClass clazz = (PersistentClass) iter.next();
       Iterator props = clazz.getPropertyClosureIterator();
       boolean hasLob = false;
       while (props.hasNext()) {
         Property prop = (Property) props.next();
         if (prop.getValue().isSimpleValue()) {
           String type = ((SimpleValue) prop.getValue()).getTypeName();
           if ("blob".equals(type) || "clob".equals(type)) {
             hasLob = true;
           }
           if (Blob.class.getName().equals(type) || Clob.class.getName().equals(type)) {
             hasLob = true;
           }
         }
       }
       if (!hasLob && !clazz.isInherited() && settings.overrideCacheStrategy()) {
         configuration.setCacheConcurrencyStrategy(
             clazz.getEntityName(), settings.getCacheConcurrencyStrategy());
       }
     }
     iter = configuration.getCollectionMappings();
     while (iter.hasNext()) {
       Collection coll = (Collection) iter.next();
       configuration.setCollectionCacheConcurrencyStrategy(
           coll.getRole(), settings.getCacheConcurrencyStrategy());
     }
   }
 }
  public void initialize() {
    if (sessionFactory != null) {
      throw new IllegalStateException(
          "attempt to initialize already initialized ExecutionEnvironment");
    }
    if (!settings.appliesTo(getDialect())) {
      return;
    }

    Configuration configuration = new Configuration();
    configuration.setProperty(
        Environment.CACHE_PROVIDER, "org.hibernate.cache.HashtableCacheProvider");

    settings.configure(configuration);

    applyMappings(configuration);
    applyCacheSettings(configuration);

    if (settings.createSchema()) {
      configuration.setProperty(Environment.HBM2DDL_AUTO, "create-drop");
    }

    // make sure we use the same dialect...
    configuration.setProperty(Environment.DIALECT, getDialect().getClass().getName());

    configuration.buildMappings();
    settings.afterConfigurationBuilt(configuration.createMappings(), getDialect());

    SessionFactory sessionFactory = configuration.buildSessionFactory();
    this.configuration = configuration;
    this.sessionFactory = sessionFactory;

    settings.afterSessionFactoryBuilt((SessionFactoryImplementor) sessionFactory);
  }
 private void applyMappings(Configuration configuration) {
   String[] mappings = settings.getMappings();
   for (int i = 0; i < mappings.length; i++) {
     configuration.addResource(
         settings.getBaseForMappings() + mappings[i], ExecutionEnvironment.class.getClassLoader());
   }
 }
 public void rebuild() {
   if (!allowRebuild) {
     return;
   }
   if (sessionFactory != null) {
     sessionFactory.close();
     sessionFactory = null;
   }
   sessionFactory = configuration.buildSessionFactory();
   settings.afterSessionFactoryBuilt((SessionFactoryImplementor) sessionFactory);
 }