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/08 15:27:45 UTC
deltaspike git commit: DELTASPIKE-1270 [perf] cache Transactional per
method
Repository: deltaspike
Updated Branches:
refs/heads/master dbd437ea0 -> 4965c1767
DELTASPIKE-1270 [perf] cache Transactional per method
Project: http://git-wip-us.apache.org/repos/asf/deltaspike/repo
Commit: http://git-wip-us.apache.org/repos/asf/deltaspike/commit/4965c176
Tree: http://git-wip-us.apache.org/repos/asf/deltaspike/tree/4965c176
Diff: http://git-wip-us.apache.org/repos/asf/deltaspike/diff/4965c176
Branch: refs/heads/master
Commit: 4965c176758672e32579d2af00bc0c458b828a9e
Parents: dbd437e
Author: Thomas Andraschko <ta...@apache.org>
Authored: Thu Jun 8 17:27:33 2017 +0200
Committer: Thomas Andraschko <ta...@apache.org>
Committed: Thu Jun 8 17:27:33 2017 +0200
----------------------------------------------------------------------
.../impl/handler/CdiQueryInvocationContext.java | 2 +-
.../data/impl/handler/QueryHandler.java | 29 +++++++++-----------
.../impl/meta/RepositoryMetadataHandler.java | 6 ++--
.../meta/RepositoryMetadataInitializer.java | 8 +++---
.../impl/meta/RepositoryMethodMetadata.java | 13 +++++++++
.../RepositoryMethodMetadataInitializer.java | 8 ++++++
6 files changed, 42 insertions(+), 24 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/4965c176/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/handler/CdiQueryInvocationContext.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/handler/CdiQueryInvocationContext.java b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/handler/CdiQueryInvocationContext.java
index 529bbb1..f8fa9ba 100644
--- a/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/handler/CdiQueryInvocationContext.java
+++ b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/handler/CdiQueryInvocationContext.java
@@ -78,7 +78,7 @@ public class CdiQueryInvocationContext implements QueryInvocationContext
this.cleanup = new LinkedList<Destroyable>();
}
- public void initMapper()
+ public void init()
{
if (hasQueryInOutMapper())
{
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/4965c176/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/handler/QueryHandler.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/handler/QueryHandler.java b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/handler/QueryHandler.java
index 4698541..ce1a7e0 100755
--- a/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/handler/QueryHandler.java
+++ b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/handler/QueryHandler.java
@@ -85,19 +85,21 @@ public class QueryHandler implements Serializable, InvocationHandler
@Override
public Object invoke(final Object proxy, final Method method, final Object[] args) throws Throwable
{
- Transactional transactionalAnnotation =
- AnnotationUtils.extractAnnotationFromMethodOrClass(
- this.beanManager, method, proxy.getClass(), Transactional.class);
+ List<Class<?>> candidates = ProxyUtils.getProxyAndBaseTypes(proxy.getClass());
+ final RepositoryMetadata repositoryMetadata =
+ metadataHandler.lookupMetadata(candidates);
+ final RepositoryMethodMetadata repositoryMethodMetadata =
+ metadataHandler.lookupMethodMetadata(repositoryMetadata, method);
- if (transactionalAnnotation != null)
+ if (repositoryMethodMetadata.getTransactional() != null)
{
- if (transactionalAnnotation.qualifier().length > 1)
+ if (repositoryMethodMetadata.getTransactional().qualifier().length > 1)
{
throw new IllegalStateException(proxy.getClass().getName() + " uses @" + Transactional.class.getName() +
" with multiple qualifiers. That isn't supported with @" + Repository.class.getName());
}
- Class<? extends Annotation> qualifier = transactionalAnnotation.qualifier()[0];
+ Class<? extends Annotation> qualifier = repositoryMethodMetadata.getTransactional().qualifier()[0];
if (!Any.class.equals(qualifier))
{
EntityManager entityManager = BeanProvider.getContextualReference(
@@ -113,7 +115,7 @@ public class QueryHandler implements Serializable, InvocationHandler
{
try
{
- return process(proxy, method, args);
+ return process(proxy, method, args, repositoryMetadata, repositoryMethodMetadata);
}
catch (Throwable t)
{
@@ -124,22 +126,17 @@ public class QueryHandler implements Serializable, InvocationHandler
}
else
{
- return process(proxy, method, args);
+ return process(proxy, method, args, repositoryMetadata, repositoryMethodMetadata);
}
}
- public Object process(Object proxy, Method method, Object[] args) throws Throwable
+ protected Object process(Object proxy, Method method, Object[] args,
+ RepositoryMetadata repositoryMetadata, RepositoryMethodMetadata repositoryMethodMetadata) throws Throwable
{
CdiQueryInvocationContext queryContext = null;
EntityManagerRef entityManagerRef = null;
try
{
- List<Class<?>> candidates = ProxyUtils.getProxyAndBaseTypes(proxy.getClass());
- RepositoryMetadata repositoryMetadata =
- metadataHandler.lookupComponent(candidates);
- RepositoryMethodMetadata repositoryMethodMetadata =
- metadataHandler.lookupMethod(repositoryMetadata, method);
-
entityManagerRef = entityManagerRefLookup.lookupReference(repositoryMetadata);
queryContext = createContext(proxy, method, args, entityManagerRef.getEntityManager(),
repositoryMetadata, repositoryMethodMetadata);
@@ -178,7 +175,7 @@ public class QueryHandler implements Serializable, InvocationHandler
CdiQueryInvocationContext queryContext = new CdiQueryInvocationContext(proxy, method, args,
repositoryMetadata, repositoryMethodMetadata, entityManager);
context.set(queryContext);
- queryContext.initMapper();
+ queryContext.init();
return queryContext;
}
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/4965c176/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/RepositoryMetadataHandler.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/RepositoryMetadataHandler.java b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/RepositoryMetadataHandler.java
index 3fd2a76..2c03aa8 100644
--- a/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/RepositoryMetadataHandler.java
+++ b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/RepositoryMetadataHandler.java
@@ -60,7 +60,7 @@ public class RepositoryMetadataHandler
* @param candidateClasses List of candidates to check.
* @return A {@link RepositoryMetadataInitializer}.
*/
- public RepositoryMetadata lookupComponent(List<Class<?>> candidateClasses)
+ public RepositoryMetadata lookupMetadata(List<Class<?>> candidateClasses)
{
for (Class<?> repoClass : candidateClasses)
{
@@ -78,7 +78,7 @@ public class RepositoryMetadataHandler
* @param repositoryClass The repository class to lookup the method for
* @return A {@link RepositoryMetadata}.
*/
- public RepositoryMetadata lookupComponent(Class<?> repositoryClass)
+ public RepositoryMetadata lookupMetadata(Class<?> repositoryClass)
{
if (repositoriesMetadata.containsKey(repositoryClass))
{
@@ -94,7 +94,7 @@ public class RepositoryMetadataHandler
* @param method The method object to get Repository meta data for.
* @return A {@link RepositoryMethodMetadata}.
*/
- public RepositoryMethodMetadata lookupMethod(RepositoryMetadata repositoryMetadata, Method method)
+ public RepositoryMethodMetadata lookupMethodMetadata(RepositoryMetadata repositoryMetadata, Method method)
{
return repositoryMetadata.getMethodsMetadata().get(method);
}
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/4965c176/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/RepositoryMetadataInitializer.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/RepositoryMetadataInitializer.java b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/RepositoryMetadataInitializer.java
index c2755b5..2ddcc6d 100644
--- a/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/RepositoryMetadataInitializer.java
+++ b/deltaspike/modules/data/impl/src/main/java/org/apache/deltaspike/data/impl/meta/RepositoryMetadataInitializer.java
@@ -83,12 +83,12 @@ public class RepositoryMetadataInitializer
for (Class<?> implemented : allImplemented)
{
- Method[] repoClassMethods = implemented.getDeclaredMethods();
- for (Method repoClassMethod : repoClassMethods)
+ Method[] repositoryMethods = implemented.getDeclaredMethods();
+ for (Method repositoryMethod : repositoryMethods)
{
RepositoryMethodMetadata methodMetadata =
- methodMetadataInitializer.init(repositoryMetadata, repoClassMethod, beanManager);
- repositoryMetadata.getMethodsMetadata().put(repoClassMethod, methodMetadata);
+ methodMetadataInitializer.init(repositoryMetadata, repositoryMethod, beanManager);
+ repositoryMetadata.getMethodsMetadata().put(repositoryMethod, methodMetadata);
}
}
}
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/4965c176/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 8f00568..cf12f42 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
@@ -25,6 +25,7 @@ import org.apache.deltaspike.data.api.SingleResultType;
import org.apache.deltaspike.data.api.mapping.QueryInOutMapper;
import org.apache.deltaspike.data.impl.builder.part.QueryRoot;
import org.apache.deltaspike.data.impl.builder.result.QueryProcessor;
+import org.apache.deltaspike.jpa.api.transaction.Transactional;
public class RepositoryMethodMetadata
{
@@ -47,6 +48,8 @@ public class RepositoryMethodMetadata
private SingleResultType singleResultType;
private boolean requiresTransaction;
+
+ private Transactional transactional;
public RepositoryMethodMetadata()
{
@@ -187,4 +190,14 @@ public class RepositoryMethodMetadata
{
this.requiresTransaction = requiresTransaction;
}
+
+ public Transactional getTransactional()
+ {
+ return transactional;
+ }
+
+ public void setTransactional(Transactional transactional)
+ {
+ this.transactional = transactional;
+ }
}
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/4965c176/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 969be6d..da0ef0e 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
@@ -30,6 +30,7 @@ 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.AnnotationUtils;
import org.apache.deltaspike.core.util.ClassUtils;
import org.apache.deltaspike.core.util.OptionalUtil;
@@ -44,6 +45,7 @@ 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;
+import org.apache.deltaspike.jpa.api.transaction.Transactional;
@ApplicationScoped
public class RepositoryMethodMetadataInitializer
@@ -51,6 +53,9 @@ public class RepositoryMethodMetadataInitializer
@Inject
private QueryProcessorFactory queryProcessorFactory;
+ @Inject
+ private BeanManager beanManager;
+
public RepositoryMethodMetadata init(RepositoryMetadata repositoryMetadata, Method method, BeanManager beanManager)
{
RepositoryMethodMetadata repositoryMethodMetadata = new RepositoryMethodMetadata();
@@ -66,6 +71,9 @@ public class RepositoryMethodMetadataInitializer
? method.getAnnotation(Query.class) : null);
repositoryMethodMetadata.setModifying(method.isAnnotationPresent(Modifying.class)
? method.getAnnotation(Modifying.class) : null);
+
+ repositoryMethodMetadata.setTransactional(AnnotationUtils.extractAnnotationFromMethodOrClass(
+ beanManager, method, repositoryMetadata.getRepositoryClass(), Transactional.class));
repositoryMethodMetadata.setMethodPrefix(new RepositoryMethodPrefix(
repositoryMetadata.getRepositoryClass().getAnnotation(Repository.class).methodPrefix(),