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