Catch Throwable to avoid propagating undeclared exceptions

git-svn-id: https://svn.apache.org/repos/asf/aries/branches/jpa-1.x@1784214 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/jpa-container-advancedtestbundle/pom.xml b/jpa-container-advancedtestbundle/pom.xml
index 4cb82ea..a4ae0be 100644
--- a/jpa-container-advancedtestbundle/pom.xml
+++ b/jpa-container-advancedtestbundle/pom.xml
@@ -30,7 +30,7 @@
 
     <groupId>org.apache.aries.jpa</groupId>
     <artifactId>org.apache.aries.jpa.container.advanced.itest.bundle</artifactId>
-    <version>1.0.1-SNAPSHOT</version>
+    <version>2.0.0-SNAPSHOT</version>
     <packaging>bundle</packaging>
     <name>Test Bundle for Aries JPA Container advanced iTests</name>
 
diff --git a/jpa-container-context/src/main/java/org/apache/aries/jpa/container/context/transaction/impl/JTAEntityManagerHandler.java b/jpa-container-context/src/main/java/org/apache/aries/jpa/container/context/transaction/impl/JTAEntityManagerHandler.java
index 7e94baf..2a2ed88 100644
--- a/jpa-container-context/src/main/java/org/apache/aries/jpa/container/context/transaction/impl/JTAEntityManagerHandler.java
+++ b/jpa-container-context/src/main/java/org/apache/aries/jpa/container/context/transaction/impl/JTAEntityManagerHandler.java
@@ -1,6 +1,7 @@
 package org.apache.aries.jpa.container.context.transaction.impl;
 
 import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.util.Arrays;
 import java.util.HashSet;
@@ -188,6 +189,28 @@
           new PersistenceException(NLS.MESSAGES.getMessage("wrong.JPA.version", new Object[]{
               method.getName(), delegate
           }), e);
+        } catch (final Throwable tActual) {
+            Throwable t = tActual;
+
+            while (t != null && t instanceof InvocationTargetException) {
+                t = ((InvocationTargetException) t).getTargetException();
+            }
+            if (t == null) {
+                throw new PersistenceException("unknown invocation target exception", tActual);
+            }
+
+            if (t instanceof RuntimeException) {
+                throw (RuntimeException) t;
+            }
+            if (t instanceof Error) {
+                throw (Error) t;
+            }
+            for (Class<?> declaredException : method.getExceptionTypes()) {
+                if (declaredException.isAssignableFrom(t.getClass())) {
+                    throw t;
+                }
+            }
+            throw new PersistenceException("unexpected un-declared exception " + tActual, tActual);
         }
         return res;
 
diff --git a/jpa-container-itest/pom.xml b/jpa-container-itest/pom.xml
index 1e2e95a..d6aad08 100644
--- a/jpa-container-itest/pom.xml
+++ b/jpa-container-itest/pom.xml
@@ -301,7 +301,7 @@
         <dependency>
             <groupId>org.apache.aries.jpa</groupId>
             <artifactId>org.apache.aries.jpa.container.advanced.itest.bundle</artifactId>
-            <version>1.0.1-SNAPSHOT</version>
+            <version>2.0.0-SNAPSHOT</version>
             <scope>test</scope>
         </dependency>
         <dependency>