[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