com.eucalyptus.entities.impl.EucalyptusPersistenceProvider.java Source code

Java tutorial

Introduction

Here is the source code for com.eucalyptus.entities.impl.EucalyptusPersistenceProvider.java

Source

/*************************************************************************
 * Copyright 2009-2015 Eucalyptus Systems, Inc.
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; version 3 of the License.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see http://www.gnu.org/licenses/.
 *
 * Please contact Eucalyptus Systems, Inc., 6755 Hollister Ave., Goleta
 * CA 93117, USA or visit http://www.eucalyptus.com/licenses/ if you need
 * additional information or have any questions.
 ************************************************************************/
package com.eucalyptus.entities.impl;

import java.net.URL;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import javax.persistence.PersistenceException;
import javax.persistence.SharedCacheMode;
import javax.persistence.ValidationMode;
import javax.persistence.spi.ClassTransformer;
import javax.persistence.spi.PersistenceUnitInfo;
import javax.persistence.spi.PersistenceUnitTransactionType;
import javax.sql.DataSource;
import org.hibernate.cfg.Configuration;
import org.hibernate.jpa.HibernatePersistenceProvider;
import org.hibernate.jpa.boot.internal.PersistenceUnitInfoDescriptor;
import org.hibernate.jpa.boot.spi.EntityManagerFactoryBuilder;
import org.hibernate.jpa.boot.spi.PersistenceUnitDescriptor;
import com.eucalyptus.entities.PersistenceContextConfiguration;
import com.eucalyptus.entities.PersistenceContexts;
import com.eucalyptus.util.Classes;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Iterables;

/**
 *
 */
public class EucalyptusPersistenceProvider extends HibernatePersistenceProvider {

    /**
     * Build a Hibernate configuration for the given persistence unit.
     *
     * This assumes that the persistence unit metadata is available from
     * PersistenceContexts.
     */
    public Configuration getConfiguration(final String persistenceUnitName, final Map<String, String> properties) {
        try {
            final EucalyptusEntityManagerFactoryBuilderImpl e = (EucalyptusEntityManagerFactoryBuilderImpl) this
                    .getEntityManagerFactoryBuilderOrNull(persistenceUnitName, properties);
            if (e == null) {
                return null;
            } else {
                return e.buildHibernateConfiguration(e.buildServiceRegistry());
            }
        } catch (PersistenceException var4) {
            throw var4;
        } catch (Exception var5) {
            throw new PersistenceException("Unable to build entity manager factory", var5);
        }
    }

    @Override
    protected EntityManagerFactoryBuilder getEntityManagerFactoryBuilderOrNull(final String persistenceUnitName,
            final Map properties, final ClassLoader providedClassLoader) {
        final PersistenceContextConfiguration persistenceContextConfiguration = PersistenceContexts
                .getConfiguration(persistenceUnitName);
        if (persistenceContextConfiguration != null) {
            final Map integration = wrap(properties);

            final PersistenceUnitInfoDescriptor persistenceUnit = new PersistenceUnitInfoDescriptor(
                    info(persistenceContextConfiguration));

            return this.getEntityManagerFactoryBuilder(persistenceUnit, integration, providedClassLoader);
        }

        return null;
    }

    @Override
    protected EntityManagerFactoryBuilder getEntityManagerFactoryBuilder(
            final PersistenceUnitDescriptor persistenceUnitDescriptor, final Map integration,
            final ClassLoader providedClassLoader) {
        return new EucalyptusEntityManagerFactoryBuilderImpl(persistenceUnitDescriptor, integration,
                providedClassLoader);
    }

    private PersistenceUnitInfo info(final PersistenceContextConfiguration configuration) {
        final Properties properties = new Properties();
        properties.putAll(configuration.getProperties());
        return new PersistenceUnitInfo() {
            @Override
            public String getPersistenceUnitName() {
                return configuration.getName();
            }

            @Override
            public String getPersistenceProviderClassName() {
                return null;
            }

            @Override
            public PersistenceUnitTransactionType getTransactionType() {
                return PersistenceUnitTransactionType.RESOURCE_LOCAL;
            }

            @Override
            public DataSource getJtaDataSource() {
                return null;
            }

            @Override
            public DataSource getNonJtaDataSource() {
                return null;
            }

            @Override
            public List<String> getMappingFileNames() {
                return Collections.emptyList();
            }

            @Override
            public List<URL> getJarFileUrls() {
                return Collections.emptyList();
            }

            @Override
            public URL getPersistenceUnitRootUrl() {
                return null;
            }

            @Override
            public List<String> getManagedClassNames() {
                return ImmutableList
                        .copyOf(Iterables.transform(configuration.getEntityClasses(), Classes.nameFunction()));
            }

            @Override
            public boolean excludeUnlistedClasses() {
                return true;
            }

            @Override
            public SharedCacheMode getSharedCacheMode() {
                return SharedCacheMode.NONE;
            }

            @Override
            public ValidationMode getValidationMode() {
                return ValidationMode.NONE;
            }

            @Override
            public Properties getProperties() {
                return properties;
            }

            @Override
            public String getPersistenceXMLSchemaVersion() {
                return null;
            }

            @Override
            public ClassLoader getClassLoader() {
                return EucalyptusPersistenceProvider.class.getClassLoader();
            }

            @Override
            public void addTransformer(final ClassTransformer classTransformer) {
            }

            @Override
            public ClassLoader getNewTempClassLoader() {
                return EucalyptusPersistenceProvider.class.getClassLoader();
            }
        };
    }
}