Package org.jasig.portal.tools

Source Code of org.jasig.portal.tools.DbTestImpl

/**
* Licensed to Jasig under one or more contributor license
* agreements. See the NOTICE file distributed with this work
* for additional information regarding copyright ownership.
* Jasig licenses this file to you 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.jasig.portal.tools;

import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Map;
import java.util.Map.Entry;
import java.util.concurrent.ConcurrentHashMap;

import org.hibernate.dialect.Dialect;
import org.hibernate.engine.spi.SessionFactoryImplementor;
import org.jasig.portal.RDBMServices;
import org.jasig.portal.hibernate.DelegatingHibernateIntegrator.HibernateConfiguration;
import org.jasig.portal.hibernate.HibernateConfigurationAware;
import org.jasig.portal.jpa.BaseAggrEventsJpaDao;
import org.jasig.portal.jpa.BasePortalJpaDao;
import org.jasig.portal.jpa.BaseRawEventsJpaDao;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.DependsOn;
import org.springframework.context.annotation.Lazy;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.ConnectionCallback;
import org.springframework.jdbc.core.JdbcOperations;
import org.springframework.jdbc.support.JdbcUtils;
import org.springframework.stereotype.Component;

/**
* Title: DbTest Description: Displays database metadata information Company:
*
* @author John Fereira
* @version $Revision$
*/
@Component("dbTest")
@Lazy
@DependsOn( {
    BasePortalJpaDao.PERSISTENCE_UNIT_NAME + "EntityManagerFactory",
    BaseAggrEventsJpaDao.PERSISTENCE_UNIT_NAME + "EntityManagerFactory",
    BaseRawEventsJpaDao.PERSISTENCE_UNIT_NAME + "EntityManagerFactory",
    "jdbcOperations",
    "rawEventsJdbcOperations",
    "aggrEventsJdbcOperations",
    "hibernateConfigurationAwareInjector"
} )
public class DbTestImpl implements HibernateConfigurationAware, DbTest {
    protected final Logger logger = LoggerFactory.getLogger(getClass());
   
    private final Map<String, HibernateConfiguration> hibernateConfigurations = new ConcurrentHashMap<String, HibernateConfiguration>();
    private Map<String, JdbcOperations> jdbcOperations;

    @Override
    public boolean supports(String persistenceUnit) {
        return true;
    }

    @Override
    public void setConfiguration(String persistenceUnit, HibernateConfiguration hibernateConfiguration) {
        this.hibernateConfigurations.put(persistenceUnit, hibernateConfiguration);
    }

    @Autowired
    public void setJdbcOperations(Map<String, JdbcOperations> jdbcOperations) {
        this.jdbcOperations = jdbcOperations;
    }
   
    @Override
    public void printDbInfo() {
        boolean fail = false;
       
        logger.info("JDBC DataSources");
        for (final Entry<String, JdbcOperations> jdbcEntry : this.jdbcOperations.entrySet()) {
            final String jdbcName = jdbcEntry.getKey();
            try {
                logger.info("\t" + jdbcName);
                final JdbcOperations jdbcOps = jdbcEntry.getValue();
                jdbcOps.execute(new ConnectionCallback<Object>() {
                    @Override
                    public Object doInConnection(Connection con) throws SQLException, DataAccessException {
                        printInfo(con);
                        return null;
                    }
                });
            }
            catch (Exception e) {
                logger.error("\t" + jdbcName + ": parse info", e);
                fail = true;
            }
            logger.info("");
        }
       
        logger.info("Hibernate Dialects");
        for (final Entry<String, HibernateConfiguration> configEntry : this.hibernateConfigurations.entrySet()) {
            final String persistenceUnit = configEntry.getKey();
           
            try {
                final HibernateConfiguration hibernateConfiguration = configEntry.getValue();
                final SessionFactoryImplementor sessionFactory = hibernateConfiguration.getSessionFactory();
                final Dialect dialect = sessionFactory.getDialect();
               
                logger.info("\t" + persistenceUnit + ": " + dialect);
            }
            catch (Exception e) {
                logger.error("\t" + persistenceUnit + ": Failed to resolve Dialect", e);
                fail = true;
            }
            logger.info("");
        }
       
        if (fail) {
            throw new RuntimeException("One or more of the portal data sources is not configured correctly or the target database is not available.");
        }
    }

