Here are 3 more which they are more or less connected with JPA failing /
disabled tests

Order of applying is important

Example if the 0001-fix-tomcat-runner-patch is not applied first then JPA
JNDI test suite will fail

On Sat, Dec 1, 2018 at 3:40 AM Dimitris Zenios <dimitris.zen...@gmail.com>
wrote:

> One more
>
> Correct test for TAP5-2582
>
> On Sat, Dec 1, 2018 at 1:56 AM Dimitris Zenios <dimitris.zen...@gmail.com>
> wrote:
>
>> Another one small fix
>>
>> On Sat, Dec 1, 2018 at 1:51 AM Dimitris Zenios <dimitris.zen...@gmail.com>
>> wrote:
>>
>>> Sure but lets get 5.5 out the door first.
>>>
>>> I have been going over the changes and i have some patches available.
>>>
>>> First attached is the already mentioned issue with static interface
>>> methods
>>>
>>>
>>>
>>> On Sat, Dec 1, 2018 at 1:26 AM Thiago H. de Paula Figueiredo <
>>> thiag...@gmail.com> wrote:
>>>
>>>> On Fri, Nov 30, 2018 at 7:36 PM Dimitris Zenios <
>>>> dimitris.zen...@gmail.com>
>>>> wrote:
>>>>
>>>> > I have some ideas on that subject but lest get 5.5 out first and
>>>> continue
>>>> > on that afterwards
>>>> >
>>>>
>>>> Nice! Could you please start a new thread with your ideas? I'm curious
>>>> about them. :)
>>>>
>>>>
>>>> >
>>>> > On Fri, Nov 30, 2018 at 11:33 PM Thiago H. de Paula Figueiredo <
>>>> > thiag...@gmail.com> wrote:
>>>> >
>>>> > > Yeah, it would break webapps styled with Bootstrap 4 due to the
>>>> different
>>>> > > tagging. Maybe we (the Tapestry team or the community) could come up
>>>> > with a
>>>> > > separate library to do this.
>>>> > >
>>>> > > On Fri, Nov 30, 2018 at 7:30 PM Dimitris Zenios <
>>>> > dimitris.zen...@gmail.com
>>>> > > >
>>>> > > wrote:
>>>> > >
>>>> > > > Its not so huge my main concern is the backwards compatibility
>>>> > > >
>>>> > > > On Fri, Nov 30, 2018 at 11:27 PM Thiago H. de Paula Figueiredo <
>>>> > > > thiag...@gmail.com> wrote:
>>>> > > >
>>>> > > > > On Fri, Nov 30, 2018 at 6:45 PM Dimitris Zenios <
>>>> > > > dimitris.zen...@gmail.com
>>>> > > > > >
>>>> > > > > wrote:
>>>> > > > >
>>>> > > > > > Even though it might be irrelevant i was also thinking of
>>>> bootstrap
>>>> > > 4.
>>>> > > > > >
>>>> > > > >
>>>> > > > > Hmm, it would be nice, but I don't think it would be a trivial,
>>>> quick
>>>> > > > thing
>>>> > > > > to do. Any takers? :)
>>>> > > > >
>>>> > > > >
>>>> > > > > >
>>>> > > > > > On Fri, Nov 30, 2018 at 10:31 PM Dimitris Zenios <
>>>> > > > > > dimitris.zen...@gmail.com>
>>>> > > > > > wrote:
>>>> > > > > >
>>>> > > > > > > +1
>>>> > > > > > >
>>>> > > > > > > On Fri, 30 Nov 2018, 22:28 Thiago H. de Paula Figueiredo <
>>>> > > > > > > thi...@arsmachina.com.br wrote:
>>>> > > > > > >
>>>> > > > > > >> Hello!
>>>> > > > > > >>
>>>> > > > > > >> Since we now have a working build and ASM 7 supporting
>>>> Java 11,
>>>> > I
>>>> > > > was
>>>> > > > > > >> thinking of release a beta version so people could test it
>>>> on
>>>> > > their
>>>> > > > > > >> own projects. What do you think?
>>>> > > > > > >>
>>>> > > > > > >> Cheers!
>>>> > > > > > >> --
>>>> > > > > > >> Thiago H. de Paula Figueiredo
>>>> > > > > > >>
>>>> > > > > > >>
>>>> > > >
>>>> ---------------------------------------------------------------------
>>>> > > > > > >> To unsubscribe, e-mail:
>>>> dev-unsubscr...@tapestry.apache.org
>>>> > > > > > >> For additional commands, e-mail:
>>>> dev-h...@tapestry.apache.org
>>>> > > > > > >>
>>>> > > > > > >>
>>>> > > > > >
>>>> > > > >
>>>> > > > >
>>>> > > > > --
>>>> > > > > Thiago
>>>> > > > >
>>>> > > >
>>>> > >
>>>> > >
>>>> > > --
>>>> > > Thiago
>>>> > >
>>>> >
>>>>
>>>>
>>>> --
>>>> Thiago
>>>>
>>>
From cc6f151fb74c44a43f38841aebeee89cce8f127f Mon Sep 17 00:00:00 2001
From: Dimitris Zenios <dimitris.zen...@gmail.com>
Date: Sun, 2 Dec 2018 02:41:14 +0200
Subject: [PATCH 2/3] AnnotationAccess documentation specifies that both
 methods should return annotations on the implementation method, plus
 annotations on the corresponding service interface method (if such a method
 exists), with precedence on the implementation class method annotations, but
 AnnotationAccessImpl included annotations only of the implementation since
 there was no way to supply the service interface

