/*
* Copyright 2012 LinkedIn Corp.
*
* 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 azkaban.database;
import azkaban.metrics.CommonMetrics;
import azkaban.utils.Props;
import java.io.IOException;
import java.sql.Connection;
import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.QueryRunner;
public abstract class AbstractJdbcLoader {
/**
* Used for when we store text data. Plain uses UTF8 encoding.
*/
public enum EncodingType {
PLAIN(1), GZIP(2);
private final int numVal;
EncodingType(int numVal) {
this.numVal = numVal;
}
public int getNumVal() {
return numVal;
}
public static EncodingType fromInteger(int x) {
switch (x) {
case 1:
return PLAIN;
case 2:
return GZIP;
default:
return PLAIN;
}
}
}
private AzkabanDataSource dataSource;
public AbstractJdbcLoader(Props props) {
dataSource = DataSourceUtils.getDataSource(props);
}
protected Connection getDBConnection(boolean autoCommit) throws IOException {
Connection connection = null;
CommonMetrics.INSTANCE.markDBConnection();
long startMs = System.currentTimeMillis();
try {
connection = dataSource.getConnection();
connection.setAutoCommit(autoCommit);
} catch (Exception e) {
DbUtils.closeQuietly(connection);
throw new IOException("Error getting DB connection.", e);
}
CommonMetrics.INSTANCE.setDBConnectionTime(System.currentTimeMillis() - startMs);
return connection;
}
protected QueryRunner createQueryRunner() {
return new QueryRunner(dataSource);
}
protected boolean allowsOnDuplicateKey() {
return dataSource.allowsOnDuplicateKey();
}
}