This is an automated email from the ASF dual-hosted git repository.
ntimofeev pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cayenne.git
The following commit(s) were added to refs/heads/master by this push:
new 53cdf6e CAY-2689 ServerRuntime API: missing some variants of the
performInTransaction() method
53cdf6e is described below
commit 53cdf6e1164228adc7dc67c35de614d4ba32b9ed
Author: Nikita Timofeev <[email protected]>
AuthorDate: Mon Nov 9 17:56:52 2020 +0300
CAY-2689 ServerRuntime API: missing some variants of the
performInTransaction() method
---
RELEASE-NOTES.txt | 2 +
.../configuration/server/ServerRuntime.java | 46 ++++++++++++++++++++--
2 files changed, 44 insertions(+), 4 deletions(-)
diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt
index 083c19c..efbbd65 100644
--- a/RELEASE-NOTES.txt
+++ b/RELEASE-NOTES.txt
@@ -13,6 +13,8 @@ Date:
----------------------------------
Changes/New Features:
+CAY-2689 ServerRuntime API: missing some variants of the
performInTransaction() method
+
Bug Fixes:
CAY-2683 Don't use DISTINCT for joins on to-one related tables
diff --git
a/cayenne-server/src/main/java/org/apache/cayenne/configuration/server/ServerRuntime.java
b/cayenne-server/src/main/java/org/apache/cayenne/configuration/server/ServerRuntime.java
index 9a264fa..9cc96d5 100644
---
a/cayenne-server/src/main/java/org/apache/cayenne/configuration/server/ServerRuntime.java
+++
b/cayenne-server/src/main/java/org/apache/cayenne/configuration/server/ServerRuntime.java
@@ -21,18 +21,15 @@ package org.apache.cayenne.configuration.server;
import org.apache.cayenne.access.DataDomain;
import org.apache.cayenne.access.DataNode;
import org.apache.cayenne.configuration.CayenneRuntime;
-import org.apache.cayenne.di.ListBuilder;
import org.apache.cayenne.di.Module;
+import org.apache.cayenne.tx.TransactionDescriptor;
import org.apache.cayenne.tx.TransactionListener;
import org.apache.cayenne.tx.TransactionManager;
import org.apache.cayenne.tx.TransactionalOperation;
import javax.sql.DataSource;
-import java.util.ArrayList;
import java.util.Collection;
-import static java.util.Arrays.asList;
-
/**
* Object representing Cayenne stack. Serves as an entry point to Cayenne for
user applications and a factory of ObjectContexts.
* Implementation is a thin wrapper of the dependency injection container.
@@ -106,6 +103,47 @@ public class ServerRuntime extends CayenneRuntime {
}
/**
+ * Runs provided operation wrapped in a single transaction. Transaction
+ * handling delegated to the internal {@link TransactionManager}. Nested
+ * calls to 'performInTransaction' are safe and attached to the same
+ * in-progress transaction. TransactionalOperation can be some arbitrary
+ * user code, which most often than not will consist of multiple Cayenne
+ * operations.
+ *
+ * @param op an operation to perform within the transaction.
+ * @param descriptor describes additional transaction parameters
+ * @param <T> result type
+ * @return a value returned by the "op" operation.
+ *
+ * @since 4.2
+ */
+ public <T> T performInTransaction(TransactionalOperation<T> op,
TransactionDescriptor descriptor) {
+ TransactionManager tm = injector.getInstance(TransactionManager.class);
+ return tm.performInTransaction(op, descriptor);
+ }
+
+ /**
+ * Runs provided operation wrapped in a single transaction. Transaction
+ * handling delegated to the internal {@link TransactionManager}. Nested
+ * calls to 'performInTransaction' are safe and attached to the same
+ * in-progress transaction. TransactionalOperation can be some arbitrary
+ * user code, which most often than not will consist of multiple Cayenne
+ * operations.
+ *
+ * @param op an operation to perform within the transaction.
+ * @param callback a callback to notify as transaction progresses
through stages.
+ * @param descriptor describes additional transaction parameters
+ * @param <T> returned value type
+ * @return a value returned by the "op" operation.
+ *
+ * @since 4.2
+ */
+ public <T> T performInTransaction(TransactionalOperation<T> op,
TransactionListener callback, TransactionDescriptor descriptor) {
+ TransactionManager tm = injector.getInstance(TransactionManager.class);
+ return tm.performInTransaction(op, callback, descriptor);
+ }
+
+ /**
* Returns the main runtime DataDomain. Note that by default the returned
* DataDomain is the same as the main DataChannel returned by
* {@link #getChannel()}. Although users may redefine DataChannel provider