Package atg.tools.dynunit.dms.sql

Source Code of atg.tools.dynunit.dms.sql.InitializingSqlJmsManager

/*
* Copyright 2013 Matt Sicker and Contributors
*
* 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 atg.tools.dynunit.dms.sql;

import atg.core.io.FileUtils;
import atg.dms.sql.SqlJmsManager;
import atg.nucleus.ServiceException;
import atg.tools.dynunit.nucleus.NucleusUtils;
import org.apache.ddlutils.Platform;
import org.apache.ddlutils.PlatformFactory;

import javax.sql.DataSource;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.SQLException;

/**
* This SQLJmsManager sub class will create its required database schema on
* startup and optionally drop the schema (tables) on shutdown. By default this
* class will use the datasource assigned to the
* <code>/atg/dynamo/service/jdbc/SQLRepository</code>
*
* @author adamb
* @version $Id: //test/UnitTests/base/main/src/Java/atg/dms/sql/InitializingSqlJmsManager.java#1 $
*/
public class InitializingSqlJmsManager
        extends SqlJmsManager {

    private String mSQLRepositoryPath = "/atg/dynamo/service/jdbc/SQLRepository";

    private final boolean mCreatingSchemaOnStartup = true;

    private boolean mDropSchemaOnShutdown = false;

    private boolean mDropSchemaOnStartup = true;

    // ---------------------

    /**
     * Creates schema and continues with SQLJms startup.
     */
    public void doStartService()
            throws ServiceException {
        DataSource ds = getDataSource();
        // get the db type
        logInfo("Database = " + getDatabaseName());
        if (isLoggingInfo()) {
            logInfo("Initializing schema using datasource " + ds);
        }
        if (mCreatingSchemaOnStartup) {

            createSchema();

        }
        super.doStartService();
    }

    /**
     * Creates the required tables for this component.
     */
    public void createSchema() {
        String ddlPath = getDDLPath(getDatabaseName());
        Platform platform = PlatformFactory.createNewPlatformInstance(getDataSource());
        try {
            String sqlString = FileUtils.readFileString(new File(ddlPath));
            platform.evaluateBatch(sqlString, true);
        } catch (FileNotFoundException e) {
            if (isLoggingError()) {
                logError("Can't create schema. ", e);
            }
        } catch (IOException e) {
            if (isLoggingError()) {
                logError("Can't create schema. ", e);
            }
        }
    }

    /**
     * Returns the path to the DDL file for the given database.
     *
     * @param pDatabaseName
     *         = DBName returned from DatabaseMetaData
     *
     * @return
     */
    String getDDLPath(String pDatabaseName) {
        if (pDatabaseName == null) {
            return null;
        }
        // Get Dynamo Home or Root
        String dynamoRootEnv = System.getenv("DYNAMO_ROOT");
        String dynamoHomeEnv = System.getenv("DYNAMO_HOME");
        String ddlRelativePath = "/DAS/sql/db_components/";
        String root = (dynamoRootEnv != null ? dynamoRootEnv : dynamoHomeEnv
                + File.separatorChar
                + "..");
        if (pDatabaseName.toLowerCase().startsWith("hsql")) {
            pDatabaseName = "mysql";
            // Not in the build so take it from source tree
            File configDir = NucleusUtils.getConfigPath(
                    InitializingSqlJmsManager.class,
                    InitializingSqlJmsManager.class.getSimpleName(),
                    false
            );
            if (!configDir.exists()) {
                if (isLoggingError()) {
                    logError(
                            "Can't locate sql scripts for HSQLDB. Directory "
                                    + configDir
                                    + " does not exist."
                    );
                }
                return null;
            }
            else {
                return configDir.getAbsolutePath() + "/hsql/create_sql_jms_ddl.sql";
            }
        }
        else if (pDatabaseName.toLowerCase().startsWith("db2")) {
            pDatabaseName = "db2";
        }
        else if (pDatabaseName.toLowerCase().startsWith("microsoft")) {
            pDatabaseName = "mssql";
        }
        return root + ddlRelativePath + pDatabaseName.toLowerCase() + "/create_sql_jms_ddl.sql";
    }

    /**
     * Returns the name of the database to which this component is connected.
     *
     * @return
     */
    public String getDatabaseName() {
        if (getDataSource() == null) {
            return null;
        }
        Connection c = null;
        String dbName = null;
        try {
            c = getDataSource().getConnection();
            DatabaseMetaData meta = c.getMetaData();
            dbName = meta.getDatabaseProductName();
        } catch (SQLException e) {
            if (isLoggingError()) {
                logError("Could not get database type name. ", e);
            }
        } finally {
            if (c != null) {
                try {
                    c.close();
                } catch (SQLException ignored) {
                }
            }
        }
        return dbName;
    }

}
TOP

Related Classes of atg.tools.dynunit.dms.sql.InitializingSqlJmsManager

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.