You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by dj...@apache.org on 2010/04/22 20:54:39 UTC
svn commit: r937007 - in
/geronimo/server/trunk/plugins/openjpa2/geronimo-persistence-jpa20/src/main/java/org/apache/geronimo/persistence:
PersistenceUnitGBean.java TransformerWrapper.java
Author: djencks
Date: Thu Apr 22 18:54:39 2010
New Revision: 937007
URL: http://svn.apache.org/viewvc?rev=937007&view=rev
Log:
GERONIMO-4680 only transform stuff from the specified bundle
Modified:
geronimo/server/trunk/plugins/openjpa2/geronimo-persistence-jpa20/src/main/java/org/apache/geronimo/persistence/PersistenceUnitGBean.java
geronimo/server/trunk/plugins/openjpa2/geronimo-persistence-jpa20/src/main/java/org/apache/geronimo/persistence/TransformerWrapper.java
Modified: geronimo/server/trunk/plugins/openjpa2/geronimo-persistence-jpa20/src/main/java/org/apache/geronimo/persistence/PersistenceUnitGBean.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/openjpa2/geronimo-persistence-jpa20/src/main/java/org/apache/geronimo/persistence/PersistenceUnitGBean.java?rev=937007&r1=937006&r2=937007&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/openjpa2/geronimo-persistence-jpa20/src/main/java/org/apache/geronimo/persistence/PersistenceUnitGBean.java (original)
+++ geronimo/server/trunk/plugins/openjpa2/geronimo-persistence-jpa20/src/main/java/org/apache/geronimo/persistence/PersistenceUnitGBean.java Thu Apr 22 18:54:39 2010
@@ -39,7 +39,6 @@ import javax.persistence.spi.Persistence
import javax.persistence.spi.PersistenceUnitTransactionType;
import javax.resource.ResourceException;
import javax.sql.DataSource;
-import org.apache.geronimo.gbean.GBeanInfo;
import org.apache.geronimo.gbean.GBeanInfoBuilder;
import org.apache.geronimo.gbean.GBeanLifecycle;
import org.apache.geronimo.gbean.SingleElementCollection;
@@ -131,7 +130,7 @@ public class PersistenceUnitGBean implem
persistenceXMLSchemaVersion,
sharedCacheMode,
validationMode,
- classLoader);
+ classLoader, bundle);
try {
Class clazz = classLoader.loadClass(persistenceProviderClassName);
PersistenceProvider persistenceProvider = (PersistenceProvider) clazz.newInstance();
@@ -257,6 +256,7 @@ public class PersistenceUnitGBean implem
private final String persistenceXMLSchemaVersion;
private final SharedCacheMode sharedCacheMode;
private final ValidationMode validationMode;
+ private final Bundle bundle;
public PersistenceUnitInfoImpl(String persistenceUnitName,
@@ -273,7 +273,8 @@ public class PersistenceUnitGBean implem
String persistenceXMLSchemaVersion,
SharedCacheMode sharedCacheMode,
ValidationMode validationMode,
- ClassLoader classLoader) {
+ ClassLoader classLoader,
+ Bundle bundle) {
this.persistenceUnitName = persistenceUnitName;
this.persistenceProviderClassName = persistenceProviderClassName;
@@ -296,6 +297,7 @@ public class PersistenceUnitGBean implem
// This classloader can only be used during PersistenceProvider.createContainerEntityManagerFactory() calls
// Possible that it could be cleaned up sooner, but for now it's destroyed when the PUGBean is stopped
this.tempClassLoader = new TemporaryClassLoader(classLoader);
+ this.bundle = bundle;
}
@Override
@@ -360,7 +362,7 @@ public class PersistenceUnitGBean implem
@Override
public void addTransformer(ClassTransformer classTransformer) {
- TransformerWrapper transformer = new TransformerWrapper(classTransformer, classLoader);
+ TransformerWrapper transformer = new TransformerWrapper(classTransformer, bundle);
transformers.add(transformer);
TransformerAgent.addTransformer(transformer);
}
Modified: geronimo/server/trunk/plugins/openjpa2/geronimo-persistence-jpa20/src/main/java/org/apache/geronimo/persistence/TransformerWrapper.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/openjpa2/geronimo-persistence-jpa20/src/main/java/org/apache/geronimo/persistence/TransformerWrapper.java?rev=937007&r1=937006&r2=937007&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/openjpa2/geronimo-persistence-jpa20/src/main/java/org/apache/geronimo/persistence/TransformerWrapper.java (original)
+++ geronimo/server/trunk/plugins/openjpa2/geronimo-persistence-jpa20/src/main/java/org/apache/geronimo/persistence/TransformerWrapper.java Thu Apr 22 18:54:39 2010
@@ -21,6 +21,8 @@ import java.lang.instrument.IllegalClass
import java.security.ProtectionDomain;
import javax.persistence.spi.ClassTransformer;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleReference;
/**
* @version $Rev$ $Date$
@@ -28,23 +30,24 @@ import javax.persistence.spi.ClassTransf
public class TransformerWrapper implements ClassFileTransformer {
private final ClassTransformer classTransformer;
- private final ClassLoader classLoader;
+ private final Bundle bundle;
- public TransformerWrapper(ClassTransformer classTransformer, ClassLoader classLoader) {
+ public TransformerWrapper(ClassTransformer classTransformer, Bundle bundle) {
this.classTransformer = classTransformer;
- this.classLoader = classLoader;
+ this.bundle = bundle;
}
public byte[] transform(ClassLoader loader, String className, Class<?> classBeingRedefined, ProtectionDomain protectionDomain, byte[] classfileBuffer) throws IllegalClassFormatException {
-// if (loader != classLoader) {
-// return null;
-// }
- try {
- return classTransformer.transform(loader, className, classBeingRedefined, protectionDomain, classfileBuffer);
- } catch (IllegalClassFormatException e) {
- throw e;
- } catch (RuntimeException e) {
- return null;
+ if (loader instanceof BundleReference && ((BundleReference) loader).getBundle() == bundle) {
+ try {
+ return classTransformer.transform(loader, className, classBeingRedefined, protectionDomain, classfileBuffer);
+ } catch (IllegalClassFormatException e) {
+ throw e;
+ } catch (RuntimeException e) {
+ return null;
+ }
}
+ return null;
+
}
}