This affected AspectDecorator.createBuilder(Class<T> serviceInterface, final T delegate, String description).
---
 .../ioc/internal/AnnotationAccessImpl.java    | 27 +++++++++++++------
 .../services/AspectDecoratorImpl.java         |  2 +-
 2 files changed, 20 insertions(+), 9 deletions(-)

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 b088cb956..f8c615526 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,34 +14,45 @@
 
 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 a specific type.
+ * Standard AnnotationAccess for an array of classes
  * 
  * @since 5.3
  */
 public class AnnotationAccessImpl implements AnnotationAccess
 {
-    private final Class type;
+    private final Class[] classes;
 
-    public AnnotationAccessImpl(Class type)
+    public AnnotationAccessImpl(Class ...types)
     {
-        this.type = type;
+        this.classes = types;
     }
 
     @Override
     public AnnotationProvider getClassAnnotationProvider()
     {
-        return InternalUtils.toAnnotationProvider(type);
+        return AnnotationProviderChain.create(F.flow(classes).removeNulls().map(InternalUtils.CLASS_TO_AP_MAPPER).toList());
     }
 
     @Override
-    public AnnotationProvider getMethodAnnotationProvider(String methodName, Class... parameterTypes)
-    {
-        return InternalUtils.toAnnotationProvider(InternalUtils.findMethod(type, methodName, parameterTypes));
+    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());
     }
 
 }
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 18aa88864..f37770e4c 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()), description);
+        return createBuilder(serviceInterface, delegate, new AnnotationAccessImpl(delegate.getClass(),serviceInterface), description);
     }
 
     @Override
-- 
2.19.2

From 684bb95e3040df8472373b6415d42c1b16c3cdc4 Mon Sep 17 00:00:00 2001
From: Dimitris Zenios <dimitris.zen...@gmail.com>
Date: Sun, 2 Dec 2018 02:37:57 +0200
Subject: [PATCH 1/3] Fix tomcat runner -Set port correctly -Enable jndi
 lookups -Added a missing dependency

---
 tapestry-runner/build.gradle                  |  1 +
 .../apache/tapestry5/test/TomcatRunner.java   | 23 +++++++++++++++++--
 2 files changed, 22 insertions(+), 2 deletions(-)

diff --git a/tapestry-runner/build.gradle b/tapestry-runner/build.gradle
index f905c703e..3f7a6ffd7 100644
--- a/tapestry-runner/build.gradle
+++ b/tapestry-runner/build.gradle
@@ -10,6 +10,7 @@ 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"
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 f382330b0..a37b58070 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,7 +15,6 @@
 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;
@@ -50,9 +49,12 @@ 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.getConnector().setAllowTrace(true);
 
         // SSL support
@@ -68,6 +70,7 @@ public class TomcatRunner implements ServletContainerRunner
         }
 
         tomcatServer.start();
