Package org.broadleafcommerce.common.util.sql

Source Code of org.broadleafcommerce.common.util.sql.JPAConfigurationTask

/*
* #%L
* BroadleafCommerce Common Libraries
* %%
* Copyright (C) 2009 - 2013 Broadleaf Commerce
* %%
* 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.
* #L%
*/
package org.broadleafcommerce.common.util.sql;

import org.apache.tools.ant.BuildException;
import org.broadleafcommerce.common.extensibility.context.MergeFileSystemAndClassPathXMLApplicationContext;
import org.broadleafcommerce.common.extensibility.jpa.MergePersistenceUnitManager;
import org.hibernate.HibernateException;
import org.hibernate.cfg.Configuration;
import org.hibernate.internal.util.ReflectHelper;
import org.hibernate.tool.ant.ConfigurationTask;
import org.xml.sax.EntityResolver;

import javax.persistence.spi.PersistenceUnitInfo;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;

/**
* This is a re-worked version from Hibernate tools
*
* @author jfischer
*
*/
public class JPAConfigurationTask extends ConfigurationTask {

    private String persistenceUnit;
    private String dialect;
    private String url;
    private String userName;
    private String password;
    private String driverClassName;
   
    public JPAConfigurationTask() {
        setDescription("JPA Configuration");
    }
   
    protected Configuration createConfiguration(MergeFileSystemAndClassPathXMLApplicationContext mergeContext) {
        try {
            PersistenceUnitInfo unitInfo = ((MergePersistenceUnitManager) mergeContext.getBean("blPersistenceUnitManager")).obtainPersistenceUnitInfo(persistenceUnit);
           
            Map<Object, Object> overrides = new HashMap<Object, Object>();
            Properties p = getProperties();
           
            if(p!=null) {
                overrides.putAll( p );
            }
           
            overrides.put("hibernate.dialect",dialect);
           
            if (this.url != null && ! "null".equalsIgnoreCase(this.url)) {
                overrides.put("hibernate.connection.url", this.url);
            }
           
            if (this.userName != null && ! "null".equalsIgnoreCase(this.userName)) {
                overrides.put("hibernate.connection.username", this.userName);
                if (this.password == null) {
                    //This is for situations like HSQLDB that, by default, use no password
                    overrides.put("hibernate.connection.password", "");
                } else if (! "null".equalsIgnoreCase(this.password)) {
                    //This allows you to specify a password or the word "null" to not set this property at all
                    overrides.put("hibernate.connection.password", this.password);
                }
            }
           
            if (this.driverClassName != null && ! "null".equalsIgnoreCase(this.driverClassName)) {
                overrides.put("hibernate.connection.driver_class", this.driverClassName);
            }
           
            Class<?> clazz = ReflectHelper.classForName("org.hibernate.ejb.Ejb3Configuration", JPAConfigurationTask.class);
            Object ejb3cfg = clazz.newInstance();
           
            if(entityResolver!=null) {
                Class<?> resolver = ReflectHelper.classForName(entityResolver, this.getClass());
                Object object = resolver.newInstance();
                Method method = clazz.getMethod("setEntityResolver", new Class[] { EntityResolver.class });
                method.invoke(ejb3cfg, new Object[] { object } );
            }
           
            Method method = clazz.getMethod("configure", new Class[] { PersistenceUnitInfo.class, Map.class });
            if ( method.invoke(ejb3cfg, new Object[] { unitInfo, overrides } ) == null ) {
                throw new BuildException("Persistence unit not found: '" + persistenceUnit + "'.");
            }
           
            method = clazz.getMethod("getHibernateConfiguration", new Class[0]);
            return (Configuration) method.invoke(ejb3cfg, (Object[])null);
        }
        catch(HibernateException he) {
            throw new BuildException(he);
        }
        catch(BuildException be) {
            throw be;
        }
        catch(Exception t) {
            throw new BuildException("Problems in creating a configuration for JPA. Have you remembered to add hibernate EntityManager jars to the classpath ?",t);        
        }
    }
   
    protected void doConfiguration(Configuration configuration) {
    }
   
    protected void validateParameters() throws BuildException {
    }

    public String getPersistenceUnit() {
        return persistenceUnit;
    }

    public void setPersistenceUnit(String persistenceUnit) {
        this.persistenceUnit = persistenceUnit;
    }

    public String getDialect() {
        return dialect;
    }

    public void setDialect(String dialect) {
        this.dialect = dialect;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getDriverClassName() {
        return driverClassName;
    }

    public void setDriverClassName(String driverClassName) {
        this.driverClassName = driverClassName;
    }
   
   
}
TOP

Related Classes of org.broadleafcommerce.common.util.sql.JPAConfigurationTask

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.