Now working with both hibernate and eclipselink
[utils] / test / enterprise / src / main / java / org / wamblee / support / persistence / JpaBuilder.java
index f83172ebffeda250f23741b7f5f0e0ca7186e346..d3b7e179f9e0d56ffe781c7c482e1d8f0470365b 100644 (file)
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2005-2010 the original author or authors.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
 package org.wamblee.support.persistence;
 
 import java.util.Map;
@@ -11,6 +26,7 @@ import javax.persistence.EntityManager;
 import javax.persistence.EntityManagerFactory;
 import javax.persistence.EntityTransaction;
 import javax.persistence.Persistence;
+import javax.persistence.PersistenceException;
 import javax.sql.DataSource;
 
 import org.wamblee.support.jndi.StubInitialContextFactory;
@@ -37,13 +53,13 @@ public class JpaBuilder {
         /**
          * Executes the unit of work. A transaction has been started.
          * 
-         * @param em
+         * @param aEm
          *            Entity manager.
          * @return Result of the execute method. If you don't want to return
          *         anything use <code>Void</code> for the return type and return
          *         null from the implementation.
          */
-        T execute(EntityManager em);
+        T execute(EntityManager aEm) throws Exception;
     }
 
     private PersistenceUnitDescription persistenceUnit;
@@ -78,12 +94,17 @@ public class JpaBuilder {
             throw new RuntimeException("JNDI problem", e);
         }
         factory = createFactory();
-        execute(new JpaUnitOfWork<Void>() {
-            public Void execute(EntityManager em) {
-                // Empty, just to trigger database schema creation.
-                return null;
-            }
-        });
+        try {
+            execute(new JpaUnitOfWork<Void>() {
+                public Void execute(EntityManager aEm) {
+                    // Empty, just to trigger database schema creation.
+                    return null;
+                }
+            });
+        } catch (PersistenceException e) {
+            factory.close();
+            throw e;
+        }
     }
 
     /**