Author: dain
Date: Tue Oct 16 01:04:32 2007
New Revision: 585071

URL: http://svn.apache.org/viewvc?rev=585071&view=rev
Log:
Use simpler OpenJPAEntityManagerFactorySPI to register for jpa lifecycle 
callbacks
Pass TransactionSynchronizationRegistry to CmpEnting instead of looking it up 
in SystemInstance

Modified:
    
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/CmpContainer.java
    
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/CmpEngineFactory.java
    
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/jpa/JpaCmpEngine.java
    
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/jpa/JpaCmpEngineFactory.java

Modified: 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/CmpContainer.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/CmpContainer.java?rev=585071&r1=585070&r2=585071&view=diff
==============================================================================
--- 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/CmpContainer.java
 (original)
+++ 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/CmpContainer.java
 Tue Oct 16 01:04:32 2007
@@ -122,6 +122,7 @@
             throw new OpenEJBException("Unable to create cmp engine factory " 
+ cmpEngineFactory, e);
         }
         factory.setTransactionManager(transactionManager);
+        factory.setTransactionSynchronizationRegistry(synchronizationRegistry);
         factory.setConnectorName(connectorName);
         factory.setCmpCallback(new ContainerCmpCallback());
         factory.setEngine(engine);

Modified: 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/CmpEngineFactory.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/CmpEngineFactory.java?rev=585071&r1=585070&r2=585071&view=diff
==============================================================================
--- 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/CmpEngineFactory.java
 (original)
+++ 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/CmpEngineFactory.java
 Tue Oct 16 01:04:32 2007
@@ -20,6 +20,7 @@
 import org.apache.openejb.OpenEJBException;
 
 import javax.transaction.TransactionManager;
