You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by gp...@apache.org on 2011/11/01 17:07:06 UTC
svn commit: r1196076 - in
/myfaces/extensions/cdi/trunk/jee-modules/jpa-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jpa/impl/transaction:
./ context/
Author: gpetracek
Date: Tue Nov 1 16:07:05 2011
New Revision: 1196076
URL: http://svn.apache.org/viewvc?rev=1196076&view=rev
Log:
EXTCDI-223 cleanup
Added:
myfaces/extensions/cdi/trunk/jee-modules/jpa-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jpa/impl/transaction/context/TransactionBeanEntry.java (contents, props changed)
- copied, changed from r1176771, myfaces/extensions/cdi/trunk/jee-modules/jpa-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jpa/impl/transaction/context/TransactionBeanBag.java
Removed:
myfaces/extensions/cdi/trunk/jee-modules/jpa-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jpa/impl/transaction/context/TransactionBeanBag.java
Modified:
myfaces/extensions/cdi/trunk/jee-modules/jpa-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jpa/impl/transaction/TransactionalInterceptorStrategy.java
myfaces/extensions/cdi/trunk/jee-modules/jpa-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jpa/impl/transaction/context/TransactionBeanStorage.java
myfaces/extensions/cdi/trunk/jee-modules/jpa-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jpa/impl/transaction/context/TransactionContext.java
Modified: myfaces/extensions/cdi/trunk/jee-modules/jpa-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jpa/impl/transaction/TransactionalInterceptorStrategy.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jpa-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jpa/impl/transaction/TransactionalInterceptorStrategy.java?rev=1196076&r1=1196075&r2=1196076&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jpa-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jpa/impl/transaction/TransactionalInterceptorStrategy.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jpa-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jpa/impl/transaction/TransactionalInterceptorStrategy.java Tue Nov 1 16:07:05 2011
@@ -62,9 +62,11 @@ public class TransactionalInterceptorStr
private static final Logger LOGGER = Logger.getLogger(TransactionalInterceptorStrategy.class.getName());
- private @Inject BeanManager beanManager;
+ @Inject
+ private BeanManager beanManager;
- private @Inject TransactionBeanStorage transactionBeanStorage;
+ @Inject
+ private TransactionBeanStorage transactionBeanStorage;
/** key=qualifier name, value= reference counter */
@@ -85,24 +87,18 @@ public class TransactionalInterceptorStr
// the 'layer' of the transactional invocation, aka the refCounter for the current qualifier
int transactionLayer = incrementRefCounter(qualifierKey);
+
if (transactionLayer == 0)
{
// 0 indicates that a new Context needs to get started
transactionBeanStorage.startTransactionScope(qualifierKey);
}
- String previousTransactionKey = transactionBeanStorage.activateTransactionScope(qualifierKey);
-
- Bean<EntityManager> entityManagerBean = resolveEntityManagerBean(qualifierClass);
- EntityManager entityManager = (EntityManager) beanManager.getReference(entityManagerBean, EntityManager.class,
- beanManager.createCreationalContext(entityManagerBean));
+ String previousTransactionKey = transactionBeanStorage.activateTransactionScope(qualifierKey);
- if (ems.get() == null)
- {
- ems.set(new HashMap<String, EntityManager>());
- }
- ems.get().put(qualifierKey, entityManager);
+ EntityManager entityManager = resolveEntityManagerForQualifier(qualifierClass);
+ storeEntityManagerForQualifier(qualifierKey, entityManager);
EntityTransaction transaction = entityManager.getTransaction();
@@ -139,9 +135,12 @@ public class TransactionalInterceptorStr
}
catch (Exception eRollback)
{
- LOGGER.log(Level.SEVERE,
- "Got additional Exception while subsequently " +
- "rolling back other SQL transactions", eRollback);
+ if(LOGGER.isLoggable(Level.SEVERE))
+ {
+ LOGGER.log(Level.SEVERE,
+ "Got additional Exception while subsequently " +
+ "rolling back other SQL transactions", eRollback);
+ }
}
}
}
@@ -238,10 +237,28 @@ public class TransactionalInterceptorStr
if (commitFailed)
{
+ //noinspection ThrowFromFinallyBlock
throw firstException;
}
}
+ }
+
+ private EntityManager resolveEntityManagerForQualifier(Class<? extends Annotation> qualifierClass)
+ {
+ Bean<EntityManager> entityManagerBean = resolveEntityManagerBean(qualifierClass);
+
+ return (EntityManager) beanManager.getReference(entityManagerBean, EntityManager.class,
+ beanManager.createCreationalContext(entityManagerBean));
+ }
+
+ private void storeEntityManagerForQualifier(String qualifierKey, EntityManager entityManager)
+ {
+ if (ems.get() == null)
+ {
+ ems.set(new HashMap<String, EntityManager>());
+ }
+ ems.get().put(qualifierKey, entityManager);
}
/**
@@ -360,9 +377,7 @@ public class TransactionalInterceptorStr
{
entityManagerBeans = new HashSet<Bean<?>>();
}
- Bean<EntityManager> entityManagerBean = null;
- it:
for (Bean<?> currentEntityManagerBean : entityManagerBeans)
{
Set<Annotation> foundQualifierAnnotations = currentEntityManagerBean.getQualifiers();
@@ -371,12 +386,10 @@ public class TransactionalInterceptorStr
{
if (currentQualifierAnnotation.annotationType().equals(qualifierClass))
{
- entityManagerBean = (Bean<EntityManager>) currentEntityManagerBean;
- break it;
+ return (Bean<EntityManager>) currentEntityManagerBean;
}
}
}
- return entityManagerBean;
+ return null;
}
-
}
Copied: myfaces/extensions/cdi/trunk/jee-modules/jpa-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jpa/impl/transaction/context/TransactionBeanEntry.java (from r1176771, myfaces/extensions/cdi/trunk/jee-modules/jpa-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jpa/impl/transaction/context/TransactionBeanBag.java)
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jpa-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jpa/impl/transaction/context/TransactionBeanEntry.java?p2=myfaces/extensions/cdi/trunk/jee-modules/jpa-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jpa/impl/transaction/context/TransactionBeanEntry.java&p1=myfaces/extensions/cdi/trunk/jee-modules/jpa-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jpa/impl/transaction/context/TransactionBeanBag.java&r1=1176771&r2=1196076&rev=1196076&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jpa-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jpa/impl/transaction/context/TransactionBeanBag.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jpa-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jpa/impl/transaction/context/TransactionBeanEntry.java Tue Nov 1 16:07:05 2011
@@ -25,13 +25,13 @@ import javax.enterprise.context.spi.Crea
* Holds the information we need store to manage
* the beans in the {@link TransactionContext}.
*/
-public class TransactionBeanBag<T>
+public class TransactionBeanEntry<T>
{
private Contextual<T> bean;
private T contextualInstance;
private CreationalContext<T> creationalContext;
- public TransactionBeanBag(Contextual<T> bean, T contextualInstance, CreationalContext<T> creationalContext)
+ public TransactionBeanEntry(Contextual<T> bean, T contextualInstance, CreationalContext<T> creationalContext)
{
this.bean = bean;
this.contextualInstance = contextualInstance;
Propchange: myfaces/extensions/cdi/trunk/jee-modules/jpa-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jpa/impl/transaction/context/TransactionBeanEntry.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: myfaces/extensions/cdi/trunk/jee-modules/jpa-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jpa/impl/transaction/context/TransactionBeanStorage.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jpa-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jpa/impl/transaction/context/TransactionBeanStorage.java?rev=1196076&r1=1196075&r2=1196076&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jpa-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jpa/impl/transaction/context/TransactionBeanStorage.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jpa-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jpa/impl/transaction/context/TransactionBeanStorage.java Tue Nov 1 16:07:05 2011
@@ -19,12 +19,12 @@
package org.apache.myfaces.extensions.cdi.jpa.impl.transaction.context;
import javax.annotation.PreDestroy;
-import javax.enterprise.context.ContextNotActiveException;
import javax.enterprise.context.RequestScoped;
import javax.enterprise.context.spi.Contextual;
import java.util.HashMap;
import java.util.Map;
import java.util.Stack;
+import java.util.logging.Level;
import java.util.logging.Logger;
/**
@@ -33,7 +33,7 @@ import java.util.logging.Logger;
* contextual instances, their {@link javax.enterprise.context.spi.CreationalContext} etc.</p>
*
* <p>We use a RequestScoped bean because this way we don't need to take
- * care about cleaning up any ThreadLocals ourselfs. This also makes sure that
+ * care about cleaning up any ThreadLocals ourselves. This also makes sure that
* we subsequently destroy any left over TransactionScoped beans (which should not happen,
* but who knows). We also don't need to do any fancy synchronization stuff since
* we are sure that we are always in the same Thread.</p>
@@ -54,10 +54,10 @@ public class TransactionBeanStorage
* </ol>
*
*/
- private Map<String, Stack<Map<Contextual, TransactionBeanBag>>> storedTransactionContexts =
- new HashMap<String, Stack<Map<Contextual, TransactionBeanBag>>>();
+ private Map<String, Stack<Map<Contextual, TransactionBeanEntry>>> storedTransactionContexts =
+ new HashMap<String, Stack<Map<Contextual, TransactionBeanEntry>>>();
- private Map<Contextual, TransactionBeanBag> activeTransactionContext;
+ private Map<Contextual, TransactionBeanEntry> activeTransactionContext;
private String activeTransactionKey = null;
@@ -67,16 +67,20 @@ public class TransactionBeanStorage
*/
public void startTransactionScope(String transactionKey)
{
- LOGGER.finer( "starting TransactionScope " + transactionKey);
- Stack<Map<Contextual, TransactionBeanBag>> transStack = storedTransactionContexts.get(transactionKey);
+ if(LOGGER.isLoggable(Level.FINER))
+ {
+ LOGGER.finer( "starting TransactionScope " + transactionKey);
+ }
+
+ Stack<Map<Contextual, TransactionBeanEntry>> transStack = storedTransactionContexts.get(transactionKey);
if (transStack == null)
{
- transStack = new Stack<Map<Contextual, TransactionBeanBag>>();
+ transStack = new Stack<Map<Contextual, TransactionBeanEntry>>();
storedTransactionContexts.put(transactionKey, transStack);
}
- transStack.push(new HashMap<Contextual, TransactionBeanBag>());
+ transStack.push(new HashMap<Contextual, TransactionBeanEntry>());
}
/**
@@ -87,18 +91,20 @@ public class TransactionBeanStorage
*/
public void endTransactionScope(String transactionKey)
{
- LOGGER.finer( "ending TransactionScope " + transactionKey);
+ if(LOGGER.isLoggable(Level.FINER))
+ {
+ LOGGER.finer( "ending TransactionScope " + transactionKey);
+ }
// drop the context from the storage
- Stack<Map<Contextual, TransactionBeanBag>> transStack = storedTransactionContexts.get(transactionKey);
- Map<Contextual, TransactionBeanBag> beans = transStack.pop();
+ Stack<Map<Contextual, TransactionBeanEntry>> transStack = storedTransactionContexts.get(transactionKey);
+ Map<Contextual, TransactionBeanEntry> beans = transStack.pop();
destroyBeans(beans);
if (transStack.size() == 0)
{
storedTransactionContexts.remove(transactionKey);
}
-
}
/**
@@ -113,19 +119,25 @@ public class TransactionBeanStorage
*/
public String activateTransactionScope(String transactionKey)
{
- LOGGER.finer( "activating TransactionScope " + transactionKey);
+ if(LOGGER.isLoggable(Level.FINER))
+ {
+ LOGGER.finer( "activating TransactionScope " + transactionKey);
+ }
+ //can be null on the topmost stack-layer
if (transactionKey == null)
{
+ //TODO refactor it to a reset method
activeTransactionKey = null;
activeTransactionContext = null;
return null;
}
- Stack<Map<Contextual, TransactionBeanBag>> transStack = storedTransactionContexts.get(transactionKey);
+ Stack<Map<Contextual, TransactionBeanEntry>> transStack = storedTransactionContexts.get(transactionKey);
+
if (transStack == null)
{
- throw new ContextNotActiveException("Cannot activate TransactionScope with key " + transactionKey);
+ throw new IllegalStateException("Cannot activate TransactionScope with key " + transactionKey);
}
activeTransactionContext = transStack.peek();
@@ -141,18 +153,22 @@ public class TransactionBeanStorage
*/
public void endAllTransactionScopes()
{
- LOGGER.finer( "destroying all TransactionScopes");
+ if(LOGGER.isLoggable(Level.FINER))
+ {
+ LOGGER.finer( "destroying all TransactionScopes");
+ }
- for (Stack<Map<Contextual, TransactionBeanBag>> transStack : storedTransactionContexts.values())
+ for (Stack<Map<Contextual, TransactionBeanEntry>> transStack : storedTransactionContexts.values())
{
while (!transStack.isEmpty())
{
- Map<Contextual, TransactionBeanBag> beans = transStack.pop();
+ Map<Contextual, TransactionBeanEntry> beans = transStack.pop();
destroyBeans(beans);
}
}
// we also need to clean our active context info
+ storedTransactionContexts.clear();
activeTransactionContext = null;
activeTransactionKey = null;
}
@@ -161,7 +177,7 @@ public class TransactionBeanStorage
/**
* @return the Map which represents the currently active Context content.
*/
- public Map<Contextual, TransactionBeanBag> getActiveTransactionContext()
+ public Map<Contextual, TransactionBeanEntry> getActiveTransactionContext()
{
return activeTransactionContext;
}
@@ -180,14 +196,12 @@ public class TransactionBeanStorage
* Properly destroy all the given beans.
* @param activeBeans
*/
- private void destroyBeans(Map<Contextual, TransactionBeanBag> activeBeans)
+ private void destroyBeans(Map<Contextual, TransactionBeanEntry> activeBeans)
{
- for (TransactionBeanBag beanBag : activeBeans.values())
+ for (TransactionBeanEntry beanBag : activeBeans.values())
{
beanBag.getBean().destroy(beanBag.getContextualInstance(), beanBag.getCreationalContext());
}
}
-
-
}
Modified: myfaces/extensions/cdi/trunk/jee-modules/jpa-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jpa/impl/transaction/context/TransactionContext.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jpa-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jpa/impl/transaction/context/TransactionContext.java?rev=1196076&r1=1196075&r2=1196076&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jpa-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jpa/impl/transaction/context/TransactionContext.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jpa-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jpa/impl/transaction/context/TransactionContext.java Tue Nov 1 16:07:05 2011
@@ -20,6 +20,7 @@ package org.apache.myfaces.extensions.cd
import org.apache.myfaces.extensions.cdi.jpa.api.TransactionScoped;
+import org.apache.myfaces.extensions.cdi.jpa.api.Transactional;
import javax.enterprise.context.ContextNotActiveException;
import javax.enterprise.context.spi.Context;
@@ -45,17 +46,18 @@ public class TransactionContext implemen
public <T> T get(Contextual<T> component)
{
- Map<Contextual, TransactionBeanBag> beanBags = beanStorage.getActiveTransactionContext();
+ Map<Contextual, TransactionBeanEntry> transactionBeanEntryMap = beanStorage.getActiveTransactionContext();
- if (beanBags == null)
+ if (transactionBeanEntryMap == null)
{
- throw new ContextNotActiveException();
+ throw new ContextNotActiveException("Not accessed within a transactional method - use @" +
+ Transactional.class.getName());
}
- TransactionBeanBag beanBag = beanBags.get(component);
- if (beanBag != null)
+ TransactionBeanEntry transactionBeanEntry = transactionBeanEntryMap.get(component);
+ if (transactionBeanEntry != null)
{
- return (T) beanBag.getContextualInstance();
+ return (T) transactionBeanEntry.getContextualInstance();
}
return null;
@@ -63,23 +65,24 @@ public class TransactionContext implemen
public <T> T get(Contextual<T> component, CreationalContext<T> creationalContext)
{
- Map<Contextual, TransactionBeanBag> beanBags = beanStorage.getActiveTransactionContext();
+ Map<Contextual, TransactionBeanEntry> transactionBeanEntryMap = beanStorage.getActiveTransactionContext();
- if (beanBags == null)
+ if (transactionBeanEntryMap == null)
{
- throw new ContextNotActiveException();
+ throw new ContextNotActiveException("Not accessed within a transactional method - use @" +
+ Transactional.class.getName());
}
- TransactionBeanBag beanBag = beanBags.get(component);
- if (beanBag != null)
+ TransactionBeanEntry transactionBeanEntry = transactionBeanEntryMap.get(component);
+ if (transactionBeanEntry != null)
{
- return (T) beanBag.getContextualInstance();
+ return (T) transactionBeanEntry.getContextualInstance();
}
// if it doesn't yet exist, we need to create it now!
T instance = component.create(creationalContext);
- beanBag = new TransactionBeanBag(component, instance, creationalContext);
- beanBags.put(component, beanBag);
+ transactionBeanEntry = new TransactionBeanEntry(component, instance, creationalContext);
+ transactionBeanEntryMap.put(component, transactionBeanEntry);
return instance;
}
@@ -95,12 +98,11 @@ public class TransactionContext implemen
{
return beanStorage.getActiveTransactionContext() != null;
}
- catch(ContextNotActiveException cnae)
+ catch (ContextNotActiveException e)
{
return false;
}
}
-
}