[seam-commits] Seam SVN: r13663 - in modules/persistence/trunk/impl/src: test/java/org/jboss/seam/persistence/test and 1 other directories.

seam-commits at lists.jboss.org seam-commits at lists.jboss.org
Mon Aug 30 03:00:02 EDT 2010


Author: swd847
Date: 2010-08-30 03:00:01 -0400 (Mon, 30 Aug 2010)
New Revision: 13663

Added:
   modules/persistence/trunk/impl/src/main/java/org/jboss/seam/persistence/ManagedPersistenceContext.java
Removed:
   modules/persistence/trunk/impl/src/main/java/org/jboss/seam/persistence/AbstractManagedPersistenceContextBeanLifecycle.java
   modules/persistence/trunk/impl/src/main/java/org/jboss/seam/persistence/PersistenceContext.java
Modified:
   modules/persistence/trunk/impl/src/main/java/org/jboss/seam/persistence/HibernatePersistenceProvider.java
   modules/persistence/trunk/impl/src/main/java/org/jboss/seam/persistence/ManagedPersistenceContextBeanLifecycle.java
   modules/persistence/trunk/impl/src/main/java/org/jboss/seam/persistence/ManagedPersistenceContextExtension.java
   modules/persistence/trunk/impl/src/main/java/org/jboss/seam/persistence/ManagedPersistenceContextProxyHandler.java
   modules/persistence/trunk/impl/src/main/java/org/jboss/seam/persistence/PersistenceContexts.java
   modules/persistence/trunk/impl/src/main/java/org/jboss/seam/persistence/PersistenceContextsImpl.java
   modules/persistence/trunk/impl/src/main/java/org/jboss/seam/persistence/SeamPersistenceProvider.java
   modules/persistence/trunk/impl/src/test/java/org/jboss/seam/persistence/test/EntityInjectionTest.java
   modules/persistence/trunk/impl/src/test/java/org/jboss/seam/persistence/test/ManagedPersistenceContextELTest.java
   modules/persistence/trunk/impl/src/test/java/org/jboss/seam/persistence/test/ManagedPersistenceContextTest.java
   modules/persistence/trunk/impl/src/test/java/org/jboss/seam/persistence/transactions/test/TransactionAttributeInterceptorTest.java
   modules/persistence/trunk/impl/src/test/java/org/jboss/seam/persistence/transactions/test/TransactionInterceptorTest.java
Log:
refactor the SMPC implementation


Deleted: modules/persistence/trunk/impl/src/main/java/org/jboss/seam/persistence/AbstractManagedPersistenceContextBeanLifecycle.java
===================================================================
--- modules/persistence/trunk/impl/src/main/java/org/jboss/seam/persistence/AbstractManagedPersistenceContextBeanLifecycle.java	2010-08-28 02:48:04 UTC (rev 13662)
+++ modules/persistence/trunk/impl/src/main/java/org/jboss/seam/persistence/AbstractManagedPersistenceContextBeanLifecycle.java	2010-08-30 07:00:01 UTC (rev 13663)
@@ -1,121 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2010, Red Hat, Inc., and individual contributors
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.jboss.seam.persistence;
-
-import java.io.Serializable;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationHandler;
-import java.lang.reflect.Proxy;
-
-import javax.enterprise.context.ContextNotActiveException;
-import javax.enterprise.context.spi.CreationalContext;
-import javax.enterprise.inject.spi.Bean;
-import javax.enterprise.inject.spi.BeanManager;
-import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
-
-import org.jboss.weld.extensions.bean.BeanLifecycle;
-import org.jboss.weld.extensions.literal.DefaultLiteral;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Class that is responsible for creating and destroying the seam managed
- * persistence context
- * 
- * @author Stuart Douglas
- * 
- */
-public abstract class AbstractManagedPersistenceContextBeanLifecycle implements BeanLifecycle<EntityManager>
-{
-
-   private final Class<?> proxyClass;
-
-   private final Constructor<?> proxyConstructor;
-
-   private final BeanManager manager;
-
-   private static final Logger log = LoggerFactory.getLogger(AbstractManagedPersistenceContextBeanLifecycle.class);
-
-   private PersistenceContexts persistenceContexts;
-
-   protected AbstractManagedPersistenceContextBeanLifecycle(BeanManager manager, ClassLoader loader)
-   {
-      this.manager = manager;
-      proxyClass = Proxy.getProxyClass(loader, EntityManager.class, Serializable.class, PersistenceContext.class);
-
-      try
-      {
-         proxyConstructor = proxyClass.getConstructor(InvocationHandler.class);
-      }
-      catch (Exception e)
-      {
-         throw new RuntimeException(e);
-      }
-   }
-
-   /**
-    * creates the proxy
-    */
-   public EntityManager create(Bean<EntityManager> bean, CreationalContext<EntityManager> arg0)
-   {
-      try
-      {
-         EntityManagerFactory emf = getEntityManagerFactory();
-         EntityManager entityManager = emf.createEntityManager();
-         ManagedPersistenceContextProxyHandler handler = new ManagedPersistenceContextProxyHandler(entityManager, manager, bean.getQualifiers(), getPersistenceContexts());
-         EntityManager proxy = (EntityManager) proxyConstructor.newInstance(handler);
-         return proxy;
-      }
-      catch (Exception e)
-      {
-         throw new RuntimeException(e);
-      }
-   }
-
-   public void destroy(Bean<EntityManager> bean, EntityManager em, CreationalContext<EntityManager> arg1)
-   {
-      em.close();
-      arg1.release();
-      try
-      {
-         getPersistenceContexts().untouch((PersistenceContext) em);
-      }
-      catch (ContextNotActiveException e)
-      {
-         log.debug("Could not untouch PersistenceContext as conversation scope not active");
-      }
-   }
-
-   protected abstract EntityManagerFactory getEntityManagerFactory();
-
-   private PersistenceContexts getPersistenceContexts()
-   {
-      if (persistenceContexts == null)
-      {
-         Bean<PersistenceContexts> bean = (Bean) manager.resolve(manager.getBeans(PersistenceContexts.class, DefaultLiteral.INSTANCE));
-         CreationalContext<PersistenceContexts> ctx = manager.createCreationalContext(bean);
-         persistenceContexts = (PersistenceContexts) manager.getReference(bean, PersistenceContexts.class, ctx);
-      }
-      return persistenceContexts;
-   }
-}

