com.thinkbiganalytics.server.KyloUpgradeDatabaseVersionChecker.java Source code

Java tutorial

Introduction

Here is the source code for com.thinkbiganalytics.server.KyloUpgradeDatabaseVersionChecker.java

Source

package com.thinkbiganalytics.server;

/*-
 * #%L
 * thinkbig-service-app
 * %%
 * Copyright (C) 2017 ThinkBig Analytics
 * %%
 * 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%
 */

import com.thinkbiganalytics.KyloVersion;
import com.thinkbiganalytics.KyloVersionUtil;
import com.thinkbiganalytics.db.PoolingDataSourceService;
import com.thinkbiganalytics.feedmgr.nifi.SpringEnvironmentProperties;
import com.thinkbiganalytics.feedmgr.service.EncryptionService;

import org.apache.commons.lang3.BooleanUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.context.annotation.PropertySource;
import org.springframework.jdbc.support.JdbcUtils;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.sql.DataSource;

@Configuration
@EnableConfigurationProperties
@PropertySource("classpath:application.properties")
@Import(KyloUpgradeDatabaseVersionConfig.class)
public class KyloUpgradeDatabaseVersionChecker {

    private static final Logger log = LoggerFactory.getLogger(KyloUpgradeDatabaseVersionChecker.class);

    @Autowired
    SpringEnvironmentProperties environmentProperties;

    @Autowired
    EncryptionService encryptionService;

    public KyloUpgradeDatabaseVersionChecker() {

    }

    /**
     * Query the Database for the Kylo Version
     *
     * @return the KyloVersion from the database, or null if not found or if an error occurs
     */
    public KyloVersion getDatabaseVersion() {
        KyloVersion version = null;
        Connection connection = null;
        Statement statement = null;
        ResultSet resultSet = null;

        try {
            String user = environmentProperties.getPropertyValueAsString("spring.datasource.username");
            String password = environmentProperties.getPropertyValueAsString("spring.datasource.password");
            password = encryptionService.isEncrypted(password) ? encryptionService.decrypt(password) : password;
            String uri = environmentProperties.getPropertyValueAsString("spring.datasource.url");
            String driverClassName = environmentProperties
                    .getPropertyValueAsString("spring.datasource.driverClassName");
            boolean testOnBorrow = BooleanUtils
                    .toBoolean(environmentProperties.getPropertyValueAsString("spring.datasource.testOnBorrow"));
            String validationQuery = environmentProperties.getPropertyValueAsString("spring.data.validationQuery");

            PoolingDataSourceService.DataSourceProperties dataSourceProperties = new PoolingDataSourceService.DataSourceProperties(
                    user, password, uri, driverClassName, testOnBorrow, validationQuery);

            DataSource dataSource = PoolingDataSourceService.getDataSource(dataSourceProperties);

            connection = dataSource.getConnection();
            String query = "SELECT MAJOR_VERSION,MINOR_VERSION FROM kylo.KYLO_VERSION ";
            statement = connection.createStatement();
            ResultSet rs = statement.executeQuery(query);
            if (rs.next()) {
                String majorVersion = rs.getString("MAJOR_VERSION");
                String minorVersion = rs.getString("MINOR_VERSION");
                version = new KyloVersionUtil.Version(majorVersion, minorVersion);
            }

        } catch (SQLException e) {
            // this is ok.. If an error happens assume the upgrade is needed.  The method will return a null value if errors occur and the upgrade app will start.
        } finally {
            JdbcUtils.closeStatement(statement);
            JdbcUtils.closeResultSet(resultSet);
            JdbcUtils.closeConnection(connection);
        }
        return version;

    }

}