1 22 package org.jboss.ejb3.entity; 23 24 import java.util.Map ; 25 import javax.persistence.EntityManager; 26 import javax.transaction.TransactionManager ; 27 import org.jboss.aop.advice.Interceptor; 28 import org.jboss.aop.joinpoint.Invocation; 29 import org.jboss.ejb3.PersistenceUnitRegistry; 30 import org.jboss.ejb3.stateful.StatefulBeanContext; 31 import org.jboss.ejb3.stateful.StatefulContainerInvocation; 32 import org.jboss.ejb3.tx.TxUtil; 33 import org.jboss.logging.Logger; 34 35 39 public class ExtendedPersistenceContextPropagationInterceptor implements Interceptor 40 { 41 private static final Logger log = Logger.getLogger(ExtendedPersistenceContextPropagationInterceptor.class); 42 43 public String getName() 44 { 45 return this.getClass().getName(); 46 } 47 48 public Object invoke(Invocation invocation) throws Throwable 49 { 50 log.debug("++++ LongLivedSessionPropagationInterceptor"); 51 StatefulContainerInvocation ejb = (StatefulContainerInvocation) invocation; 52 StatefulBeanContext ctx = (StatefulBeanContext) ejb.getBeanContext(); 53 54 Map <String , EntityManager> extendedPCs = ctx.getExtendedPersistenceContexts(); 55 if (extendedPCs == null || extendedPCs.size() == 0) 56 { 57 return invocation.invokeNext(); 58 } 59 60 TransactionManager tm = TxUtil.getTransactionManager(); 61 if (tm.getTransaction() != null) 62 { 63 for (String kernelname : extendedPCs.keySet()) 64 { 65 EntityManager manager = extendedPCs.get(kernelname); 66 ManagedEntityManagerFactory factory = PersistenceUnitRegistry.getPersistenceUnit(kernelname).getManagedFactory(); 67 factory.registerExtendedWithTransaction(manager); 68 } 69 } 70 71 return invocation.invokeNext(); 72 } 73 } 74 | Popular Tags |