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);
}
}