+import javax.transaction.TransactionSynchronizationRegistry;
 
 public interface CmpEngineFactory {
     String getJarPath();
@@ -29,6 +30,10 @@
     TransactionManager getTransactionManager();
 
     void setTransactionManager(TransactionManager transactionManager);
+
+    TransactionSynchronizationRegistry getTransactionSynchronizationRegistry();
+
+    void 
setTransactionSynchronizationRegistry(TransactionSynchronizationRegistry 
synchronizationRegistry);
 
     String getEngine();
 

Modified: 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/jpa/JpaCmpEngine.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/jpa/JpaCmpEngine.java?rev=585071&r1=585070&r2=585071&view=diff
==============================================================================
--- 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/jpa/JpaCmpEngine.java
 (original)
+++ 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/jpa/JpaCmpEngine.java
 Tue Oct 16 01:04:32 2007
@@ -27,10 +27,10 @@
 import org.apache.openejb.core.cmp.SimpleKeyGenerator;
 import org.apache.openejb.core.cmp.cmp2.Cmp2KeyGenerator;
 import org.apache.openejb.core.cmp.cmp2.Cmp2Util;
-import org.apache.openejb.loader.SystemInstance;
 import org.apache.openjpa.event.AbstractLifecycleListener;
 import org.apache.openjpa.event.LifecycleEvent;
 import org.apache.openjpa.persistence.OpenJPAEntityManagerSPI;
+import org.apache.openjpa.persistence.OpenJPAEntityManagerFactorySPI;
 
 import javax.ejb.CreateException;
 import javax.ejb.EJBException;
@@ -52,30 +52,37 @@
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-import java.util.WeakHashMap;
 
 public class JpaCmpEngine implements CmpEngine {
     private static final Object[] NO_ARGS = new Object[0];
     public static final String CMP_PERSISTENCE_CONTEXT_REF_NAME = 
"openejb/cmp";
 
+    /**
+     * Used to notify call CMP callback methods.
+     */
     private final CmpCallback cmpCallback;
+
     private final TransactionManager transactionManager;
-    private final TransactionSynchronizationRegistry synchronizationRegistry = 
SystemInstance.get().getComponent(TransactionSynchronizationRegistry.class);
+    private final TransactionSynchronizationRegistry synchronizationRegistry;
 
     /**
-     * Used to track which entity managers have had the live cycle listener 
registered
+     * Thread local to track the beans we are creating to avoid an extra 
ejbStore callback
      */
-    private final WeakHashMap<EntityManager,Object> entityManagerListeners = 
new WeakHashMap<EntityManager,Object>();
-
     private final ThreadLocal<Set<EntityBean>> creating = new 
ThreadLocal<Set<EntityBean>>() {
         protected Set<EntityBean> initialValue() {
             return new HashSet<EntityBean>();
         }
     };
 
-    public JpaCmpEngine(CmpCallback cmpCallback, TransactionManager 
transactionManager) {
+    /**
+     * Listener added to entity managers.
+     */
+    protected Object entityManagerListener;
+
+    public JpaCmpEngine(CmpCallback cmpCallback, TransactionManager 
transactionManager, TransactionSynchronizationRegistry synchronizationRegistry) 
{
         this.cmpCallback = cmpCallback;
         this.transactionManager = transactionManager;
+        this.synchronizationRegistry = synchronizationRegistry;
     }
 
     public synchronized void deploy(CoreDeploymentInfo deploymentInfo) throws 
OpenEJBException {
@@ -103,16 +110,14 @@
     }
 
     private synchronized void registerListener(EntityManager entityManager) {
-        // check if listener is already registered
-        if (entityManagerListeners.containsKey(entityManager)) {
-            return;
-        }
-
         if (entityManager instanceof OpenJPAEntityManagerSPI) {
             OpenJPAEntityManagerSPI openjpaEM = (OpenJPAEntityManagerSPI) 
entityManager;
-            OpenJPALifecycleListener listener = new OpenJPALifecycleListener();
-            openjpaEM.addLifecycleListener(listener, (Class[])null);
-            entityManagerListeners.put(entityManager,  null);
+            OpenJPAEntityManagerFactorySPI openjpaEMF = 
(OpenJPAEntityManagerFactorySPI) openjpaEM.getEntityManagerFactory();
+
+            if (entityManagerListener == null) {
+                entityManagerListener = new OpenJPALifecycleListener();
+            }
+            openjpaEMF.addLifecycleListener(entityManagerListener, 
(Class[])null);
             return;
         }
 

Modified: 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/jpa/JpaCmpEngineFactory.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/jpa/JpaCmpEngineFactory.java?rev=585071&r1=585070&r2=585071&view=diff
==============================================================================
--- 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/jpa/JpaCmpEngineFactory.java
 (original)
+++ 
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/jpa/JpaCmpEngineFactory.java
 Tue Oct 16 01:04:32 2007
@@ -23,10 +23,12 @@
 import org.apache.openejb.OpenEJBException;
 
 import javax.transaction.TransactionManager;
+import javax.transaction.TransactionSynchronizationRegistry;
 
 public class JpaCmpEngineFactory implements CmpEngineFactory {
     private String jarPath;
     private TransactionManager transactionManager;
+    private TransactionSynchronizationRegistry 
transactionSynchronizationRegistry;
     private String engine;
     private String connectorName;
     private CmpCallback cmpCallback;
@@ -48,6 +50,14 @@
         this.transactionManager = transactionManager;
     }
 
+    public TransactionSynchronizationRegistry 
getTransactionSynchronizationRegistry() {
+        return transactionSynchronizationRegistry;
+    }
+
+    public void 
setTransactionSynchronizationRegistry(TransactionSynchronizationRegistry 
transactionSynchronizationRegistry) {
+        this.transactionSynchronizationRegistry = 
transactionSynchronizationRegistry;
+    }
+
     public String getEngine() {
         return engine;
     }
@@ -81,6 +91,6 @@
     }
 
     public CmpEngine create() throws OpenEJBException {
-        return new JpaCmpEngine(cmpCallback, transactionManager);
+        return new JpaCmpEngine(cmpCallback, transactionManager, 
transactionSynchronizationRegistry);
     }
 }


Reply via email to