Thanks for the background, Patrick. Kevin
On Jan 8, 2008 12:58 PM, Patrick Linskey <[EMAIL PROTECTED]> wrote: > Hi, > > WLS has a feature that allows a user to ship jars in their EAR and > configure their EAR to use their copies of the jars instead of the > ones that WLS ships with. We do this with some funky classloaders that > don't delegate in the "normal" way. We were running into an issue > where if a user put OpenJPA into their EAR and deployed it into WLS, > they could not use the EAR-specified version, because when we were > loading service implementations via the modified methods, there was a > classloader mismatch. > > I copied the fix to 1.0.x so that once 1.0.2 is released, people will > be able to put either 1.0.2 or 1.1.0 into their EARs. > > -Patrick > > On Jan 8, 2008 9:38 AM, Kevin Sutter <[EMAIL PROTECTED]> wrote: > > Patrick, > > Can you expand on how this problem surfaced? I looked back at r603666 > and > > the commit basically has the same text. Was there a JIRA issue or dev > > mailing post that prompted this change? Or, did you just come across it > > while performing other development/test activities. The reason it's > > catching my eye is because you ported it back to 1.0.x, so you must > think > > it's important. Thanks for any background you can provide. > > > > (We are looking at a problem reported through the WebSphere EJB3 Feature > > Pack and this sounds like it could be related. I'm just trying to > determine > > the context for the fix. Thanks.) > > > > Kevin > > > > > > On Jan 7, 2008 2:09 PM, <[EMAIL PROTECTED]> wrote: > > > > > Author: pcl > > > Date: Mon Jan 7 12:09:05 2008 > > > New Revision: 609766 > > > > > > URL: http://svn.apache.org/viewvc?rev=609766&view=rev > > > Log: > > > Port of r603666 to 1.0.x. Change Services.getImplementorClasses(Class) > and > > > Services.getImplementorClasses(Class,ClassLoader) to filter out > > > implementations that are not assignable to the Class argument. This > allows > > > the Services call to be more fault-tolerant in environments with odd > > > classloader configurations. > > > > > > Modified: > > > > > > > > openjpa/branches/1.0.x/openjpa-lib/src/main/java/org/apache/openjpa/lib/util/Services.java > > > > > > Modified: > > > > openjpa/branches/1.0.x/openjpa-lib/src/main/java/org/apache/openjpa/lib/util/Services.java > > > URL: > > > > http://svn.apache.org/viewvc/openjpa/branches/1.0.x/openjpa-lib/src/main/java/org/apache/openjpa/lib/util/Services.java?rev=609766&r1=609765&r2=609766&view=diff > > > > > > > ============================================================================== > > > --- > > > > openjpa/branches/1.0.x/openjpa-lib/src/main/java/org/apache/openjpa/lib/util/Services.java > > > (original) > > > +++ > > > > openjpa/branches/1.0.x/openjpa-lib/src/main/java/org/apache/openjpa/lib/util/Services.java > > > Mon Jan 7 12:09:05 2008 > > > @@ -25,7 +25,9 @@ > > > import java.net.URL; > > > import java.security.AccessController; > > > import java.util.ArrayList; > > > +import java.util.Arrays; > > > import java.util.Enumeration; > > > +import java.util.HashSet; > > > import java.util.List; > > > import java.util.Set; > > > import java.util.StringTokenizer; > > > @@ -145,7 +147,21 @@ > > > > > > public static Class[] getImplementorClasses(Class serviceClass, > > > ClassLoader loader) { > > > - return getImplementorClasses(serviceClass.getName(), loader); > > > + Set invalid = new HashSet(); > > > + Class[] classes = getImplementorClasses(serviceClass.getName > (), > > > loader); > > > + > > > + // filter out any classes that have any classloader issues > wrt. > > > + // the specified service class. > > > + for (int i = 0; i < classes.length; i++) > > > + if (!serviceClass.isAssignableFrom(classes[i])) > > > + invalid.add(classes[i]); > > > + if (invalid.size() != 0) { > > > + List list = new ArrayList(Arrays.asList(classes)); > > > + list.removeAll(invalid); > > > + return (Class[]) list.toArray(new Class[list.size()]); > > > + } else { > > > + return classes; > > > + } > > > } > > > > > > /** > > > > > > > > > > > > > > > -- > Patrick Linskey > 202 669 5907 >