+        startDaemonAwaitThread();
     }
 
     /**
@@ -82,6 +85,7 @@ public class TomcatRunner implements ServletContainerRunner
         {
             // Stop immediately and not gracefully.
             tomcatServer.stop();
+            tomcatServer.destroy();
         }
         catch (Exception ex)
         {
@@ -117,4 +121,19 @@ 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();
+    }
 }
-- 
2.19.2

From c5641027093f617c30c5ac344d78cdfe0f1ad88f Mon Sep 17 00:00:00 2001
From: Dimitris Zenios <dimitris.zen...@gmail.com>
Date: Sun, 2 Dec 2018 02:48:46 +0200
Subject: [PATCH 3/3] Refactor JPA transaction advisor and enable all the tests
 that broke after TAP5-2553: Support pseudo nested JPA transactions

---
 .../internal/jpa/CommitAfterWorker.java       |  21 +--
 .../jpa/EntityTransactionManagerImpl.java     |  26 +--
 .../internal/jpa/JpaAdvisorProvider.java      |   9 +
 .../internal/jpa/JpaAdvisorProviderImpl.java  |  20 +++
 .../internal/jpa/JpaInternalUtils.java        |   9 +-
 .../jpa/JpaTransactionAdvisorImpl.java        |  25 +--
 ...ntextSpecificEntityTransactionManager.java |  14 +-
 .../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 +
 11 files changed, 202 insertions(+), 169 deletions(-)
 create mode 100644 tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/JpaAdvisorProvider.java
 create mode 100644 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/CommitAfterWorker.java b/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/CommitAfterWorker.java
index 30046e811..7c1d63c2c 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,17 +14,11 @@
 
 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;
@@ -32,27 +26,22 @@ import org.apache.tapestry5.services.transform.TransformationSupport;
 
 public class CommitAfterWorker implements ComponentClassTransformWorker2
 {
-    private final Map<String, MethodAdvice> methodAdvices;
+    private final JpaAdvisorProvider jpaAdvisorProvider;
 
-    public CommitAfterWorker(EntityManagerManager manager,
-            EntityTransactionManager transactionManager)
+    public CommitAfterWorker(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));
+        this.jpaAdvisorProvider = jpaAdvisorProvider;
     }
 
     @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(methodAdvices.get(annotation == null ? null : annotation.unitName()));
+            method.addAdvice(jpaAdvisorProvider.getAdvice(annotation));
         }
     }
 }
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 c0c639d94..28500c49a 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,8 +16,6 @@ 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;
@@ -38,28 +36,8 @@ public class EntityTransactionManagerImpl implements EntityTransactionManager
     {
         this.logger = logger;
         this.entityManagerManager = entityManagerManager;
-        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.");
-        }
+        this.transactionManagerMap = new HashMap<>(entityManagerManager.getEntityManagers().size());
     }
-
     /*
      * (non-Javadoc)
      * @see net.satago.tapestry5.jpa.EntityTransactionManager#runInTransaction(java.lang.String,
@@ -91,7 +69,7 @@ public class EntityTransactionManagerImpl implements EntityTransactionManager
         if (!transactionManagerMap.containsKey(unitName))
         {
             PersistenceContextSpecificEntityTransactionManager transactionManager = new PersistenceContextSpecificEntityTransactionManager(
-                    logger, getEntityManager(unitName));
+                    logger, JpaInternalUtils.getEntityManager(entityManagerManager,unitName));
             transactionManagerMap.put(unitName, transactionManager);
             return transactionManager;
         }
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
new file mode 100644
index 000000000..108d55fab
--- /dev/null
+++ b/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/JpaAdvisorProvider.java
@@ -0,0 +1,9 @@
+package org.apache.tapestry5.internal.jpa;
+
+import org.apache.tapestry5.plastic.MethodAdvice;
+
+import javax.persistence.PersistenceContext;
+
+public interface JpaAdvisorProvider {
+    MethodAdvice getAdvice(PersistenceContext context);
+}
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
new file mode 100644
index 000000000..51b50b4c2
--- /dev/null
+++ b/tapestry-jpa/src/main/java/org/apache/tapestry5/internal/jpa/JpaAdvisorProviderImpl.java
@@ -0,0 +1,20 @@
+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());
+    }
+}
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 d612e74dc..aff8e21a0 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,10 +78,15 @@ 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);
 
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 1803722d5..7d7437c3f 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,31 +15,21 @@
 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 Map<String, MethodAdvice> methodAdvices;
+    private final JpaAdvisorProvider jpaAdvisorProvider;
 
-    public JpaTransactionAdvisorImpl(EntityManagerManager manager,
-            EntityTransactionManager transactionManager)
+    public JpaTransactionAdvisorImpl(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));
+        this.jpaAdvisorProvider = jpaAdvisorProvider;
     }
 
     @Override
@@ -49,11 +39,8 @@ public class JpaTransactionAdvisorImpl implements JpaTransactionAdvisor
         {
             if (m.getAnnotation(CommitAfter.class) != null)
             {
-                PersistenceContext annotation = receiver.getMethodAnnotation(m,
-                        PersistenceContext.class);
-
-                receiver.adviseMethod(m,
-                        methodAdvices.get(annotation == null ? null : annotation.unitName()));
+                PersistenceContext annotation = receiver.getMethodAnnotation(m, PersistenceContext.class);
+                receiver.adviseMethod(m, jpaAdvisorProvider.getAdvice(annotation));
             }
         }
     }
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 ed53f2b1b..43405f266 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,6 +67,7 @@ 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
@@ -79,7 +80,7 @@ public class PersistenceContextSpecificEntityTransactionManager
             }
             else
             {
-                rollbackTransaction(getTransaction());
+                rollbackTransaction(transaction);
                 throw new RuntimeException(
                         "Current transaction is already being committed. Transactions started @PostCommit are not allowed to return a value");
             }
@@ -95,7 +96,6 @@ public class PersistenceContextSpecificEntityTransactionManager
             }
         }
 
-        final EntityTransaction transaction = getTransaction();
         try
         {
             T result = invokable.invoke();
@@ -104,15 +104,11 @@ public class PersistenceContextSpecificEntityTransactionManager
             {
                 // Success or checked exception:
 
-                if (transaction.isActive())
+                boolean isActive = transaction.isActive();
+                if (isActive)
                 {
                     invokeBeforeCommit(transaction);
-                }
-
-                // FIXME check if we are still on top
-
-                if (transaction.isActive())
-                {
+                    // FIXME check if we are still on top
                     transactionBeingCommitted = true;
                     transaction.commit();
                     transactionBeingCommitted = false;
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 723b38a91..f78b71c3b 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,17 +23,7 @@ import javax.persistence.spi.PersistenceUnitInfo;
 
 import org.apache.tapestry5.ValueEncoder;
 import org.apache.tapestry5.internal.InternalConstants;
-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.jpa.*;
 import org.apache.tapestry5.internal.services.PersistentFieldManager;
 import org.apache.tapestry5.ioc.Configuration;
 import org.apache.tapestry5.ioc.LoggerSource;
@@ -84,6 +74,7 @@ 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);
 
     }
 
diff --git a/tapestry-jpa/src/test/conf/testng.xml b/tapestry-jpa/src/test/conf/testng.xml
index 025f946dd..926761597 100644
--- a/tapestry-jpa/src/test/conf/testng.xml
+++ b/tapestry-jpa/src/test/conf/testng.xml
@@ -8,47 +8,49 @@
 	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> -->
-
-<!-- 	<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> -->
+	   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="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="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="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="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="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>
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 6d3eb40c0..92ffd3344 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,6 +32,7 @@ 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;
@@ -66,10 +67,9 @@ 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 JpaTransactionAdvisor advisor = newJpaTransactionAdvisor(manager, transactionManager);
-
+        final JpaAdvisorProvider provider = new JpaAdvisorProviderImpl(transactionManager);
+        final JpaTransactionAdvisor advisor = newJpaTransactionAdvisor(provider);
         final AspectInterceptorBuilder<VoidService> builder = aspectDecorator.createBuilder(
                 VoidService.class, delegate, "foo.Bar");
 
@@ -87,14 +87,20 @@ 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");
 
@@ -121,15 +127,24 @@ public class JpaTransactionAdvisorImplTest extends IOCTestCase
     @Test
     public void persistence_unit_name_missing_single_unit_configured()
     {
-        final VoidService delegate = newMock(VoidService.class);
-        final EntityManagerManager manager = newMock(EntityManagerManager.class);
-        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 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 EntityTransaction transaction = newMock(EntityTransaction.class);
+
+
         final AspectInterceptorBuilder<VoidService> builder = aspectDecorator.createBuilder(
                 VoidService.class, delegate, "foo.Bar");
 
@@ -150,14 +165,23 @@ 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");
 
@@ -184,14 +208,20 @@ public class JpaTransactionAdvisorImplTest extends IOCTestCase
     @Test
     public void persistence_unit_missing_single_unit_configured()
     {
-        final VoidService delegate = newMock(VoidService.class);
-        final EntityManagerManager manager = newMock(EntityManagerManager.class);
-        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 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 EntityTransaction transaction = newMock(EntityTransaction.class);
 
         final AspectInterceptorBuilder<VoidService> builder = aspectDecorator.createBuilder(
                 VoidService.class, delegate, "foo.Bar");
@@ -215,8 +245,14 @@ public class JpaTransactionAdvisorImplTest extends IOCTestCase
     {
         final VoidService delegate = newMock(VoidService.class);
         final EntityManagerManager manager = newMock(EntityManagerManager.class);
-        final EntityTransactionManager transactionManager = newMock(EntityTransactionManager.class);
-        final JpaTransactionAdvisor advisor = newJpaTransactionAdvisor(manager, transactionManager);
+        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 EntityManager entityManager = newMock(EntityManager.class);
         final EntityTransaction transaction = newMock(EntityTransaction.class);
 
@@ -243,8 +279,14 @@ public class JpaTransactionAdvisorImplTest extends IOCTestCase
     {
         final VoidService delegate = newMock(VoidService.class);
         final EntityManagerManager manager = newMock(EntityManagerManager.class);
-        final EntityTransactionManager transactionManager = newMock(EntityTransactionManager.class);
-        final JpaTransactionAdvisor advisor = newJpaTransactionAdvisor(manager, transactionManager);
+        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 EntityManager entityManager = newMock(EntityManager.class);
         final EntityTransaction transaction = newMock(EntityTransaction.class);
 
@@ -271,8 +313,14 @@ public class JpaTransactionAdvisorImplTest extends IOCTestCase
     {
         final VoidService delegate = newMock(VoidService.class);
         final EntityManagerManager manager = newMock(EntityManagerManager.class);
-        final EntityTransactionManager transactionManager = newMock(EntityTransactionManager.class);
-        final JpaTransactionAdvisor advisor = newJpaTransactionAdvisor(manager, transactionManager);
+        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 EntityManager entityManager = newMock(EntityManager.class);
         final EntityTransaction transaction = newMock(EntityTransaction.class);
 
@@ -297,8 +345,14 @@ public class JpaTransactionAdvisorImplTest extends IOCTestCase
     {
         final Performer delegate = newMock(Performer.class);
         final EntityManagerManager manager = newMock(EntityManagerManager.class);
-        final EntityTransactionManager transactionManager = newMock(EntityTransactionManager.class);
-        final JpaTransactionAdvisor advisor = newJpaTransactionAdvisor(manager, transactionManager);
+        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 EntityManager entityManager = newMock(EntityManager.class);
         final EntityTransaction transaction = newMock(EntityTransaction.class);
         final RuntimeException re = new RuntimeException("Unexpected.");
@@ -333,8 +387,14 @@ public class JpaTransactionAdvisorImplTest extends IOCTestCase
     {
         final Performer delegate = newMock(Performer.class);
         final EntityManagerManager manager = newMock(EntityManagerManager.class);
-        final EntityTransactionManager transactionManager = newMock(EntityTransactionManager.class);
-        final JpaTransactionAdvisor advisor = newJpaTransactionAdvisor(manager, transactionManager);
+        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 EntityManager entityManager = newMock(EntityManager.class);
         final EntityTransaction transaction = newMock(EntityTransaction.class);
         final SQLException se = new SQLException("Checked.");
@@ -374,8 +434,14 @@ public class JpaTransactionAdvisorImplTest extends IOCTestCase
     {
         final ReturnTypeService delegate = newTestService();
         final EntityManagerManager manager = newMock(EntityManagerManager.class);
-        final EntityTransactionManager transactionManager = newMock(EntityTransactionManager.class);
-        final JpaTransactionAdvisor advisor = newJpaTransactionAdvisor(manager, transactionManager);
+        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 EntityManager entityManager = newMock(EntityManager.class);
         final EntityTransaction transaction = newMock(EntityTransaction.class);
 
@@ -400,8 +466,14 @@ public class JpaTransactionAdvisorImplTest extends IOCTestCase
     {
         final ReturnTypeService delegate = newTestService();
         final EntityManagerManager manager = newMock(EntityManagerManager.class);
-        final EntityTransactionManager transactionManager = newMock(EntityTransactionManager.class);
-        final JpaTransactionAdvisor advisor = newJpaTransactionAdvisor(manager, transactionManager);
+        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 EntityManager entityManager = newMock(EntityManager.class);
         final EntityTransaction transaction = newMock(EntityTransaction.class);
 
@@ -462,10 +534,9 @@ public class JpaTransactionAdvisorImplTest extends IOCTestCase
         transaction.rollback();
     }
 
-    private JpaTransactionAdvisor newJpaTransactionAdvisor(final EntityManagerManager manager,
-            EntityTransactionManager transactionManager)
+    private JpaTransactionAdvisor newJpaTransactionAdvisor(final JpaAdvisorProvider provider)
     {
-        return new JpaTransactionAdvisorImpl(manager, transactionManager);
+        return new JpaTransactionAdvisorImpl(provider);
     }
 
     private ReturnTypeService newTestService()
@@ -533,20 +604,4 @@ 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()
-    	{
-
-    	}
-    }
-
 }
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 05d248881..e3f380a7b 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,6 +34,7 @@ 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()
                 {
-- 
2.19.2

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tapestry.apache.org
For additional commands, e-mail: dev-h...@tapestry.apache.org

Reply via email to