You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@deltaspike.apache.org by ta...@apache.org on 2017/06/07 21:36:46 UTC
deltaspike git commit: DELTASPIKE-1270 [perf] cache
requiresTransaction per method
Repository: deltaspike
Updated Branches:
refs/heads/master 762d3a53b -> a551978c2
DELTASPIKE-1270 [perf] cache requiresTransaction per method
Project: http://git-wip-us.apache.org/repos/asf/deltaspike/repo
Commit: http://git-wip-us.apache.org/repos/asf/deltaspike/commit/a551978c
Tree: http://git-wip-us.apache.org/repos/asf/deltaspike/tree/a551978c
Diff: http://git-wip-us.apache.org/repos/asf/deltaspike/diff/a551978c
Branch: refs/heads/master
Commit: a551978c2510be4397fae94a9c97056c5be2d5f9
Parents: 762d3a5
Author: Thomas Andraschko <ta...@apache.org>
Authored: Wed Jun 7 23:36:38 2017 +0200
Committer: Thomas Andraschko <ta...@apache.org>
Committed: Wed Jun 7 23:36:38 2017 +0200
----------------------------------------------------------------------
.../impl/meta/RepositoryMethodMetadata.java | 12 ++++++++
.../RepositoryMethodMetadataInitializer.java | 27 +++++++++++++++++
.../data/impl/tx/TransactionalQueryRunner.java | 31 +-------------------
3 files changed, 40 insertions(+), 30 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/a551978c/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/RepositoryMethodMetadata.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/RepositoryMethodMetadata.java b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/RepositoryMethodMetadata.java
index 84d528c..8f00568 100644
--- a/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/RepositoryMethodMetadata.java
+++ b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/RepositoryMethodMetadata.java
@@ -45,6 +45,8 @@ public class RepositoryMethodMetadata
private boolean returnsStream;
private SingleResultType singleResultType;
+
+ private boolean requiresTransaction;
public RepositoryMethodMetadata()
{
@@ -175,4 +177,14 @@ public class RepositoryMethodMetadata
{
this.singleResultType = singleResultType;
}
+
+ public boolean isRequiresTransaction()
+ {
+ return requiresTransaction;
+ }
+
+ public void setRequiresTransaction(boolean requiresTransaction)
+ {
+ this.requiresTransaction = requiresTransaction;
+ }
}
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/a551978c/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/RepositoryMethodMetadataInitializer.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/RepositoryMethodMetadataInitializer.java b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/RepositoryMethodMetadataInitializer.java
index 74f1dc0..5d94b39 100644
--- a/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/RepositoryMethodMetadataInitializer.java
+++ b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/RepositoryMethodMetadataInitializer.java
@@ -29,6 +29,8 @@ import javax.enterprise.context.ApplicationScoped;
import javax.enterprise.inject.spi.Bean;
import javax.enterprise.inject.spi.BeanManager;
import javax.inject.Inject;
+import javax.persistence.LockModeType;
+import org.apache.deltaspike.core.util.ClassUtils;
import org.apache.deltaspike.core.util.OptionalUtil;
import org.apache.deltaspike.core.util.StreamUtil;
@@ -41,6 +43,7 @@ import org.apache.deltaspike.data.api.mapping.QueryInOutMapper;
import org.apache.deltaspike.data.impl.builder.MethodExpressionException;
import org.apache.deltaspike.data.impl.builder.part.QueryRoot;
import org.apache.deltaspike.data.impl.builder.result.QueryProcessorFactory;
+import org.apache.deltaspike.data.impl.handler.EntityRepositoryHandler;
@ApplicationScoped
public class RepositoryMethodMetadataInitializer
@@ -79,6 +82,7 @@ public class RepositoryMethodMetadataInitializer
initQueryInOutMapperIsNormalScope(repositoryMetadata, repositoryMethodMetadata, beanManager);
initSingleResultType(repositoryMethodMetadata);
+ initRequiresTransaction(repositoryMethodMetadata);
return repositoryMethodMetadata;
@@ -193,4 +197,27 @@ public class RepositoryMethodMetadataInitializer
}
}
+ private void initRequiresTransaction(RepositoryMethodMetadata repositoryMethodMetadata)
+ {
+ boolean requiresTransaction = false;
+
+ if (ClassUtils.containsMethod(EntityRepositoryHandler.class, repositoryMethodMetadata.getMethod()))
+ {
+ Method executed = ClassUtils.extractMethod(EntityRepositoryHandler.class, repositoryMethodMetadata.getMethod());
+ if (executed.isAnnotationPresent(RequiresTransaction.class))
+ {
+ requiresTransaction = true;
+ }
+ }
+
+ Query query = repositoryMethodMetadata.getQuery();
+ Modifying modifying = repositoryMethodMetadata.getModifying();
+
+ if ((query != null && !query.lock().equals(LockModeType.NONE)) || modifying != null)
+ {
+ requiresTransaction = true;
+ }
+
+ repositoryMethodMetadata.setRequiresTransaction(requiresTransaction);
+ }
}
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/a551978c/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/tx/TransactionalQueryRunner.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/tx/TransactionalQueryRunner.java b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/tx/TransactionalQueryRunner.java
index fe89dbe..f91418c 100644
--- a/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/tx/TransactionalQueryRunner.java
+++ b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/tx/TransactionalQueryRunner.java
@@ -18,20 +18,13 @@
*/
package org.apache.deltaspike.data.impl.tx;
-import java.lang.reflect.Method;
import javax.enterprise.context.ApplicationScoped;
import javax.inject.Inject;
-import javax.persistence.LockModeType;
-import org.apache.deltaspike.core.util.ClassUtils;
-import org.apache.deltaspike.data.api.Modifying;
-import org.apache.deltaspike.data.api.Query;
import org.apache.deltaspike.data.impl.builder.QueryBuilder;
import org.apache.deltaspike.data.impl.handler.CdiQueryInvocationContext;
-import org.apache.deltaspike.data.impl.handler.EntityRepositoryHandler;
import org.apache.deltaspike.data.impl.handler.QueryRunner;
-import org.apache.deltaspike.data.impl.meta.RequiresTransaction;
import org.apache.deltaspike.jpa.spi.entitymanager.ActiveEntityManagerHolder;
import org.apache.deltaspike.jpa.spi.transaction.TransactionStrategy;
@@ -49,7 +42,7 @@ public class TransactionalQueryRunner implements QueryRunner
public Object executeQuery(final QueryBuilder builder, final CdiQueryInvocationContext context)
throws Throwable
{
- if (needsTransaction(context))
+ if (context.getRepositoryMethodMetadata().isRequiresTransaction())
{
try
{
@@ -82,26 +75,4 @@ public class TransactionalQueryRunner implements QueryRunner
});
}
- private boolean needsTransaction(CdiQueryInvocationContext context)
- {
- if (ClassUtils.containsMethod(EntityRepositoryHandler.class, context.getMethod()))
- {
- Method executed = ClassUtils.extractMethod(EntityRepositoryHandler.class, context.getMethod());
- if (executed.isAnnotationPresent(RequiresTransaction.class))
- {
- return true;
- }
- }
-
- Query query = context.getRepositoryMethodMetadata().getQuery();
- Modifying modifying = context.getRepositoryMethodMetadata().getModifying();
-
- if ((query != null && !query.lock().equals(LockModeType.NONE)) || modifying != null)
- {
- return true;
- }
-
- return false;
- }
-
}