Modified: modules/persistence/trunk/impl/src/main/java/org/jboss/seam/persistence/HibernatePersistenceProvider.java
===================================================================
--- modules/persistence/trunk/impl/src/main/java/org/jboss/seam/persistence/HibernatePersistenceProvider.java	2010-08-28 02:48:04 UTC (rev 13662)
+++ modules/persistence/trunk/impl/src/main/java/org/jboss/seam/persistence/HibernatePersistenceProvider.java	2010-08-30 07:00:01 UTC (rev 13663)
@@ -8,15 +8,12 @@
 import javax.persistence.EntityManager;
 import javax.transaction.Synchronization;
 
-import org.hibernate.EntityMode;
 import org.hibernate.FlushMode;
 import org.hibernate.Session;
-import org.hibernate.StaleStateException;
 import org.hibernate.TransientObjectException;
-import org.hibernate.metadata.ClassMetadata;
 import org.hibernate.proxy.HibernateProxy;
-import org.hibernate.type.VersionType;
 import org.jboss.seam.persistence.transaction.FlushModeType;
+import org.jboss.weld.extensions.core.Veto;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -29,6 +26,7 @@
  * @author Stuart Douglas
  * 
  */
+ at Veto
 public class HibernatePersistenceProvider extends SeamPersistenceProvider
 {
 
@@ -36,9 +34,9 @@
    Instance<PersistenceContextsImpl> persistenceContexts;
 
    private static Logger log = LoggerFactory.getLogger(HibernatePersistenceProvider.class);
-   private static Class FULL_TEXT_SESSION_PROXY_CLASS;
+   private static Class<?> FULL_TEXT_SESSION_PROXY_CLASS;
    private static Method FULL_TEXT_SESSION_CONSTRUCTOR;
-   private static Class FULL_TEXT_ENTITYMANAGER_PROXY_CLASS;
+   private static Class<?> FULL_TEXT_ENTITYMANAGER_PROXY_CLASS;
    private static Method FULL_TEXT_ENTITYMANAGER_CONSTRUCTOR;
    static
    {
@@ -47,7 +45,7 @@
          String version = null;
          try
          {
-            Class searchVersionClass = Class.forName("org.hibernate.search.Version");
+            Class<?> searchVersionClass = Class.forName("org.hibernate.search.Version");
             Field versionField = searchVersionClass.getDeclaredField("VERSION");
             version = (String) versionField.get(null);
          }
@@ -57,7 +55,7 @@
          }
          if (version != null)
          {
-            Class searchClass = Class.forName("org.hibernate.search.Search");
+            Class<?> searchClass = Class.forName("org.hibernate.search.Search");
             try
             {
                FULL_TEXT_SESSION_CONSTRUCTOR = searchClass.getDeclaredMethod("getFullTextSession", Session.class);
@@ -68,7 +66,7 @@
                FULL_TEXT_SESSION_CONSTRUCTOR = searchClass.getDeclaredMethod("createFullTextSession", Session.class);
             }
             FULL_TEXT_SESSION_PROXY_CLASS = Class.forName("org.jboss.seam.persistence.FullTextHibernateSessionProxy");
-            Class jpaSearchClass = Class.forName("org.hibernate.search.jpa.Search");
+            Class<?> jpaSearchClass = Class.forName("org.hibernate.search.jpa.Search");
             try
             {
                FULL_TEXT_ENTITYMANAGER_CONSTRUCTOR = jpaSearchClass.getDeclaredMethod("getFullTextEntityManager", EntityManager.class);
@@ -151,32 +149,6 @@
    }
 
    @Override
-   public Object getVersion(Object bean, EntityManager entityManager)
-   {
-      try
-      {
-         return getVersion(bean, getSession(entityManager));
-      }
-      catch (NotHibernateException nhe)
-      {
-         return super.getVersion(bean, entityManager);
-      }
-   }
-
-   @Override
-   public void checkVersion(Object bean, EntityManager entityManager, Object oldVersion, Object version)
-   {
-      try
-      {
-         checkVersion(bean, getSession(entityManager), oldVersion, version);
-      }
-      catch (NotHibernateException nhe)
-      {
-         super.checkVersion(bean, entityManager, oldVersion, version);
-      }
-   }
-
-   @Override
    public boolean registerSynchronization(Synchronization sync, EntityManager entityManager)
    {
       try
@@ -210,69 +182,83 @@
       }
    }
 
-   public static void checkVersion(Object value, Session session, Object oldVersion, Object version)
+   private Session getSession(EntityManager entityManager)
    {
-      ClassMetadata classMetadata = getClassMetadata(value, session);
-      VersionType versionType = (VersionType) classMetadata.getPropertyTypes()[classMetadata.getVersionProperty()];
-      if (!versionType.isEqual(oldVersion, version))
+      Object delegate = entityManager.getDelegate();
+      if (delegate instanceof Session)
       {
-         throw new StaleStateException("current database version number does not match passivated version number");
+         return (Session) delegate;
       }
+      else
+      {
+         throw new NotHibernateException();
+      }
    }
 
-   public static Object getVersion(Object value, Session session)
+   /**
+    * Wrap the Hibernate Session in a proxy that implements FullTextSession if
+    * Hibernate Search is available in the classpath.
+    */
+   static Session proxySession(Session session)
    {
-      ClassMetadata classMetadata = getClassMetadata(value, session);
-      return classMetadata != null && classMetadata.isVersioned() ? classMetadata.getVersion(value, EntityMode.POJO) : null;
-   }
-
-   private static ClassMetadata getClassMetadata(Object value, Session session)
-   {
-      Class entityClass = getEntityClass(value);
-      ClassMetadata classMetadata = null;
-      if (entityClass != null)
+      if (FULL_TEXT_SESSION_PROXY_CLASS == null)
       {
-         classMetadata = session.getSessionFactory().getClassMetadata(entityClass);
-         if (classMetadata == null)
+         return session;
+      }
+      else
+      {
+         try
          {
-            throw new IllegalArgumentException("Could not find ClassMetadata object for entity class: " + entityClass.getName());
+            return (Session) FULL_TEXT_SESSION_CONSTRUCTOR.invoke(null, session);
          }
+         catch (Exception e)
+         {
+            log.warn("Unable to wrap into a FullTextSessionProxy, regular SessionProxy returned", e);
+            return session;
+         }
       }
-      return classMetadata;
    }
 
    /**
-    * Returns the class of the specified Hibernate entity
+    * Wrap the delegate Hibernate Session in a proxy that implements
+    * FullTextSession if Hibernate Search is available in the classpath.
     */
    @Override
-   public Class getBeanClass(Object bean)
+   public Object proxyDelegate(Object delegate)
    {
-      return getEntityClass(bean);
+      try
+      {
+         return proxySession((Session) delegate);
+      }
+      catch (NotHibernateException nhe)
+      {
+         return super.proxyDelegate(delegate);
+      }
+      catch (Exception e)
+      {
+         throw new RuntimeException("could not proxy delegate", e);
+      }
    }
 
-   public static Class getEntityClass(Object bean)
+   @Override
+   public EntityManager proxyEntityManager(EntityManager entityManager)
    {
-      /*
-       * Class clazz = null; try { clazz = Entity.forBean(bean).getBeanClass();
-       * } catch (NotEntityException e) { // It's ok, try some other methods }
-       * 
-       * if (clazz == null) { clazz = Hibernate.getClass(bean); }
-       * 
-       * return clazz;
-       */
-      return null;
-   }
-
-   private Session getSession(EntityManager entityManager)
-   {
-      Object delegate = entityManager.getDelegate();
-      if (delegate instanceof Session)
+      if (FULL_TEXT_ENTITYMANAGER_PROXY_CLASS == null)
       {
-         return (Session) delegate;
+         return super.proxyEntityManager(entityManager);
       }
       else
       {
-         throw new NotHibernateException();
+         try
+         {
+            return (EntityManager) FULL_TEXT_ENTITYMANAGER_CONSTRUCTOR.invoke(null, super.proxyEntityManager(entityManager));
+         }
+         catch (Exception e)
+         {
+            // throw new
+            // RuntimeException("could not proxy FullTextEntityManager", e);
+            return super.proxyEntityManager(entityManager);
+         }
       }
    }
 

Copied: modules/persistence/trunk/impl/src/main/java/org/jboss/seam/persistence/ManagedPersistenceContext.java (from rev 13639, modules/persistence/trunk/impl/src/main/java/org/jboss/seam/persistence/PersistenceContext.java)
===================================================================
--- modules/persistence/trunk/impl/src/main/java/org/jboss/seam/persistence/ManagedPersistenceContext.java	                        (rev 0)
+++ modules/persistence/trunk/impl/src/main/java/org/jboss/seam/persistence/ManagedPersistenceContext.java	2010-08-30 07:00:01 UTC (rev 13663)
@@ -0,0 +1,44 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2010, Red Hat, Inc., and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.seam.persistence;
+
+import java.lang.annotation.Annotation;
+import java.util.Set;
+
+import org.jboss.seam.persistence.transaction.FlushModeType;
+
+/**
+ * Support for changing flushmodes for an existing persistence context.
+ * 
+ * @author Gavin King
+ * @author Stuart Douglas
+ * 
+ */
+public interface ManagedPersistenceContext
+{
+   public void changeFlushMode(FlushModeType flushMode);
+
+   public Set<Annotation> getQualifiers();
+
+   public Class<?> getBeanType();
+
+}

Modified: modules/persistence/trunk/impl/src/main/java/org/jboss/seam/persistence/ManagedPersistenceContextBeanLifecycle.java
===================================================================
--- modules/persistence/trunk/impl/src/main/java/org/jboss/seam/persistence/ManagedPersistenceContextBeanLifecycle.java	2010-08-28 02:48:04 UTC (rev 13662)
+++ modules/persistence/trunk/impl/src/main/java/org/jboss/seam/persistence/ManagedPersistenceContextBeanLifecycle.java	2010-08-30 07:00:01 UTC (rev 13663)
@@ -21,41 +21,134 @@
  */
 package org.jboss.seam.persistence;
 
+import java.io.Serializable;
 import java.lang.annotation.Annotation;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Proxy;
 import java.util.Set;
 
+import javax.enterprise.context.ContextNotActiveException;
 import javax.enterprise.context.spi.CreationalContext;
 import javax.enterprise.inject.spi.Bean;
 import javax.enterprise.inject.spi.BeanManager;
+import javax.persistence.EntityManager;
 import javax.persistence.EntityManagerFactory;
 
+import org.jboss.weld.extensions.bean.BeanLifecycle;
+import org.jboss.weld.extensions.literal.DefaultLiteral;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 /**
  * SMPC lifecycle for SMPC's configured via @SeamManaged
  * 
  * @author Stuart Douglas
  * 
  */
-public class ManagedPersistenceContextBeanLifecycle extends AbstractManagedPersistenceContextBeanLifecycle
+public class ManagedPersistenceContextBeanLifecycle implements BeanLifecycle<EntityManager>
 {
+   private final Class<?> proxyClass;
 
+   private final Constructor<?> proxyConstructor;
+
+   private static final Logger log = LoggerFactory.getLogger(ManagedPersistenceContextBeanLifecycle.class);
+
+   private PersistenceContexts persistenceContexts;
+
+   private SeamPersistenceProvider persistenceProvider;
+
    protected final Annotation[] qualifiers;
+
    protected final BeanManager manager;
 
    private EntityManagerFactory emf;
 
    public ManagedPersistenceContextBeanLifecycle(Set<Annotation> qualifiers, ClassLoader loader, BeanManager manager)
    {
-      super(manager, loader);
+      this.manager = manager;
+      proxyClass = Proxy.getProxyClass(loader, EntityManager.class, Serializable.class, ManagedPersistenceContext.class);
+      try
+      {
+         proxyConstructor = proxyClass.getConstructor(InvocationHandler.class);
+      }
+      catch (Exception e)
+      {
+         throw new RuntimeException(e);
+      }
       this.qualifiers = new Annotation[qualifiers.size()];
       int i = 0;
       for (Annotation a : qualifiers)
       {
          this.qualifiers[i++] = a;
       }
-      this.manager = manager;
    }
 
    /**
+    * creates the proxy
+    */
+   public EntityManager create(Bean<EntityManager> bean, CreationalContext<EntityManager> arg0)
+   {
+      try
+      {
+         EntityManagerFactory emf = getEntityManagerFactory();
+         EntityManager entityManager = emf.createEntityManager();
+         entityManager = getPersistenceProvider().proxyEntityManager(entityManager);
+         ManagedPersistenceContextProxyHandler handler = new ManagedPersistenceContextProxyHandler(entityManager, manager, bean.getQualifiers(), getPersistenceContexts());
+         EntityManager proxy = (EntityManager) proxyConstructor.newInstance(handler);
+         return proxy;
+      }
+      catch (Exception e)
+      {
+         throw new RuntimeException(e);
+      }
+   }
+
+   public void destroy(Bean<EntityManager> bean, EntityManager em, CreationalContext<EntityManager> arg1)
+   {
+      em.close();
+      arg1.release();
+      try
+      {
+         getPersistenceContexts().untouch((ManagedPersistenceContext) em);
+      }
+      catch (ContextNotActiveException e)
+      {
+         log.debug("Could not untouch PersistenceContext as conversation scope not active");
+      }
+   }
+
+   private PersistenceContexts getPersistenceContexts()
+   {
+      if (persistenceContexts == null)
+      {
+         Bean<PersistenceContexts> bean = (Bean) manager.resolve(manager.getBeans(PersistenceContexts.class, DefaultLiteral.INSTANCE));
+         if (bean == null)
+         {
+            throw new RuntimeException("Could not find PersistenceContexts bean");
+         }
+         CreationalContext<PersistenceContexts> ctx = manager.createCreationalContext(bean);
+         persistenceContexts = (PersistenceContexts) manager.getReference(bean, PersistenceContexts.class, ctx);
+      }
+      return persistenceContexts;
+   }
+
+   private SeamPersistenceProvider getPersistenceProvider()
+   {
+      if (persistenceProvider == null)
+      {
+         Bean<SeamPersistenceProvider> bean = (Bean) manager.resolve(manager.getBeans(SeamPersistenceProvider.class, DefaultLiteral.INSTANCE));
+         if (bean == null)
+         {
+            throw new RuntimeException("Could not find SeamPersistenceProvider bean");
+         }
+         CreationalContext<SeamPersistenceProvider> ctx = manager.createCreationalContext(bean);
+         persistenceProvider = (SeamPersistenceProvider) manager.getReference(bean, SeamPersistenceProvider.class, ctx);
+      }
+      return persistenceProvider;
+   }
+
+   /**
     * lazily resolve the relevant EMF
     */
    protected EntityManagerFactory getEntityManagerFactory()

Modified: modules/persistence/trunk/impl/src/main/java/org/jboss/seam/persistence/ManagedPersistenceContextExtension.java
===================================================================
--- modules/persistence/trunk/impl/src/main/java/org/jboss/seam/persistence/ManagedPersistenceContextExtension.java	2010-08-28 02:48:04 UTC (rev 13662)
+++ modules/persistence/trunk/impl/src/main/java/org/jboss/seam/persistence/ManagedPersistenceContextExtension.java	2010-08-30 07:00:01 UTC (rev 13663)
@@ -108,6 +108,26 @@
       {
          event.setAnnotatedType(modifiedType.create());
       }
+      // prevent the install of HibernatePersistenceProvider is hibernate is not
+      // present
+      if (event.getAnnotatedType().getJavaClass() == HibernatePersistenceProvider.class)
+      {
+         try
+         {
+            if (Thread.currentThread().getContextClassLoader() != null)
+            {
+               Thread.currentThread().getContextClassLoader().loadClass("org.hibernate.Session");
+            }
+            else
+            {
+               Class.forName("org.hibernate.Session");
+            }
+         }
+         catch (ClassNotFoundException e)
+         {
+            event.veto();
+         }
+      }
    }
 
    public void registerManagedPersistenceContext(Set<Annotation> qualifiers, Class<? extends Annotation> scope, BeanManager manager, ClassLoader loader)
@@ -117,7 +137,7 @@
       BeanBuilder<EntityManager> builder = new BeanBuilder<EntityManager>(manager).defineBeanFromAnnotatedType(typeBuilder.create());
       builder.setQualifiers(qualifiers);
       builder.setScope(scope);
-      builder.getTypes().add(PersistenceContext.class);
+      builder.getTypes().add(ManagedPersistenceContext.class);
       builder.getTypes().add(Object.class);
       ManagedPersistenceContextBeanLifecycle lifecycle = new ManagedPersistenceContextBeanLifecycle(qualifiers, loader, manager);
       builder.setBeanLifecycle(lifecycle);

Modified: modules/persistence/trunk/impl/src/main/java/org/jboss/seam/persistence/ManagedPersistenceContextProxyHandler.java
===================================================================
--- modules/persistence/trunk/impl/src/main/java/org/jboss/seam/persistence/ManagedPersistenceContextProxyHandler.java	2010-08-28 02:48:04 UTC (rev 13662)
+++ modules/persistence/trunk/impl/src/main/java/org/jboss/seam/persistence/ManagedPersistenceContextProxyHandler.java	2010-08-30 07:00:01 UTC (rev 13663)
@@ -25,7 +25,6 @@
 import java.lang.annotation.Annotation;
 import java.lang.reflect.InvocationHandler;
 import java.lang.reflect.Method;
-import java.util.HashSet;
 import java.util.Set;
 
 import javax.enterprise.context.ContextNotActiveException;
@@ -58,8 +57,6 @@
 
    private final Instance<SeamTransaction> userTransactionInstance;
 
-   private final Set<Annotation> qualifiers;
-
    private transient boolean synchronizationRegistered;
 
    private final PersistenceContexts persistenceContexts;
@@ -73,7 +70,6 @@
       super(delegate, beanManager, qualifiers);
       this.delegate = delegate;
       this.userTransactionInstance = InstanceResolver.getInstance(SeamTransaction.class, beanManager, DefaultTransactionLiteral.INSTANCE);
-      this.qualifiers = new HashSet<Annotation>(qualifiers);
       this.persistenceContexts = persistenceContexts;
    }
 
