You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by th...@apache.org on 2018/12/06 01:45:19 UTC
tapestry-5 git commit: Revert "TAP5-2588: JPA patches provided by
Dmitris Zenios"
Repository: tapestry-5
Updated Branches:
refs/heads/master 3c28f94a4 -> 246e67709
Revert "TAP5-2588: JPA patches provided by Dmitris Zenios"
It caused test failures, so reverting these changes for now.
This reverts commit 3c28f94a4814f3294ff4e8179109c72ffa7f0722.
Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo
Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/246e6770
Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/246e6770
Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/246e6770
Branch: refs/heads/master
Commit: 246e677097f249ad2352ddc595ef43cc257f8e27
Parents: 3c28f94
Author: Thiago H. de Paula Figueiredo <th...@arsmachina.com.br>
Authored: Wed Dec 5 23:43:22 2018 -0200
Committer: Thiago H. de Paula Figueiredo <th...@arsmachina.com.br>
Committed: Wed Dec 5 23:43:22 2018 -0200
----------------------------------------------------------------------
.../ioc/internal/AnnotationAccessImpl.java | 27 +--
.../internal/services/AspectDecoratorImpl.java | 2 +-
.../internal/jpa/CommitAfterWorker.java | 21 ++-
.../jpa/EntityTransactionManagerImpl.java | 26 ++-
.../internal/jpa/JpaAdvisorProvider.java | 9 -
.../internal/jpa/JpaAdvisorProviderImpl.java | 20 ---
.../internal/jpa/JpaInternalUtils.java | 9 +-
.../internal/jpa/JpaTransactionAdvisorImpl.java | 25 ++-
...ContextSpecificEntityTransactionManager.java | 14 +-
.../apache/tapestry5/jpa/modules/JpaModule.java | 13 +-
tapestry-jpa/src/test/conf/testng.xml | 70 ++++----
.../jpa/JpaTransactionAdvisorImplTest.java | 163 ++++++-------------
.../org/example/app5/services/AppModule.java | 1 -
tapestry-runner/build.gradle | 1 -
.../org/apache/tapestry5/test/TomcatRunner.java | 23 +--
15 files changed, 180 insertions(+), 244 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/246e6770/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/AnnotationAccessImpl.java
----------------------------------------------------------------------
diff --git a/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/AnnotationAccessImpl.java b/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/AnnotationAccessImpl.java
index f8c6155..b088cb9 100644
--- a/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/AnnotationAccessImpl.java
+++ b/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/AnnotationAccessImpl.java
@@ -14,45 +14,34 @@
package org.apache.tapestry5.ioc.internal;
-import org.apache.tapestry5.func.F;
-import org.apache.tapestry5.func.Flow;
-import org.apache.tapestry5.func.Mapper;
import org.apache.tapestry5.ioc.AnnotationAccess;
import org.apache.tapestry5.ioc.AnnotationProvider;
-import org.apache.tapestry5.ioc.internal.services.AnnotationProviderChain;
import org.apache.tapestry5.ioc.internal.util.InternalUtils;
-import java.lang.reflect.Method;
-
/**
- * Standard AnnotationAccess for an array of classes
+ * Standard AnnotationAccess for a specific type.
*
* @since 5.3
*/
public class AnnotationAccessImpl implements AnnotationAccess
{
- private final Class[] classes;
+ private final Class type;
- public AnnotationAccessImpl(Class ...types)
+ public AnnotationAccessImpl(Class type)
{
- this.classes = types;
+ this.type = type;
}
@Override
public AnnotationProvider getClassAnnotationProvider()
{
- return AnnotationProviderChain.create(F.flow(classes).removeNulls().map(InternalUtils.CLASS_TO_AP_MAPPER).toList());
+ return InternalUtils.toAnnotationProvider(type);
}
@Override
- public AnnotationProvider getMethodAnnotationProvider(String methodName, Class... parameterTypes) {
- Flow<Class> searchClasses = F.flow(classes).removeNulls();
- return AnnotationProviderChain.create(searchClasses.map(new Mapper<Class, Method>() {
- @Override
- public Method map(Class element) {
- return InternalUtils.findMethod(element, methodName, parameterTypes);
- }
- }).map(InternalUtils.METHOD_TO_AP_MAPPER).toList());
+ public AnnotationProvider getMethodAnnotationProvider(String methodName, Class... parameterTypes)
+ {
+ return InternalUtils.toAnnotationProvider(InternalUtils.findMethod(type, methodName, parameterTypes));
}
}
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/246e6770/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/AspectDecoratorImpl.java
----------------------------------------------------------------------
diff --git a/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/AspectDecoratorImpl.java b/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/AspectDecoratorImpl.java
index f37770e..18aa888 100644
--- a/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/AspectDecoratorImpl.java
+++ b/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/AspectDecoratorImpl.java
@@ -39,7 +39,7 @@ public class AspectDecoratorImpl implements AspectDecorator
@Override
public <T> AspectInterceptorBuilder<T> createBuilder(Class<T> serviceInterface, final T delegate, String description)
{
- return createBuilder(serviceInterface, delegate, new AnnotationAccessImpl(delegate.getClass(),serviceInterface), description);
+ return createBuilder(serviceInterface, delegate, new AnnotationAccessImpl(delegate.getClass()), description);
}
@Override
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/246e6770/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/CommitAfterWorker.java
----------------------------------------------------------------------
diff --git a/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/CommitAfterWorker.java b/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/CommitAfterWorker.java
index 7c1d63c..30046e8 100644
--- a/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/CommitAfterWorker.java
+++ b/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/CommitAfterWorker.java
@@ -14,11 +14,17 @@
package org.apache.tapestry5.internal.jpa;
+import java.util.HashMap;
+import java.util.Map;
+import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
+import org.apache.tapestry5.jpa.EntityManagerManager;
+import org.apache.tapestry5.jpa.EntityTransactionManager;
import org.apache.tapestry5.jpa.annotations.CommitAfter;
import org.apache.tapestry5.model.MutableComponentModel;
+import org.apache.tapestry5.plastic.MethodAdvice;
import org.apache.tapestry5.plastic.PlasticClass;
import org.apache.tapestry5.plastic.PlasticMethod;
import org.apache.tapestry5.services.transform.ComponentClassTransformWorker2;
@@ -26,22 +32,27 @@ import org.apache.tapestry5.services.transform.TransformationSupport;
public class CommitAfterWorker implements ComponentClassTransformWorker2
{
- private final JpaAdvisorProvider jpaAdvisorProvider;
+ private final Map<String, MethodAdvice> methodAdvices;
- public CommitAfterWorker(JpaAdvisorProvider jpaAdvisorProvider)
+ public CommitAfterWorker(EntityManagerManager manager,
+ EntityTransactionManager transactionManager)
{
- this.jpaAdvisorProvider = jpaAdvisorProvider;
+ methodAdvices = new HashMap<>(manager.getEntityManagers().size());
+ for (Map.Entry<String, EntityManager> entry : manager.getEntityManagers().entrySet())
+ methodAdvices.put(entry.getKey(),
+ new CommitAfterMethodAdvice(transactionManager, entry.getKey()));
+ methodAdvices.put(null, new CommitAfterMethodAdvice(transactionManager, null));
}
@Override
public void transform(PlasticClass plasticClass, TransformationSupport support,
- MutableComponentModel model)
+ MutableComponentModel model)
{
for (final PlasticMethod method : plasticClass.getMethodsWithAnnotation(CommitAfter.class))
{
PersistenceContext annotation = method.getAnnotation(PersistenceContext.class);
- method.addAdvice(jpaAdvisorProvider.getAdvice(annotation));
+ method.addAdvice(methodAdvices.get(annotation == null ? null : annotation.unitName()));
}
}
}
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/246e6770/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/EntityTransactionManagerImpl.java
----------------------------------------------------------------------
diff --git a/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/EntityTransactionManagerImpl.java b/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/EntityTransactionManagerImpl.java
index 28500c4..c0c639d 100644
--- a/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/EntityTransactionManagerImpl.java
+++ b/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/EntityTransactionManagerImpl.java
@@ -16,6 +16,8 @@ package org.apache.tapestry5.internal.jpa;
import java.util.HashMap;
import java.util.Map;
+import javax.persistence.EntityManager;
+
import org.apache.tapestry5.ioc.Invokable;
import org.apache.tapestry5.ioc.ScopeConstants;
import org.apache.tapestry5.ioc.annotations.Scope;
@@ -36,8 +38,28 @@ public class EntityTransactionManagerImpl implements EntityTransactionManager
{
this.logger = logger;
this.entityManagerManager = entityManagerManager;
- this.transactionManagerMap = new HashMap<>(entityManagerManager.getEntityManagers().size());
+ transactionManagerMap = new HashMap<>(entityManagerManager.getEntityManagers().size());
+ }
+
+ private EntityManager getEntityManager(String unitName)
+ {
+ // EntityManager em = JpaInternalUtils.getEntityManager(entityManagerManager, unitName);
+ // FIXME we should simply incorporate the logic in JpaInternalUtils.getEntityManager to
+ // EntityManagerManager.getEntityManager(unitName)
+ if (unitName != null)
+ return entityManagerManager.getEntityManager(unitName);
+ else
+ {
+ Map<String, EntityManager> entityManagers = entityManagerManager.getEntityManagers();
+ if (entityManagers.size() == 1)
+ return entityManagers.values().iterator().next();
+ else
+ throw new RuntimeException(
+ "Unable to locate a single EntityManager. "
+ + "You must provide the persistence unit name as defined in the persistence.xml using the @PersistenceContext annotation.");
+ }
}
+
/*
* (non-Javadoc)
* @see net.satago.tapestry5.jpa.EntityTransactionManager#runInTransaction(java.lang.String,
@@ -69,7 +91,7 @@ public class EntityTransactionManagerImpl implements EntityTransactionManager
if (!transactionManagerMap.containsKey(unitName))
{
PersistenceContextSpecificEntityTransactionManager transactionManager = new PersistenceContextSpecificEntityTransactionManager(
- logger, JpaInternalUtils.getEntityManager(entityManagerManager,unitName));
+ logger, getEntityManager(unitName));
transactionManagerMap.put(unitName, transactionManager);
return transactionManager;
}
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/246e6770/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/JpaAdvisorProvider.java
----------------------------------------------------------------------
diff --git a/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/JpaAdvisorProvider.java b/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/JpaAdvisorProvider.java
deleted file mode 100644
index 108d55f..0000000
--- a/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/JpaAdvisorProvider.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package org.apache.tapestry5.internal.jpa;
-
-import org.apache.tapestry5.plastic.MethodAdvice;
-
-import javax.persistence.PersistenceContext;
-
-public interface JpaAdvisorProvider {
- MethodAdvice getAdvice(PersistenceContext context);
-}
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/246e6770/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/JpaAdvisorProviderImpl.java
----------------------------------------------------------------------
diff --git a/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/JpaAdvisorProviderImpl.java b/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/JpaAdvisorProviderImpl.java
deleted file mode 100644
index 51b50b4..0000000
--- a/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/JpaAdvisorProviderImpl.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package org.apache.tapestry5.internal.jpa;
-
-import org.apache.tapestry5.jpa.EntityTransactionManager;
-import org.apache.tapestry5.plastic.MethodAdvice;
-
-import javax.persistence.PersistenceContext;
-
-public class JpaAdvisorProviderImpl implements JpaAdvisorProvider {
- private final MethodAdvice shared;
- private final EntityTransactionManager transactionManager;
-
- public JpaAdvisorProviderImpl(EntityTransactionManager transactionManager) {
- this.shared = new CommitAfterMethodAdvice(transactionManager, null);
- this.transactionManager = transactionManager;
- }
- @Override
- public MethodAdvice getAdvice(PersistenceContext context) {
- return context == null ? shared : new CommitAfterMethodAdvice(transactionManager,context.unitName());
- }
-}
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/246e6770/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/JpaInternalUtils.java
----------------------------------------------------------------------
diff --git a/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/JpaInternalUtils.java b/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/JpaInternalUtils.java
index aff8e21..d612e74 100644
--- a/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/JpaInternalUtils.java
+++ b/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/JpaInternalUtils.java
@@ -78,15 +78,10 @@ public class JpaInternalUtils
}
public static EntityManager getEntityManager(EntityManagerManager entityManagerManager,
- PersistenceContext annotation) {
+ PersistenceContext annotation)
+ {
String unitName = annotation == null ? null : annotation.unitName();
- return getEntityManager(entityManagerManager, unitName);
- }
-
- public static EntityManager getEntityManager(EntityManagerManager entityManagerManager,
- String unitName)
- {
if (InternalUtils.isNonBlank(unitName))
return entityManagerManager.getEntityManager(unitName);
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/246e6770/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/JpaTransactionAdvisorImpl.java
----------------------------------------------------------------------
diff --git a/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/JpaTransactionAdvisorImpl.java b/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/JpaTransactionAdvisorImpl.java
index 7d7437c..1803722 100644
--- a/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/JpaTransactionAdvisorImpl.java
+++ b/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/JpaTransactionAdvisorImpl.java
@@ -15,21 +15,31 @@
package org.apache.tapestry5.internal.jpa;
import java.lang.reflect.Method;
+import java.util.HashMap;
+import java.util.Map;
+import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import org.apache.tapestry5.ioc.MethodAdviceReceiver;
-
+import org.apache.tapestry5.jpa.EntityManagerManager;
+import org.apache.tapestry5.jpa.EntityTransactionManager;
import org.apache.tapestry5.jpa.JpaTransactionAdvisor;
import org.apache.tapestry5.jpa.annotations.CommitAfter;
+import org.apache.tapestry5.plastic.MethodAdvice;
public class JpaTransactionAdvisorImpl implements JpaTransactionAdvisor
{
- private final JpaAdvisorProvider jpaAdvisorProvider;
+ private final Map<String, MethodAdvice> methodAdvices;
- public JpaTransactionAdvisorImpl(JpaAdvisorProvider jpaAdvisorProvider)
+ public JpaTransactionAdvisorImpl(EntityManagerManager manager,
+ EntityTransactionManager transactionManager)
{
- this.jpaAdvisorProvider = jpaAdvisorProvider;
+ methodAdvices = new HashMap<>(manager.getEntityManagers().size());
+ for (Map.Entry<String, EntityManager> entry : manager.getEntityManagers().entrySet())
+ methodAdvices.put(entry.getKey(),
+ new CommitAfterMethodAdvice(transactionManager, entry.getKey()));
+ methodAdvices.put(null, new CommitAfterMethodAdvice(transactionManager, null));
}
@Override
@@ -39,8 +49,11 @@ public class JpaTransactionAdvisorImpl implements JpaTransactionAdvisor
{
if (m.getAnnotation(CommitAfter.class) != null)
{
- PersistenceContext annotation = receiver.getMethodAnnotation(m, PersistenceContext.class);
- receiver.adviseMethod(m, jpaAdvisorProvider.getAdvice(annotation));
+ PersistenceContext annotation = receiver.getMethodAnnotation(m,
+ PersistenceContext.class);
+
+ receiver.adviseMethod(m,
+ methodAdvices.get(annotation == null ? null : annotation.unitName()));
}
}
}
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/246e6770/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/PersistenceContextSpecificEntityTransactionManager.java
----------------------------------------------------------------------
diff --git a/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/PersistenceContextSpecificEntityTransactionManager.java b/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/PersistenceContextSpecificEntityTransactionManager.java
index 43405f2..ed53f2b 100644
--- a/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/PersistenceContextSpecificEntityTransactionManager.java
+++ b/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/PersistenceContextSpecificEntityTransactionManager.java
@@ -67,7 +67,6 @@ public class PersistenceContextSpecificEntityTransactionManager
public <T> T invokeInTransaction(Invokable<T> invokable)
{
- final EntityTransaction transaction = getTransaction();
if (transactionBeingCommitted)
{
// happens for example if you try to run a transaction in @PostCommit hook. We can only
@@ -80,7 +79,7 @@ public class PersistenceContextSpecificEntityTransactionManager
}
else
{
- rollbackTransaction(transaction);
+ rollbackTransaction(getTransaction());
throw new RuntimeException(
"Current transaction is already being committed. Transactions started @PostCommit are not allowed to return a value");
}
@@ -96,6 +95,7 @@ public class PersistenceContextSpecificEntityTransactionManager
}
}
+ final EntityTransaction transaction = getTransaction();
try
{
T result = invokable.invoke();
@@ -104,11 +104,15 @@ public class PersistenceContextSpecificEntityTransactionManager
{
// Success or checked exception:
- boolean isActive = transaction.isActive();
- if (isActive)
+ if (transaction.isActive())
{
invokeBeforeCommit(transaction);
- // FIXME check if we are still on top
+ }
+
+ // FIXME check if we are still on top
+
+ if (transaction.isActive())
+ {
transactionBeingCommitted = true;
transaction.commit();
transactionBeingCommitted = false;
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/246e6770/tapestry-jpa/src/main/java/org/apache/tapestry5/jpa/modules/JpaModule.java
----------------------------------------------------------------------
diff --git a/tapestry-jpa/src/main/java/org/apache/tapestry5/jpa/modules/JpaModule.java b/tapestry-jpa/src/main/java/org/apache/tapestry5/jpa/modules/JpaModule.java
index f78b71c..723b38a 100644
--- a/tapestry-jpa/src/main/java/org/apache/tapestry5/jpa/modules/JpaModule.java
+++ b/tapestry-jpa/src/main/java/org/apache/tapestry5/jpa/modules/JpaModule.java
@@ -23,7 +23,17 @@ import javax.persistence.spi.PersistenceUnitInfo;
import org.apache.tapestry5.ValueEncoder;
import org.apache.tapestry5.internal.InternalConstants;
-import org.apache.tapestry5.internal.jpa.*;
+import org.apache.tapestry5.internal.jpa.CommitAfterWorker;
+import org.apache.tapestry5.internal.jpa.EntityApplicationStatePersistenceStrategy;
+import org.apache.tapestry5.internal.jpa.EntityManagerManagerImpl;
+import org.apache.tapestry5.internal.jpa.EntityManagerObjectProvider;
+import org.apache.tapestry5.internal.jpa.EntityManagerSourceImpl;
+import org.apache.tapestry5.internal.jpa.EntityPersistentFieldStrategy;
+import org.apache.tapestry5.internal.jpa.EntityTransactionManagerImpl;
+import org.apache.tapestry5.internal.jpa.JpaTransactionAdvisorImpl;
+import org.apache.tapestry5.internal.jpa.JpaValueEncoder;
+import org.apache.tapestry5.internal.jpa.PackageNamePersistenceUnitConfigurer;
+import org.apache.tapestry5.internal.jpa.PersistenceContextWorker;
import org.apache.tapestry5.internal.services.PersistentFieldManager;
import org.apache.tapestry5.ioc.Configuration;
import org.apache.tapestry5.ioc.LoggerSource;
@@ -74,7 +84,6 @@ public class JpaModule
binder.bind(PersistenceUnitConfigurer.class, PackageNamePersistenceUnitConfigurer.class).withSimpleId();
binder.bind(EntityManagerSource.class, EntityManagerSourceImpl.class);
binder.bind(EntityTransactionManager.class, EntityTransactionManagerImpl.class);
- binder.bind(JpaAdvisorProvider.class,JpaAdvisorProviderImpl.class);
}
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/246e6770/tapestry-jpa/src/test/conf/testng.xml
----------------------------------------------------------------------
diff --git a/tapestry-jpa/src/test/conf/testng.xml b/tapestry-jpa/src/test/conf/testng.xml
index 9267615..025f946 100644
--- a/tapestry-jpa/src/test/conf/testng.xml
+++ b/tapestry-jpa/src/test/conf/testng.xml
@@ -8,49 +8,47 @@
the specific language governing permissions and limitations under the License. -->
<suite name="Tapestry JPA" parallel="false" thread-count="10"
- annotations="1.5" verbose="2">
- <test name="Tapestry JPA Integration Tests" enabled="true">
- <parameter name="tapestry.web-app-folder" value="src/test/app1" />
- <packages>
- <package name="org.apache.tapestry5.jpa.integration.app1" />
- </packages>
- </test>
+ annotations="1.5" verbose="2">
+<!-- <test name="Tapestry JPA Integration Tests" enabled="true"> -->
+<!-- <parameter name="tapestry.web-app-folder" value="src/test/app1" /> -->
+<!-- <packages> -->
+<!-- <package name="org.apache.tapestry5.jpa.integration.app1" /> -->
+<!-- </packages> -->
+<!-- </test> -->
- <test name="Single Persistence Unit Integration Tests" enabled="true">
- <parameter name="tapestry.web-app-folder" value="src/test/app2" />
- <packages>
- <package name="org.apache.tapestry5.jpa.integration.app2" />
- </packages>
- </test>
+<!-- <test name="Single Persistence Unit Integration Tests" enabled="true"> -->
+<!-- <parameter name="tapestry.web-app-folder" value="src/test/app2" /> -->
+<!-- <packages> -->
+<!-- <package name="org.apache.tapestry5.jpa.integration.app2" /> -->
+<!-- </packages> -->
+<!-- </test> -->
- <test name="JNDI DataSource Integration Tests" enabled="true">
- <parameter name="tapestry.web-app-folder" value="src/test/app3" />
- <parameter name="tapestry.servlet-container" value="tomcat6" />
- <packages>
- <package name="org.apache.tapestry5.jpa.integration.app3" />
- </packages>
- </test>
+<!-- <test name="JNDI DataSource Integration Tests" enabled="true"> -->
+<!-- <parameter name="tapestry.web-app-folder" value="src/test/app3" /> -->
+<!-- <parameter name="tapestry.servlet-container" value="tomcat6" /> -->
+<!-- <packages> -->
+<!-- <package name="org.apache.tapestry5.jpa.integration.app3" /> -->
+<!-- </packages> -->
+<!-- </test> -->
+<!-- <test name="Explicit Provider Class Name In Persistence Unit Integration Tests" enabled="true"> -->
+<!-- <parameter name="tapestry.web-app-folder" value="src/test/app5" /> -->
+<!-- <packages> -->
+<!-- <package name="org.apache.tapestry5.jpa.integration.app5" /> -->
+<!-- </packages> -->
+<!-- </test> -->
+
+<!-- <test name="Tapestry JPA Unit Tests" enabled="false"> -->
+<!-- <packages> -->
+<!-- <package name="org.apache.tapestry5.internal.jpa" /> -->
+<!-- </packages> -->
+<!-- </test> -->
+
<test name="Tapestry JPA Integration Tests with Annotations in Service Implementation" enabled="true">
<parameter name="tapestry.web-app-folder" value="src/test/app6" />
<packages>
<package name="org.apache.tapestry5.jpa.integration.app6" />
</packages>
</test>
-
- <test name="Tapestry JPA Unit Tests" enabled="true">
- <packages>
- <package name="org.apache.tapestry5.internal.jpa" />
- </packages>
- </test>
-
- <!-- Put this last since it modifies
- PersistenceProviderResolverHolder.setPersistenceProviderResolver
- which affects other test suites -->
- <test name="Explicit Provider Class Name In Persistence Unit Integration Tests" enabled="true">
- <parameter name="tapestry.web-app-folder" value="src/test/app5" />
- <packages>
- <package name="org.apache.tapestry5.jpa.integration.app5" />
- </packages>
- </test>
+
</suite>
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/246e6770/tapestry-jpa/src/test/java/org/apache/tapestry5/internal/jpa/JpaTransactionAdvisorImplTest.java
----------------------------------------------------------------------
diff --git a/tapestry-jpa/src/test/java/org/apache/tapestry5/internal/jpa/JpaTransactionAdvisorImplTest.java b/tapestry-jpa/src/test/java/org/apache/tapestry5/internal/jpa/JpaTransactionAdvisorImplTest.java
index 92ffd33..6d3eb40 100644
--- a/tapestry-jpa/src/test/java/org/apache/tapestry5/internal/jpa/JpaTransactionAdvisorImplTest.java
+++ b/tapestry-jpa/src/test/java/org/apache/tapestry5/internal/jpa/JpaTransactionAdvisorImplTest.java
@@ -32,7 +32,6 @@ import org.apache.tapestry5.jpa.EntityManagerManager;
import org.apache.tapestry5.jpa.EntityTransactionManager;
import org.apache.tapestry5.jpa.JpaTransactionAdvisor;
import org.apache.tapestry5.jpa.annotations.CommitAfter;
-import org.slf4j.LoggerFactory;
import org.testng.Assert;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
@@ -67,9 +66,10 @@ public class JpaTransactionAdvisorImplTest extends IOCTestCase
public void undecorated()
{
final VoidService delegate = newMock(VoidService.class);
+ final EntityManagerManager manager = newMock(EntityManagerManager.class);
final EntityTransactionManager transactionManager = newMock(EntityTransactionManager.class);
- final JpaAdvisorProvider provider = new JpaAdvisorProviderImpl(transactionManager);
- final JpaTransactionAdvisor advisor = newJpaTransactionAdvisor(provider);
+ final JpaTransactionAdvisor advisor = newJpaTransactionAdvisor(manager, transactionManager);
+
final AspectInterceptorBuilder<VoidService> builder = aspectDecorator.createBuilder(
VoidService.class, delegate, "foo.Bar");
@@ -87,20 +87,14 @@ public class JpaTransactionAdvisorImplTest extends IOCTestCase
@Test
public void persistence_unit_name_missing()
{
+ final VoidService delegate = newMock(VoidService.class);
+ final EntityManagerManager manager = newMock(EntityManagerManager.class);
+ final EntityTransactionManager transactionManager = newMock(EntityTransactionManager.class);
+ final JpaTransactionAdvisor advisor = newJpaTransactionAdvisor(manager, transactionManager);
Map<String, EntityManager> managers = CollectionFactory.newMap();
managers.put("A", newMock(EntityManager.class));
managers.put("B", newMock(EntityManager.class));
- final VoidService delegate = newMock(VoidService.class);
- final EntityManagerManager manager = newMock(EntityManagerManager.class);
- expect(manager.getEntityManagers()).andReturn(managers);
-
- replay();
- final EntityTransactionManager transactionManager = new EntityTransactionManagerImpl(
- LoggerFactory.getLogger(EntityTransactionManagerImpl.class),manager);
- verify();
- final JpaAdvisorProvider provider = new JpaAdvisorProviderImpl(transactionManager);
- final JpaTransactionAdvisor advisor = newJpaTransactionAdvisor(provider);
final AspectInterceptorBuilder<VoidService> builder = aspectDecorator.createBuilder(
VoidService.class, delegate, "foo.Bar");
@@ -127,23 +121,14 @@ public class JpaTransactionAdvisorImplTest extends IOCTestCase
@Test
public void persistence_unit_name_missing_single_unit_configured()
{
- EntityManager em = newMock(EntityManager.class);
- Map<String, EntityManager> managers = CollectionFactory.newMap();
- managers.put("A", em);
-
final VoidService delegate = newMock(VoidService.class);
final EntityManagerManager manager = newMock(EntityManagerManager.class);
- expect(manager.getEntityManagers()).andReturn(managers);
-
- replay();
- final EntityTransactionManager transactionManager = new EntityTransactionManagerImpl(
- LoggerFactory.getLogger(EntityTransactionManagerImpl.class),manager);
- verify();
- final JpaAdvisorProvider provider = new JpaAdvisorProviderImpl(transactionManager);
- final JpaTransactionAdvisor advisor = newJpaTransactionAdvisor(provider);
-
+ final EntityTransactionManager transactionManager = newMock(EntityTransactionManager.class);
+ final JpaTransactionAdvisor advisor = newJpaTransactionAdvisor(manager, transactionManager);
final EntityTransaction transaction = newMock(EntityTransaction.class);
-
+ EntityManager em = newMock(EntityManager.class);
+ Map<String, EntityManager> managers = CollectionFactory.newMap();
+ managers.put("A", em);
final AspectInterceptorBuilder<VoidService> builder = aspectDecorator.createBuilder(
VoidService.class, delegate, "foo.Bar");
@@ -165,23 +150,14 @@ public class JpaTransactionAdvisorImplTest extends IOCTestCase
@Test
public void persistence_unit_missing()
{
+ final VoidService delegate = newMock(VoidService.class);
+ final EntityManagerManager manager = newMock(EntityManagerManager.class);
+ final EntityTransactionManager transactionManager = newMock(EntityTransactionManager.class);
+ final JpaTransactionAdvisor advisor = newJpaTransactionAdvisor(manager, transactionManager);
Map<String, EntityManager> managers = CollectionFactory.newMap();
managers.put("A", newMock(EntityManager.class));
managers.put("B", newMock(EntityManager.class));
- final VoidService delegate = newMock(VoidService.class);
- final EntityManagerManager manager = newMock(EntityManagerManager.class);
- expect(manager.getEntityManagers()).andReturn(managers);
-
- replay();
- final EntityTransactionManager transactionManager = new EntityTransactionManagerImpl(
- LoggerFactory.getLogger(EntityTransactionManagerImpl.class),manager);
- verify();
-
- final JpaAdvisorProvider provider = new JpaAdvisorProviderImpl(transactionManager);
- final JpaTransactionAdvisor advisor = newJpaTransactionAdvisor(provider);
-
-
final AspectInterceptorBuilder<VoidService> builder = aspectDecorator.createBuilder(
VoidService.class, delegate, "foo.Bar");
@@ -208,20 +184,14 @@ public class JpaTransactionAdvisorImplTest extends IOCTestCase
@Test
public void persistence_unit_missing_single_unit_configured()
{
- EntityManager em = newMock(EntityManager.class);
- Map<String, EntityManager> managers = CollectionFactory.newMap();
- managers.put("A", em);
final VoidService delegate = newMock(VoidService.class);
final EntityManagerManager manager = newMock(EntityManagerManager.class);
- expect(manager.getEntityManagers()).andReturn(managers);
-
- replay();
- final EntityTransactionManager transactionManager = new EntityTransactionManagerImpl(
- LoggerFactory.getLogger(EntityTransactionManagerImpl.class),manager);
- verify();
- final JpaAdvisorProvider provider = new JpaAdvisorProviderImpl(transactionManager);
- final JpaTransactionAdvisor advisor = newJpaTransactionAdvisor(provider);
+ final EntityTransactionManager transactionManager = newMock(EntityTransactionManager.class);
+ final JpaTransactionAdvisor advisor = newJpaTransactionAdvisor(manager, transactionManager);
final EntityTransaction transaction = newMock(EntityTransaction.class);
+ EntityManager em = newMock(EntityManager.class);
+ Map<String, EntityManager> managers = CollectionFactory.newMap();
+ managers.put("A", em);
final AspectInterceptorBuilder<VoidService> builder = aspectDecorator.createBuilder(
VoidService.class, delegate, "foo.Bar");
@@ -245,14 +215,8 @@ public class JpaTransactionAdvisorImplTest extends IOCTestCase
{
final VoidService delegate = newMock(VoidService.class);
final EntityManagerManager manager = newMock(EntityManagerManager.class);
- expect(manager.getEntityManagers()).andReturn(CollectionFactory.newMap());
-
- replay();
- final EntityTransactionManager transactionManager = new EntityTransactionManagerImpl(
- LoggerFactory.getLogger(EntityTransactionManagerImpl.class),manager);
- verify();
- final JpaAdvisorProvider provider = new JpaAdvisorProviderImpl(transactionManager);
- final JpaTransactionAdvisor advisor = newJpaTransactionAdvisor(provider);
+ final EntityTransactionManager transactionManager = newMock(EntityTransactionManager.class);
+ final JpaTransactionAdvisor advisor = newJpaTransactionAdvisor(manager, transactionManager);
final EntityManager entityManager = newMock(EntityManager.class);
final EntityTransaction transaction = newMock(EntityTransaction.class);
@@ -279,14 +243,8 @@ public class JpaTransactionAdvisorImplTest extends IOCTestCase
{
final VoidService delegate = newMock(VoidService.class);
final EntityManagerManager manager = newMock(EntityManagerManager.class);
- expect(manager.getEntityManagers()).andReturn(CollectionFactory.newMap());
-
- replay();
- final EntityTransactionManager transactionManager = new EntityTransactionManagerImpl(
- LoggerFactory.getLogger(EntityTransactionManagerImpl.class),manager);
- verify();
- final JpaAdvisorProvider provider = new JpaAdvisorProviderImpl(transactionManager);
- final JpaTransactionAdvisor advisor = newJpaTransactionAdvisor(provider);
+ final EntityTransactionManager transactionManager = newMock(EntityTransactionManager.class);
+ final JpaTransactionAdvisor advisor = newJpaTransactionAdvisor(manager, transactionManager);
final EntityManager entityManager = newMock(EntityManager.class);
final EntityTransaction transaction = newMock(EntityTransaction.class);
@@ -313,14 +271,8 @@ public class JpaTransactionAdvisorImplTest extends IOCTestCase
{
final VoidService delegate = newMock(VoidService.class);
final EntityManagerManager manager = newMock(EntityManagerManager.class);
- expect(manager.getEntityManagers()).andReturn(CollectionFactory.newMap());
-
- replay();
- final EntityTransactionManager transactionManager = new EntityTransactionManagerImpl(
- LoggerFactory.getLogger(EntityTransactionManagerImpl.class),manager);
- verify();
- final JpaAdvisorProvider provider = new JpaAdvisorProviderImpl(transactionManager);
- final JpaTransactionAdvisor advisor = newJpaTransactionAdvisor(provider);
+ final EntityTransactionManager transactionManager = newMock(EntityTransactionManager.class);
+ final JpaTransactionAdvisor advisor = newJpaTransactionAdvisor(manager, transactionManager);
final EntityManager entityManager = newMock(EntityManager.class);
final EntityTransaction transaction = newMock(EntityTransaction.class);
@@ -345,14 +297,8 @@ public class JpaTransactionAdvisorImplTest extends IOCTestCase
{
final Performer delegate = newMock(Performer.class);
final EntityManagerManager manager = newMock(EntityManagerManager.class);
- expect(manager.getEntityManagers()).andReturn(CollectionFactory.newMap());
-
- replay();
- final EntityTransactionManager transactionManager = new EntityTransactionManagerImpl(
- LoggerFactory.getLogger(EntityTransactionManagerImpl.class),manager);
- verify();
- final JpaAdvisorProvider provider = new JpaAdvisorProviderImpl(transactionManager);
- final JpaTransactionAdvisor advisor = newJpaTransactionAdvisor(provider);
+ final EntityTransactionManager transactionManager = newMock(EntityTransactionManager.class);
+ final JpaTransactionAdvisor advisor = newJpaTransactionAdvisor(manager, transactionManager);
final EntityManager entityManager = newMock(EntityManager.class);
final EntityTransaction transaction = newMock(EntityTransaction.class);
final RuntimeException re = new RuntimeException("Unexpected.");
@@ -387,14 +333,8 @@ public class JpaTransactionAdvisorImplTest extends IOCTestCase
{
final Performer delegate = newMock(Performer.class);
final EntityManagerManager manager = newMock(EntityManagerManager.class);
- expect(manager.getEntityManagers()).andReturn(CollectionFactory.newMap());
-
- replay();
- final EntityTransactionManager transactionManager = new EntityTransactionManagerImpl(
- LoggerFactory.getLogger(EntityTransactionManagerImpl.class),manager);
- verify();
- final JpaAdvisorProvider provider = new JpaAdvisorProviderImpl(transactionManager);
- final JpaTransactionAdvisor advisor = newJpaTransactionAdvisor(provider);
+ final EntityTransactionManager transactionManager = newMock(EntityTransactionManager.class);
+ final JpaTransactionAdvisor advisor = newJpaTransactionAdvisor(manager, transactionManager);
final EntityManager entityManager = newMock(EntityManager.class);
final EntityTransaction transaction = newMock(EntityTransaction.class);
final SQLException se = new SQLException("Checked.");
@@ -434,14 +374,8 @@ public class JpaTransactionAdvisorImplTest extends IOCTestCase
{
final ReturnTypeService delegate = newTestService();
final EntityManagerManager manager = newMock(EntityManagerManager.class);
- expect(manager.getEntityManagers()).andReturn(CollectionFactory.newMap());
-
- replay();
- final EntityTransactionManager transactionManager = new EntityTransactionManagerImpl(
- LoggerFactory.getLogger(EntityTransactionManagerImpl.class),manager);
- verify();
- final JpaAdvisorProvider provider = new JpaAdvisorProviderImpl(transactionManager);
- final JpaTransactionAdvisor advisor = newJpaTransactionAdvisor(provider);
+ final EntityTransactionManager transactionManager = newMock(EntityTransactionManager.class);
+ final JpaTransactionAdvisor advisor = newJpaTransactionAdvisor(manager, transactionManager);
final EntityManager entityManager = newMock(EntityManager.class);
final EntityTransaction transaction = newMock(EntityTransaction.class);
@@ -466,14 +400,8 @@ public class JpaTransactionAdvisorImplTest extends IOCTestCase
{
final ReturnTypeService delegate = newTestService();
final EntityManagerManager manager = newMock(EntityManagerManager.class);
- expect(manager.getEntityManagers()).andReturn(CollectionFactory.newMap());
-
- replay();
- final EntityTransactionManager transactionManager = new EntityTransactionManagerImpl(
- LoggerFactory.getLogger(EntityTransactionManagerImpl.class),manager);
- verify();
- final JpaAdvisorProvider provider = new JpaAdvisorProviderImpl(transactionManager);
- final JpaTransactionAdvisor advisor = newJpaTransactionAdvisor(provider);
+ final EntityTransactionManager transactionManager = newMock(EntityTransactionManager.class);
+ final JpaTransactionAdvisor advisor = newJpaTransactionAdvisor(manager, transactionManager);
final EntityManager entityManager = newMock(EntityManager.class);
final EntityTransaction transaction = newMock(EntityTransaction.class);
@@ -534,9 +462,10 @@ public class JpaTransactionAdvisorImplTest extends IOCTestCase
transaction.rollback();
}
- private JpaTransactionAdvisor newJpaTransactionAdvisor(final JpaAdvisorProvider provider)
+ private JpaTransactionAdvisor newJpaTransactionAdvisor(final EntityManagerManager manager,
+ EntityTransactionManager transactionManager)
{
- return new JpaTransactionAdvisorImpl(provider);
+ return new JpaTransactionAdvisorImpl(manager, transactionManager);
}
private ReturnTypeService newTestService()
@@ -604,4 +533,20 @@ public class JpaTransactionAdvisorImplTest extends IOCTestCase
@PersistenceContext(unitName = UNIT_NAME)
void perform() throws SQLException;
}
+
+ public interface Service
+ {
+ void perform();
+ }
+
+ public class ServiceImpl implements Service {
+ @Override
+ @CommitAfter
+ @PersistenceContext(unitName = UNIT_NAME)
+ public void perform()
+ {
+
+ }
+ }
+
}
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/246e6770/tapestry-jpa/src/test/java/org/example/app5/services/AppModule.java
----------------------------------------------------------------------
diff --git a/tapestry-jpa/src/test/java/org/example/app5/services/AppModule.java b/tapestry-jpa/src/test/java/org/example/app5/services/AppModule.java
index e3f380a..05d2488 100644
--- a/tapestry-jpa/src/test/java/org/example/app5/services/AppModule.java
+++ b/tapestry-jpa/src/test/java/org/example/app5/services/AppModule.java
@@ -34,7 +34,6 @@ public class AppModule
static
{
- //This will also affect test suites run after this one.Its better to run this suite last
PersistenceProviderResolverHolder.setPersistenceProviderResolver(
new PersistenceProviderResolver()
{
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/246e6770/tapestry-runner/build.gradle
----------------------------------------------------------------------
diff --git a/tapestry-runner/build.gradle b/tapestry-runner/build.gradle
index 3f7a6ff..f905c70 100644
--- a/tapestry-runner/build.gradle
+++ b/tapestry-runner/build.gradle
@@ -10,7 +10,6 @@ dependencies {
compile "org.apache.tomcat:tomcat-catalina:${versions.tomcat}"
compile "org.apache.tomcat:tomcat-coyote:${versions.tomcat}"
- compile "org.apache.tomcat:tomcat-jasper:${versions.tomcat}"
compile "org.apache.tomcat:tomcat-dbcp:${versions.tomcat}"
compile "commons-cli:commons-cli:1.2"
http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/246e6770/tapestry-runner/src/main/java/org/apache/tapestry5/test/TomcatRunner.java
----------------------------------------------------------------------
diff --git a/tapestry-runner/src/main/java/org/apache/tapestry5/test/TomcatRunner.java b/tapestry-runner/src/main/java/org/apache/tapestry5/test/TomcatRunner.java
index a37b580..f382330 100644
--- a/tapestry-runner/src/main/java/org/apache/tapestry5/test/TomcatRunner.java
+++ b/tapestry-runner/src/main/java/org/apache/tapestry5/test/TomcatRunner.java
@@ -15,6 +15,7 @@
package org.apache.tapestry5.test;
import org.apache.catalina.connector.Connector;
+import org.apache.catalina.core.StandardContext;
import org.apache.catalina.startup.Tomcat;
import java.io.File;
@@ -49,11 +50,8 @@ public class TomcatRunner implements ServletContainerRunner
if (!tmpDir.endsWith(fileSeparator))
tmpDir = tmpDir + fileSeparator;
tomcatServer.setBaseDir(tmpDir + "tomcat");
- tomcatServer.setPort(port);
- tomcatServer.addWebapp("/", expandedPath);
- //Enable jndi lookups
- tomcatServer.enableNaming();
+ tomcatServer.addWebapp("/", expandedPath);
tomcatServer.getConnector().setAllowTrace(true);
@@ -70,7 +68,6 @@ public class TomcatRunner implements ServletContainerRunner
}
tomcatServer.start();
- startDaemonAwaitThread();
}
/**
@@ -85,7 +82,6 @@ public class TomcatRunner implements ServletContainerRunner
{
// Stop immediately and not gracefully.
tomcatServer.stop();
- tomcatServer.destroy();
}
catch (Exception ex)
{
@@ -121,19 +117,4 @@ public class TomcatRunner implements ServletContainerRunner
return new File(TapestryRunnerConstants.MODULE_BASE_DIR, moduleLocalPath).getPath();
}
- // Unlike Jetty, all Tomcat threads are daemon threads. We create a
- // blocking non-daemon to stop immediate shutdown
- private void startDaemonAwaitThread() {
- Thread awaitThread = new Thread() {
-
- @Override
- public void run() {
- TomcatRunner.this.tomcatServer.getServer().await();
- }
-
- };
- awaitThread.setContextClassLoader(getClass().getClassLoader());
- awaitThread.setDaemon(false);
- awaitThread.start();
- }
}