You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by cs...@apache.org on 2015/11/11 20:15:00 UTC

svn commit: r1713916 [2/2] - in /aries/trunk/jpa: examples/tasklist-blueprint/src/main/java/org/apache/aries/jpa/example/tasklist/blueprint/impl/ examples/tasklist-ds/src/main/java/org/apache/aries/jpa/example/tasklist/ds/impl/ examples/tasklist-model/...

Modified: aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/parser/impl/PersistenceUnitParser.java
URL: http://svn.apache.org/viewvc/aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/parser/impl/PersistenceUnitParser.java?rev=1713916&r1=1713915&r2=1713916&view=diff
==============================================================================
--- aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/parser/impl/PersistenceUnitParser.java (original)
+++ aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/parser/impl/PersistenceUnitParser.java Wed Nov 11 19:14:59 2015
@@ -42,8 +42,11 @@ import org.slf4j.LoggerFactory;
  */
 public class PersistenceUnitParser {
     private static final String DEFAULT_PERSISTENCE_LOCATION = "META-INF/persistence.xml";
-    private static final Logger _logger = LoggerFactory.getLogger("org.apache.aries.jpa.container");
+    private static final Logger LOG = LoggerFactory.getLogger("org.apache.aries.jpa.container");
     public static final String PERSISTENCE_UNIT_HEADER = "Meta-Persistence";
+    
+    private PersistenceUnitParser() {
+    }
 
     /**
      * This method locates persistence descriptor files based on a combination of the default location
@@ -82,10 +85,10 @@ public class PersistenceUnitParser {
             try {
                 InputStream is = locateFile(bundle, location);
                 if (is != null) {
-                    parse(bundle, location, is, punits);
+                    parse(bundle, is, punits);
                 }
             } catch (Exception e) {
-                _logger.error("exception.while.locating.descriptor", e);
+                LOG.error("exception.while.locating.descriptor", e);
                 return Collections.emptySet();
             }
         }
@@ -93,7 +96,7 @@ public class PersistenceUnitParser {
         return punits;
     }
 
-    private static void parse(Bundle bundle, String location, InputStream is, Collection<PersistenceUnit> punits) {
+    private static void parse(Bundle bundle, InputStream is, Collection<PersistenceUnit> punits) {
         SAXParserFactory parserFactory = SAXParserFactory.newInstance();
         try {
             SAXParser parser = parserFactory.newSAXParser();
@@ -101,7 +104,7 @@ public class PersistenceUnitParser {
             parser.parse(is, handler);
             punits.addAll(handler.getPersistenceUnits());
         } catch (Exception e) {
-            throw new RuntimeException("persistence.description.parse.error", e);
+            throw new RuntimeException("Error parsing persistence unit in bundle " + bundle.getSymbolicName(), e); // NOSONAR
         } finally {
             safeClose(is);
         }
@@ -112,7 +115,7 @@ public class PersistenceUnitParser {
             try {
                 is.close();
             } catch (IOException e) {
-                // No logging necessary, just consume
+                LOG.debug("Exception while closing", e);
             }
         }
     }
@@ -127,41 +130,38 @@ public class PersistenceUnitParser {
      */
     private static InputStream locateFile(Bundle bundle, String location) throws IOException {
         // There is nothing for an empty location
-        InputStream is = null;
         if ("".equals(location)) {
             return null;
         }
 
         // If there is a '!' then we have to look in a jar
         int bangIndex = location.indexOf('!');
-        // No '!', getEntry will do
         if (bangIndex == -1) {
             URL url = bundle.getEntry(location);
 
-            if (url != null)
-                is = url.openStream();
-
+            if (url != null) {
+                return url.openStream();
+            }
         } else {
-            // There was a '!', find the jar
             URL url = bundle.getEntry(location.substring(0, bangIndex));
-
             if (url != null) {
-                // Remember to trim off the "!/"
                 String toLocate = location.substring(bangIndex + 2);
+                return locateInJar(url, toLocate);
+            }
+        }
+        return null;
+    }
 
-                @SuppressWarnings("resource")
-                JarInputStream jis = new JarInputStream(url.openStream());
-                JarEntry entry = jis.getNextJarEntry();
-
-                while (entry != null) {
-                    if (entry.getName().equals(toLocate)) {
-                        is = jis;
-                        break;
-                    }
-                    entry = jis.getNextJarEntry();
-                }
+    private static InputStream locateInJar(URL url, String toLocate) throws IOException {
+        JarInputStream jis = new JarInputStream(url.openStream());
+        JarEntry entry = jis.getNextJarEntry();
+
+        while (entry != null) {
+            if (entry.getName().equals(toLocate)) {
+                return jis;
             }
+            entry = jis.getNextJarEntry();
         }
-        return is;
+        return null;
     }
 }

Modified: aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/parser/impl/TempBundleDelegatingClassLoader.java
URL: http://svn.apache.org/viewvc/aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/parser/impl/TempBundleDelegatingClassLoader.java?rev=1713916&r1=1713915&r2=1713916&view=diff
==============================================================================
--- aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/parser/impl/TempBundleDelegatingClassLoader.java (original)
+++ aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/parser/impl/TempBundleDelegatingClassLoader.java Wed Nov 11 19:14:59 2015
@@ -21,7 +21,6 @@ package org.apache.aries.jpa.container.p
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
-import java.lang.reflect.UndeclaredThrowableException;
 import java.net.URL;
 import java.security.AccessController;
 import java.security.PrivilegedAction;
