Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -175,15 +175,20 @@ public T getTransaction(TransactionDefinition definition) throws TransactionExce
}
ConnectionStatus<C> connectionStatus = connectionOperations.findConnectionStatus().orElse(null);
if (connectionStatus == null) {
ConnectionStatus<C> newConnectionStatus = synchronousConnectionManager.getConnection(txConnectionDefinition(definition));
T transactionStatus = createAndBeginTransaction(definition, newConnectionStatus);
transactionStatus.registerInvocationSynchronization(new TransactionSynchronization() {
@Override
public void afterCompletion(Status status) {
synchronousConnectionManager.complete(newConnectionStatus);
}
});
return transactionStatus;
final ConnectionStatus<C> newConnectionStatus = synchronousConnectionManager.getConnection(txConnectionDefinition(definition));
try {
T transactionStatus = createAndBeginTransaction(definition, newConnectionStatus);
transactionStatus.registerInvocationSynchronization(new TransactionSynchronization() {
@Override
public void afterCompletion(Status status) {
synchronousConnectionManager.complete(newConnectionStatus);
}
});
return transactionStatus;
} catch (RuntimeException e) {
synchronousConnectionManager.complete(newConnectionStatus);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is it ok to complete transaction on exception @dstepanov ?

throw e;
Comment on lines +188 to +190
}
}
return createAndBeginTransaction(definition, connectionStatus);
}
Expand All @@ -193,16 +198,29 @@ public void afterCompletion(Status status) {
checkNeverTransactionPropagation(definition);
if (definition.getPropagationBehavior() == TransactionDefinition.Propagation.REQUIRES_NEW || definition.getPropagationBehavior() == TransactionDefinition.Propagation.NOT_SUPPORTED) {
doSuspend(existingTransaction);
ConnectionStatus<C> newConnection = synchronousConnectionManager.getConnection(ConnectionDefinition.REQUIRES_NEW);
T newTransaction = createAndBeginTransaction(definition, newConnection);
newTransaction.registerInvocationSynchronization(new TransactionSynchronization() {
@Override
public void afterCompletion(Status status) {
ConnectionStatus<C> newConnection = null;
try {
newConnection = synchronousConnectionManager.getConnection(ConnectionDefinition.REQUIRES_NEW);
final ConnectionStatus<C> finalConnection = newConnection;
T newTransaction = createAndBeginTransaction(definition, finalConnection);
newTransaction.registerInvocationSynchronization(new TransactionSynchronization() {
@Override
public void afterCompletion(Status status) {
doResume(existingTransaction);
synchronousConnectionManager.complete(finalConnection);
}
});
return newTransaction;
} catch (RuntimeException e) {
try {
if (newConnection != null) {
synchronousConnectionManager.complete(newConnection);
}
} finally {
doResume(existingTransaction);
synchronousConnectionManager.complete(newConnection);
}
Comment on lines +214 to 221
});
return newTransaction;
throw e;
}
}
T existingTransactionStatus = createExistingTransactionStatus(definition, existingTransaction);
begin(existingTransactionStatus);
Expand Down