提交 bd4a78ca 编写于 作者: J jurgen

Use job instead of progress service.

上级 4e9d6bb4
......@@ -23,18 +23,22 @@ import org.jkiss.code.NotNull;
import org.jkiss.code.Nullable;
import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.Log;
import org.jkiss.dbeaver.core.DBeaverUI;
import org.jkiss.dbeaver.model.*;
import org.jkiss.dbeaver.model.data.DBDDataFormatterProfile;
import org.jkiss.dbeaver.model.data.DBDPreferences;
import org.jkiss.dbeaver.model.data.DBDValueHandler;
import org.jkiss.dbeaver.model.exec.*;
import org.jkiss.dbeaver.model.exec.DBCException;
import org.jkiss.dbeaver.model.exec.DBCExecutionContext;
import org.jkiss.dbeaver.model.exec.DBCTransactionManager;
import org.jkiss.dbeaver.model.impl.data.DefaultValueHandler;
import org.jkiss.dbeaver.model.meta.Property;
import org.jkiss.dbeaver.model.net.DBWHandlerConfiguration;
import org.jkiss.dbeaver.model.net.DBWHandlerType;
import org.jkiss.dbeaver.model.net.DBWTunnel;
import org.jkiss.dbeaver.model.runtime.*;
import org.jkiss.dbeaver.model.runtime.DBRProcessDescriptor;
import org.jkiss.dbeaver.model.runtime.DBRProgressListener;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.dbeaver.model.runtime.DBRRunnableWithProgress;
import org.jkiss.dbeaver.model.struct.*;
import org.jkiss.dbeaver.model.virtual.DBVModel;
import org.jkiss.dbeaver.runtime.TasksJob;
......@@ -290,7 +294,7 @@ public class DataSourceDescriptor
if (updateContext != null) {
final DBCTransactionManager txnManager = DBUtils.getTransactionManager(updateContext);
if (updateConnection && txnManager != null) {
new TasksJob("Set auto-commit mode", new DBRRunnableWithProgress() {
TasksJob.runTask("Set auto-commit mode", new DBRRunnableWithProgress() {
@Override
public void run(DBRProgressMonitor monitor)
throws InvocationTargetException, InterruptedException {
......@@ -303,7 +307,7 @@ public class DataSourceDescriptor
monitor.done();
}
}
}).schedule();
});
}
}
// Save in preferences
......@@ -339,33 +343,27 @@ public class DataSourceDescriptor
@Override
public void setDefaultTransactionsIsolation(@Nullable final DBPTransactionIsolation isolationLevel) throws DBException {
try {
if (isolationLevel == null) {
connectionInfo.getBootstrap().setDefaultTransactionIsolation(null);
} else {
connectionInfo.getBootstrap().setDefaultTransactionIsolation(isolationLevel.getCode());
if (dataSource != null) {
DBeaverUI.runInProgressService(new DBRRunnableWithProgress() {
@Override
public void run(DBRProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
DBCTransactionManager txnManager = DBUtils.getTransactionManager(dataSource.getDefaultContext(false));
if (txnManager != null) {
try {
if (!txnManager.getTransactionIsolation().equals(isolationLevel)) {
txnManager.setTransactionIsolation(monitor, isolationLevel);
}
} catch (DBCException e) {
throw new InvocationTargetException(e);
if (isolationLevel == null) {
connectionInfo.getBootstrap().setDefaultTransactionIsolation(null);
} else {
connectionInfo.getBootstrap().setDefaultTransactionIsolation(isolationLevel.getCode());
if (dataSource != null) {
TasksJob.runTask("Set transactions isolation level", new DBRRunnableWithProgress() {
@Override
public void run(DBRProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
DBCTransactionManager txnManager = DBUtils.getTransactionManager(dataSource.getDefaultContext(false));
if (txnManager != null) {
try {
if (!txnManager.getTransactionIsolation().equals(isolationLevel)) {
txnManager.setTransactionIsolation(monitor, isolationLevel);
}
} catch (DBCException e) {
throw new InvocationTargetException(e);
}
}
});
}
}
});
}
} catch (InvocationTargetException e) {
throw new DBException("Can't set transaction isolation level", e.getTargetException());
} catch (InterruptedException e) {
// ok
}
}
......
......@@ -22,10 +22,9 @@ import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.jface.operation.IRunnableContext;
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.swt.program.Program;
import org.jkiss.dbeaver.Log;
import org.jkiss.dbeaver.core.CoreMessages;
import org.jkiss.dbeaver.core.DBeaverCore;
import org.jkiss.dbeaver.Log;
import org.jkiss.dbeaver.model.DBPPreferenceStore;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.dbeaver.model.runtime.DBRRunnableWithProgress;
import org.jkiss.dbeaver.runtime.load.ILoadService;
......@@ -33,13 +32,10 @@ import org.jkiss.dbeaver.runtime.load.ILoadVisualizer;
import org.jkiss.dbeaver.runtime.load.jobs.LoadingJob;
import org.jkiss.dbeaver.utils.GeneralUtils;
import org.jkiss.utils.ArrayUtils;
import org.jkiss.utils.CommonUtils;
import java.io.File;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
......
......@@ -37,13 +37,13 @@ public class TasksJob extends AbstractJob
{
private final List<DBRRunnableWithProgress> tasks;
public TasksJob(String name, Collection<DBRRunnableWithProgress> tasks) {
private TasksJob(String name, Collection<DBRRunnableWithProgress> tasks) {
super(name);
setUser(true);
this.tasks = new ArrayList<DBRRunnableWithProgress>(tasks);
}
public TasksJob(String name, DBRRunnableWithProgress task) {
private TasksJob(String name, DBRRunnableWithProgress task) {
this(name, Collections.singletonList(task));
}
......@@ -91,4 +91,13 @@ public class TasksJob extends AbstractJob
monitor.done();
return Status.OK_STATUS;
}
public static void runTasks(String name, Collection<DBRRunnableWithProgress> tasks) {
new TasksJob(name, tasks).schedule();
}
public static void runTask(String name, DBRRunnableWithProgress task) {
new TasksJob(name, task).schedule();
}
}
......@@ -19,15 +19,12 @@ package org.jkiss.dbeaver.ui.actions.datasource;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.handlers.HandlerUtil;
import org.jkiss.code.NotNull;
import org.jkiss.dbeaver.core.DBeaverUI;
import org.jkiss.dbeaver.model.DBUtils;
import org.jkiss.dbeaver.model.exec.*;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.dbeaver.model.runtime.DBRRunnableWithProgress;
import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.runtime.TasksJob;
import org.jkiss.dbeaver.ui.actions.AbstractDataSourceHandler;
import java.lang.reflect.InvocationTargetException;
......@@ -39,35 +36,29 @@ public class DataSourceCommitHandler extends AbstractDataSourceHandler
{
DBCExecutionContext context = getExecutionContext(event, true);
if (context != null && context.isConnected()) {
execute(HandlerUtil.getActiveShell(event), context);
execute(context);
}
return null;
}
public static void execute(Shell shell, @NotNull final DBCExecutionContext context) {
try {
DBeaverUI.runInProgressService(new DBRRunnableWithProgress() {
@Override
public void run(DBRProgressMonitor monitor)
throws InvocationTargetException, InterruptedException {
DBCTransactionManager txnManager = DBUtils.getTransactionManager(context);
if (txnManager != null) {
DBCSession session = context.openSession(monitor, DBCExecutionPurpose.UTIL, "Commit transaction");
try {
txnManager.commit(session);
} catch (DBCException e) {
throw new InvocationTargetException(e);
} finally {
session.close();
}
public static void execute(@NotNull final DBCExecutionContext context) {
TasksJob.runTask("Commit transaction", new DBRRunnableWithProgress() {
@Override
public void run(DBRProgressMonitor monitor)
throws InvocationTargetException, InterruptedException {
DBCTransactionManager txnManager = DBUtils.getTransactionManager(context);
if (txnManager != null) {
DBCSession session = context.openSession(monitor, DBCExecutionPurpose.UTIL, "Commit transaction");
try {
txnManager.commit(session);
} catch (DBCException e) {
throw new InvocationTargetException(e);
} finally {
session.close();
}
}
});
} catch (InvocationTargetException e) {
UIUtils.showErrorDialog(shell, "Commit", "Error while committing session", e);
} catch (InterruptedException e) {
// do nothing
}
}
});
}
}
\ No newline at end of file
......@@ -21,12 +21,11 @@ import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.handlers.HandlerUtil;
import org.jkiss.dbeaver.core.DBeaverUI;
import org.jkiss.dbeaver.model.DBUtils;
import org.jkiss.dbeaver.model.exec.*;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.dbeaver.model.runtime.DBRRunnableWithProgress;
import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.runtime.TasksJob;
import org.jkiss.dbeaver.ui.actions.AbstractDataSourceHandler;
import java.lang.reflect.InvocationTargetException;
......@@ -44,29 +43,23 @@ public class DataSourceRollbackHandler extends AbstractDataSourceHandler
}
public static void execute(Shell shell, final DBCExecutionContext context) {
try {
DBeaverUI.runInProgressService(new DBRRunnableWithProgress() {
@Override
public void run(DBRProgressMonitor monitor)
throws InvocationTargetException, InterruptedException {
DBCTransactionManager txnManager = DBUtils.getTransactionManager(context);
if (txnManager != null) {
DBCSession session = context.openSession(monitor, DBCExecutionPurpose.UTIL, "Rollback transaction");
try {
txnManager.rollback(session, null);
} catch (DBCException e) {
throw new InvocationTargetException(e);
} finally {
session.close();
}
TasksJob.runTask("Rollback transaction", new DBRRunnableWithProgress() {
@Override
public void run(DBRProgressMonitor monitor)
throws InvocationTargetException, InterruptedException {
DBCTransactionManager txnManager = DBUtils.getTransactionManager(context);
if (txnManager != null) {
DBCSession session = context.openSession(monitor, DBCExecutionPurpose.UTIL, "Rollback transaction");
try {
txnManager.rollback(session, null);
} catch (DBCException e) {
throw new InvocationTargetException(e);
} finally {
session.close();
}
}
});
} catch (InvocationTargetException e) {
UIUtils.showErrorDialog(shell, "Rollback", "Error during session rollback", e);
} catch (InterruptedException e) {
// do nothing
}
}
});
}
}
\ No newline at end of file
......@@ -22,15 +22,14 @@ import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.ui.IActionDelegate;
import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.core.DBeaverUI;
import org.jkiss.dbeaver.model.DBUtils;
import org.jkiss.dbeaver.model.navigator.DBNDatabaseNode;
import org.jkiss.dbeaver.model.navigator.DBNNode;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.dbeaver.model.runtime.DBRRunnableWithProgress;
import org.jkiss.dbeaver.model.struct.DBSObjectSelector;
import org.jkiss.dbeaver.runtime.TasksJob;
import org.jkiss.dbeaver.ui.navigator.NavigatorUtils;
import org.jkiss.dbeaver.ui.UIUtils;
import java.lang.reflect.InvocationTargetException;
......@@ -47,12 +46,11 @@ public class NavigatorActionSetActiveObject implements IActionDelegate
final DBNDatabaseNode databaseNode = (DBNDatabaseNode)selectedNode;
final DBSObjectSelector activeContainer = DBUtils.getParentAdapter(
DBSObjectSelector.class, databaseNode.getObject());
try {
DBeaverUI.runInProgressService(new DBRRunnableWithProgress() {
if (activeContainer != null) {
TasksJob.runTask("Select active object", new DBRRunnableWithProgress() {
@Override
public void run(DBRProgressMonitor monitor)
throws InvocationTargetException, InterruptedException
{
throws InvocationTargetException, InterruptedException {
try {
activeContainer.selectObject(monitor, databaseNode.getObject());
} catch (DBException e) {
......@@ -60,10 +58,6 @@ public class NavigatorActionSetActiveObject implements IActionDelegate
}
}
});
} catch (InvocationTargetException e) {
UIUtils.showErrorDialog(null, "Select entity", "Can't change selected entity", e.getTargetException());
} catch (InterruptedException e) {
// do nothing
}
}
}
......
......@@ -40,19 +40,19 @@ import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.DBeaverPreferences;
import org.jkiss.dbeaver.core.CoreMessages;
import org.jkiss.dbeaver.core.DBeaverActivator;
import org.jkiss.dbeaver.model.edit.DBEObjectMaker;
import org.jkiss.dbeaver.model.navigator.*;
import org.jkiss.dbeaver.model.runtime.DBRRunnableWithProgress;
import org.jkiss.dbeaver.model.struct.DBSObject;
import org.jkiss.dbeaver.registry.editor.EntityEditorsRegistry;
import org.jkiss.dbeaver.runtime.TasksJob;
import org.jkiss.dbeaver.ui.DBeaverIcons;
import org.jkiss.dbeaver.ui.UIIcon;
import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.ui.dialogs.ConfirmationDialog;
import org.jkiss.dbeaver.ui.editors.IDatabaseEditor;
import org.jkiss.dbeaver.ui.editors.IDatabaseEditorInput;
import org.jkiss.dbeaver.model.edit.DBEObjectMaker;
import org.jkiss.dbeaver.model.navigator.*;
import org.jkiss.dbeaver.model.struct.DBSObject;
import org.jkiss.dbeaver.registry.editor.EntityEditorsRegistry;
import org.jkiss.dbeaver.ui.navigator.NavigatorUtils;
import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.ui.dialogs.ConfirmationDialog;
import java.util.*;
......@@ -90,7 +90,7 @@ public class NavigatorHandlerObjectDelete extends NavigatorHandlerObjectBase imp
}
if (!tasksToExecute.isEmpty()) {
new TasksJob(tasksToExecute.size() > 1 ? "Delete " + tasksToExecute.size() + " objects" : "Delete object", tasksToExecute).schedule();
TasksJob.runTasks(tasksToExecute.size() > 1 ? "Delete " + tasksToExecute.size() + " objects" : "Delete object", tasksToExecute);
tasksToExecute.clear();
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册