@@ -35,165 +34,139 @@ import org.osgi.framework.Bundle;
 import org.osgi.framework.wiring.BundleRevision;
 import org.osgi.framework.wiring.BundleWire;
 import org.osgi.framework.wiring.BundleWiring;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * This is a simple temporary ClassLoader that delegates to the Bundle,
  * but does not call loadClass. It is used by the PersistenceUnitInfo
  */
 public class TempBundleDelegatingClassLoader extends ClassLoader {
+    private static final Logger LOG = LoggerFactory.getLogger(TempBundleDelegatingClassLoader.class);
+    private final Bundle bundle;
 
-  private static final boolean CONTEXT_TRACKING_ENABLED; 
-  
-  static {
-	boolean enabled = true;
-    try {
-    	Class.forName("org.osgi.framework.wiring.BundleWiring");
-    } catch (ClassNotFoundException cnfe) {
-    	enabled = false;
-    }
-    CONTEXT_TRACKING_ENABLED = enabled;
-  }
-	
-  private final Bundle bundle;
-
-  private final ThreadLocal<Deque<Bundle>> currentLoadingBundle = new ThreadLocal<Deque<Bundle>>(){
-	@Override
-	protected Deque<Bundle> initialValue() {
-		return new LinkedList<Bundle>();
-	}
-  };
-  
-  public TempBundleDelegatingClassLoader(Bundle b, ClassLoader parent) {
-    super(parent);
-    bundle = b;
-  }
-  
-  @Override
-  protected Class<?> findClass(String className) throws ClassNotFoundException {
-    String classResName = className.replace('.', '/').concat(".class");
-    
-    //Don't use loadClass, just load the bytes and call defineClass
-    Bundle currentContext = currentLoadingBundle.get().peek();
-    InputStream is;
-    if(currentContext == null) {
-      is = getResourceAsStream(classResName);
-    } else {
-      is = getResourceInBundleAsStream(classResName, currentContext);
-    }
-    
-    if(is == null)
-      throw new ClassNotFoundException(className);
-    
-    ByteArrayOutputStream baos = new ByteArrayOutputStream();
-    
-    byte[] buff = new byte[4096];
-    try {
-      try {
-        int read = is.read(buff);
-        while(read >0) {
-          baos.write(buff, 0, read);
-          read = is.read(buff);
-        }
-      }finally {
-        is.close();
-      }
-    } catch (IOException ioe) {
-      throw new ClassNotFoundException(className, ioe);
-    } 
-    
-    buff = baos.toByteArray();
-
-    if(CONTEXT_TRACKING_ENABLED) {
-    	updateContext(currentContext, className);
-    }
-    try {
-    	return defineClass(className, buff, 0, buff.length);
-    } finally {
-    	if(CONTEXT_TRACKING_ENABLED) {
-        	currentLoadingBundle.get().pop();
-        }
-    }
-  }
-
-  private void updateContext(Bundle currentContext, String className) {
-	if(currentContext == null) {
-		currentContext = bundle;
-	}
-	
-	int idx = className.lastIndexOf('.');
-	String packageName = (idx == -1) ? "" : className.substring(0, idx);
-	
-	Bundle contextToSet = currentContext;
-	
-	BundleWiring wiring = currentContext.adapt(BundleWiring.class);
-	for(BundleWire wire : wiring.getRequiredWires(BundleRevision.PACKAGE_NAMESPACE)) {
-	  if(wire.getCapability().getAttributes().get(BundleRevision.PACKAGE_NAMESPACE).equals(packageName)) {
-	    contextToSet = wire.getProviderWiring().getBundle();
-	    break;
-	  }
-	}
-	currentLoadingBundle.get().push(contextToSet);
-  }
-
-@Override
-  protected URL findResource(final String resName)
-  {
-    return findResourceInBundle(resName, bundle);
-  }
-  
-  protected URL findResourceInBundle(final String resName, final Bundle inBundle)
-  {
-    //Bundle.getResource requires privileges that the client may not have but we need
-    //use a doPriv so that only this bundle needs the privileges
-    return AccessController.doPrivileged(new PrivilegedAction<URL>() {
-
-      public URL run()
-      {
-        return inBundle.getResource(resName);
-      }
-    });
-  }
-
-  private InputStream getResourceInBundleAsStream(final String resName, final Bundle inBundle) {
-	  URL url = findResourceInBundle(resName, inBundle);
-	  try {
-		return (url == null) ? null : url.openStream();
-	} catch (IOException e) {
-		return null;
-	}
-  }
-  
-  @Override
-  protected Enumeration<URL> findResources(final String resName) throws IOException
-  {
-    return findResourcesInBundle(resName, bundle);
-  }
-  
-  protected Enumeration<URL> findResourcesInBundle(final String resName, final Bundle inBundle) throws IOException
-  {
-    Enumeration<URL> resources = null;
-    try {
-      //Bundle.getResources requires privileges that the client may not have but we need
-      //use a doPriv so that only this bundle needs the privileges
-      resources = AccessController.doPrivileged(new PrivilegedExceptionAction<Enumeration<URL>>() {
-
-        public Enumeration<URL> run() throws IOException
-        {
-          return inBundle.getResources(resName);
-        }
-      });
-    } catch(PrivilegedActionException pae) {
-      //thrownException can never be a RuntimeException, as that would escape
-      //the doPriv normally
-      Exception thrownException = pae.getException();
-      if (thrownException instanceof IOException) {
-        throw (IOException)thrownException;
-      } else {
-        // This code should never get called, but we don't
-        // want to gobble the exception if we see it.
-        throw new UndeclaredThrowableException(thrownException);
-      }
+    private final ThreadLocal<Deque<Bundle>> currentLoadingBundle = new ThreadLocal<Deque<Bundle>>() {
+        @Override
+        protected Deque<Bundle> initialValue() {
+            return new LinkedList<Bundle>();
+        }
+    };
+
+    public TempBundleDelegatingClassLoader(Bundle b, ClassLoader parent) {
+        super(parent);
+        bundle = b;
+    }
+
+    @Override
+    protected Class<?> findClass(String className) throws ClassNotFoundException {
+        String classResName = className.replace('.', '/').concat(".class");
+
+        // Don't use loadClass, just load the bytes and call defineClass
+        Bundle currentContext = currentLoadingBundle.get().peek();
+        InputStream is;
+        if (currentContext == null) {
+            is = getResourceAsStream(classResName);
+        } else {
+            is = getResourceInBundleAsStream(classResName, currentContext);
+        }
+
+        if (is == null) {
+            throw new ClassNotFoundException(className);
+        }
+
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+
+        byte[] buff = new byte[4096];
+        try {
+            try {
+                int read = is.read(buff);
+                while (read > 0) {
+                    baos.write(buff, 0, read);
+                    read = is.read(buff);
+                }
+            } finally {
+                is.close();
+            }
+        } catch (IOException ioe) {
+            throw new ClassNotFoundException(className, ioe);
+        }
+
+        buff = baos.toByteArray();
+
+        updateContext(currentContext, className);
+        try {
+            return defineClass(className, buff, 0, buff.length);
+        } finally {
+            currentLoadingBundle.get().pop();
+        }
+    }
+
+    private void updateContext(Bundle currentContext, String className) {
+        Bundle contextToSet = (currentContext == null) ? bundle : currentContext;
+        int idx = className.lastIndexOf('.');
+        String packageName = (idx == -1) ? "" : className.substring(0, idx);
+        BundleWiring wiring = contextToSet.adapt(BundleWiring.class);
+        for (BundleWire wire : wiring.getRequiredWires(BundleRevision.PACKAGE_NAMESPACE)) {
+            if (wire.getCapability().getAttributes().get(BundleRevision.PACKAGE_NAMESPACE).equals(packageName)) {
+                contextToSet = wire.getProviderWiring().getBundle();
+                break;
+            }
+        }
+        currentLoadingBundle.get().push(contextToSet);
+    }
+
+    @Override
+    protected URL findResource(final String resName) {
+        return findResourceInBundle(resName, bundle);
+    }
+
+    private URL findResourceInBundle(final String resName, final Bundle inBundle) {
+        // Bundle.getResource requires privileges that the client may not have but we need.
+        // use a doPriv so that only this bundle needs the privileges
+        return AccessController.doPrivileged(new PrivilegedAction<URL>() {
+            @Override
+            public URL run() {
+                return inBundle.getResource(resName);
+            }
+        });
+    }
+
+    private InputStream getResourceInBundleAsStream(final String resName, final Bundle inBundle) {
+        URL url = findResourceInBundle(resName, inBundle);
+        try {
+            return (url == null) ? null : url.openStream();
+        } catch (IOException e) {
+            LOG.debug("Exception on openStream", e);
+            return null;
+        }
+    }
+
+    @Override
+    protected Enumeration<URL> findResources(final String resName) throws IOException {
+        return findResourcesInBundle(resName, bundle);
+    }
+
+    private Enumeration<URL> findResourcesInBundle(final String resName, final Bundle inBundle) throws IOException {
+        Enumeration<URL> resources = null;
+        try {
+            // Bundle.getResources requires privileges that the client may not
+            // have but we need
+            // use a doPriv so that only this bundle needs the privileges
+            resources = AccessController.doPrivileged(new PrivilegedExceptionAction<Enumeration<URL>>() {
+                @Override
+                public Enumeration<URL> run() throws IOException {
+                    return inBundle.getResources(resName);
+                }
+            });
+        } catch (PrivilegedActionException pae) {
+            // thrownException can never be a RuntimeException, as that would escape the doPriv normally
+            Exception thrownException = pae.getException();
+            if (thrownException instanceof IOException) {
+                throw (IOException)thrownException;
+            } else {
+                LOG.warn("Exception during findResourcesInBundle", pae);
+            }
+        }
+        return resources;
     }
-    return resources;
-  }
 }

Modified: aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/weaving/impl/DummyDataSource.java
URL: http://svn.apache.org/viewvc/aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/weaving/impl/DummyDataSource.java?rev=1713916&r1=1713915&r2=1713916&view=diff
==============================================================================
--- aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/weaving/impl/DummyDataSource.java (original)
+++ aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/weaving/impl/DummyDataSource.java Wed Nov 11 19:14:59 2015
@@ -39,31 +39,36 @@ public final class DummyDataSource imple
      * Simply tries to avoid that calling code runs into NPE
      */
     private final class DummyHandler implements InvocationHandler {
+        @Override
         public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
             ClassLoader classLoader = this.getClass().getClassLoader();
-            if (method.getReturnType() == DatabaseMetaData.class) {
-                Class<?>[] ifAr = new Class[] {
-                    DatabaseMetaData.class
-                };
-                return Proxy.newProxyInstance(classLoader, ifAr, this);
-            }
-            if (method.getReturnType() == int.class) {
+            Class<?> type = method.getReturnType();
+            if (type == int.class) {
                 return new Integer(0);
             }
-            if (method.getReturnType() == boolean.class) {
+            if (type == boolean.class) {
                 return new Boolean(false);
             }
-            if (method.getReturnType() == String.class) {
+            if (type == String.class) {
                 return "";
             }
-            if (method.getReturnType() == ResultSet.class) {
-                Class<?>[] ifAr = new Class[] {
-                    ResultSet.class
-                };
-                return Proxy.newProxyInstance(classLoader, ifAr, this);
+            return proxyClasses(classLoader, type);
+        }
+
+        private Object proxyClasses(ClassLoader classLoader, Class<?> type) {
+            if (type == DatabaseMetaData.class) {
+                return createProxy(classLoader, DatabaseMetaData.class);
+            }
+            if (type == ResultSet.class) {
+                return createProxy(classLoader, ResultSet.class);
             }
             return null;
         }
+
+        private Object createProxy(ClassLoader classLoader, Class<?> iface) {
+            Class<?>[] ifAr = new Class[] { iface };
+            return Proxy.newProxyInstance(classLoader, ifAr, this);
+        }
     }
     
     @Override
@@ -78,12 +83,15 @@ public final class DummyDataSource imple
 
     @Override
     public void setLoginTimeout(int seconds) throws SQLException {
+        // Ignore
     }
 
     @Override
     public void setLogWriter(PrintWriter out) throws SQLException {
+        // Ignore
     }
 
+    @Override
     public java.util.logging.Logger getParentLogger() throws SQLFeatureNotSupportedException {
         return null;
     }

Modified: aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/weaving/impl/JPAWeavingHook.java
URL: http://svn.apache.org/viewvc/aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/weaving/impl/JPAWeavingHook.java?rev=1713916&r1=1713915&r2=1713916&view=diff
==============================================================================
--- aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/weaving/impl/JPAWeavingHook.java (original)
+++ aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/weaving/impl/JPAWeavingHook.java Wed Nov 11 19:14:59 2015
@@ -55,6 +55,7 @@ public class JPAWeavingHook implements W
     JPAWeavingHook() {
     }
 
+    @Override
     public void weave(WovenClass wovenClass) {
         BundleWiring wiring = wovenClass.getBundleWiring();
         Bundle bundle = wiring.getBundle();
@@ -64,10 +65,10 @@ public class JPAWeavingHook implements W
             if (transformClass(wovenClass, cl, transformer)) {
                 LOGGER.info("Weaving " + wovenClass.getClassName() + " using " + transformer.getClass().getName());
                 break;
-            };
+            }
         }
         Class<?> dClass = wovenClass.getDefinedClass();
-        if (transformersToTry.size() == 0 && dClass != null && dClass.getAnnotation(Entity.class) != null) {
+        if (transformersToTry.isEmpty() && dClass != null && dClass.getAnnotation(Entity.class) != null) {
             LOGGER.warn("Loading " + wovenClass.getClassName() + " before transformer is present");
         }
     }
@@ -75,10 +76,10 @@ public class JPAWeavingHook implements W
     @SuppressWarnings("unchecked")
     private synchronized Collection<ClassTransformer> getTransformers(Bundle bundle) {
         LinkedHashSet<ClassTransformer> transformers = registeredTransformers.get(bundle);
-        return transformers != null ? new ArrayList<ClassTransformer>(transformers) : Collections.EMPTY_LIST;
+        return (Collection<ClassTransformer>)(transformers != null ? new ArrayList<ClassTransformer>(transformers) : Collections.emptyList());
     }
 
-    private boolean transformClass(WovenClass wovenClass, ClassLoader cl, ClassTransformer transformer)
+    private static boolean transformClass(WovenClass wovenClass, ClassLoader cl, ClassTransformer transformer)
         throws ThreadDeath, OutOfMemoryError {
         try {
             byte[] result = transformer
@@ -93,21 +94,16 @@ public class JPAWeavingHook implements W
                 wovenClass.getDynamicImports().add("org.apache.openjpa.*");
                 return true;
             }
-        } catch (Throwable t) {
-            if (t instanceof ThreadDeath)
-                throw (ThreadDeath)t;
-            else if (t instanceof OutOfMemoryError)
-                throw (OutOfMemoryError)t;
-            else {
-                Bundle b = wovenClass.getBundleWiring().getBundle();
-                String msg = String.format("Weaving failure", wovenClass.getClassName(),
-                                           b.getSymbolicName(), b.getVersion(), transformer);
-                throw new WeavingException(msg, t);
-            }
+        } catch (Exception t) {
+            Bundle b = wovenClass.getBundleWiring().getBundle();
+            String msg = String.format("Weaving failure on class %s in bundle %s/%s using transformer %s", wovenClass.getClassName(),
+                                       b.getSymbolicName(), b.getVersion(), transformer);
+            throw new WeavingException(msg, t);
         }
         return false;
     }
 
+    @Override
     public synchronized void addTransformer(Bundle pBundle, ClassTransformer transformer) {
         LOGGER.info("Adding transformer " + transformer.getClass().getName());
         LinkedHashSet<ClassTransformer> transformers = registeredTransformers.get(pBundle);
@@ -118,6 +114,7 @@ public class JPAWeavingHook implements W
         transformers.add(transformer);
     }
 
+    @Override
     public synchronized void removeTransformer(Bundle pBundle, ClassTransformer transformer) {
         LinkedHashSet<ClassTransformer> set = registeredTransformers.get(pBundle);
         if (set == null || !set.remove(transformer)) {

Modified: aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/weaving/impl/TransformerRegistrySingleton.java
URL: http://svn.apache.org/viewvc/aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/weaving/impl/TransformerRegistrySingleton.java?rev=1713916&r1=1713915&r2=1713916&view=diff
==============================================================================
--- aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/weaving/impl/TransformerRegistrySingleton.java (original)
+++ aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/weaving/impl/TransformerRegistrySingleton.java Wed Nov 11 19:14:59 2015
@@ -23,12 +23,15 @@ package org.apache.aries.jpa.container.w
  * This class is used to get hold of the active {@link TransformerRegistry} for this bundle.
  */
 public class TransformerRegistrySingleton {
-    private static TransformerRegistry _instance;
+    private static TransformerRegistry instance;
+    
+    private TransformerRegistrySingleton() {
+    }
 
     public static TransformerRegistry get() {
-        if (_instance == null) {
-            _instance = new JPAWeavingHook();
+        if (instance == null) {
+            instance = new JPAWeavingHook();
         }
-        return _instance;
+        return instance;
     }
 }

Modified: aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/weaving/impl/WrappingTransformer.java
URL: http://svn.apache.org/viewvc/aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/weaving/impl/WrappingTransformer.java?rev=1713916&r1=1713915&r2=1713916&view=diff
==============================================================================
--- aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/weaving/impl/WrappingTransformer.java (original)
+++ aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/weaving/impl/WrappingTransformer.java Wed Nov 11 19:14:59 2015
@@ -35,6 +35,10 @@ import org.osgi.framework.wiring.BundleW
 class WrappingTransformer implements ClassTransformer {
     private final ClassTransformer delegate;
     private final Collection<String> packageImportsToAdd = new HashSet<String>();
+    
+    public WrappingTransformer(ClassTransformer transformer) {
+        delegate = transformer;
+    }
 
     public WrappingTransformer(ClassTransformer delegate, ServiceReference<?> persistenceProvider) {
         validate(delegate, persistenceProvider);
@@ -57,7 +61,7 @@ class WrappingTransformer implements Cla
         }
     }
 
-    private void validate(ClassTransformer delegate, ServiceReference<?> persistenceProvider) {
+    private static void validate(ClassTransformer delegate, ServiceReference<?> persistenceProvider) {
         if (delegate == null) {
             throw new NullPointerException("Transformer delegate may not be null");
         }
@@ -66,10 +70,8 @@ class WrappingTransformer implements Cla
         }
     }
 
-    public WrappingTransformer(ClassTransformer transformer) {
-        delegate = transformer;
-    }
  
+    @Override
     public byte[] transform(ClassLoader loader, String className, Class<?> classBeingRedefined, ProtectionDomain protectionDomain, byte[] classfileBuffer)
         throws IllegalClassFormatException {
         return delegate.transform(loader, className, classBeingRedefined, protectionDomain, classfileBuffer);
@@ -79,10 +81,12 @@ class WrappingTransformer implements Cla
         return packageImportsToAdd;
     }
 
+    @Override
     public int hashCode() {
         return delegate.hashCode();
     }
 
+    @Override
     public boolean equals(Object o) {
         if (o instanceof WrappingTransformer) {
             return delegate == ((WrappingTransformer)o).delegate;
@@ -90,6 +94,7 @@ class WrappingTransformer implements Cla
         return false;
     }
 
+    @Override
     public String toString() {
         return "Transformer: " + delegate.toString() + " Packages to add: " + packageImportsToAdd;
     }

Modified: aries/trunk/jpa/jpa-support/src/main/java/org/apache/aries/jpa/support/impl/AbstractJpaTemplate.java
URL: http://svn.apache.org/viewvc/aries/trunk/jpa/jpa-support/src/main/java/org/apache/aries/jpa/support/impl/AbstractJpaTemplate.java?rev=1713916&r1=1713915&r2=1713916&view=diff
==============================================================================
--- aries/trunk/jpa/jpa-support/src/main/java/org/apache/aries/jpa/support/impl/AbstractJpaTemplate.java (original)
+++ aries/trunk/jpa/jpa-support/src/main/java/org/apache/aries/jpa/support/impl/AbstractJpaTemplate.java Wed Nov 11 19:14:59 2015
@@ -30,6 +30,7 @@ public abstract class AbstractJpaTemplat
     @Override
     public void tx(final TransactionType type, final EmConsumer code) {
         txExpr(type, new EmFunction<Object>() {
+            @Override
             public Object apply(EntityManager em) {
                 code.accept(em);
                 return null;
@@ -47,7 +48,6 @@ public abstract class AbstractJpaTemplat
         tx(TransactionType.Required, code);
     }
 
-
     protected RuntimeException wrapThrowable(Throwable ex, String message) {
         if (ex instanceof RuntimeException) {
             return (RuntimeException) ex;

Modified: aries/trunk/jpa/jpa-support/src/main/java/org/apache/aries/jpa/support/impl/EMSupplierImpl.java
URL: http://svn.apache.org/viewvc/aries/trunk/jpa/jpa-support/src/main/java/org/apache/aries/jpa/support/impl/EMSupplierImpl.java?rev=1713916&r1=1713915&r2=1713916&view=diff
==============================================================================
--- aries/trunk/jpa/jpa-support/src/main/java/org/apache/aries/jpa/support/impl/EMSupplierImpl.java (original)
+++ aries/trunk/jpa/jpa-support/src/main/java/org/apache/aries/jpa/support/impl/EMSupplierImpl.java Wed Nov 11 19:14:59 2015
@@ -44,10 +44,8 @@ import org.slf4j.LoggerFactory;
  * sure all EMs are closed.
  */
 public class EMSupplierImpl implements EmSupplier {
-
-
     private static final long DEFAULT_SHUTDOWN_WAIT_SECS = 10;
-    private static Logger LOG = LoggerFactory.getLogger(EMSupplierImpl.class);
+    private static final Logger LOG = LoggerFactory.getLogger(EMSupplierImpl.class);
     private EntityManagerFactory emf;
     private AtomicBoolean shutdown;
     private long shutdownWaitTime = DEFAULT_SHUTDOWN_WAIT_SECS;
@@ -141,10 +139,12 @@ public class EMSupplierImpl implements E
 
     @Override
     public void preCall() {
+        // Just for backward compatibility
     }
 
     @Override
     public void postCall() {
+        // Just for backward compatibility
     }
 
     /**
@@ -161,12 +161,13 @@ public class EMSupplierImpl implements E
         try {
             emsToShutDown.await(shutdownWaitTime, shutdownWaitTimeUnit);
         } catch (InterruptedException e) {
+            LOG.debug("Close was interrupted", e);
         }
         return shutdownRemaining();
     }
 
     private synchronized boolean shutdownRemaining() {
-        boolean clean = (emSet.size() == 0); 
+        boolean clean = emSet.isEmpty(); 
         if  (!clean) {
             LOG.warn("{} EntityManagers still open after timeout. Shutting them down now", emSet.size());
         }
@@ -177,7 +178,7 @@ public class EMSupplierImpl implements E
         return clean;
     }
 
-    private void closeEm(EntityManager em) {
+    private static void closeEm(EntityManager em) {
         try {
             if (em.isOpen()) {
                 em.close();

Modified: aries/trunk/jpa/jpa-support/src/main/java/org/apache/aries/jpa/support/impl/ResourceLocalJpaTemplate.java
URL: http://svn.apache.org/viewvc/aries/trunk/jpa/jpa-support/src/main/java/org/apache/aries/jpa/support/impl/ResourceLocalJpaTemplate.java?rev=1713916&r1=1713915&r2=1713916&view=diff
==============================================================================
--- aries/trunk/jpa/jpa-support/src/main/java/org/apache/aries/jpa/support/impl/ResourceLocalJpaTemplate.java (original)
+++ aries/trunk/jpa/jpa-support/src/main/java/org/apache/aries/jpa/support/impl/ResourceLocalJpaTemplate.java Wed Nov 11 19:14:59 2015
@@ -45,9 +45,8 @@ public class ResourceLocalJpaTemplate ex
         if (type != TransactionType.Required) {
             throw new IllegalStateException("Only transation propagation type REQUIRED is supported");
         }
-        Coordination coord = null;
+        Coordination coord = coordinator.begin(this.getClass().getName(), 0);
         try {
-            coord = coordinator.begin(this.getClass().getName(), 0);
             em = emSupplier.get();
             weControlTx = !em.getTransaction().isActive();
             if (weControlTx) {
@@ -60,7 +59,7 @@ public class ResourceLocalJpaTemplate ex
             return result;
         } catch (Exception e) {
             if (weControlTx) {
-                safeRollback(em, e);
+                safeRollback(em);
             }
             throw wrapThrowable(e, "Exception occured in transactional code");
         } finally {
@@ -68,12 +67,12 @@ public class ResourceLocalJpaTemplate ex
         }
     }
 
-    private void safeRollback(EntityManager em, Exception e) {
+    private static void safeRollback(EntityManager em) {
         if (em != null) {
             try {
                 em.getTransaction().rollback();
-            } catch (Exception e1) {
-                LOGGER.warn("Exception during transaction rollback", e1);
+            } catch (Exception e) {
+                LOGGER.warn("Exception during transaction rollback", e);
             }
         }
     }

Modified: aries/trunk/jpa/jpa-support/src/main/java/org/apache/aries/jpa/support/impl/XAJpaTemplate.java
URL: http://svn.apache.org/viewvc/aries/trunk/jpa/jpa-support/src/main/java/org/apache/aries/jpa/support/impl/XAJpaTemplate.java?rev=1713916&r1=1713915&r2=1713916&view=diff
==============================================================================
--- aries/trunk/jpa/jpa-support/src/main/java/org/apache/aries/jpa/support/impl/XAJpaTemplate.java (original)
+++ aries/trunk/jpa/jpa-support/src/main/java/org/apache/aries/jpa/support/impl/XAJpaTemplate.java Wed Nov 11 19:14:59 2015
@@ -59,42 +59,50 @@ public class XAJpaTemplate extends Abstr
                 em.joinTransaction();
             }
             R result = (R)code.apply(em);
+            safeFinish(tranToken, ta, coord);
             return result;
-        } catch (Throwable ex) {
-            safeRollback(tranToken, ex);
-            if (ex instanceof Error) {
-                throw (Error)ex;
-            }
+        } catch (Exception ex) {
+            safeRollback(tranToken, ta, coord, ex);
             throw wrapThrowable(ex, "Exception occured in transactional code");
-        } finally {
-            try {
-                ta.finish(tm, tranToken);
-            } catch (Exception e) {
-                // We are throwing an exception, so we don't error it out
-                LOGGER.debug("Exception during finish of transaction", e);
-                throw wrapThrowable(e, "Exception during finish of transaction");
-            } finally {
-                if (coord != null)
-                    coord.end();
-            }
+        } catch (Error ex) { // NOSONAR
+            safeRollback(tranToken, ta, coord, ex);
+            throw ex;
+        }
+    }
+
+    private static void close(Coordination coord) {
+        if (coord != null) {
+            coord.end();
+        }
+    }
+
+    private void safeFinish(TransactionToken tranToken, TransactionAttribute ta, Coordination coord) {
+        try {
+            ta.finish(tm, tranToken);
+        } catch (Exception e) {
+            // We are throwing an exception, so we don't error it out
+            LOGGER.debug("Exception during finish of transaction", e);
+            throw wrapThrowable(e, "Exception during finish of transaction");
         }
+        close(coord);
     }
 
-    private void safeRollback(TransactionToken token, Throwable ex) {
+    private void safeRollback(TransactionToken token, TransactionAttribute ta, Coordination coord, Throwable ex) {
         try {
             Transaction tran = token.getActiveTransaction();
-            if (tran != null) {
-                if (ex instanceof RuntimeException || ex instanceof Error) {
-                    tran.setRollbackOnly();
-                } else {
-                    // declared exception, we don't set rollback
-                }
+            if (tran != null && shouldRollback(ex)) {
+                tran.setRollbackOnly();
             }
         } catch (Exception e) {
             // we do not throw the exception since there already is one, but we
             // need to log it
             LOGGER.warn("Exception during transaction rollback", e);
         }
+        safeFinish(token, ta, coord);
+    }
+
+    private static boolean shouldRollback(Throwable ex) {
+        return ex instanceof RuntimeException || ex instanceof Error;
     }
 
 }

Modified: aries/trunk/jpa/jpa-support/src/main/java/org/apache/aries/jpa/support/osgi/impl/EMFTracker.java
URL: http://svn.apache.org/viewvc/aries/trunk/jpa/jpa-support/src/main/java/org/apache/aries/jpa/support/osgi/impl/EMFTracker.java?rev=1713916&r1=1713915&r2=1713916&view=diff
==============================================================================
--- aries/trunk/jpa/jpa-support/src/main/java/org/apache/aries/jpa/support/osgi/impl/EMFTracker.java (original)
+++ aries/trunk/jpa/jpa-support/src/main/java/org/apache/aries/jpa/support/osgi/impl/EMFTracker.java Wed Nov 11 19:14:59 2015
@@ -47,7 +47,7 @@ import org.slf4j.LoggerFactory;
  */
 @SuppressWarnings("rawtypes")
 public class EMFTracker extends ServiceTracker {
-    private static Logger LOG = LoggerFactory.getLogger(EMFTracker.class);
+    private static final Logger LOG = LoggerFactory.getLogger(EMFTracker.class);
 
     private Coordinator coordinator;
 
@@ -103,14 +103,14 @@ public class EMFTracker extends ServiceT
         return PersistenceUnitTransactionType.JTA;
     }
 
-    private Dictionary<String, String> getEmSupplierProps(String unitName) {
-        Dictionary<String, String> props = new Hashtable<String, String>();
+    private static Dictionary<String, String> getEmSupplierProps(String unitName) {
+        Dictionary<String, String> props = new Hashtable<String, String>(); // NOSONAR
         props.put(JPA_UNIT_NAME, unitName);
         return props;
     }
 
-    private Dictionary<String, String> rlTxManProps(String unitName) {
-        Dictionary<String, String> props = new Hashtable<String, String>();
+    private static Dictionary<String, String> rlTxManProps(String unitName) {
+        Dictionary<String, String> props = new Hashtable<String, String>(); // NOSONAR
         props.put(JPA_UNIT_NAME, unitName);
         props.put(TMTracker.TRANSACTION_TYPE, "RESOURCE_LOCAL");
         return props;

Modified: aries/trunk/jpa/jpa-support/src/main/java/org/apache/aries/jpa/support/osgi/impl/EmProxy.java
URL: http://svn.apache.org/viewvc/aries/trunk/jpa/jpa-support/src/main/java/org/apache/aries/jpa/support/osgi/impl/EmProxy.java?rev=1713916&r1=1713915&r2=1713916&view=diff
==============================================================================
--- aries/trunk/jpa/jpa-support/src/main/java/org/apache/aries/jpa/support/osgi/impl/EmProxy.java (original)
+++ aries/trunk/jpa/jpa-support/src/main/java/org/apache/aries/jpa/support/osgi/impl/EmProxy.java Wed Nov 11 19:14:59 2015
@@ -41,9 +41,8 @@ public class EmProxy implements Invocati
         }
         try {
             return method.invoke(em, args);
-        } catch (InvocationTargetException ex) {
-            InvocationTargetException iex = (InvocationTargetException)ex;
-            throw iex.getTargetException();
+        } catch (InvocationTargetException ex) { // NOSONAR
+            throw ex.getTargetException();
         }
     }
 

Modified: aries/trunk/jpa/jpa-support/src/main/java/org/apache/aries/jpa/support/osgi/impl/TMTracker.java
URL: http://svn.apache.org/viewvc/aries/trunk/jpa/jpa-support/src/main/java/org/apache/aries/jpa/support/osgi/impl/TMTracker.java?rev=1713916&r1=1713915&r2=1713916&view=diff
==============================================================================
--- aries/trunk/jpa/jpa-support/src/main/java/org/apache/aries/jpa/support/osgi/impl/TMTracker.java (original)
+++ aries/trunk/jpa/jpa-support/src/main/java/org/apache/aries/jpa/support/osgi/impl/TMTracker.java Wed Nov 11 19:14:59 2015
@@ -32,6 +32,8 @@ import org.osgi.framework.ServiceRegistr
 import org.osgi.service.coordinator.Coordinator;
 import org.osgi.service.jpa.EntityManagerFactoryBuilder;
 import org.osgi.util.tracker.ServiceTracker;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * Is created for an EntityManagerFactory with JTA transactions and creates
@@ -39,6 +41,7 @@ import org.osgi.util.tracker.ServiceTrac
  */
 @SuppressWarnings("rawtypes")
 public class TMTracker extends ServiceTracker<TransactionManager, ServiceRegistration> {
+    private static final Logger LOG = LoggerFactory.getLogger(TMTracker.class);
     static final String TRANSACTION_TYPE = "transaction.type";
 
     private final EmSupplier emSupplier;
@@ -60,8 +63,8 @@ public class TMTracker extends ServiceTr
         return context.registerService(JpaTemplate.class, txManager, xaTxManProps(unitName));
     }
 
-    private Dictionary<String, String> xaTxManProps(String unitName) {
-        Dictionary<String, String> txmanProperties = new Hashtable<String, String>();
+    private static Dictionary<String, String> xaTxManProps(String unitName) {
+        Dictionary<String, String> txmanProperties = new Hashtable<String, String>(); // NOSONAR
         txmanProperties.put(EntityManagerFactoryBuilder.JPA_UNIT_NAME, unitName);
         txmanProperties.put(TRANSACTION_TYPE, "JTA");
         return txmanProperties;
@@ -73,7 +76,7 @@ public class TMTracker extends ServiceTr
             reg.unregister();
             context.ungetService(reference);
         } catch (Exception e) {
-            // Ignore. May happen if persistence unit bundle is unloaded / updated
+            LOG.debug("Exception during unregister", e);
         }
     }
 

Modified: aries/trunk/jpa/jpa-support/src/main/java/org/apache/aries/jpa/support/xa/impl/TransactionAttribute.java
URL: http://svn.apache.org/viewvc/aries/trunk/jpa/jpa-support/src/main/java/org/apache/aries/jpa/support/xa/impl/TransactionAttribute.java?rev=1713916&r1=1713915&r2=1713916&view=diff
==============================================================================
--- aries/trunk/jpa/jpa-support/src/main/java/org/apache/aries/jpa/support/xa/impl/TransactionAttribute.java (original)
+++ aries/trunk/jpa/jpa-support/src/main/java/org/apache/aries/jpa/support/xa/impl/TransactionAttribute.java Wed Nov 11 19:14:59 2015
@@ -36,6 +36,7 @@ import org.apache.aries.jpa.template.Tra
 public enum TransactionAttribute {
     MANDATORY
     {
+      @Override
       public TransactionToken begin(TransactionManager man) throws SystemException
       {
         if (man.getStatus() == Status.STATUS_NO_TRANSACTION) {
@@ -47,6 +48,7 @@ public enum TransactionAttribute {
     },
     NEVER
     {
+      @Override
       public TransactionToken begin(TransactionManager man) throws SystemException
       {
         if (man.getStatus() == Status.STATUS_ACTIVE) {
@@ -58,6 +60,7 @@ public enum TransactionAttribute {
     },
     NOTSUPPORTED
     {
+      @Override
       public TransactionToken begin(TransactionManager man) throws SystemException
       {
         if (man.getStatus() == Status.STATUS_ACTIVE) {
@@ -67,8 +70,9 @@ public enum TransactionAttribute {
         return new TransactionToken(null, null, NOTSUPPORTED);
       }
 
+      @Override
       public void finish(TransactionManager man, TransactionToken tranToken) throws SystemException,
-          InvalidTransactionException, IllegalStateException
+          InvalidTransactionException
       {
         Transaction tran = tranToken.getSuspendedTransaction();
         if (tran != null) {
@@ -78,6 +82,7 @@ public enum TransactionAttribute {
     },
     REQUIRED
     {
+      @Override
       public TransactionToken begin(TransactionManager man) throws SystemException, NotSupportedException
       {
         if (man.getStatus() == Status.STATUS_NO_TRANSACTION) {
@@ -88,8 +93,9 @@ public enum TransactionAttribute {
         return new TransactionToken(man.getTransaction(), null, REQUIRED);
       }
 
+      @Override
       public void finish(TransactionManager man, TransactionToken tranToken) throws SystemException,
-          InvalidTransactionException, IllegalStateException, SecurityException, RollbackException,
+          InvalidTransactionException, RollbackException,
           HeuristicMixedException, HeuristicRollbackException
       {
         if (tranToken.isCompletionAllowed()) {
@@ -103,8 +109,9 @@ public enum TransactionAttribute {
     },
     REQUIRESNEW
     {
+      @Override
       public TransactionToken begin(TransactionManager man) throws SystemException, NotSupportedException,
-          InvalidTransactionException, IllegalStateException
+          InvalidTransactionException
       {
         TransactionToken tranToken;
         if (man.getStatus() == Status.STATUS_ACTIVE) {
@@ -129,8 +136,9 @@ public enum TransactionAttribute {
         return tranToken;
       }
 
+      @Override
       public void finish(TransactionManager man, TransactionToken tranToken) throws SystemException,
-          InvalidTransactionException, IllegalStateException, SecurityException, RollbackException,
+          InvalidTransactionException, RollbackException,
           HeuristicMixedException, HeuristicRollbackException
       {
         if (tranToken.isCompletionAllowed()) {
@@ -149,8 +157,9 @@ public enum TransactionAttribute {
     },
     SUPPORTS
     {
+      @Override
       public TransactionToken begin(TransactionManager man) throws SystemException, NotSupportedException,
-          InvalidTransactionException, IllegalStateException
+          InvalidTransactionException
       {
           if (man.getStatus() == Status.STATUS_ACTIVE) {
               return new TransactionToken(man.getTransaction(), null, SUPPORTS);
@@ -170,16 +179,15 @@ public enum TransactionAttribute {
       return valueOf(type.name().toUpperCase());
     }
 
-    public TransactionToken begin(TransactionManager man) throws SystemException, NotSupportedException,
-        InvalidTransactionException, IllegalStateException
+    public TransactionToken begin(TransactionManager man) throws SystemException, NotSupportedException, InvalidTransactionException // NOSONAR
     {
       return null;
     }
 
-    public void finish(TransactionManager man, TransactionToken tranToken) throws SystemException,
-        InvalidTransactionException, IllegalStateException, SecurityException, RollbackException,
+    public void finish(TransactionManager man, TransactionToken tranToken) throws SystemException, // NOSONAR
+        InvalidTransactionException, RollbackException,
         HeuristicMixedException, HeuristicRollbackException
     {
-
+        throw new UnsupportedOperationException();
     }
 }