mirror of
https://github.com/ebean-orm/ebean.git
synced 2026-11-12 14:40:46 +00:00
#1245 - Refactor internals - move TransactionMangerScope to be part of TransactionManager
This commit is contained in:
1 parent
6b01821623
commit
5bd7853ce8
7 files changed
+106
-43
No files matched your search
+8
-3
@@ -8,8 +8,13 @@ import io.ebeaninternal.api.SpiTransaction;
|
||||
public class DefaultTransactionScopeManager extends TransactionScopeManager {
|
||||
|
||||
|
||||
public DefaultTransactionScopeManager(TransactionManager transactionManager) {
|
||||
super(transactionManager);
|
||||
public DefaultTransactionScopeManager(String serverName) {
|
||||
super(serverName);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void register(TransactionManager manager) {
|
||||
// do nothing
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -23,7 +28,7 @@ public class DefaultTransactionScopeManager extends TransactionScopeManager {
|
||||
}
|
||||
|
||||
@Override
|
||||
public SpiTransaction getScoped() {
|
||||
public SpiTransaction getMaybeInactive() {
|
||||
return DefaultTransactionThreadLocal.get(serverName);
|
||||
}
|
||||
|
||||
|
||||
+9
-6
@@ -8,18 +8,21 @@ import io.ebeaninternal.api.SpiTransaction;
|
||||
*/
|
||||
public class ExternalTransactionScopeManager extends TransactionScopeManager {
|
||||
|
||||
final ExternalTransactionManager externalManager;
|
||||
private final ExternalTransactionManager externalManager;
|
||||
|
||||
/**
|
||||
* Instantiates transaction scope manager.
|
||||
*
|
||||
* @param transactionManager the transaction manager
|
||||
*/
|
||||
public ExternalTransactionScopeManager(TransactionManager transactionManager, ExternalTransactionManager externalManager) {
|
||||
super(transactionManager);
|
||||
public ExternalTransactionScopeManager(String serverName, ExternalTransactionManager externalManager) {
|
||||
super(serverName);
|
||||
this.externalManager = externalManager;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void register(TransactionManager manager) {
|
||||
externalManager.setTransactionManager(manager);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void commit() {
|
||||
DefaultTransactionThreadLocal.commit(serverName);
|
||||
@@ -32,7 +35,7 @@ public class ExternalTransactionScopeManager extends TransactionScopeManager {
|
||||
}
|
||||
|
||||
@Override
|
||||
public SpiTransaction getScoped() {
|
||||
public SpiTransaction getMaybeInactive() {
|
||||
return get();
|
||||
}
|
||||
|
||||
|
||||
@@ -9,6 +9,7 @@ import io.ebean.event.changelog.ChangeLogListener;
|
||||
import io.ebean.event.changelog.ChangeLogPrepare;
|
||||
import io.ebean.event.changelog.ChangeSet;
|
||||
import io.ebean.meta.MetaTimedMetric;
|
||||
import io.ebeaninternal.api.ScopedTransaction;
|
||||
import io.ebeaninternal.api.SpiProfileHandler;
|
||||
import io.ebeaninternal.api.SpiTransaction;
|
||||
import io.ebeaninternal.api.TransactionEvent;
|
||||
@@ -124,6 +125,7 @@ public class TransactionManager {
|
||||
private final TimedMetric txnMain;
|
||||
private final TimedMetric txnReadOnly;
|
||||
private final TimedMetricMap txnNamed;
|
||||
private final TransactionScopeManager scopeManager;
|
||||
|
||||
/**
|
||||
* Create the TransactionManager
|
||||
@@ -142,6 +144,7 @@ public class TransactionManager {
|
||||
this.changeLogAsync = options.config.isChangeLogAsync();
|
||||
this.clusterManager = options.clusterManager;
|
||||
this.serverName = options.config.getName();
|
||||
this.scopeManager = options.scopeManager;
|
||||
this.backgroundExecutor = options.backgroundExecutor;
|
||||
this.dataSourceSupplier = options.dataSourceSupplier;
|
||||
this.docStoreActive = options.config.getDocStoreConfig().isActive();
|
||||
@@ -158,6 +161,50 @@ public class TransactionManager {
|
||||
this.txnMain = metricFactory.createTimedMetric("txn.main");
|
||||
this.txnReadOnly = metricFactory.createTimedMetric("txn.readonly");
|
||||
this.txnNamed = metricFactory.createTimedMetricMap("txn.named.");
|
||||
|
||||
scopeManager.register(this);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new scoped transaction.
|
||||
*/
|
||||
public ScopedTransaction createScopedTransaction() {
|
||||
return new ScopedTransaction(scopeManager);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the scope manager.
|
||||
*/
|
||||
public TransactionScopeManager scope() {
|
||||
return scopeManager;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the transaction onto the scope.
|
||||
*/
|
||||
public void set(SpiTransaction txn) {
|
||||
scopeManager.set(txn);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the current active transaction.
|
||||
*/
|
||||
public SpiTransaction get() {
|
||||
return scopeManager.get();
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the current active transaction as a scoped transaction.
|
||||
*/
|
||||
public ScopedTransaction getScoped() {
|
||||
return (ScopedTransaction) scopeManager.get();
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the current scoped transaction allowing it to be inactive (already committed or rolled back).
|
||||
*/
|
||||
public ScopedTransaction getMaybeInactive() {
|
||||
return (ScopedTransaction)scopeManager.getMaybeInactive();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -478,4 +525,13 @@ public class TransactionManager {
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
/**
|
||||
* Begin an implicit transaction.
|
||||
*/
|
||||
public SpiTransaction beginServerTransaction() {
|
||||
SpiTransaction t = createTransaction(0, false, -1);
|
||||
scopeManager.set(t);
|
||||
return t;
|
||||
}
|
||||
}
|
||||
@@ -21,13 +21,15 @@ public class TransactionManagerOptions {
|
||||
final BeanDescriptorManager descMgr;
|
||||
final DataSourceSupplier dataSourceSupplier;
|
||||
final SpiProfileHandler profileHandler;
|
||||
final TransactionScopeManager scopeManager;
|
||||
|
||||
public TransactionManagerOptions(boolean localL2Caching, ServerConfig config, ClusterManager clusterManager,
|
||||
BackgroundExecutor backgroundExecutor, DocStoreUpdateProcessor docStoreUpdateProcessor,
|
||||
BeanDescriptorManager descMgr, DataSourceSupplier dataSourceSupplier, SpiProfileHandler profileHandler) {
|
||||
public TransactionManagerOptions(boolean localL2Caching, ServerConfig config, TransactionScopeManager scopeManager, ClusterManager clusterManager,
|
||||
BackgroundExecutor backgroundExecutor, DocStoreUpdateProcessor docStoreUpdateProcessor,
|
||||
BeanDescriptorManager descMgr, DataSourceSupplier dataSourceSupplier, SpiProfileHandler profileHandler) {
|
||||
|
||||
this.localL2Caching = localL2Caching;
|
||||
this.config = config;
|
||||
this.scopeManager = scopeManager;
|
||||
this.clusterManager = clusterManager;
|
||||
this.backgroundExecutor = backgroundExecutor;
|
||||
this.docStoreUpdateProcessor = docStoreUpdateProcessor;
|
||||
|
||||
@@ -8,19 +8,21 @@ import io.ebeaninternal.api.SpiTransactionScopeManager;
|
||||
*/
|
||||
public abstract class TransactionScopeManager implements SpiTransactionScopeManager {
|
||||
|
||||
protected final TransactionManager transactionManager;
|
||||
|
||||
protected final String serverName;
|
||||
|
||||
public TransactionScopeManager(TransactionManager transactionManager) {
|
||||
this.transactionManager = transactionManager;
|
||||
this.serverName = transactionManager.getServerName();
|
||||
public TransactionScopeManager(String serverName) {
|
||||
this.serverName = serverName;
|
||||
}
|
||||
|
||||
/**
|
||||
* Register the transaction manager (for use by external transaction scopes).
|
||||
*/
|
||||
public abstract void register(TransactionManager manager);
|
||||
|
||||
/**
|
||||
* Return the current Transaction allowing it to be inactive.
|
||||
*/
|
||||
public abstract SpiTransaction getScoped();
|
||||
public abstract SpiTransaction getMaybeInactive();
|
||||
|
||||
/**
|
||||
* Return the current Transaction for this serverName and Thread.
|
||||
|
||||
Reference in new issue
Block a user