@@ -83,7 +79,7 @@
       {
          joinTransaction();
       }
-      touch((PersistenceContext) proxy);
+      touch((ManagedPersistenceContext) proxy);
       return super.invoke(proxy, method, args);
    }
 
@@ -108,7 +104,7 @@
       }
    }
 
-   void touch(PersistenceContext delegate)
+   void touch(ManagedPersistenceContext delegate)
    {
       if (!persistenceContextsTouched)
       {

Deleted: modules/persistence/trunk/impl/src/main/java/org/jboss/seam/persistence/PersistenceContext.java
===================================================================
--- modules/persistence/trunk/impl/src/main/java/org/jboss/seam/persistence/PersistenceContext.java	2010-08-28 02:48:04 UTC (rev 13662)
+++ modules/persistence/trunk/impl/src/main/java/org/jboss/seam/persistence/PersistenceContext.java	2010-08-30 07:00:01 UTC (rev 13663)
@@ -1,43 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2010, Red Hat, Inc., and individual contributors
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.jboss.seam.persistence;
-
-import java.lang.annotation.Annotation;
-import java.util.Set;
-
-import org.jboss.seam.persistence.transaction.FlushModeType;
-
-/**
- * Support for changing flushmodes for an existing persistence context.
- * 
- * @author Gavin King
- * @author Stuart Douglas
- * 
- */
-public interface PersistenceContext
-{
-   public void changeFlushMode(FlushModeType flushMode);
-
-   public Set<Annotation> getQualifiers();
-
-   public Class<?> getBeanType();
-}

Modified: modules/persistence/trunk/impl/src/main/java/org/jboss/seam/persistence/PersistenceContexts.java
===================================================================
--- modules/persistence/trunk/impl/src/main/java/org/jboss/seam/persistence/PersistenceContexts.java	2010-08-28 02:48:04 UTC (rev 13662)
+++ modules/persistence/trunk/impl/src/main/java/org/jboss/seam/persistence/PersistenceContexts.java	2010-08-30 07:00:01 UTC (rev 13663)
@@ -13,9 +13,9 @@
 
    public abstract Set<PersistenceContextDefintition> getTouchedContexts();
 
-   public abstract void touch(PersistenceContext context);
+   public abstract void touch(ManagedPersistenceContext context);
 
-   public abstract void untouch(PersistenceContext context);
+   public abstract void untouch(ManagedPersistenceContext context);
 
    public abstract void changeFlushMode(FlushModeType flushMode);
 

Modified: modules/persistence/trunk/impl/src/main/java/org/jboss/seam/persistence/PersistenceContextsImpl.java
===================================================================
--- modules/persistence/trunk/impl/src/main/java/org/jboss/seam/persistence/PersistenceContextsImpl.java	2010-08-28 02:48:04 UTC (rev 13662)
+++ modules/persistence/trunk/impl/src/main/java/org/jboss/seam/persistence/PersistenceContextsImpl.java	2010-08-30 07:00:01 UTC (rev 13663)
@@ -44,7 +44,7 @@
 
    @Inject
    @Any
-   Instance<PersistenceContext> persistenceContexts;
+   Instance<ManagedPersistenceContext> persistenceContexts;
 
    @Inject
    Instance<SeamPersistenceProvider> persistenceProvider;
@@ -73,12 +73,12 @@
       return Collections.unmodifiableSet(set);
    }
 
-   public void touch(PersistenceContext context)
+   public void touch(ManagedPersistenceContext context)
    {
       set.add(new PersistenceContextDefintition(context.getQualifiers(), context.getBeanType()));
    }
 
-   public void untouch(PersistenceContext context)
+   public void untouch(ManagedPersistenceContext context)
    {
       set.remove(new PersistenceContextDefintition(context.getQualifiers(), context.getBeanType()));
    }
@@ -111,7 +111,7 @@
    private void changeFlushModes()
    {
 
-      for (PersistenceContext context : persistenceContexts)
+      for (ManagedPersistenceContext context : persistenceContexts)
       {
          if (set.contains(new PersistenceContextDefintition(context.getQualifiers(), context.getBeanType())))
             try

Modified: modules/persistence/trunk/impl/src/main/java/org/jboss/seam/persistence/SeamPersistenceProvider.java
===================================================================
--- modules/persistence/trunk/impl/src/main/java/org/jboss/seam/persistence/SeamPersistenceProvider.java	2010-08-28 02:48:04 UTC (rev 13662)
+++ modules/persistence/trunk/impl/src/main/java/org/jboss/seam/persistence/SeamPersistenceProvider.java	2010-08-30 07:00:01 UTC (rev 13663)
@@ -32,6 +32,7 @@
 import javax.transaction.Synchronization;
 
 import org.jboss.seam.persistence.transaction.FlushModeType;
+import org.jboss.weld.extensions.defaultbean.DefaultBean;
 
 /**
  * Abstraction layer for persistence providers (JPA implementations). This class
@@ -46,6 +47,7 @@
  * @author Stuart Douglas
  * 
  */
+ at DefaultBean(type = SeamPersistenceProvider.class)
 public class SeamPersistenceProvider
 {
    public enum Feature
@@ -228,6 +230,11 @@
       return delegate;
    }
 
+   public EntityManager proxyEntityManager(EntityManager entityManager)
+   {
+      return entityManager;
+   }
+
    /**
     * Returns the class of an entity bean instance
     * 

Modified: modules/persistence/trunk/impl/src/test/java/org/jboss/seam/persistence/test/EntityInjectionTest.java
===================================================================
--- modules/persistence/trunk/impl/src/test/java/org/jboss/seam/persistence/test/EntityInjectionTest.java	2010-08-28 02:48:04 UTC (rev 13662)
+++ modules/persistence/trunk/impl/src/test/java/org/jboss/seam/persistence/test/EntityInjectionTest.java	2010-08-30 07:00:01 UTC (rev 13663)
@@ -36,6 +36,7 @@
 import org.jboss.seam.persistence.transaction.DefaultTransaction;
 import org.jboss.seam.persistence.transaction.SeamTransaction;
 import org.jboss.seam.persistence.transaction.TransactionExtension;
+import org.jboss.seam.persistence.transaction.scope.TransactionScopeExtension;
 import org.jboss.seam.persistence.util.NamingUtils;
 import org.jboss.seam.transactions.test.util.ArtifactNames;
 import org.jboss.seam.transactions.test.util.HelloService;
@@ -66,6 +67,7 @@
       war.addLibraries(MavenArtifactResolver.resolve(ArtifactNames.WELD_EXTENSIONS));
       war.addLibraries(MavenArtifactResolver.resolve(ArtifactNames.SEAM_PERSISTENCE_API));
       war.addPackage(TransactionExtension.class.getPackage());
+      war.addPackage(TransactionScopeExtension.class.getPackage());
       war.addPackage(InjectionEventListener.class.getPackage());
       war.addPackage(NamingUtils.class.getPackage());
       war.addClasses(EntityInjectionTest.class, Hotel.class, ManagedPersistenceContextProvider.class, HelloService.class);

Modified: modules/persistence/trunk/impl/src/test/java/org/jboss/seam/persistence/test/ManagedPersistenceContextELTest.java
===================================================================
--- modules/persistence/trunk/impl/src/test/java/org/jboss/seam/persistence/test/ManagedPersistenceContextELTest.java	2010-08-28 02:48:04 UTC (rev 13662)
+++ modules/persistence/trunk/impl/src/test/java/org/jboss/seam/persistence/test/ManagedPersistenceContextELTest.java	2010-08-30 07:00:01 UTC (rev 13663)
@@ -35,6 +35,7 @@
 import org.jboss.seam.persistence.transaction.DefaultTransaction;
 import org.jboss.seam.persistence.transaction.SeamTransaction;
 import org.jboss.seam.persistence.transaction.TransactionExtension;
+import org.jboss.seam.persistence.transaction.scope.TransactionScopeExtension;
 import org.jboss.seam.persistence.util.NamingUtils;
 import org.jboss.seam.transactions.test.util.ArtifactNames;
 import org.jboss.seam.transactions.test.util.HelloService;
@@ -61,6 +62,7 @@
       war.addPackage(TransactionExtension.class.getPackage());
       war.addPackage(PersistenceContextExtension.class.getPackage());
       war.addPackage(TransactionExtension.class.getPackage());
+      war.addPackage(TransactionScopeExtension.class.getPackage());
       war.addPackage(NamingUtils.class.getPackage());
       war.addClasses(ManagedPersistenceContextELTest.class, Hotel.class, ManagedPersistenceContextProvider.class, HotelNameProducer.class, HelloService.class);
       war.addWebResource("META-INF/persistence.xml", "classes/META-INF/persistence.xml");

Modified: modules/persistence/trunk/impl/src/test/java/org/jboss/seam/persistence/test/ManagedPersistenceContextTest.java
===================================================================
--- modules/persistence/trunk/impl/src/test/java/org/jboss/seam/persistence/test/ManagedPersistenceContextTest.java	2010-08-28 02:48:04 UTC (rev 13662)
+++ modules/persistence/trunk/impl/src/test/java/org/jboss/seam/persistence/test/ManagedPersistenceContextTest.java	2010-08-30 07:00:01 UTC (rev 13663)
@@ -39,6 +39,7 @@
 import org.jboss.seam.persistence.transaction.DefaultTransaction;
 import org.jboss.seam.persistence.transaction.SeamTransaction;
 import org.jboss.seam.persistence.transaction.TransactionExtension;
+import org.jboss.seam.persistence.transaction.scope.TransactionScopeExtension;
 import org.jboss.seam.persistence.util.NamingUtils;
 import org.jboss.seam.transactions.test.util.ArtifactNames;
 import org.jboss.seam.transactions.test.util.HelloService;
@@ -63,6 +64,7 @@
       war.addLibraries(MavenArtifactResolver.resolve(ArtifactNames.SEAM_PERSISTENCE_API));
       war.addPackage(TransactionExtension.class.getPackage());
       war.addPackage(PersistenceContextExtension.class.getPackage());
+      war.addPackage(TransactionScopeExtension.class.getPackage());
       war.addPackage(NamingUtils.class.getPackage());
       war.addClasses(ManagedPersistenceContextTest.class, Hotel.class, ManagedPersistenceContextProvider.class, HelloService.class);
       war.addWebResource("META-INF/persistence.xml", "classes/META-INF/persistence.xml");

Modified: modules/persistence/trunk/impl/src/test/java/org/jboss/seam/persistence/transactions/test/TransactionAttributeInterceptorTest.java
===================================================================
--- modules/persistence/trunk/impl/src/test/java/org/jboss/seam/persistence/transactions/test/TransactionAttributeInterceptorTest.java	2010-08-28 02:48:04 UTC (rev 13662)
+++ modules/persistence/trunk/impl/src/test/java/org/jboss/seam/persistence/transactions/test/TransactionAttributeInterceptorTest.java	2010-08-30 07:00:01 UTC (rev 13663)
@@ -42,6 +42,7 @@
 import org.jboss.seam.persistence.transaction.SeamTransaction;
 import org.jboss.seam.persistence.transaction.TransactionExtension;
 import org.jboss.seam.persistence.transaction.TransactionInterceptor;
+import org.jboss.seam.persistence.transaction.scope.TransactionScopeExtension;
 import org.jboss.seam.persistence.util.NamingUtils;
 import org.jboss.seam.transactions.test.util.ArtifactNames;
 import org.jboss.seam.transactions.test.util.DontRollBackException;
@@ -76,6 +77,7 @@
       war.addLibraries(MavenArtifactResolver.resolve(ArtifactNames.SEAM_PERSISTENCE_API));
       war.addPackage(TransactionExtension.class.getPackage());
       war.addPackage(SeamPersistenceProvider.class.getPackage());
+      war.addPackage(TransactionScopeExtension.class.getPackage());
       war.addPackage(NamingUtils.class.getPackage());
       war.addClasses(TransactionAttributeInterceptorTest.class, TransactionAttributeManagedBean.class, HelloService.class, Hotel.class, EntityManagerProvider.class, DontRollBackException.class);
       war.addWebResource("META-INF/persistence.xml", "classes/META-INF/persistence.xml");

Modified: modules/persistence/trunk/impl/src/test/java/org/jboss/seam/persistence/transactions/test/TransactionInterceptorTest.java
===================================================================
--- modules/persistence/trunk/impl/src/test/java/org/jboss/seam/persistence/transactions/test/TransactionInterceptorTest.java	2010-08-28 02:48:04 UTC (rev 13662)
+++ modules/persistence/trunk/impl/src/test/java/org/jboss/seam/persistence/transactions/test/TransactionInterceptorTest.java	2010-08-30 07:00:01 UTC (rev 13663)
@@ -42,6 +42,7 @@
 import org.jboss.seam.persistence.transaction.SeamTransaction;
 import org.jboss.seam.persistence.transaction.TransactionExtension;
 import org.jboss.seam.persistence.transaction.TransactionInterceptor;
+import org.jboss.seam.persistence.transaction.scope.TransactionScopeExtension;
 import org.jboss.seam.persistence.util.NamingUtils;
 import org.jboss.seam.transactions.test.util.ArtifactNames;
 import org.jboss.seam.transactions.test.util.DontRollBackException;
@@ -75,6 +76,7 @@
       war.addLibraries(MavenArtifactResolver.resolve(ArtifactNames.WELD_EXTENSIONS));
       war.addLibraries(MavenArtifactResolver.resolve(ArtifactNames.SEAM_PERSISTENCE_API));
       war.addPackage(TransactionExtension.class.getPackage());
+      war.addPackage(TransactionScopeExtension.class.getPackage());
       war.addPackage(NamingUtils.class.getPackage());
       war.addPackage(SeamPersistenceProvider.class.getPackage());
       war.addClasses(TransactionInterceptorTest.class, TransactionManagedBean.class, HelloService.class, Hotel.class, EntityManagerProvider.class, DontRollBackException.class);



More information about the seam-commits mailing list