提交 8b2ebc0b 编写于 作者: J jurgen

Execution context refactoring

Former-commit-id: 3c1d5faa
上级 3ca9bf3d
/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2015 Serge Rieder (serge@jkiss.org)
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License (version 2)
* as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
package org.jkiss.dbeaver.model.impl;
import org.jkiss.code.NotNull;
import org.jkiss.dbeaver.model.DBPDataSource;
import org.jkiss.dbeaver.model.DBPNamedObject;
import org.jkiss.dbeaver.model.exec.DBCException;
import org.jkiss.dbeaver.model.exec.DBCExecutionContext;
import org.jkiss.dbeaver.model.qm.QMUtils;
/**
* Abstract execution context.
* All regular DBCExecutionContext implementations should extend this class.
* It provides bootstrap init functions and QM notifications.
*/
public abstract class AbstractExecutionContext<DATASOURCE extends DBPDataSource> implements DBCExecutionContext
{
@NotNull
protected final DATASOURCE dataSource;
protected final String purpose;
public AbstractExecutionContext(DATASOURCE dataSource, String purpose) {
this.dataSource = dataSource;
this.purpose = purpose;
}
@Override
public String getContextName() {
return purpose;
}
@NotNull
@Override
public DATASOURCE getDataSource() {
return dataSource;
}
/**
* Context boot procedure.
* Executes bootstrap queries and other init functions.
* This function must be called by all implementations.
*/
protected void initContextBootstrap(boolean autoCommit) throws DBCException
{
QMUtils.getDefaultHandler().handleContextOpen(this, !autoCommit);
}
protected void closeContext()
{
QMUtils.getDefaultHandler().handleContextClose(this);
}
@Override
public String toString() {
String dsName = dataSource instanceof DBPNamedObject ? ((DBPNamedObject) dataSource).getName() : dataSource.toString();
return dsName + " - " + purpose;
}
}
......@@ -22,10 +22,10 @@ import org.jkiss.code.Nullable;
import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.core.CoreMessages;
import org.jkiss.dbeaver.core.Log;
import org.jkiss.dbeaver.model.DBPDataSource;
import org.jkiss.dbeaver.model.DBPTransactionIsolation;
import org.jkiss.dbeaver.model.exec.*;
import org.jkiss.dbeaver.model.exec.jdbc.JDBCSession;
import org.jkiss.dbeaver.model.impl.AbstractExecutionContext;
import org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCSavepointImpl;
import org.jkiss.dbeaver.model.qm.QMUtils;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
......@@ -38,21 +38,17 @@ import java.sql.Savepoint;
/**
* JDBCExecutionContext
*/
public class JDBCExecutionContext implements DBCExecutionContext, DBCTransactionManager
public class JDBCExecutionContext extends AbstractExecutionContext<JDBCDataSource> implements DBCTransactionManager
{
static final Log log = Log.getLog(JDBCExecutionContext.class);
@NotNull
private final JDBCDataSource dataSource;
private volatile Connection connection;
private final String purpose;
private volatile Boolean autoCommit;
private volatile Integer transactionIsolationLevel;
public JDBCExecutionContext(@NotNull JDBCDataSource dataSource, String purpose)
{
this.dataSource = dataSource;
this.purpose = purpose;
super(dataSource, purpose);
}
private Connection getConnection() {
......@@ -109,11 +105,11 @@ public class JDBCExecutionContext implements DBCExecutionContext, DBCTransaction
log.warn("Can't check auto-commit state", e); //$NON-NLS-1$
}
}
QMUtils.getDefaultHandler().handleContextOpen(this, !this.autoCommit);
// Copy context state
this.dataSource.initializeContextState(monitor, this, forceActiveObject);
this.initContextBootstrap(autoCommit);
// Add self to context list
this.dataSource.allContexts.add(this);
} finally {
......@@ -143,17 +139,6 @@ public class JDBCExecutionContext implements DBCExecutionContext, DBCTransaction
return dataSource.createConnection(monitor, this, purpose, taskTitle);
}
@Override
public String getContextName() {
return purpose;
}
@NotNull
@Override
public DBPDataSource getDataSource() {
return dataSource;
}
@Override
public boolean isConnected()
{
......@@ -198,13 +183,14 @@ public class JDBCExecutionContext implements DBCExecutionContext, DBCTransaction
catch (Throwable ex) {
log.error(ex);
}
QMUtils.getDefaultHandler().handleContextClose(this);
connection = null;
}
super.closeContext();
}
// Remove self from context list
this.dataSource.allContexts.remove(this);
}
//////////////////////////////////////////////////////////////
......@@ -364,8 +350,4 @@ public class JDBCExecutionContext implements DBCExecutionContext, DBCTransaction
}
}
@Override
public String toString() {
return dataSource.getName() + " - " + purpose;
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册