Package org.jboss.errai.persistence.server

Source Code of org.jboss.errai.persistence.server.PersistenceConfiguration

/*
* Copyright 2010 JBoss, a divison Red Hat, Inc
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*    http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package org.jboss.errai.persistence.server;

import com.google.inject.Inject;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import org.jboss.errai.bus.client.api.ResourceProvider;
import org.jboss.errai.bus.client.framework.ModelAdapter;
import org.jboss.errai.bus.server.ErraiBootstrapFailure;
import org.jboss.errai.bus.server.annotations.ExtensionComponent;
import org.jboss.errai.bus.server.api.ErraiConfig;
import org.jboss.errai.bus.server.api.ErraiConfigExtension;
import org.jboss.errai.bus.server.service.ErraiServiceConfigurator;
import org.jboss.errai.bus.server.service.metadata.MetaDataScanner;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.persistence.Entity;
import java.util.Set;


/**
* Configures the hibernate SessionFactory and make it available
* as an injection point in guice ( see {@link ResourceProvider} ).
*
*
*/
@ExtensionComponent
public class PersistenceConfiguration implements ErraiConfigExtension {
  private ErraiServiceConfigurator configurator;
  private Logger logger = LoggerFactory.getLogger(this.getClass());

  @Inject
  public PersistenceConfiguration(ErraiServiceConfigurator configurator) {
    this.configurator = configurator;

    logger.info("Configuring persistence extension.");
  }

  public void configure(ErraiConfig config) {
    final AnnotationConfiguration cfg = new AnnotationConfiguration();
    if (!configurator.hasProperty("errai.prototyping.persistence.connection.driver_class")) {
      return;
    }

    cfg.setProperty("hibernate.connection.driver_class", configurator.getProperty("errai.prototyping.persistence.connection.driver_class"));
    cfg.setProperty("hibernate.connection.url", configurator.getProperty("errai.prototyping.persistence.connection.url"));
    cfg.setProperty("hibernate.connection.username", configurator.getProperty("errai.prototyping.persistence.connection.username"));
    cfg.setProperty("hibernate.connection.password", configurator.getProperty("errai.prototyping.persistence.connection.password"));
    cfg.setProperty("hibernate.connection.pool_size", configurator.getProperty("errai.prototyping.persistence.connection.pool_size"));

    cfg.setProperty("hibernate.dialect", configurator.getProperty("errai.prototyping.persistence.dialect"));
    cfg.setProperty("hibernate.current_session_context_class", "thread");
    cfg.setProperty("hibernate.cache.use_second_level_cache", "false");
    cfg.setProperty("hibernate.cache.provider_class", "org.hibernate.cache.NoCacheProvider");

    cfg.setProperty("hibernate.show_sql", "true");
    cfg.setProperty("hibernate.hbm2ddl.auto", "update");

    logger.debug("begin scan for annotated classes.");
    MetaDataScanner scanner = configurator.getMetaDataScanner();
    Set<Class<?>> entities = scanner.getTypesAnnotatedWith(Entity.class);
    for(Class<?> entity : entities)
    {
      cfg.addAnnotatedClass(entity);
    }

    try {
      final SessionFactory sessionFactory = cfg.buildSessionFactory();
      logger.info("finished building hibernate session factory ... ");

      ResourceProvider<Session> sessionProvider = new ResourceProvider<Session>() {
        public Session get() {
          return sessionFactory.openSession();
        }
      };
      ResourceProvider<SessionFactory> sessionFactoryProvider = new ResourceProvider() {
        public Object get() {
          return sessionFactory;
        }
      };

      final ModelAdapter hibenateAdapter = new HibernateAdapter(sessionFactory);
      ResourceProvider<ModelAdapter> modelAdapterProvider = new ResourceProvider<ModelAdapter>()
      {
        public ModelAdapter get()
        {
          return hibenateAdapter;
        }
      };
      logger.info("adding binding for: " + hibenateAdapter.getClass());
      config.addBinding(ModelAdapter.class, modelAdapterProvider);

      logger.info("adding binding for: " + sessionProvider.getClass());
      config.addBinding(Session.class, sessionProvider);

      logger.info("adding binding for: " + sessionFactoryProvider.getClass());
      config.addBinding(SessionFactory.class, sessionFactoryProvider);

      logger.info("adding resource provider for: " + sessionProvider.getClass());
      config.addResourceProvider("SessionProvider", sessionProvider);
    }
    catch (Throwable t) {
      logger.info("session factory did not build: " + t.getClass());
      t.printStackTrace();
      throw new ErraiBootstrapFailure("could not load errai-persitence", t);
    }
  }


}
TOP

Related Classes of org.jboss.errai.persistence.server.PersistenceConfiguration

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.