You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@deltaspike.apache.org by gp...@apache.org on 2015/10/18 01:06:05 UTC
[2/2] deltaspike git commit: DELTASPIKE-1005 @Transactional and
@TransactionScoped support for @Repository
DELTASPIKE-1005 @Transactional and @TransactionScoped support for @Repository
Project: http://git-wip-us.apache.org/repos/asf/deltaspike/repo
Commit: http://git-wip-us.apache.org/repos/asf/deltaspike/commit/05876253
Tree: http://git-wip-us.apache.org/repos/asf/deltaspike/tree/05876253
Diff: http://git-wip-us.apache.org/repos/asf/deltaspike/diff/05876253
Branch: refs/heads/master
Commit: 05876253e064527d03f72ff846696ebbbef77e88
Parents: 51d5ac8
Author: gpetracek <gp...@apache.org>
Authored: Sun Oct 18 01:02:32 2015 +0200
Committer: gpetracek <gp...@apache.org>
Committed: Sun Oct 18 01:02:32 2015 +0200
----------------------------------------------------------------------
.../data/impl/handler/QueryHandler.java | 45 +++++++++++++++++++-
1 file changed, 44 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/05876253/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 0501a4f..2f8fcff 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
@@ -25,10 +25,14 @@ import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
+import javax.enterprise.inject.spi.BeanManager;
import javax.inject.Inject;
import javax.persistence.PersistenceException;
import org.apache.deltaspike.core.api.lifecycle.Initialized;
+import org.apache.deltaspike.core.util.AbstractInvocationContext;
+import org.apache.deltaspike.core.util.AnnotationUtils;
+import org.apache.deltaspike.core.util.ExceptionUtils;
import org.apache.deltaspike.core.util.ProxyUtils;
import org.apache.deltaspike.data.api.QueryInvocationException;
import org.apache.deltaspike.data.api.Repository;
@@ -37,6 +41,8 @@ import org.apache.deltaspike.data.impl.builder.QueryBuilderFactory;
import org.apache.deltaspike.data.impl.meta.RepositoryComponent;
import org.apache.deltaspike.data.impl.meta.RepositoryComponents;
import org.apache.deltaspike.data.impl.meta.RepositoryMethod;
+import org.apache.deltaspike.jpa.api.transaction.Transactional;
+import org.apache.deltaspike.jpa.spi.transaction.TransactionStrategy;
/**
* Entry point for query processing.
@@ -65,8 +71,45 @@ public class QueryHandler implements Serializable, InvocationHandler
@Inject
private QueryRunner runner;
+ @Inject
+ private BeanManager beanManager;
+
+ @Inject
+ private TransactionStrategy transactionStrategy;
+
@Override
- public Object invoke(Object proxy, Method method, Object[] args) throws Throwable
+ 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);
+
+ if (transactionalAnnotation != null)
+ {
+ return transactionStrategy.execute(
+ new AbstractInvocationContext<Object>(proxy, method, args, null)
+ {
+ @Override
+ public Object proceed() throws Exception
+ {
+ try
+ {
+ return process(proxy, method, args);
+ }
+ catch (Throwable t)
+ {
+ throw ExceptionUtils.throwAsRuntimeException(t);
+ }
+ }
+ });
+ }
+ else
+ {
+ return process(proxy, method, args);
+ }
+ }
+
+ public Object process(Object proxy, Method method, Object[] args) throws Throwable
{
CdiQueryInvocationContext queryContext = null;
try