package edu.ualberta.med.biobank.server.logging;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import java.text.SimpleDateFormat;
import java.util.Properties;
import edu.ualberta.med.biobank.common.util.LogSql;
import edu.ualberta.med.biobank.model.Log;
/**
*
* Runnable class responsible for inserting the log messages in batch
*
* Copy from CLM
*/
public class JDBCLogExecutor implements Runnable {
private Log log;
private Properties props;
private String dbUrl = null;
private String dbDriverClass = null;
private String dbUser = null;
private String dbPwd = null;
public static final String COMMA = ","; //$NON-NLS-1$
public static final SimpleDateFormat dateTimeFormatter = new SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss"); //$NON-NLS-1$
/**
* Constructor for JDBCExcecutor.
*
* @param rows -
*/
public JDBCLogExecutor(Log log, Properties props) {
this.log = log;
setProps(props);
setDBProperties();
}
private void setDBProperties() {
if (this.props != null) {
this.setDbDriverClass(LogSql.initString(this.props
.getProperty("hibernate.connection.driver_class"))); //$NON-NLS-1$
this.setDbPwd(LogSql.initString(this.props
.getProperty("hibernate.connection.password"))); //$NON-NLS-1$
this.setDbUser(LogSql.initString(this.props
.getProperty("hibernate.connection.username"))); //$NON-NLS-1$
this.setDbUrl(LogSql.initString(this.props
.getProperty("hibernate.connection.url"))); //$NON-NLS-1$
}
}
@Override
public void run() {
try {
Connection conn = null;
Statement stmt = null;
try {
conn = createConn();
conn.setAutoCommit(false);
stmt = conn.createStatement();
String statement = LogSql.getLogMessageSQLStatement(log);
stmt.execute(statement);
conn.commit();
} catch (Exception e) {
conn.rollback();
conn.close();
throw e;
} finally {
try {
stmt.close();
} catch (Exception ex) {
}
try {
conn.close();
} catch (Exception ex) {
}
}
} catch (Exception ex) {
ExceptionUtils.writeMsgToTmpFile(ex);
}
}
protected Connection createConn() {
Connection con = null;
try {
if (getDbDriverClass() != null) {
Class.forName(getDbDriverClass());
}
con = DriverManager.getConnection(getDbUrl(), getDbUser(),
getDbPwd());
} catch (Throwable t) {
ExceptionUtils.writeMsgToTmpFile(t);
}
return con;
}
public Properties getProps() {
return props;
}
public void setProps(Properties props) {
this.props = props;
}
public String getDbDriverClass() {
return dbDriverClass;
}
public void setDbDriverClass(String dbDriverClass) {
this.dbDriverClass = dbDriverClass;
}
public String getDbPwd() {
return dbPwd;
}
public void setDbPwd(String dbPwd) {
this.dbPwd = dbPwd;
}
public String getDbUrl() {
return dbUrl;
}
public void setDbUrl(String dbUrl) {
this.dbUrl = dbUrl;
}
public String getDbUser() {
return dbUser;
}
public void setDbUser(String dbUser) {
this.dbUser = dbUser;
}
}