You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by da...@apache.org on 2007/04/25 03:36:22 UTC

svn commit: r532164 - /incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/jpa/JpaCmpEngine.java

Author: dain
Date: Tue Apr 24 18:36:21 2007
New Revision: 532164

URL: http://svn.apache.org/viewvc?view=rev&rev=532164
Log:
Acquire the entity manager inside of the transaction

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

Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/jpa/JpaCmpEngine.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/jpa/JpaCmpEngine.java?view=diff&rev=532164&r1=532163&r2=532164
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/jpa/JpaCmpEngine.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/jpa/JpaCmpEngine.java Tue Apr 24 18:36:21 2007
@@ -129,26 +129,26 @@
     }
 
     public Object createBean(EntityBean bean, ThreadContext callContext) throws CreateException {
-        CoreDeploymentInfo deploymentInfo = callContext.getDeploymentInfo();
-        EntityManager entityManager = getEntityManager(deploymentInfo);
-
         // TODO verify that extract primary key requires a flush followed by a merge
         boolean startedTx = startTransaction("persist");
         creating.get().add(bean);
         try {
+            CoreDeploymentInfo deploymentInfo = callContext.getDeploymentInfo();
+            EntityManager entityManager = getEntityManager(deploymentInfo);
+
             entityManager.persist(bean);
             entityManager.flush();
             bean = entityManager.merge(bean);
+
+            // extract the primary key from the bean
+            KeyGenerator kg = deploymentInfo.getKeyGenerator();
+            Object primaryKey = kg.getPrimaryKey(bean);
+
+            return primaryKey;
         } finally {
             creating.get().remove(bean);
             commitTransaction(startedTx, "persist");
         }
-
-        // extract the primary key from the bean
-        KeyGenerator kg = deploymentInfo.getKeyGenerator();
-        Object primaryKey = kg.getPrimaryKey(bean);
-
-        return primaryKey;
     }
 
     public Object loadBean(ThreadContext callContext, Object primaryKey) {
@@ -156,6 +156,7 @@
         try {
             CoreDeploymentInfo deploymentInfo = callContext.getDeploymentInfo();
             Class<?> beanClass = deploymentInfo.getCmpImplClass();
+
             EntityManager entityManager = getEntityManager(deploymentInfo);
             Object bean = entityManager.find(beanClass, primaryKey);
             return bean;
@@ -193,26 +194,26 @@
     }
 
     public List<Object> queryBeans(ThreadContext callContext, Method queryMethod, Object[] args) throws FinderException {
-        CoreDeploymentInfo deploymentInfo = callContext.getDeploymentInfo();
-        EntityManager entityManager = getEntityManager(deploymentInfo);
+        boolean startedTx = startTransaction("query");
+        try {
+            CoreDeploymentInfo deploymentInfo = callContext.getDeploymentInfo();
+            EntityManager entityManager = getEntityManager(deploymentInfo);
 
-        StringBuilder queryName = new StringBuilder();
-        queryName.append(deploymentInfo.getAbstractSchemaName()).append(".").append(queryMethod.getName());
-        String shortName = queryName.toString();
-        if (queryMethod.getParameterTypes().length > 0) {
-            queryName.append('(');
-            boolean first = true;
-            for (Class<?> parameterType : queryMethod.getParameterTypes()) {
-                if (!first) queryName.append(',');
-                queryName.append(parameterType.getCanonicalName());
-                first = false;
-            }
-            queryName.append(')');
+            StringBuilder queryName = new StringBuilder();
+            queryName.append(deploymentInfo.getAbstractSchemaName()).append(".").append(queryMethod.getName());
+            String shortName = queryName.toString();
+            if (queryMethod.getParameterTypes().length > 0) {
+                queryName.append('(');
+                boolean first = true;
+                for (Class<?> parameterType : queryMethod.getParameterTypes()) {
+                    if (!first) queryName.append(',');
+                    queryName.append(parameterType.getCanonicalName());
+                    first = false;
+                }
+                queryName.append(')');
 
-        }
+            }
 
-        boolean startedTx = startTransaction("query");
-        try {
             String fullName = queryName.toString();
             Query query = createNamedQuery(entityManager, fullName);
             if (query == null) {
@@ -228,10 +229,10 @@
     }
 
     public List<Object> queryBeans(CoreDeploymentInfo deploymentInfo, String signature, Object[] args) throws FinderException {
-        EntityManager entityManager = getEntityManager(deploymentInfo);
-
         boolean startedTx = startTransaction("query");
         try {
+            EntityManager entityManager = getEntityManager(deploymentInfo);
+
             Query query = createNamedQuery(entityManager, signature);
             if (query == null) {
                 int parenIndex = signature.indexOf('(');