    private void printInfo(Connection conn) throws SQLException {
        DatabaseMetaData dbMetaData = conn.getMetaData();

        String dbName = dbMetaData.getDatabaseProductName();
        String dbVersion = dbMetaData.getDatabaseProductVersion();
        String driverName = dbMetaData.getDriverName();
        String driverVersion = dbMetaData.getDriverVersion();
        final int databaseMajorVersion = dbMetaData.getDatabaseMajorVersion();
        final int databaseMinorVersion = dbMetaData.getDatabaseMinorVersion();
        final int driverMajorVersion = dbMetaData.getDriverMajorVersion();
        final int driverMinorVersion = dbMetaData.getDriverMinorVersion();

        String driverClass = RDBMServices.getJdbcDriver();
        String url = RDBMServices.getJdbcUrl();
        String user = RDBMServices.getJdbcUser();

        boolean supportsANSI92EntryLevelSQL = dbMetaData.supportsANSI92EntryLevelSQL();
        boolean supportsANSI92FullSQL = dbMetaData.supportsANSI92FullSQL();
        boolean supportsBatchUpdates = dbMetaData.supportsBatchUpdates();
        boolean supportsColumnAliasing = dbMetaData.supportsColumnAliasing();
        boolean supportsCoreSQLGrammar = dbMetaData.supportsCoreSQLGrammar();
        boolean supportsExtendedSQLGrammar = dbMetaData.supportsExtendedSQLGrammar();
        boolean supportsExpressionsInOrderBy = dbMetaData.supportsExpressionsInOrderBy();
        boolean supportsOuterJoins = dbMetaData.supportsOuterJoins();
        boolean supportsFullOuterJoins = dbMetaData.supportsFullOuterJoins();
        boolean supportsLimitedOuterJoins = dbMetaData.supportsLimitedOuterJoins();

        boolean supportsMultipleTransactions = dbMetaData.supportsMultipleTransactions();
        boolean supportsOpenCursorsAcrossCommit = dbMetaData.supportsOpenCursorsAcrossCommit();
        boolean supportsOpenCursorsAcrossRollback = dbMetaData.supportsOpenCursorsAcrossRollback();
        boolean supportsOpenStatementsAcrossCommit = dbMetaData.supportsOpenStatementsAcrossCommit();
        boolean supportsOpenStatementsAcrossRollback = dbMetaData.supportsOpenStatementsAcrossRollback();

        boolean supportsOrderByUnrelated = dbMetaData.supportsOrderByUnrelated();
        boolean supportsPositionedDelete = dbMetaData.supportsPositionedDelete();

        boolean supportsSelectForUpdate = dbMetaData.supportsSelectForUpdate();
        boolean supportsStoredProcedures = dbMetaData.supportsStoredProcedures();
        boolean supportsTransactions = dbMetaData.supportsTransactions();
        boolean supportsUnion = dbMetaData.supportsUnion();
        boolean supportsUnionAll = dbMetaData.supportsUnionAll();

        int getMaxColumnNameLength = dbMetaData.getMaxColumnNameLength();
        int getMaxColumnsInIndex = dbMetaData.getMaxColumnsInIndex();
        int getMaxColumnsInOrderBy = dbMetaData.getMaxColumnsInOrderBy();
        int getMaxColumnsInSelect = dbMetaData.getMaxColumnsInSelect();
        int getMaxColumnsInTable = dbMetaData.getMaxColumnsInTable();
        int getMaxConnections = dbMetaData.getMaxConnections();
        int getMaxCursorNameLength = dbMetaData.getMaxCursorNameLength();
        int getMaxIndexLength = dbMetaData.getMaxIndexLength();
        int getMaxRowSize = dbMetaData.getMaxRowSize();
        int getMaxStatements = dbMetaData.getMaxStatements();
        int getMaxTableNameLength = dbMetaData.getMaxTableNameLength();
        int getMaxTablesInSelect = dbMetaData.getMaxTablesInSelect();
        int getMaxUserNameLength = dbMetaData.getMaxUserNameLength();

        String getSearchStringEscape = dbMetaData.getSearchStringEscape();
        String getStringFunctions = dbMetaData.getStringFunctions();
        String getSystemFunctions = dbMetaData.getSystemFunctions();
        String getTimeDateFunctions = dbMetaData.getTimeDateFunctions();

        logger.info("\t\tDatabase name:    '" + dbName + "'");
        logger.info("\t\tDatabase version: '" + dbVersion + "' (" + databaseMajorVersion + "." + databaseMinorVersion + ")");
        logger.info("\t\tDriver name:      '" + driverName + "'");
        logger.info("\t\tDriver version:   '" + driverVersion + "' (" + driverMajorVersion + "." + driverMinorVersion + ")");
        logger.info("\t\tDriver class:     '" + driverClass + "'");
        logger.info("\t\tConnection URL:   '" + url + "'");
        logger.info("\t\tUser:             '" + user + "'");
        logger.info("");

        logger.info("\t\tsupportsANSI92EntryLevelSQL: " + supportsANSI92EntryLevelSQL);
        logger.info("\t\tsupportsANSI92FullSQL:       " + supportsANSI92FullSQL);
        logger.info("\t\tsupportsCoreSQLGrammar:      " + supportsCoreSQLGrammar);
        logger.info("\t\tsupportsExtendedSQLGrammar:  " + supportsExtendedSQLGrammar);
        logger.info("");

        logger.info("\t\tsupportsTransactions:         " + supportsTransactions);
        logger.info("\t\tsupportsMultipleTransactions: " + supportsMultipleTransactions);

        logger.info("\t\tsupportsOpenCursorsAcrossCommit:      " + supportsOpenCursorsAcrossCommit);
        logger.info("\t\tsupportsOpenCursorsAcrossRollback:    " + supportsOpenCursorsAcrossRollback);
        logger.info("\t\tsupportsOpenStatementsAcrossCommit:   " + supportsOpenStatementsAcrossCommit);
        logger.info("\t\tsupportsOpenStatementsAcrossRollback: " + supportsOpenStatementsAcrossRollback);
        logger.info("");

        logger.info("\t\tsupportsStoredProcedures:     " + supportsStoredProcedures);
        logger.info("\t\tsupportsOuterJoins:           " + supportsOuterJoins);
        logger.info("\t\tsupportsFullOuterJoins:       " + supportsFullOuterJoins);
        logger.info("\t\tsupportsLimitedOuterJoins:    " + supportsLimitedOuterJoins);
        logger.info("\t\tsupportsBatchUpdates:         " + supportsBatchUpdates);
        logger.info("\t\tsupportsColumnAliasing:       " + supportsColumnAliasing);
        logger.info("\t\tsupportsExpressionsInOrderBy: " + supportsExpressionsInOrderBy);
        logger.info("\t\tsupportsOrderByUnrelated:     " + supportsOrderByUnrelated);
        logger.info("\t\tsupportsPositionedDelete:     " + supportsPositionedDelete);
        logger.info("\t\tsupportsSelectForUpdate:      " + supportsSelectForUpdate);
        logger.info("\t\tsupportsUnion:                " + supportsUnion);
        logger.info("\t\tsupportsUnionAll:             " + supportsUnionAll);
        logger.info("");

        logger.info("\t\tmaxColumnNameLength: " + getMaxColumnNameLength);
        logger.info("\t\tmaxColumnsInIndex:   " + getMaxColumnsInIndex);
        logger.info("\t\tmaxColumnsInOrderBy: " + getMaxColumnsInOrderBy);
        logger.info("\t\tmaxColumnsInSelect:  " + getMaxColumnsInSelect);
        logger.info("\t\tmaxColumnsInTable:   " + getMaxColumnsInTable);
        logger.info("\t\tmaxConnections:      " + getMaxConnections);
        logger.info("\t\tmaxCursorNameLength: " + getMaxCursorNameLength);
        logger.info("\t\tmaxIndexLength:      " + getMaxIndexLength);
        logger.info("\t\tmaxRowSize:          " + getMaxRowSize);
        logger.info("\t\tmaxStatements:       " + getMaxStatements);
        logger.info("\t\tmaxTableNameLength:  " + getMaxTableNameLength);
        logger.info("\t\tmaxTablesInSelect:   " + getMaxTablesInSelect);
        logger.info("\t\tmaxUserNameLength:   " + getMaxUserNameLength);
        logger.info("\t\tsearchStringEscape:  " + getSearchStringEscape);
        logger.info("\t\tstringFunctions:     " + getStringFunctions);
        logger.info("\t\tsystemFunctions:     " + getSystemFunctions);
        logger.info("\t\ttimeDateFunctions:   " + getTimeDateFunctions);
        logger.info("");

       
        ResultSet getTableTypes = null;
        ResultSet getTypeInfo = null;
        try {
            getTableTypes = dbMetaData.getTableTypes();
            StringBuilder tabletypes = new StringBuilder();
            while (getTableTypes.next()) {
                tabletypes.append(getTableTypes.getString(1)).append(",");
            }
            tabletypes = tabletypes.deleteCharAt(tabletypes.length() - 1);
            logger.info("\t\tTable Types: " + tabletypes);

            getTypeInfo = dbMetaData.getTypeInfo();
            StringBuilder typeinfo = new StringBuilder();
            while (getTypeInfo.next()) {
                typeinfo.append(getTypeInfo.getString(1)).append(",");
            }
            typeinfo = typeinfo.deleteCharAt(typeinfo.length() - 1);
            logger.info("\t\tSQL Types:   " + typeinfo);
        } catch (SQLException ex) {
        } finally {
            JdbcUtils.closeResultSet(getTableTypes);
            JdbcUtils.closeResultSet(getTypeInfo);
        }
    } // end printInfo
}
TOP

Related Classes of org.jasig.portal.tools.DbTestImpl

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.