On Nov 12, 2008, at 2:06 AM, Gianny Damour wrote:
> On 12/11/2008, at 9:09 AM, Joe Bohn wrote:
>
>> I'm confused and perhaps concerned about this change as well.
>>
>> First, I notice that we're still using OpenEJB 3.1-SNAPSHOT and
>> apparently this is changing enough that we required new SNAPSHOTS
>> published. However, I also see the OpenEJB 3.1 was released on
>> 10/23. So, why is there still an OpenEJB 3.1-SNAPSHOT and why is it
>> still changing such that we needed to have it published again?
>>
>> Second, assuming OpenEJB 3.1-SNAPSHOT is really a continuation of
>> the 3.1 branch (ie. 3.1.*-SNAPSHOT) then I'm also concerned that we
>> are making changes that leaves us dependent on yet another OpenEJB
>> release. We are hoping for a mid-December Geronimo 2.2 release.
>> I'm not sure that it is very likely we will get an OpenEJB 3.1.*
>> release out prior to that deadline.
>>
>> How critical is this change for our 2.2 release? Could it perhaps
>> be reverted and reintroduced after we release 2.2? I didn't see
>> any mention of this feature in our discussions of functions that we
>> were trying to include in 2.2.
>
> private classes can also be configured via scripts. So, we do not
> really need a XML configuration style for them. I will revert the
> private-class element change w/o any intention to reintroduce it
> after 2.2.
Could you explain your thinking here? I would prefer that any
classloader configuration available through scripting also be
available through xml. I have no problem with changing schemas in
2.2. In other words so far I'm in favor of keeping the xml private
classes element in 2.2.
thanks
david jencks
>
>
> Thanks,
> Gianny
>
>
>>
>> Joe
>>
>>
>>
>>
>> Jason Warner wrote:
>>> I believe this change is causing failures in both the geronimo
>>> testsuite and tck. For an example of this, try running the
>>> concurrent-testsuite. The test will hang indefinitely and viewing
>>> the output logs in geronimo.home/testsuite/target/geronimo-logs
>>> will show the following error being outputted repeatedly. Could
>>> this be related to the new openejb snapshot?
>>> java.util.concurrent.ExecutionException:
>>> java.lang.IllegalArgumentException: can't parse argument number
>>> at java.util.concurrent.FutureTask
>>> $Sync.innerGet(FutureTask.java:205)
>>> at java.util.concurrent.FutureTask.get(FutureTask.java:80)
>>> at org.apache.openejb.util.Memoizer.compute(Memoizer.java:53)
>>> at org.apache.openejb.util.Logger.formatMessage(Logger.java:185)
>>> at org.apache.openejb.util.Logger.info <http://org.apache.openejb.util.Logger.info
>>> >(Logger.java:354)
>>> at
>>> org
>>> .apache
>>> .openejb
>>> .core
>>> .transaction
>>> .JtaTransactionPolicy.suspendTransaction(JtaTransactionPolicy.java:
>>> 242)
>>> at
>>> org
>>> .apache
>>> .openejb.core.transaction.TxBeanManaged.<init>(TxBeanManaged.java:
>>> 34)
>>> at
>>> org
>>> .apache
>>> .openejb
>>> .core
>>> .transaction
>>> .JtaTransactionPolicyFactory
>>> .createTransactionPolicy(JtaTransactionPolicyFactory.java:48)
>>> at
>>> org
>>> .apache
>>> .openejb
>>> .core
>>> .transaction
>>> .EjbTransactionUtil
>>> .createTransactionPolicy(EjbTransactionUtil.java:55)
>>> at
>>> org
>>> .apache
>>> .openejb
>>> .core.stateless.StatelessContainer._invoke(StatelessContainer.java:
>>> 200)
>>> at
>>> org
>>> .apache
>>> .openejb
>>> .core.stateless.StatelessContainer.invoke(StatelessContainer.java:
>>> 169)
>>> at
>>> org
>>> .apache
>>> .openejb
>>> .server
>>> .ejbd
>>> .EjbRequestHandler
>>> .doEjbObject_BUSINESS_METHOD(EjbRequestHandler.java:238)
>>> at
>>> org
>>> .apache
>>> .openejb
>>> .server
>>> .ejbd.EjbRequestHandler.processRequest(EjbRequestHandler.java:129)
>>> at
>>> org
>>> .apache
>>> .openejb.server.ejbd.EjbDaemon.processEjbRequest(EjbDaemon.java:196)
>>> at
>>> org.apache.openejb.server.ejbd.EjbDaemon.service(EjbDaemon.java:149)
>>> at
>>> org.apache.openejb.server.ejbd.EjbServer.service(EjbServer.java:71)
>>> at org.apache.openejb.server.ejbd.KeepAliveServer
>>> $Session.service(KeepAliveServer.java:213)
>>> at
>>> org
>>> .apache
>>> .openejb.server.ejbd.KeepAliveServer.service(KeepAliveServer.java:
>>> 233)
>>> at
>>> org.apache.openejb.server.ejbd.EjbServer.service(EjbServer.java:66)
>>> at org.apache.openejb.server.ServicePool$2.run(ServicePool.java:
>>> 91)
>>> at org.apache.openejb.server.ServicePool$3.run(ServicePool.java:
>>> 120)
>>> at java.util.concurrent.ThreadPoolExecutor
>>> $Worker.runTask(ThreadPoolExecutor.java:650)
>>> at java.util.concurrent.ThreadPoolExecutor
>>> $Worker.run(ThreadPoolExecutor.java:675)
>>> at java.lang.Thread.run(Thread.java:613)
>>> Caused by: java.lang.IllegalArgumentException: can't parse
>>> argument number
>>> at java.text.MessageFormat.makeFormat(MessageFormat.java:1330)
>>> at java.text.MessageFormat.applyPattern(MessageFormat.java:450)
>>> at java.text.MessageFormat.<init>(MessageFormat.java:350)
>>> at org.apache.openejb.util.Logger$4.compute(Logger.java:108)
>>> at org.apache.openejb.util.Logger$4.compute(Logger.java:107)
>>> at org.apache.openejb.util.Memoizer$1.call(Memoizer.java:42)
>>> at java.util.concurrent.FutureTask
>>> $Sync.innerRun(FutureTask.java:269)
>>> at java.util.concurrent.FutureTask.run(FutureTask.java:123)
>>> at org.apache.openejb.util.Memoizer.compute(Memoizer.java:49)
>>> ... 21 more
>>> On Tue, Nov 11, 2008 at 11:46 AM, Jason Warner <jaw981@gmail.com <mailto:jaw981@gmail.com
>>> >> wrote:
>>> On Tue, Nov 11, 2008 at 8:44 AM, Gianny Damour
>>> <gianny.damour@optusnet.com.au
>>> <mailto:gianny.damour@optusnet.com.au>> wrote:
>>> Hi,
>>> David B published OpenEJB artifacts for me as I lost my
>>> Apache
>>> private key and I can't remember my account password... The
>>> build is not fixed.
>>> I committed some depencies.xml changes that fix the build.
>>> Thanks
>>> for handling the snapshot.
>>> As pointed out by David J the change is backward compatible
>>> and
>>> I decided to keep the same namespace due to this reason. As I
>>> did not change the namespace, I also did not change the XSD
>>> file
>>> name. Thinking more about it, I now think that it would be
>>> better to change the file name as suggested by David.
>>> Something
>>> like geronimo-module-1.2.1.xsd. I will make this change.
>>> Thanks,
>>> Gianny
>>> On 11/11/2008, at 9:33 AM, David Jencks wrote:
>>> On Nov 10, 2008, at 12:17 PM, Jarek Gawor wrote:
>>> Hi,
>>> We've had discussions about changing existing/
>>> published
>>> schemas before
>>> but I can't find any specific decisions/conclusions
>>> on
>>> it. Does
>>> anybody remember what was the conclusion of these
>>> discussions? I
>>> thought we were not supposed to change the
>>> existing/published schemas
>>> and this commit changes the geronimo-module-1.2.xsd
>>> file.
>>> The (probably undocumented) policy has been to change the
>>> schema version number in the file name whenever it
>>> changes,
>>> and also the uri identifying the namespace. This
>>> causes a
>>> lot of headaches and namespace conversion code
>>> updates. I
>>> think we should consider _not_ changing at least the
>>> namespace uri when, as here, the schema updates don't
>>> break
>>> backward compatibility. I believe I once saw some
>>> discussion that indicated that frequent namespace changes
>>> were generally a bad idea..... wish I knew where it was.
>>> thanks
>>> david jencks
>>> Jarek
>>> On Mon, Nov 10, 2008 at 3:02 PM, Gianny Damour
>>> <gianny.damour@optusnet.com.au
>>> <mailto:gianny.damour@optusnet.com.au>> wrote:
>>> Hi Jason,
>>> I updated the openejb-jee module
>>> (openejb/trunk/openejb3/container/openejb-jee) in
>>> order to support the new
>>> private-classes element. Should I manually
>>> deploy a
>>> new snapshot? Sorry, I
>>> do not remember the policy.
>>> Thanks,
>>> Gianny
>>> On 11/11/2008, at 3:51 AM, Jason Warner wrote:
>>> Hi Gianny,
>>> I'm having trouble building trunk due to an
>>> error[1] that seems related to
>>> this addition. Any thoughts?
>>> Thanks!
>>> [1]
>>> [severity=ERROR,message=unexpected element
>>> (uri:"http://geronimo.apache.org/xml/ns/deployment-1.2
>>> ",
>>> local:"private-classes"). Expected elements
>>> are
>>> <{http://geronimo.apache.org/xml/ns/deployment-1.2
>>> }inverse-
>>> <http://geronimo.apache.org/xml/ns/deployment-1.2%7Dinverse-
>>> >classloading>,<{http://geronimo.apache.org/xml/ns/
>>> deployment-1.2}hidden-classes>,
>>> <{http://geronimo.apache.org/xml/ns/deployment-1.2
>>> }non-
>>> <http://geronimo.apache.org/xml/ns/deployment-1.2%7Dnon-
>>> >overridable-classes>,<{http://geronimo.apache.org/xml/ns/deployment-1.2
>>> }moduleId>,
>>> <{http://geronimo.apache.org/xml/ns/deployment-1.2
>>> }suppress-
>>> <http://geronimo.apache.org/xml/ns/deployment-1.2%7Dsuppress-
>>> >default-environment>,<{http://geronimo.apache.org/xml/ns/deployment-1.2
>>> }dependencies
>>> >,locator=[node=null,object=null,url=null,line=19,col=27,offset=-1]]
>>> [INFO]
>>>
>>> ------------------------------------------------------------------------
>>> [ERROR] BUILD ERROR
>>> [INFO]
>>>
>>> ------------------------------------------------------------------------
>>> [INFO] could not package plugin
>>> Embedded error: Failed parsing descriptors
>>> for
>>> module:
>>> /Users/jason/trunk/plugins/mejb/geronimo-
>>> mejb/target/geronimo-mejb-2.2-SNAPSHOT.jar
>>> unexpected element
>>> (uri:"http://geronimo.apache.org/xml/ns/deployment-1.2
>>> ",
>>> local:"private-classes"). Expected elements
>>> are
>>> <{http://geronimo.apache.org/xml/ns/deployment-1.2
>>> }inverse-
>>> <http://geronimo.apache.org/xml/ns/deployment-1.2%7Dinverse-
>>> >classloading>,<{http://geronimo.apache.org/xml/ns/
>>> deployment-1.2}hidden-classes>,
>>> <{http://geronimo.apache.org/xml/ns/deployment-1.2
>>> }non-
>>> <http://geronimo.apache.org/xml/ns/deployment-1.2%7Dnon-
>>> >overridable-classes>,<{http://geronimo.apache.org/xml/ns/deployment-1.2
>>> }moduleId>,
>>> <{http://geronimo.apache.org/xml/ns/deployment-1.2
>>> }suppress-
>>> <http://geronimo.apache.org/xml/ns/deployment-1.2%7Dsuppress-
>>> >default-environment>,<{http://geronimo.apache.org/xml/ns/deployment-1.2
>>> }dependencies>
>>> On Fri, Nov 7, 2008 at 7:40 PM,
>>> <gdamour@apache.org <mailto:gdamour@apache.org
>>> >>
>>> wrote:
>>> Author: gdamour
>>> Date: Fri Nov 7 16:40:08 2008
>>> New Revision: 712326
>>> URL:
>>> http://svn.apache.org/viewvc?rev=712326&view=rev
>>> <http://svn.apache.org/viewvc?rev=712326&view=rev
>>> >
>>> Log:
>>> Add private-classes element which allows
>>> specific classes to be hidden
>>> from all child configurations. In effect,
>>> they
>>> are private to the
>>> configuration.
>>> (GERONIMO-4403) Provide a mechanism to hide
>>> specific classes of a
>>> configuration to all its children
>>> Added:
>>> geronimo/server/trunk/framework/modules/
>>> geronimo-kernel/src/main/java/org/apache/geronimo/kernel/config/
>>> ChildrenConfigurationClassLoader.java
>>> geronimo/server/trunk/framework/modules/
>>> geronimo-kernel/src/main/java/org/apache/geronimo/kernel/
>>> repository/ClassLoadingRule.java
>>> geronimo/server/trunk/framework/modules/
>>> geronimo-kernel/src/main/java/org/apache/geronimo/kernel/
>>> repository/ClassLoadingRules.java
>>> geronimo/server/trunk/framework/modules/
>>> geronimo-kernel/src/test/java/org/apache/geronimo/kernel/config/
>>> ChildrenConfigurationClassLoaderTest.java
>>> geronimo/server/trunk/framework/modules/
>>> geronimo-kernel/src/test/java/org/apache/geronimo/kernel/
>>> repository/ClassLoadingRuleTest.java
>>> geronimo/server/trunk/framework/modules/
>>> geronimo-service-builder/src/main/java/org/apache/geronimo/
>>> deployment/service/ClassLoadingRulesUtil.java
>>> geronimo/server/trunk/framework/modules/
>>> geronimo-service-builder/src/test/java/org/apache/geronimo/
>>> deployment/service/ClassLoadingRulesUtilTest.java
>>> Modified:
>>> geronimo/server/trunk/framework/modules/
>>> geronimo-kernel/src/main/java/org/apache/geronimo/kernel/
>>> classloader/JarFileClassLoader.java
>>> geronimo/server/trunk/framework/modules/
>>> geronimo-kernel/src/main/java/org/apache/geronimo/kernel/config/
>>> Configuration.java
>>> geronimo/server/trunk/framework/modules/
>>> geronimo-kernel/src/main/java/org/apache/geronimo/kernel/config/
>>> MultiParentClassLoader.java
>>> geronimo/server/trunk/framework/modules/
>>> geronimo-kernel/src/main/java/org/apache/geronimo/kernel/
>>> repository/DefaultArtifactResolver.java
>>> geronimo/server/trunk/framework/modules/
>>> geronimo-kernel/src/main/java/org/apache/geronimo/kernel/
>>> repository/Environment.java
>>> geronimo/server/trunk/framework/modules/
>>> geronimo-kernel/src/test/java/org/apache/geronimo/kernel/config/
>>> MultiParentClassLoaderTest.java
>>> geronimo/server/trunk/framework/modules/
>>> geronimo-service-builder/src/main/java/org/apache/geronimo/
>>> deployment/service/EnvironmentBuilder.java
>>> geronimo/server/trunk/framework/modules/
>>> geronimo-service-builder/src/main/xsd/geronimo-module-1.2.xsd
>>> geronimo/server/trunk/framework/modules/
>>> geronimo-upgrade/src/test/resources/appclient_dep_1_result.xml
>>> geronimo/server/trunk/framework/modules/
>>> geronimo-upgrade/src/test/resources/appclient_ejb_1_result.xml
>>> geronimo/server/trunk/framework/modules/
>>> geronimo-upgrade/src/test/resources/assembly_1_result.xml
>>> geronimo/server/trunk/framework/modules/
>>> geronimo-upgrade/src/test/resources/gbean_1_result.xml
>>> geronimo/server/trunk/framework/modules/
>>> geronimo-upgrade/src/test/resources/servlet_1_result.xml
>>> geronimo/server/trunk/framework/modules/
>>> geronimo-upgrade/src/test/resources/transport_1_result.xml
>>> geronimo/server/trunk/framework/modules/
>>> geronimo-upgrade/src/test/resources/transport_2_result.xml
>>> geronimo/server/trunk/plugins/jetty/
>>> geronimo-jetty6/src/test/java/org/apache/geronimo/jetty6/
>>> ClassLoaderTest.java
>>> geronimo/server/trunk/plugins/openejb/
>>> geronimo-openejb-builder/src/main/java/org/apache/geronimo/openejb/
>>> deployment/XmlUtil.java
>>> Modified:
>>> geronimo/server/trunk/framework/modules/
>>> geronimo-kernel/src/main/java/org/apache/geronimo/kernel/
>>> classloader/JarFileClassLoader.java
>>> URL:
>>> http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/classloader/JarFileClassLoader.java?rev=712326&r1=712325&r2=712326&view=diff
>>>
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> ====================================================================
>>> ---
>>> geronimo/server/trunk/framework/modules/
>>> geronimo-kernel/src/main/java/org/apache/geronimo/kernel/
>>> classloader/JarFileClassLoader.java
>>> (original)
>>> +++
>>> geronimo/server/trunk/framework/modules/
>>> geronimo-kernel/src/main/java/org/apache/geronimo/kernel/
>>> classloader/JarFileClassLoader.java
>>> Fri Nov 7 16:40:08 2008
>>> @@ -16,25 +16,25 @@
>>> */
>>> package
>>> org.apache.geronimo.kernel.classloader;
>>> -import java.io.IOException;
>>> import java.io.File;
>>> -import java.net.URL;
>>> +import java.io.IOException;
>>> import java.net.URI;
>>> +import java.net.URL;
>>> import java.net.URLClassLoader;
>>> import java.security.AccessControlContext;
>>> import java.security.AccessController;
>>> import java.security.CodeSource;
>>> import java.security.PrivilegedAction;
>>> -import
>>> java.security.PrivilegedExceptionAction;
>>> import
>>> java.security.PrivilegedActionException;
>>> +import
>>> java.security.PrivilegedExceptionAction;
>>> import java.security.cert.Certificate;
>>> -import java.util.Collection;
>>> import java.util.Enumeration;
>>> import java.util.jar.Attributes;
>>> import java.util.jar.Manifest;
>>> import
>>>
>>> org.apache.geronimo.kernel.config.MultiParentClassLoader;
>>> import
>>>
>>> org.apache.geronimo.kernel.repository.Artifact;
>>> +import
>>>
>>> org.apache.geronimo.kernel.repository.ClassLoadingRules;
>>> /**
>>> * The JarFileClassLoader that loads classes
>>> and
>>> resources from a list of
>>> JarFiles. This method is simmilar to
>>> URLClassLoader
>>> @@ -78,8 +78,8 @@
>>> addURLs(urls);
>>> }
>>> - public JarFileClassLoader(Artifact id,
>>> URL[] urls, ClassLoader
>>> parent, boolean inverseClassLoading, String[]
>>> hiddenClasses, String[]
>>> nonOverridableClasses) {
>>> - super(id, EMPTY_URLS, parent,
>>> inverseClassLoading, hiddenClasses,
>>> nonOverridableClasses);
>>> + public JarFileClassLoader(Artifact id,
>>> URL[] urls, ClassLoader
>>> parent, ClassLoadingRules
>>> classLoadingRules) {
>>> + super(id, EMPTY_URLS, parent,
>>> classLoadingRules);
>>> this.acc =
>>> AccessController.getContext();
>>> addURLs(urls);
>>> }
>>> @@ -96,14 +96,8 @@
>>> addURLs(urls);
>>> }
>>> - public JarFileClassLoader(Artifact id,
>>> URL[] urls, ClassLoader[]
>>> parents, boolean inverseClassLoading,
>>> Collection
>>> hiddenClasses, Collection
>>> nonOverridableClasses) {
>>> - super(id, EMPTY_URLS, parents,
>>> inverseClassLoading,
>>> hiddenClasses, nonOverridableClasses);
>>> - this.acc =
>>> AccessController.getContext();
>>> - addURLs(urls);
>>> - }
>>> -
>>> - public JarFileClassLoader(Artifact id,
>>> URL[] urls, ClassLoader[]
>>> parents, boolean inverseClassLoading,
>>> String[]
>>> hiddenClasses, String[]
>>> nonOverridableClasses) {
>>> - super(id, EMPTY_URLS, parents,
>>> inverseClassLoading,
>>> hiddenClasses, nonOverridableClasses);
>>> + public JarFileClassLoader(Artifact id,
>>> URL[] urls, ClassLoader[]
>>> parents, ClassLoadingRules
>>> classLoadingRules) {
>>> + super(id, EMPTY_URLS, parents,
>>> classLoadingRules);
>>> this.acc =
>>> AccessController.getContext();
>>> addURLs(urls);
>>> }
>>> Added:
>>> geronimo/server/trunk/framework/modules/
>>> geronimo-kernel/src/main/java/org/apache/geronimo/kernel/config/
>>> ChildrenConfigurationClassLoader.java
>>> URL:
>>> http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/config/ChildrenConfigurationClassLoader.java?rev=712326&view=auto
>>>
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> ====================================================================
>>> ---
>>> geronimo/server/trunk/framework/modules/
>>> geronimo-kernel/src/main/java/org/apache/geronimo/kernel/config/
>>> ChildrenConfigurationClassLoader.java
>>> (added)
>>> +++
>>> geronimo/server/trunk/framework/modules/
>>> geronimo-kernel/src/main/java/org/apache/geronimo/kernel/config/
>>> ChildrenConfigurationClassLoader.java
>>> Fri Nov 7 16:40:08 2008
>>> @@ -0,0 +1,92 @@
>>> +/*
>>> + * Licensed to the Apache Software
>>> Foundation
>>> (ASF) under one
>>> + * or more contributor license
>>> agreements. See
>>> the NOTICE file
>>> + * distributed with this work for additional
>>> information
>>> + * regarding copyright ownership. The ASF
>>> licenses this file
>>> + * to you under the Apache License,
>>> Version 2.0
>>> (the
>>> + * "License"); you may not use this file
>>> except
>>> in compliance
>>> + * with the License. You may obtain a
>>> copy of
>>> the License at
>>> + *
>>> + * http://www.apache.org/licenses/LICENSE-2.0
>>> + *
>>> + * Unless required by applicable law or
>>> agreed
>>> to in writing,
>>> + * software distributed under the License is
>>> distributed on an
>>> + * "AS IS" BASIS, WITHOUT WARRANTIES OR
>>> CONDITIONS OF ANY
>>> + * KIND, either express or implied. See the
>>> License for the
>>> + * specific language governing permissions
>>> and
>>> limitations
>>> + * under the License.
>>> + */
>>> +
>>> +package org.apache.geronimo.kernel.config;
>>> +
>>> +import java.io.IOException;
>>> +import java.net.MalformedURLException;
>>> +import java.net.URL;
>>> +import java.security.SecureClassLoader;
>>> +import java.util.Collections;
>>> +import java.util.Enumeration;
>>> +import java.util.List;
>>> +
>>> +import
>>>
>>> org.apache.geronimo.kernel.repository.ClassLoadingRule;
>>> +import
>>>
>>> org.apache.geronimo.kernel.repository.ClassLoadingRules;
>>> +
>>> +import sun.misc.CompoundEnumeration;
>>> +
>>> +/**
>>> + *
>>> + * @version $Rev:$ $Date:$
>>> + */
>>> +public class
>>> ChildrenConfigurationClassLoader
>>> extends SecureClassLoader {
>>> +
>>> + private final ClassLoadingRules rules;
>>> +
>>> + public
>>>
>>> ChildrenConfigurationClassLoader(ClassLoader parent,
>>> ClassLoadingRules rules) {
>>> + super(parent);
>>> + if (null == rules) {
>>> + throw new
>>> IllegalArgumentException("rules is
>>> required");
>>> + }
>>> + this.rules = rules;
>>> + }
>>> +
>>> + public Class<?> loadClass(String name,
>>> List<ClassLoader>
>>> visitedClassLoaders) throws
>>> ClassNotFoundException {
>>> + return loadClass(name, false,
>>> visitedClassLoaders);
>>> + }
>>> +
>>> + protected synchronized Class<?>
>>> loadClass(String name, boolean
>>> resolve) throws ClassNotFoundException {
>>> + return loadClass(name, resolve,
>>> Collections.EMPTY_LIST);
>>> + }
>>> +
>>> + protected synchronized Class<?>
>>> loadClass(String name, boolean
>>> resolve, List<ClassLoader>
>>> visitedClassLoaders)
>>> + throws ClassNotFoundException {
>>> + ClassLoadingRule privateRule =
>>> rules.getPrivateRule();
>>> + ClassLoader parent = getParent();
>>> + if
>>> (privateRule.isFilteredClass(name)) {
>>> + throw new
>>> ClassNotFoundException(name + " is hidden by
>>> classloader " + parent);
>>> + }
>>> +
>>> + if (parent instanceof
>>> MultiParentClassLoader) {
>>> + try {
>>> + return
>>> ((MultiParentClassLoader)
>>> parent).loadClassInternal(name, resolve,
>>> visitedClassLoaders);
>>> + } catch (MalformedURLException
>>> e) {
>>> + }
>>> + }
>>> + return super.loadClass(name,
>>> resolve);
>>> + }
>>> +
>>> + public URL getResource(String name) {
>>> + ClassLoadingRule privateRule =
>>> rules.getPrivateRule();
>>> + if
>>> (privateRule.isFilteredResource(name)) {
>>> + return null;
>>> + }
>>> + return super.getResource(name);
>>> + }
>>> +
>>> + public Enumeration<URL>
>>> getResources(String
>>> name) throws IOException
>>> {
>>> + ClassLoadingRule privateRule =
>>> rules.getPrivateRule();
>>> + if
>>> (privateRule.isFilteredResource(name)) {
>>> + return new
>>> CompoundEnumeration(new
>>> Enumeration[0]);
>>> + }
>>> + return super.getResources(name);
>>> + }
>>> +
>>> +}
>>> Modified:
>>> geronimo/server/trunk/framework/modules/
>>> geronimo-kernel/src/main/java/org/apache/geronimo/kernel/config/
>>> Configuration.java
>>> URL:
>>> http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/config/Configuration.java?rev=712326&r1=712325&r2=712326&view=diff
>>>
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> ====================================================================
>>> ---
>>> geronimo/server/trunk/framework/modules/
>>> geronimo-kernel/src/main/java/org/apache/geronimo/kernel/config/
>>> Configuration.java
>>> (original)
>>> +++
>>> geronimo/server/trunk/framework/modules/
>>> geronimo-kernel/src/main/java/org/apache/geronimo/kernel/config/
>>> Configuration.java
>>> Fri Nov 7 16:40:08 2008
>>> @@ -25,6 +25,7 @@
>>> import java.util.Collection;
>>> import java.util.Collections;
>>> import java.util.HashMap;
>>> +import java.util.HashSet;
>>> import java.util.Iterator;
>>> import java.util.LinkedHashMap;
>>> import java.util.LinkedHashSet;
>>> @@ -32,13 +33,10 @@
>>> import java.util.ListIterator;
>>> import java.util.Map;
>>> import java.util.Set;
>>> -import java.util.HashSet;
>>> import
>>>
>>> javax.management.MalformedObjectNameException;
>>> import javax.management.ObjectName;
>>> -import org.slf4j.Logger;
>>> -import org.slf4j.LoggerFactory;
>>> import
>>> org.apache.geronimo.gbean.AbstractName;
>>> import
>>> org.apache.geronimo.gbean.AbstractNameQuery;
>>> import org.apache.geronimo.gbean.GBeanData;
>>> @@ -51,10 +49,14 @@
>>> import org.apache.geronimo.kernel.Naming;
>>> import
>>>
>>> org.apache.geronimo.kernel.classloader.JarFileClassLoader;
>>> import
>>>
>>> org.apache.geronimo.kernel.repository.Artifact;
>>> +import
>>>
>>> org.apache.geronimo.kernel.repository.ClassLoadingRule;
>>> +import
>>>
>>> org.apache.geronimo.kernel.repository.ClassLoadingRules;
>>> import
>>>
>>> org.apache.geronimo.kernel.repository.Dependency;
>>> import
>>>
>>> org.apache.geronimo.kernel.repository.Environment;
>>> import
>>>
>>> org.apache.geronimo.kernel.repository.ImportType;
>>> import
>>>
>>> org.apache.geronimo.kernel.repository.MissingDependencyException;
>>> +import org.slf4j.Logger;
>>> +import org.slf4j.LoggerFactory;
>>> /**
>>> * A Configuration represents a collection of
>>> runnable services that can
>>> be
>>> @@ -170,6 +172,11 @@
>>> private final MultiParentClassLoader
>>> configurationClassLoader;
>>> /**
>>> + * The ClassLoader used by children
>>> configurations.
>>> + */
>>> + private final ClassLoader
>>> childrenConfigurationClassLoader;
>>> +
>>> + /**
>>> * The relative class path (URI) of this
>>> configuation.
>>> */
>>> private final LinkedHashSet<String>
>>> classPath;
>>> @@ -204,6 +211,7 @@
>>> classPath = null;
>>> configurationResolver = null;
>>> configurationClassLoader = null;
>>> + childrenConfigurationClassLoader =
>>> null;
>>> naming = null;
>>> }
>>> @@ -266,6 +274,9 @@
>>> // Build the configuration class
>>> loader
>>> //
>>> configurationClassLoader =
>>> createConfigurationClasssLoader(parents,
>>> environment, classPath);
>>> +
>>> + ClassLoadingRules rules =
>>> environment.getClassLoadingRules();
>>> +
>>> childrenConfigurationClassLoader = new
>>>
>>> ChildrenConfigurationClassLoader(configurationClassLoader,
>>> rules);
>>> //
>>> // Get all service parents in depth
>>> first order
>>> @@ -333,22 +344,19 @@
>>> parentClassLoaders = new
>>> ClassLoader[classParents.size()];
>>> for (ListIterator iterator =
>>> classParents.listIterator();
>>> iterator.hasNext();) {
>>> Configuration configuration =
>>> (Configuration)
>>> iterator.next();
>>> -
>>> parentClassLoaders[iterator.previousIndex()] =
>>> configuration.getConfigurationClassLoader();
>>> +
>>> parentClassLoaders[iterator.previousIndex()] =
>>>
>>> configuration.childrenConfigurationClassLoader;
>>> }
>>> }
>>> - // hidden classes
>>> - Set<String> hiddenClassesSet =
>>> environment.getHiddenClasses();
>>> - String[] hiddenClasses =
>>> hiddenClassesSet.toArray(new
>>> String[hiddenClassesSet.size()]);
>>> -
>>> // we need to propagate the
>>> non-overrideable classes from parents
>>> - LinkedHashSet<String>
>>> nonOverridableSet
>>> = new
>>>
>>> LinkedHashSet<String>(environment.getNonOverrideableClasses());
>>> + ClassLoadingRules
>>> classLoadingRules =
>>> environment.getClassLoadingRules();
>>> + ClassLoadingRule
>>> nonOverrideableRule =
>>> classLoadingRules.getNonOverrideableRule();
>>> for (Configuration parent :
>>> classParents) {
>>> -
>>> Environment parentEnvironment =
>>> parent.getEnvironment();
>>> -
>>>
>>> nonOverridableSet
>>> .addAll(parentEnvironment.getNonOverrideableClasses());
>>> + ClassLoadingRules
>>> parentClassLoadingRules =
>>> parentEnvironment.getClassLoadingRules();
>>> + ClassLoadingRule
>>> parentNonOverrideableRule =
>>>
>>> parentClassLoadingRules.getNonOverrideableRule();
>>> +
>>> nonOverrideableRule.merge(parentNonOverrideableRule);
>>> }
>>> - String[] nonOverridableClasses =
>>> nonOverridableSet.toArray(new
>>> String[nonOverridableSet.size()]);
>>> if (log.isDebugEnabled()) {
>>> StringBuffer buf = new
>>> StringBuffer("ClassLoader structure for
>>> configuration ").append(id).append("\n");
>>> @@ -377,16 +385,12 @@
>>> return new
>>> JarFileClassLoader(environment.getConfigId(),
>>> urls,
>>> parentClassLoaders,
>>> -
>>> environment.isInverseClassLoading(),
>>> - hiddenClasses,
>>> - nonOverridableClasses);
>>> + classLoadingRules);
>>> } else {
>>> return new
>>>
>>> MultiParentClassLoader(environment.getConfigId(),
>>> urls,
>>> parentClassLoaders,
>>> -
>>> environment.isInverseClassLoading(),
>>> - hiddenClasses,
>>> - nonOverridableClasses);
>>> + classLoadingRules);
>>> }
>>> }
>>> Modified:
>>> geronimo/server/trunk/framework/modules/
>>> geronimo-kernel/src/main/java/org/apache/geronimo/kernel/config/
>>> MultiParentClassLoader.java
>>> URL:
>>> http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/config/MultiParentClassLoader.java?rev=712326&r1=712325&r2=712326&view=diff
>>>
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> ====================================================================
>>> ---
>>> geronimo/server/trunk/framework/modules/
>>> geronimo-kernel/src/main/java/org/apache/geronimo/kernel/config/
>>> MultiParentClassLoader.java
>>> (original)
>>> +++
>>> geronimo/server/trunk/framework/modules/
>>> geronimo-kernel/src/main/java/org/apache/geronimo/kernel/config/
>>> MultiParentClassLoader.java
>>> Fri Nov 7 16:40:08 2008
>>> @@ -27,7 +27,6 @@
>>> import java.net.URLClassLoader;
>>> import java.net.URLStreamHandlerFactory;
>>> import java.util.ArrayList;
>>> -import java.util.Collection;
>>> import java.util.Collections;
>>> import java.util.Enumeration;
>>> import java.util.HashSet;
>>> @@ -36,11 +35,13 @@
>>> import java.util.Map;
>>> import java.util.Set;
>>> -import org.slf4j.Logger;
>>> -import org.slf4j.LoggerFactory;
>>> import
>>>
>>> org.apache.geronimo.kernel.classloader.UnionEnumeration;
>>> import
>>>
>>> org.apache.geronimo.kernel.repository.Artifact;
>>> +import
>>>
>>> org.apache.geronimo.kernel.repository.ClassLoadingRule;
>>> +import
>>>
>>> org.apache.geronimo.kernel.repository.ClassLoadingRules;
>>> import
>>>
>>> org.apache.geronimo.kernel.util.ClassLoaderRegistry;
>>> +import org.slf4j.Logger;
>>> +import org.slf4j.LoggerFactory;
>>> /**
>>> * A MultiParentClassLoader is a simple
>>> extension
>>> of the URLClassLoader
>>> that simply changes the single parent class
>>> @@ -57,11 +58,7 @@
>>> private final Artifact id;
>>> private final ClassLoader[] parents;
>>> - private final boolean
>>> inverseClassLoading;
>>> - private final String[] hiddenClasses;
>>> - private final String[]
>>> nonOverridableClasses;
>>> - private final String[] hiddenResources;
>>> - private final String[]
>>> nonOverridableResources;
>>> + private final ClassLoadingRules
>>> classLoadingRules;
>>> private boolean destroyed = false;
>>> // I used this pattern as its temporary and
>>> with the static final we
>>> get compile time
>>> @@ -102,12 +99,9 @@
>>> public MultiParentClassLoader(Artifact id,
>>> URL[] urls) {
>>> super(urls);
>>> this.id <http://this.id> = id;
>>> +
>>> parents = new
>>> ClassLoader[]
>>> {ClassLoader.getSystemClassLoader()};
>>> - inverseClassLoading = false;
>>> - hiddenClasses = new String[0];
>>> - nonOverridableClasses = new
>>> String[0];
>>> - hiddenResources = new String[0];
>>> - nonOverridableResources = new
>>> String[0];
>>> + classLoadingRules = new
>>> ClassLoadingRules();
>>> ClassLoaderRegistry.add(this);
>>> }
>>> @@ -123,8 +117,8 @@
>>> this(id, urls, new ClassLoader[]
>>> {parent});
>>> }
>>> - public MultiParentClassLoader(Artifact
>>> id,
>>> URL[] urls, ClassLoader
>>> parent, boolean inverseClassLoading, String[]
>>> hiddenClasses, String[]
>>> nonOverridableClasses) {
>>> - this(id, urls, new
>>> ClassLoader[]{parent}, inverseClassLoading,
>>> hiddenClasses, nonOverridableClasses);
>>> + public MultiParentClassLoader(Artifact
>>> id,
>>> URL[] urls, ClassLoader
>>> parent, ClassLoadingRules
>>> classLoadingRules) {
>>> + this(id, urls, new
>>> ClassLoader[]{parent}, classLoadingRules);
>>> }
>>> /**
>>> @@ -151,32 +145,21 @@
>>> super(urls);
>>> this.id <http://this.id> = id;
>>> this.parents = copyParents(parents);
>>> - inverseClassLoading = false;
>>> - hiddenClasses = new String[0];
>>> - nonOverridableClasses = new
>>> String[0];
>>> - hiddenResources = new String[0];
>>> - nonOverridableResources = new
>>> String[0];
>>> - ClassLoaderRegistry.add(this);
>>> - }
>>> - public MultiParentClassLoader(Artifact
>>> id,
>>> URL[] urls, ClassLoader[]
>>> parents, boolean inverseClassLoading,
>>> Collection
>>> hiddenClasses, Collection
>>> nonOverridableClasses) {
>>> - this(id, urls, parents,
>>> inverseClassLoading, (String[])
>>> hiddenClasses.toArray(new
>>> String[hiddenClasses.size()]), (String[])
>>> nonOverridableClasses.toArray(new
>>> String[nonOverridableClasses.size()]));
>>> + classLoadingRules = new
>>> ClassLoadingRules();
>>> + ClassLoaderRegistry.add(this);
>>> }
>>> - public MultiParentClassLoader(Artifact
>>> id,
>>> URL[] urls, ClassLoader[]
>>> parents, boolean inverseClassLoading,
>>> String[]
>>> hiddenClasses, String[]
>>> nonOverridableClasses) {
>>> + public MultiParentClassLoader(Artifact
>>> id,
>>> URL[] urls, ClassLoader[]
>>> parents, ClassLoadingRules
>>> classLoadingRules) {
>>> super(urls);
>>> this.id <http://this.id> = id;
>>> this.parents = copyParents(parents);
>>> - this.inverseClassLoading =
>>> inverseClassLoading;
>>> - this.hiddenClasses = hiddenClasses;
>>> - this.nonOverridableClasses =
>>> nonOverridableClasses;
>>> - hiddenResources =
>>> toResources(hiddenClasses);
>>> - nonOverridableResources =
>>> toResources(nonOverridableClasses);
>>> + this.classLoadingRules =
>>> classLoadingRules;
>>> ClassLoaderRegistry.add(this);
>>> }
>>> public
>>> MultiParentClassLoader(MultiParentClassLoader
>>> source) {
>>> - this(source.id <http://source.id>,
>>> source.getURLs(),
>>> deepCopyParents(source.parents),
>>> source.inverseClassLoading,
>>> source.hiddenClasses,
>>> source.nonOverridableClasses);
>>> + this(source.id <http://source.id>,
>>> source.getURLs(),
>>> deepCopyParents(source.parents),
>>> source.classLoadingRules);
>>> }
>>> static ClassLoader copy(ClassLoader
>>> source) {
>>> @@ -193,15 +176,6 @@
>>> return
>>> MultiParentClassLoader.copy(this);
>>> }
>>> - private String[] toResources(String[]
>>> classes) {
>>> - String[] resources = new
>>> String[classes.length];
>>> - for (int i = 0; i <
>>> classes.length; i++) {
>>> - String className = classes[i];
>>> - resources[i] =
>>> className.replace('.', '/');
>>> - }
>>> - return resources;
>>> - }
>>> -
>>> /**
>>> * Creates a named class loader as a child
>>> of
>>> the specified parents and
>>> using the specified URLStreamHandlerFactory
>>> * for accessing the urls..
>>> @@ -215,11 +189,8 @@
>>> super(urls, null, factory);
>>> this.id <http://this.id> = id;
>>> this.parents = copyParents(parents);
>>> - inverseClassLoading = false;
>>> - hiddenClasses = new String[0];
>>> - nonOverridableClasses = new
>>> String[0];
>>> - hiddenResources = new String[0];
>>> - nonOverridableResources = new
>>> String[0];
>>> +
>>> + classLoadingRules = new
>>> ClassLoadingRules();
>>> ClassLoaderRegistry.add(this);
>>> }
>>> @@ -320,7 +291,7 @@
>>> //
>>> // if we are using inverse class
>>> loading,
>>> check local urls first
>>> //
>>> - if (inverseClassLoading &&
>>> !isDestroyed() &&
>>> !isNonOverridableClass(name)) {
>>> + if
>>> (classLoadingRules.isInverseClassLoading() &&
>>> !isDestroyed()
>>> && !isNonOverridableClass(name)) {
>>> try {
>>> Class clazz = findClass(name);
>>> return resolveClass(clazz,
>>> resolve);
>>> @@ -404,7 +375,7 @@
>>> //
>>> // if we are using inverse class
>>> loading,
>>> check local urls first
>>> //
>>> - if (inverseClassLoading &&
>>> !isDestroyed() &&
>>> !isNonOverridableClass(name)) {
>>> + if
>>> (classLoadingRules.isInverseClassLoading() &&
>>> !isDestroyed()
>>> && !isNonOverridableClass(name)) {
>>> try {
>>> Class clazz = findClass(name);
>>> return resolveClass(clazz,
>>> resolve);
>>> @@ -453,7 +424,7 @@
>>> * @return
>>> * @throws ClassNotFoundException
>>> */
>>> - protected synchronized Class<?>
>>> loadClassInternal(String name,
>>> boolean resolve, LinkedList<ClassLoader>
>>> visitedClassLoaders) throws
>>> ClassNotFoundException,
>>> MalformedURLException {
>>> + protected synchronized Class<?>
>>> loadClassInternal(String name,
>>> boolean resolve, List<ClassLoader>
>>> visitedClassLoaders) throws
>>> ClassNotFoundException,
>>> MalformedURLException {
>>> //
>>> // Check if class is in the loaded
>>> classes
>>> cache
>>> //
>>> @@ -500,7 +471,7 @@
>>> * @return
>>> * @throws ClassNotFoundException
>>> */
>>> - private synchronized Class<?>
>>> checkParents(String name, boolean
>>> resolve, LinkedList<ClassLoader>
>>> visitedClassLoaders) throws
>>> ClassNotFoundException {
>>> + private synchronized Class<?>
>>> checkParents(String name, boolean
>>> resolve, List<ClassLoader>
>>> visitedClassLoaders)
>>> throws
>>> ClassNotFoundException {
>>> for (ClassLoader parent : parents) {
>>> if
>>> (!visitedClassLoaders.contains(parent)) {
>>> visitedClassLoaders.add(parent);
>>> // Track that we've been
>>> here before
>>> @@ -508,6 +479,9 @@
>>> if (parent instanceof
>>> MultiParentClassLoader) {
>>> Class clazz =
>>> ((MultiParentClassLoader)
>>> parent).loadClassInternal(name, resolve,
>>> visitedClassLoaders);
>>> if (clazz !=
>>> null)
>>> return
>>> resolveClass(clazz, resolve);
>>> + } else if (parent
>>> instanceof
>>> ChildrenConfigurationClassLoader) {
>>> + Class clazz =
>>> ((ChildrenConfigurationClassLoader)
>>> parent).loadClass(name, visitedClassLoaders);
>>> + if (clazz != null)
>>> return resolveClass(clazz,
>>> resolve);
>>> } else {
>>> return
>>> parent.loadClass(name);
>>> }
>>> @@ -523,21 +497,13 @@
>>> }
>>> private boolean isNonOverridableClass(String
>>> name) {
>>> - for (String nonOverridableClass :
>>> nonOverridableClasses) {
>>> - if
>>> (name.startsWith(nonOverridableClass)) {
>>> - return true;
>>> - }
>>> - }
>>> - return false;
>>> + ClassLoadingRule
>>> nonOverrideableRule =
>>> classLoadingRules.getNonOverrideableRule();
>>> + return
>>> nonOverrideableRule.isFilteredClass(name);
>>> }
>>> private boolean isHiddenClass(String name) {
>>> - for (String hiddenClass :
>>> hiddenClasses) {
>>> - if
>>> (name.startsWith(hiddenClass)) {
>>> - return true;
>>> - }
>>> - }
>>> - return false;
>>> + ClassLoadingRule hiddenRule =
>>> classLoadingRules.getHiddenRule();
>>> + return
>>> hiddenRule.isFilteredClass(name);
>>> }
>>> private Class resolveClass(Class clazz,
>>> boolean
>>> resolve) {
>>> @@ -555,7 +521,7 @@
>>> //
>>> // if we are using inverse class
>>> loading,
>>> check local urls first
>>> //
>>> - if (inverseClassLoading &&
>>> !isDestroyed() &&
>>> !isNonOverridableResource(name)) {
>>> + if
>>> (classLoadingRules.isInverseClassLoading() &&
>>> !isDestroyed()
>>> && !isNonOverridableResource(name)) {
>>> URL url = findResource(name);
>>> if (url != null) {
>>> return url;
>>> @@ -606,7 +572,7 @@
>>> return;
>>> }
>>> knownClassloaders.add(this);
>>> - if (inverseClassLoading &&
>>> !isNonOverridableResource(name)) {
>>> + if
>>> (classLoadingRules.isInverseClassLoading() &&
>>> !isNonOverridableResource(name)) {
>>>
>>> enumerations.add(internalfindResources(name));
>>> }
>>> if (!isHiddenResource(name)) {
>>> @@ -621,7 +587,7 @@
>>> }
>>> }
>>> }
>>> - if (!inverseClassLoading) {
>>> + if
>>> (!
>>> classLoadingRules.isInverseClassLoading()) {
>>>
>>> enumerations.add(internalfindResources(name));
>>> }
>>> }
>>> @@ -631,21 +597,13 @@
>>> }
>>> private boolean
>>> isNonOverridableResource(String
>>> name) {
>>> - for (String nonOverridableResource :
>>> nonOverridableResources) {
>>> - if
>>> (name.startsWith(nonOverridableResource)) {
>>> - return true;
>>> - }
>>> - }
>>> - return false;
>>> + ClassLoadingRule
>>> nonOverrideableRule =
>>> classLoadingRules.getNonOverrideableRule();
>>> + return
>>> nonOverrideableRule.isFilteredResource(name);
>>> }
>>> private boolean isHiddenResource(String
>>> name) {
>>> - for (String hiddenResource :
>>> hiddenResources) {
>>> - if
>>> (name.startsWith(hiddenResource)) {
>>> - return true;
>>> - }
>>> - }
>>> - return false;
>>> + ClassLoadingRule hiddenRule =
>>> classLoadingRules.getHiddenRule();
>>> + return
>>> hiddenRule.isFilteredResource(name);
>>> }
>>> public String toString() {
>>> Added:
>>> geronimo/server/trunk/framework/modules/
>>> geronimo-kernel/src/main/java/org/apache/geronimo/kernel/
>>> repository/ClassLoadingRule.java
>>> URL:
>>> http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/repository/ClassLoadingRule.java?rev=712326&view=auto
>>>
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> ====================================================================
>>> ---
>>> geronimo/server/trunk/framework/modules/
>>> geronimo-kernel/src/main/java/org/apache/geronimo/kernel/
>>> repository/ClassLoadingRule.java
>>> (added)
>>> +++
>>> geronimo/server/trunk/framework/modules/
>>> geronimo-kernel/src/main/java/org/apache/geronimo/kernel/
>>> repository/ClassLoadingRule.java
>>> Fri Nov 7 16:40:08 2008
>>> @@ -0,0 +1,85 @@
>>> +/*
>>> + * Licensed to the Apache Software
>>> Foundation
>>> (ASF) under one
>>> + * or more contributor license
>>> agreements. See
>>> the NOTICE file
>>> + * distributed with this work for additional
>>> information
>>> + * regarding copyright ownership. The ASF
>>> licenses this file
>>> + * to you under the Apache License,
>>> Version 2.0
>>> (the
>>> + * "License"); you may not use this file
>>> except
>>> in compliance
>>> + * with the License. You may obtain a
>>> copy of
>>> the License at
>>> + *
>>> + * http://www.apache.org/licenses/LICENSE-2.0
>>> + *
>>> + * Unless required by applicable law or
>>> agreed
>>> to in writing,
>>> + * software distributed under the License is
>>> distributed on an
>>> + * "AS IS" BASIS, WITHOUT WARRANTIES OR
>>> CONDITIONS OF ANY
>>> + * KIND, either express or implied. See the
>>> License for the
>>> + * specific language governing permissions
>>> and
>>> limitations
>>> + * under the License.
>>> + */
>>> +
>>> +package
>>> org.apache.geronimo.kernel.repository;
>>> +
>>> +import java.io.Serializable;
>>> +import java.util.HashSet;
>>> +import java.util.Set;
>>> +
>>> +/**
>>> + *
>>> + * @version $Rev:$ $Date:$
>>> + */
>>> +public class ClassLoadingRule implements
>>> Serializable {
>>> + private final Set<String> classPrefixes;
>>> + private final Set<String>
>>> resourcePrefixes;
>>> +
>>> + public ClassLoadingRule() {
>>> + classPrefixes = new
>>> HashSet<String>();
>>> + resourcePrefixes = new
>>> HashSet<String>();
>>> + }
>>> +
>>> + public Set<String> getClassPrefixes() {
>>> + return classPrefixes;
>>> + }
>>> +
>>> + public boolean isFilteredClass(String
>>> name) {
>>> + return isMatching(classPrefixes,
>>> name);
>>> + }
>>> +
>>> + public boolean isFilteredResource(String
>>> name) {
>>> + return
>>> isMatching(resourcePrefixes, name);
>>> + }
>>> +
>>> + public void addClassPrefixes(Set<String>
>>> classPrefixes) {
>>> +
>>> this.classPrefixes.addAll(classPrefixes);
>>> +
>>> + Set<String> resources =
>>> toResources(classPrefixes);
>>> + resourcePrefixes.addAll(resources);
>>> + }
>>> +
>>> + public void setClassPrefixes(Set<String>
>>> classPrefixes) {
>>> + this.classPrefixes.clear();
>>> + resourcePrefixes.clear();
>>> + addClassPrefixes(classPrefixes);
>>> + }
>>> +
>>> + public void merge(ClassLoadingRule
>>> classLoadingRuleToMerge) {
>>> +
>>> addClassPrefixes(classLoadingRuleToMerge.classPrefixes);
>>> + }
>>> +
>>> + protected Set<String>
>>> toResources(Set<String> classPrefixes) {
>>> + Set<String> resources = new
>>> HashSet<String>();
>>> + for (String className :
>>> classPrefixes) {
>>> +
>>> resources.add(className.replace('.', '/'));
>>> + }
>>> + return resources;
>>> + }
>>> +
>>> + protected boolean isMatching(Set<String>
>>> prefixes, String name) {
>>> + for (String prefix : prefixes) {
>>> + if (name.startsWith(prefix)) {
>>> + return true;
>>> + }
>>> + }
>>> + return false;
>>> + }
>>> +
>>> +}
>>> \ No newline at end of file
>>> Added:
>>> geronimo/server/trunk/framework/modules/
>>> geronimo-kernel/src/main/java/org/apache/geronimo/kernel/
>>> repository/ClassLoadingRules.java
>>> URL:
>>> http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/repository/ClassLoadingRules.java?rev=712326&view=auto
>>>
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> ====================================================================
>>> ---
>>> geronimo/server/trunk/framework/modules/
>>> geronimo-kernel/src/main/java/org/apache/geronimo/kernel/
>>> repository/ClassLoadingRules.java
>>> (added)
>>> +++
>>> geronimo/server/trunk/framework/modules/
>>> geronimo-kernel/src/main/java/org/apache/geronimo/kernel/
>>> repository/ClassLoadingRules.java
>>> Fri Nov 7 16:40:08 2008
>>> @@ -0,0 +1,72 @@
>>> +/*
>>> + * Licensed to the Apache Software
>>> Foundation
>>> (ASF) under one
>>> + * or more contributor license
>>> agreements. See
>>> the NOTICE file
>>> + * distributed with this work for additional
>>> information
>>> + * regarding copyright ownership. The ASF
>>> licenses this file
>>> + * to you under the Apache License,
>>> Version 2.0
>>> (the
>>> + * "License"); you may not use this file
>>> except
>>> in compliance
>>> + * with the License. You may obtain a
>>> copy of
>>> the License at
>>> + *
>>> + * http://www.apache.org/licenses/LICENSE-2.0
>>> + *
>>> + * Unless required by applicable law or
>>> agreed
>>> to in writing,
>>> + * software distributed under the License is
>>> distributed on an
>>> + * "AS IS" BASIS, WITHOUT WARRANTIES OR
>>> CONDITIONS OF ANY
>>> + * KIND, either express or implied. See the
>>> License for the
>>> + * specific language governing permissions
>>> and
>>> limitations
>>> + * under the License.
>>> + */
>>> +
>>> +package
>>> org.apache.geronimo.kernel.repository;
>>> +
>>> +import java.io.Serializable;
>>> +
>>> +
>>> +/**
>>> + *
>>> + * @version $Rev:$ $Date:$
>>> + */
>>> +public class ClassLoadingRules implements
>>> Serializable {
>>> + private final ClassLoadingRule
>>> hiddenRule;
>>> + private final ClassLoadingRule
>>> nonOverrideableRule;
>>> + private final ClassLoadingRule
>>> privateRule;
>>> + private boolean inverseClassLoading;
>>> +
>>> + public ClassLoadingRules() {
>>> + hiddenRule = new ClassLoadingRule();
>>> + nonOverrideableRule = new
>>> ClassLoadingRule();
>>> + privateRule = new
>>> ClassLoadingRule();
>>> + }
>>> +
>>> + public ClassLoadingRule
>>> getHiddenRule() {
>>> + return hiddenRule;
>>> + }
>>> +
>>> + public ClassLoadingRule
>>> getNonOverrideableRule() {
>>> + return nonOverrideableRule;
>>> + }
>>> +
>>> + public ClassLoadingRule
>>> getPrivateRule() {
>>> + return privateRule;
>>> + }
>>> +
>>> + public boolean isInverseClassLoading() {
>>> + return inverseClassLoading;
>>> + }
>>> +
>>> + public void
>>> setInverseClassLoading(boolean
>>> inverseClassLoading) {
>>> + this.inverseClassLoading =
>>> inverseClassLoading;
>>> + }
>>> +
>>> + public void merge(ClassLoadingRules
>>> classLoadingRulesToMerge) {
>>> + if (inverseClassLoading) {
>>> + return;
>>> + }
>>> + inverseClassLoading =
>>> classLoadingRulesToMerge.inverseClassLoading;
>>> +
>>> +
>>> hiddenRule.merge(classLoadingRulesToMerge.hiddenRule);
>>> +
>>>
>>> nonOverrideableRule
>>> .merge(classLoadingRulesToMerge.nonOverrideableRule);
>>> +
>>> privateRule.merge(classLoadingRulesToMerge.privateRule);
>>> + }
>>> +
>>> +}
>>> Modified:
>>> geronimo/server/trunk/framework/modules/
>>> geronimo-kernel/src/main/java/org/apache/geronimo/kernel/
>>> repository/DefaultArtifactResolver.java
>>> URL:
>>> http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/repository/DefaultArtifactResolver.java?rev=712326&r1=712325&r2=712326&view=diff
>>>
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> ====================================================================
>>> ---
>>> geronimo/server/trunk/framework/modules/
>>> geronimo-kernel/src/main/java/org/apache/geronimo/kernel/
>>> repository/DefaultArtifactResolver.java
>>> (original)
>>> +++
>>> geronimo/server/trunk/framework/modules/
>>> geronimo-kernel/src/main/java/org/apache/geronimo/kernel/
>>> repository/DefaultArtifactResolver.java
>>> Fri Nov 7 16:40:08 2008
>>> @@ -179,7 +179,7 @@
>>> }
>>> Environment environment =
>>> configuration.getEnvironment();
>>> - if
>>> (environment.isInverseClassLoading()) {
>>> + if
>>>
>>> (environment.getClassLoadingRules().isInverseClassLoading())
>>> {
>>> // Search dependencies of the
>>> configuration before
>>> searching the parents
>>> Artifact artifact =
>>>
>>> getArtifactVersion(configuration.getDependencies(),
>>> working);
>>> if (artifact != null) {
>>> Modified:
>>> geronimo/server/trunk/framework/modules/
>>> geronimo-kernel/src/main/java/org/apache/geronimo/kernel/
>>> repository/Environment.java
>>> URL:
>>> http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/repository/Environment.java?rev=712326&r1=712325&r2=712326&view=diff
>>>
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> ====================================================================
>>> ---
>>> geronimo/server/trunk/framework/modules/
>>> geronimo-kernel/src/main/java/org/apache/geronimo/kernel/
>>> repository/Environment.java
>>> (original)
>>> +++
>>> geronimo/server/trunk/framework/modules/
>>> geronimo-kernel/src/main/java/org/apache/geronimo/kernel/
>>> repository/Environment.java
>>> Fri Nov 7 16:40:08 2008
>>> @@ -18,14 +18,12 @@
>>> package
>>> org.apache.geronimo.kernel.repository;
>>> import java.io.Serializable;
>>> +import java.util.ArrayList;
>>> import java.util.Collection;
>>> -import java.util.HashSet;
>>> -import java.util.LinkedHashSet;
>>> -import java.util.Set;
>>> -import java.util.List;
>>> import java.util.Collections;
>>> -import java.util.ArrayList;
>>> import java.util.Iterator;
>>> +import java.util.LinkedHashSet;
>>> +import java.util.List;
>>> /**
>>> * holds the data from the EnvironmentType xml
>>> while it is being resolved,
>>> transitively closed, etc.
>>> @@ -36,29 +34,25 @@
>>> private static final long serialVersionUID =
>>> 7075760873629376317L;
>>> private Artifact configId;
>>> -
>>> private final LinkedHashSet dependencies =
>>> new
>>> LinkedHashSet();
>>> -
>>> - private final Set hiddenClasses = new
>>> HashSet();
>>> - private final Set
>>> nonOverrideableClasses =
>>> new HashSet();
>>> -
>>> - private boolean inverseClassLoading;
>>> + private final ClassLoadingRules
>>> classLoadingRules;
>>> private boolean suppressDefaultEnvironment;
>>> public Environment() {
>>> + classLoadingRules = new
>>> ClassLoadingRules();
>>> }
>>> public Environment(Artifact configId) {
>>> this.configId = configId;
>>> +
>>> + classLoadingRules = new
>>> ClassLoadingRules();
>>> }
>>> public Environment(Environment
>>> environment) {
>>> - this.configId =
>>> environment.getConfigId();
>>> -
>>> this.dependencies.addAll(environment.dependencies);
>>> -
>>> this.hiddenClasses.addAll(environment.getHiddenClasses());
>>> -
>>>
>>> this
>>> .nonOverrideableClasses
>>> .addAll(environment.getNonOverrideableClasses());
>>> - this.inverseClassLoading =
>>> environment.isInverseClassLoading();
>>> - this.suppressDefaultEnvironment =
>>> environment.isSuppressDefaultEnvironment();
>>> + configId =
>>> environment.getConfigId();
>>> +
>>> dependencies.addAll(environment.dependencies);
>>> + suppressDefaultEnvironment =
>>> environment.isSuppressDefaultEnvironment();
>>> + classLoadingRules =
>>> environment.classLoadingRules;
>>> }
>>> public Artifact getConfigId() {
>>> @@ -100,46 +94,8 @@
>>> addDependencies(dependencies);
>>> }
>>> - /**
>>> - * todo: I should be documented so
>>> it's not
>>> completely unclear what
>>> kind of
>>> - * elements I hold.
>>> - */
>>> - public Set getHiddenClasses() {
>>> - return hiddenClasses;
>>> - }
>>> -
>>> - public void addHiddenClasses(Collection
>>> hiddenClasses) {
>>> -
>>> this.hiddenClasses.addAll(hiddenClasses);
>>> - }
>>> -
>>> - public void setHiddenClasses(Collection
>>> hiddenClasses) {
>>> - this.hiddenClasses.clear();
>>> - addHiddenClasses(hiddenClasses);
>>> - }
>>> -
>>> - /**
>>> - * todo: I should be documented so
>>> it's not
>>> completely unclear what
>>> kind of
>>> - * elements I hold.
>>> - */
>>> - public Set getNonOverrideableClasses() {
>>> - return nonOverrideableClasses;
>>> - }
>>> -
>>> - public void
>>> addNonOverrideableClasses(Collection
>>> nonOverrideableClasses) {
>>> -
>>> this.nonOverrideableClasses.addAll(nonOverrideableClasses);
>>> - }
>>> -
>>> - public void
>>> setNonOverrideableClasses(Collection
>>> nonOverrideableClasses) {
>>> - this.nonOverrideableClasses.clear();
>>> -
>>> addNonOverrideableClasses(nonOverrideableClasses);
>>> - }
>>> -
>>> - public boolean isInverseClassLoading() {
>>> - return inverseClassLoading;
>>> - }
>>> -
>>> - public void
>>> setInverseClassLoading(boolean
>>> inverseClassLoading) {
>>> - this.inverseClassLoading =
>>> inverseClassLoading;
>>> + public ClassLoadingRules
>>> getClassLoadingRules() {
>>> + return classLoadingRules;
>>> }
>>> public boolean
>>> isSuppressDefaultEnvironment() {
>>> Added:
>>> geronimo/server/trunk/framework/modules/
>>> geronimo-kernel/src/test/java/org/apache/geronimo/kernel/config/
>>> ChildrenConfigurationClassLoaderTest.java
>>> URL:
>>> http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-kernel/src/test/java/org/apache/geronimo/kernel/config/ChildrenConfigurationClassLoaderTest.java?rev=712326&view=auto
>>>
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> ====================================================================
>>> ---
>>> geronimo/server/trunk/framework/modules/
>>> geronimo-kernel/src/test/java/org/apache/geronimo/kernel/config/
>>> ChildrenConfigurationClassLoaderTest.java
>>> (added)
>>> +++
>>> geronimo/server/trunk/framework/modules/
>>> geronimo-kernel/src/test/java/org/apache/geronimo/kernel/config/
>>> ChildrenConfigurationClassLoaderTest.java
>>> Fri Nov 7 16:40:08 2008
>>> @@ -0,0 +1,78 @@
>>> +/*
>>> + * Licensed to the Apache Software
>>> Foundation
>>> (ASF) under one
>>> + * or more contributor license
>>> agreements. See
>>> the NOTICE file
>>> + * distributed with this work for additional
>>> information
>>> + * regarding copyright ownership. The ASF
>>> licenses this file
>>> + * to you under the Apache License,
>>> Version 2.0
>>> (the
>>> + * "License"); you may not use this file
>>> except
>>> in compliance
>>> + * with the License. You may obtain a
>>> copy of
>>> the License at
>>> + *
>>> + * http://www.apache.org/licenses/LICENSE-2.0
>>> + *
>>> + * Unless required by applicable law or
>>> agreed
>>> to in writing,
>>> + * software distributed under the License is
>>> distributed on an
>>> + * "AS IS" BASIS, WITHOUT WARRANTIES OR
>>> CONDITIONS OF ANY
>>> + * KIND, either express or implied. See the
>>> License for the
>>> + * specific language governing permissions
>>> and
>>> limitations
>>> + * under the License.
>>> + */
>>> +
>>> +package org.apache.geronimo.kernel.config;
>>> +
>>> +import java.util.Collections;
>>> +
>>> +import
>>>
>>> org.apache.geronimo.kernel.repository.ClassLoadingRule;
>>> +import
>>>
>>> org.apache.geronimo.kernel.repository.ClassLoadingRules;
>>> +
>>> +import junit.framework.TestCase;
>>> +
>>> +/**
>>> + *
>>> + * @version $Rev:$ $Date:$
>>> + */
>>> +public class
>>> ChildrenConfigurationClassLoaderTest extends
>>> TestCase {
>>> +
>>> + private String privateResourceName;
>>> + private String privateResourceClass;
>>> + private ChildrenConfigurationClassLoader
>>> classLoader;
>>> + private ClassLoadingRules rules;
>>> +
>>> + @Override
>>> + protected void setUp() throws
>>> Exception {
>>> + rules = new ClassLoadingRules();
>>> + privateResourceClass =
>>>
>>> ChildrenConfigurationClassLoaderTest.class.getName();
>>> + privateResourceName =
>>> privateResourceClass.replace(".", "/") +
>>> ".class";
>>> +
>>> + classLoader = new
>>>
>>> ChildrenConfigurationClassLoader
>>> (ChildrenConfigurationClassLoaderTest.class.getClassLoader(),
>>> rules);
>>> + }
>>> +
>>> + public void
>>> testLoadClassThrowsCNFEForHiddenClass()
>>> throws
>>> Exception
>>> {
>>> +
>>> classLoader.loadClass(privateResourceClass);
>>> +
>>> + addPrivateConfiguration();
>>> +
>>> + try {
>>> +
>>> classLoader.loadClass(privateResourceClass);
>>> + fail();
>>> + } catch (ClassNotFoundException e) {
>>> + }
>>> + }
>>> +
>>> + public void
>>> testGetResourceReturnsNullForHiddenClass()
>>> throws
>>> Exception {
>>> +
>>> assertNotNull(classLoader.getResource(privateResourceName));
>>> + addPrivateConfiguration();
>>> +
>>> assertNull(classLoader.getResource(privateResourceName));
>>> + }
>>> +
>>> + public void
>>>
>>> testGetResourcesReturnsEmptyEnumForHiddenClass()
>>> throws
>>> Exception {
>>> +
>>>
>>> assertTrue
>>> (classLoader.getResources(privateResourceName).hasMoreElements());
>>> + addPrivateConfiguration();
>>> +
>>>
>>> assertFalse
>>> (classLoader.getResources(privateResourceName).hasMoreElements());
>>> + }
>>> +
>>> + private void addPrivateConfiguration() {
>>> + ClassLoadingRule rule =
>>> rules.getPrivateRule();
>>> +
>>>
>>> rule.addClassPrefixes(Collections.singleton(privateResourceClass));
>>> + }
>>> +
>>> +}
>>> Modified:
>>> geronimo/server/trunk/framework/modules/
>>> geronimo-kernel/src/test/java/org/apache/geronimo/kernel/config/
>>> MultiParentClassLoaderTest.java
>>> URL:
>>> http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-kernel/src/test/java/org/apache/geronimo/kernel/config/MultiParentClassLoaderTest.java?rev=712326&r1=712325&r2=712326&view=diff
>>>
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> ====================================================================
>>> ---
>>> geronimo/server/trunk/framework/modules/
>>> geronimo-kernel/src/test/java/org/apache/geronimo/kernel/config/
>>> MultiParentClassLoaderTest.java
>>> (original)
>>> +++
>>> geronimo/server/trunk/framework/modules/
>>> geronimo-kernel/src/test/java/org/apache/geronimo/kernel/config/
>>> MultiParentClassLoaderTest.java
>>> Fri Nov 7 16:40:08 2008
>>> @@ -26,6 +26,7 @@
>>> import java.util.jar.JarFile;
>>> import java.util.jar.JarOutputStream;
>>> import java.util.jar.JarEntry;
>>> +import java.util.Collections;
>>> import java.util.Enumeration;
>>> import junit.framework.TestCase;
>>> @@ -35,6 +36,8 @@
>>> import net.sf.cglib.core.Predicate;
>>> import
>>> net.sf.cglib.core.DefaultGeneratorStrategy;
>>> import
>>>
>>> org.apache.geronimo.kernel.repository.Artifact;
>>> +import
>>>
>>> org.apache.geronimo.kernel.repository.ClassLoadingRule;
>>> +import
>>>
>>> org.apache.geronimo.kernel.repository.ClassLoadingRules;
>>> /**
>>> * @version $Rev$ $Date$
>>> @@ -141,7 +144,9 @@
>>> Class clazz = cl.loadClass(CLASS_NAME);
>>> assertSame(parentCl,
>>> clazz.getClassLoader());
>>> - cl = new
>>> MultiParentClassLoader(NAME,
>>> new URL[]{myJar.toURL()},
>>> parentCl, true, new String[0], new
>>> String[0]);
>>> + ClassLoadingRules
>>> classLoadingRules =
>>> new ClassLoadingRules();
>>> +
>>> classLoadingRules.setInverseClassLoading(true);
>>> + cl = new
>>> MultiParentClassLoader(NAME,
>>> new URL[]{myJar.toURL()},
>>> parentCl, classLoadingRules);
>>> clazz = cl.loadClass(CLASS_NAME);
>>> assertSame(cl, clazz.getClassLoader());
>>> }
>>> @@ -154,7 +159,10 @@
>>> Class clazz = cl.loadClass(CLASS_NAME);
>>> assertSame(parentCl,
>>> clazz.getClassLoader());
>>> - cl = new
>>> MultiParentClassLoader(NAME,
>>> new URL[]{myJar.toURL()},
>>> parentCl, false, new String[] {CLASS_NAME},
>>> new
>>> String[0]);
>>> + ClassLoadingRules
>>> classLoadingRules =
>>> new ClassLoadingRules();
>>> + ClassLoadingRule classLoadingRule =
>>> classLoadingRules.getHiddenRule();
>>> +
>>>
>>> classLoadingRule
>>> .addClassPrefixes(Collections.singleton(CLASS_NAME));
>>> + cl = new
>>> MultiParentClassLoader(NAME,
>>> new URL[]{myJar.toURL()},
>>> parentCl, classLoadingRules);
>>> clazz = cl.loadClass(CLASS_NAME);
>>> assertSame(cl, clazz.getClassLoader());
>>> }
>>> @@ -167,7 +175,11 @@
>>> Class clazz = cl.loadClass(CLASS_NAME);
>>> assertSame(parentCl,
>>> clazz.getClassLoader());
>>> - cl = new
>>> MultiParentClassLoader(NAME,
>>> new URL[]{myJar.toURL()},
>>> parentCl, true, new String[0], new String[]
>>> {CLASS_NAME});
>>> + ClassLoadingRules
>>> classLoadingRules =
>>> new ClassLoadingRules();
>>> +
>>> classLoadingRules.setInverseClassLoading(true);
>>> + ClassLoadingRule classLoadingRule =
>>> classLoadingRules.getNonOverrideableRule();
>>> +
>>>
>>> classLoadingRule
>>> .addClassPrefixes(Collections.singleton(CLASS_NAME));
>>> + cl = new
>>> MultiParentClassLoader(NAME,
>>> new URL[]{myJar.toURL()},
>>> parentCl, classLoadingRules);
>>> clazz = cl.loadClass(CLASS_NAME);
>>> assertSame(parentCl,
>>> clazz.getClassLoader());
>>> }
>>> Added:
>>> geronimo/server/trunk/framework/modules/
>>> geronimo-kernel/src/test/java/org/apache/geronimo/kernel/
>>> repository/ClassLoadingRuleTest.java
>>> URL:
>>> http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-kernel/src/test/java/org/apache/geronimo/kernel/repository/ClassLoadingRuleTest.java?rev=712326&view=auto
>>>
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> ====================================================================
>>> ---
>>> geronimo/server/trunk/framework/modules/
>>> geronimo-kernel/src/test/java/org/apache/geronimo/kernel/
>>> repository/ClassLoadingRuleTest.java
>>> (added)
>>> +++
>>> geronimo/server/trunk/framework/modules/
>>> geronimo-kernel/src/test/java/org/apache/geronimo/kernel/
>>> repository/ClassLoadingRuleTest.java
>>> Fri Nov 7 16:40:08 2008
>>> @@ -0,0 +1,84 @@
>>> +/*
>>> + * Licensed to the Apache Software
>>> Foundation
>>> (ASF) under one
>>> + * or more contributor license
>>> agreements. See
>>> the NOTICE file
>>> + * distributed with this work for additional
>>> information
>>> + * regarding copyright ownership. The ASF
>>> licenses this file
>>> + * to you under the Apache License,
>>> Version 2.0
>>> (the
>>> + * "License"); you may not use this file
>>> except
>>> in compliance
>>> + * with the License. You may obtain a
>>> copy of
>>> the License at
>>> + *
>>> + * http://www.apache.org/licenses/LICENSE-2.0
>>> + *
>>> + * Unless required by applicable law or
>>> agreed
>>> to in writing,
>>> + * software distributed under the License is
>>> distributed on an
>>> + * "AS IS" BASIS, WITHOUT WARRANTIES OR
>>> CONDITIONS OF ANY
>>> + * KIND, either express or implied. See the
>>> License for the
>>> + * specific language governing permissions
>>> and
>>> limitations
>>> + * under the License.
>>> + */
>>> +
>>> +package
>>> org.apache.geronimo.kernel.repository;
>>> +
>>> +import java.util.Collections;
>>> +import java.util.Set;
>>> +
>>> +import junit.framework.TestCase;
>>> +
>>> +/**
>>> + *
>>> + * @version $Rev:$ $Date:$
>>> + */
>>> +public class ClassLoadingRuleTest extends
>>> TestCase {
>>> + private static final String
>>> FILTERED_PREFIX
>>> = "org.apache.geronimo";
>>> + private static final String
>>> FILTERED_RESOURCE_PREFIX =
>>> "org/apache/geronimo";
>>> +
>>> + private ClassLoadingRule rule;
>>> +
>>> + @Override
>>> + protected void setUp() throws
>>> Exception {
>>> + rule = new ClassLoadingRule();
>>> + Set<String> filter =
>>> Collections.singleton(FILTERED_PREFIX);
>>> + rule.addClassPrefixes(filter);
>>> + }
>>> +
>>> + public void testIsFilteredClass() throws
>>> Exception {
>>> +
>>> assertTrue(rule.isFilteredClass(FILTERED_PREFIX
>>> + ".mock"));
>>> + }
>>> +
>>> + public void testIsNotFilteredClass()
>>> throws
>>> Exception {
>>> +
>>> assertFalse(rule.isFilteredClass("mock"));
>>> + }
>>> +
>>> + public void testIsFilteredResource()
>>> throws
>>> Exception {
>>> +
>>> assertTrue(rule.isFilteredResource(FILTERED_RESOURCE_PREFIX
>>> +
>>> "/mock"));
>>> + }
>>> +
>>> + public void testIsNotFilteredResource()
>>> throws Exception {
>>> +
>>> assertFalse(rule.isFilteredResource("mock"));
>>> + }
>>> +
>>> + public void testMerge() throws
>>> Exception {
>>> + ClassLoadingRule ruleToMerge = new
>>> ClassLoadingRule();
>>> + String mergedFilteredPrefix =
>>> "geronimo";
>>> + Set<String> filter =
>>> Collections.singleton(mergedFilteredPrefix);
>>> +
>>> ruleToMerge.addClassPrefixes(filter);
>>> +
>>> + rule.merge(ruleToMerge);
>>> +
>>> +
>>> assertTrue(rule.isFilteredClass(mergedFilteredPrefix
>>> + ".mock"));
>>> +
>>> assertTrue(rule.isFilteredResource(mergedFilteredPrefix
>>> +
>>> "/mock"));
>>> + }
>>> +
>>> + public void
>>> testSetClassPrefixResetState()
>>> throws Exception {
>>> + String newFilteredPrefix =
>>> "geronimo";
>>> + Set<String> filter =
>>> Collections.singleton(newFilteredPrefix);
>>> + rule.setClassPrefixes(filter);
>>> +
>>> +
>>> assertTrue(rule.isFilteredClass(newFilteredPrefix
>>> + ".mock"));
>>> +
>>> assertTrue(rule.isFilteredResource(newFilteredPrefix
>>> + "/mock"));
>>> +
>>> +
>>> assertFalse(rule.isFilteredClass(FILTERED_PREFIX
>>> + ".mock"));
>>> +
>>> assertFalse(rule.isFilteredResource(FILTERED_PREFIX
>>> + "/mock"));
>>> + }
>>> +
>>> +}
>>> Added:
>>> geronimo/server/trunk/framework/modules/
>>> geronimo-service-builder/src/main/java/org/apache/geronimo/
>>> deployment/service/ClassLoadingRulesUtil.java
>>> URL:
>>> http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-service-builder/src/main/java/org/apache/geronimo/deployment/service/ClassLoadingRulesUtil.java?rev=712326&view=auto
>>>
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> ====================================================================
>>> ---
>>> geronimo/server/trunk/framework/modules/
>>> geronimo-service-builder/src/main/java/org/apache/geronimo/
>>> deployment/service/ClassLoadingRulesUtil.java
>>> (added)
>>> +++
>>> geronimo/server/trunk/framework/modules/
>>> geronimo-service-builder/src/main/java/org/apache/geronimo/
>>> deployment/service/ClassLoadingRulesUtil.java
>>> Fri Nov 7 16:40:08 2008
>>> @@ -0,0 +1,70 @@
>>> +/*
>>> + * Licensed to the Apache Software
>>> Foundation
>>> (ASF) under one
>>> + * or more contributor license
>>> agreements. See
>>> the NOTICE file
>>> + * distributed with this work for additional
>>> information
>>> + * regarding copyright ownership. The ASF
>>> licenses this file
>>> + * to you under the Apache License,
>>> Version 2.0
>>> (the
>>> + * "License"); you may not use this file
>>> except
>>> in compliance
>>> + * with the License. You may obtain a
>>> copy of
>>> the License at
>>> + *
>>> + * http://www.apache.org/licenses/LICENSE-2.0
>>> + *
>>> + * Unless required by applicable law or
>>> agreed
>>> to in writing,
>>> + * software distributed under the License is
>>> distributed on an
>>> + * "AS IS" BASIS, WITHOUT WARRANTIES OR
>>> CONDITIONS OF ANY
>>> + * KIND, either express or implied. See the
>>> License for the
>>> + * specific language governing permissions
>>> and
>>> limitations
>>> + * under the License.
>>> + */
>>> +
>>> +package
>>> org.apache.geronimo.deployment.service;
>>> +
>>> +import java.util.HashSet;
>>> +import java.util.Set;
>>> +
>>> +import
>>>
>>> org.apache.geronimo.deployment.xbeans.ClassFilterType;
>>> +import
>>>
>>> org.apache.geronimo.deployment.xbeans.EnvironmentType;
>>> +import
>>>
>>> org.apache.geronimo.kernel.repository.ClassLoadingRule;
>>> +import
>>>
>>> org.apache.geronimo.kernel.repository.ClassLoadingRules;
>>> +
>>> +/**
>>> + *
>>> + * @version $Rev:$ $Date:$
>>> + */
>>> +public final class ClassLoadingRulesUtil {
>>> +
>>> + private ClassLoadingRulesUtil() {
>>> + }
>>> +
>>> + public static void
>>> configureRules(ClassLoadingRules
>>> classLoadingRules, EnvironmentType
>>> environmentType) {
>>> +
>>>
>>> classLoadingRules
>>> .setInverseClassLoading(environmentType.isSetInverseClassloading());
>>> +
>>> + if (null !=
>>> environmentType.getHiddenClasses()) {
>>> + ClassLoadingRule hiddenRule =
>>> classLoadingRules.getHiddenRule();
>>> +
>>>
>>> hiddenRule
>>> .setClassPrefixes(toFilters(environmentType.getHiddenClasses()));
>>> + }
>>> +
>>> + if (null !=
>>> environmentType.getNonOverridableClasses()) {
>>> + ClassLoadingRule
>>> nonOverrideableRule =
>>> classLoadingRules.getNonOverrideableRule();
>>> +
>>>
>>> nonOverrideableRule
>>> .setClassPrefixes
>>> (toFilters(environmentType.getNonOverridableClasses()));
>>> + }
>>> +
>>> + if (null !=
>>> environmentType.getPrivateClasses()) {
>>> + ClassLoadingRule privateRule =
>>> classLoadingRules.getPrivateRule();
>>> +
>>>
>>> privateRule
>>> .setClassPrefixes(toFilters(environmentType.getPrivateClasses()));
>>> + }
>>> + }
>>> +
>>> + private static Set<String>
>>> toFilters(ClassFilterType filterType) {
>>> + Set<String> filters = new
>>> HashSet<String>();
>>> + if (null != filterType) {
>>> + String[] filterArray =
>>> filterType.getFilterArray();
>>> + for (String filter :
>>> filterArray) {
>>> + filter = filter.trim();
>>> + filters.add(filter);
>>> + }
>>> + }
>>> + return filters;
>>> + }
>>> +
>>> +}
>>> Modified:
>>> geronimo/server/trunk/framework/modules/
>>> geronimo-service-builder/src/main/java/org/apache/geronimo/
>>> deployment/service/EnvironmentBuilder.java
>>> URL:
>>> http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-service-builder/src/main/java/org/apache/geronimo/deployment/service/EnvironmentBuilder.java?rev=712326&r1=712325&r2=712326&view=diff
>>>
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> ====================================================================
>>> ---
>>> geronimo/server/trunk/framework/modules/
>>> geronimo-service-builder/src/main/java/org/apache/geronimo/
>>> deployment/service/EnvironmentBuilder.java
>>> (original)
>>> +++
>>> geronimo/server/trunk/framework/modules/
>>> geronimo-service-builder/src/main/java/org/apache/geronimo/
>>> deployment/service/EnvironmentBuilder.java
>>> Fri Nov 7 16:40:08 2008
>>> @@ -38,6 +38,8 @@
>>> import
>>>
>>> org.apache.geronimo.deployment.xbeans.ImportType;
>>> import
>>>
>>> org.apache.geronimo.deployment.xbeans.DependencyType;
>>> import
>>>
>>> org.apache.geronimo.kernel.repository.Artifact;
>>> +import
>>>
>>> org.apache.geronimo.kernel.repository.ClassLoadingRule;
>>> +import
>>>
>>> org.apache.geronimo.kernel.repository.ClassLoadingRules;
>>> import
>>>
>>> org.apache.geronimo.kernel.repository.Dependency;
>>> import
>>>
>>> org.apache.geronimo.kernel.repository.Environment;
>>> import org.apache.xmlbeans.XmlException;
>>> @@ -63,10 +65,9 @@
>>> LinkedHashSet dependencies =
>>> toDependencies(dependencyArray);
>>>
>>> environment.setDependencies(dependencies);
>>> }
>>> -
>>>
>>> environment
>>> .setInverseClassLoading(environmentType.isSetInverseClassloading());
>>>
>>> environment
>>> .setSuppressDefaultEnvironment
>>> (environmentType.isSetSuppressDefaultEnvironment());
>>> -
>>>
>>> environment
>>> .setHiddenClasses(toFilters(environmentType.getHiddenClasses()));
>>> -
>>>
>>> environment
>>> .setNonOverrideableClasses
>>> (toFilters(environmentType.getNonOverridableClasses()));
>>> +
>>> +
>>>
>>> ClassLoadingRulesUtil
>>> .configureRules(environment.getClassLoadingRules(),
>>> environmentType);
>>> }
>>> return environment;
>>> @@ -79,10 +80,11 @@
>>>
>>> environment.setConfigId(additionalEnvironment.getConfigId());
>>> }
>>>
>>> environment
>>> .addDependencies(additionalEnvironment.getDependencies());
>>> -
>>>
>>> environment
>>> .setInverseClassLoading(environment.isInverseClassLoading()
>>> ||
>>>
>>> additionalEnvironment.isInverseClassLoading());
>>>
>>> environment
>>> .setSuppressDefaultEnvironment
>>> (environment.isSuppressDefaultEnvironment()
>>> ||
>>>
>>> additionalEnvironment.isSuppressDefaultEnvironment());
>>> -
>>>
>>> environment
>>> .addHiddenClasses(additionalEnvironment.getHiddenClasses());
>>> -
>>>
>>> environment
>>> .addNonOverrideableClasses
>>> (additionalEnvironment.getNonOverrideableClasses());
>>> +
>>> + ClassLoadingRules
>>> classLoadingRules =
>>> environment.getClassLoadingRules();
>>> + ClassLoadingRules
>>> additionalClassLoadingRules =
>>> additionalEnvironment.getClassLoadingRules();
>>> +
>>> classLoadingRules.merge(additionalClassLoadingRules);
>>> }
>>> }
>>> @@ -105,14 +107,25 @@
>>> DependencyType[] dependencyTypes =
>>> (DependencyType[])
>>> dependencies.toArray(new
>>> DependencyType[dependencies.size()]);
>>> DependenciesType dependenciesType =
>>> environmentType.addNewDependencies();
>>>
>>> dependenciesType.setDependencyArray(dependencyTypes);
>>> - if
>>> (environment.isInverseClassLoading()) {
>>> +
>>> + ClassLoadingRules
>>> classLoadingRules =
>>> environment.getClassLoadingRules();
>>> + if
>>> (classLoadingRules.isInverseClassLoading()) {
>>>
>>> environmentType.addNewInverseClassloading();
>>> }
>>> +
>>> if
>>>
>>> (environment.isSuppressDefaultEnvironment()) {
>>>
>>> environmentType.addNewSuppressDefaultEnvironment();
>>> }
>>> -
>>>
>>> environmentType
>>> .setHiddenClasses(toFilterType(environment.getHiddenClasses()));
>>> -
>>>
>>> environmentType
>>> .setNonOverridableClasses
>>> (toFilterType(environment.getNonOverrideableClasses()));
>>> +
>>> + ClassLoadingRule classLoadingRule =
>>> classLoadingRules.getHiddenRule();
>>> +
>>>
>>> environmentType
>>> .setHiddenClasses
>>> (toFilterType(classLoadingRule.getClassPrefixes()));
>>> +
>>> + classLoadingRule =
>>> classLoadingRules.getNonOverrideableRule();
>>> +
>>>
>>> environmentType
>>> .setNonOverridableClasses
>>> (toFilterType(classLoadingRule.getClassPrefixes()));
>>> +
>>> + classLoadingRule =
>>> classLoadingRules.getPrivateRule();
>>> +
>>>
>>> environmentType
>>> .setPrivateClasses
>>> (toFilterType(classLoadingRule.getClassPrefixes()));
>>> +
>>> return environmentType;
>>> }
>>> Modified:
>>> geronimo/server/trunk/framework/modules/
>>> geronimo-service-builder/src/main/xsd/geronimo-module-1.2.xsd
>>> URL:
>>> http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-service-builder/src/main/xsd/geronimo-module-1.2.xsd?rev=712326&r1=712325&r2=712326&view=diff
>>>
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> ====================================================================
>>> ---
>>> geronimo/server/trunk/framework/modules/
>>> geronimo-service-builder/src/main/xsd/geronimo-module-1.2.xsd
>>> (original)
>>> +++
>>> geronimo/server/trunk/framework/modules/
>>> geronimo-service-builder/src/main/xsd/geronimo-module-1.2.xsd
>>> Fri Nov 7 16:40:08 2008
>>> @@ -204,6 +204,21 @@
>>> </xs:documentation>
>>> </xs:annotation>
>>> </xs:element>
>>> + <xs:element name="private-
>>> classes"
>>> + type="sys:classFilterType"
>>> minOccurs="0">
>>> + <xs:annotation>
>>> + <xs:documentation>
>>> + A list of classes
>>> which
>>> will only be loaded from
>>> the
>>> + ClassLoader of this
>>> module or from parent
>>> ClassLoaders.
>>> +
>>> + This is used to
>>> prevent
>>> children configurations
>>> to see
>>> + specific classes
>>> from
>>> its parents. The same
>>> effect can
>>> + be achieved by using
>>> hidden-classes. However,
>>> + private-classes is
>>> the
>>> preferred approach to hide
>>> + specific classes
>>> from
>>> all children
>>> configurations.
>>> + </xs:documentation>
>>> + </xs:annotation>
>>> + </xs:element>
>>> <xs:element name="inverse-
>>> classloading"
>>> type="sys:emptyType"
>>> minOccurs="0">
>>> <xs:annotation>
>>> Added:
>>> geronimo/server/trunk/framework/modules/
>>> geronimo-service-builder/src/test/java/org/apache/geronimo/
>>> deployment/service/ClassLoadingRulesUtilTest.java
>>> URL:
>>> http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-service-builder/src/test/java/org/apache/geronimo/deployment/service/ClassLoadingRulesUtilTest.java?rev=712326&view=auto
>>>
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> ====================================================================
>>> ---
>>> geronimo/server/trunk/framework/modules/
>>> geronimo-service-builder/src/test/java/org/apache/geronimo/
>>> deployment/service/ClassLoadingRulesUtilTest.java
>>> (added)
>>> +++
>>> geronimo/server/trunk/framework/modules/
>>> geronimo-service-builder/src/test/java/org/apache/geronimo/
>>> deployment/service/ClassLoadingRulesUtilTest.java
>>> Fri Nov 7 16:40:08 2008
>>> @@ -0,0 +1,66 @@
>>> +/*
>>> + * Licensed to the Apache Software
>>> Foundation
>>> (ASF) under one
>>> + * or more contributor license
>>> agreements. See
>>> the NOTICE file
>>> + * distributed with this work for additional
>>> information
>>> + * regarding copyright ownership. The ASF
>>> licenses this file
>>> + * to you under the Apache License,
>>> Version 2.0
>>> (the
>>> + * "License"); you may not use this file
>>> except
>>> in compliance
>>> + * with the License. You may obtain a
>>> copy of
>>> the License at
>>> + *
>>> + * http://www.apache.org/licenses/LICENSE-2.0
>>> + *
>>> + * Unless required by applicable law or
>>> agreed
>>> to in writing,
>>> + * software distributed under the License is
>>> distributed on an
>>> + * "AS IS" BASIS, WITHOUT WARRANTIES OR
>>> CONDITIONS OF ANY
>>> + * KIND, either express or implied. See the
>>> License for the
>>> + * specific language governing permissions
>>> and
>>> limitations
>>> + * under the License.
>>> + */
>>> +
>>> +package
>>> org.apache.geronimo.deployment.service;
>>> +
>>> +import java.util.Set;
>>> +
>>> +import junit.framework.TestCase;
>>> +
>>> +import
>>>
>>> org.apache.geronimo.deployment.xbeans.ClassFilterType;
>>> +import
>>>
>>> org.apache.geronimo.deployment.xbeans.EmptyType;
>>> +import
>>>
>>> org.apache.geronimo.deployment.xbeans.EnvironmentType;
>>> +import
>>>
>>> org.apache.geronimo.kernel.repository.ClassLoadingRule;
>>> +import
>>>
>>> org.apache.geronimo.kernel.repository.ClassLoadingRules;
>>> +
>>> +/**
>>> + *
>>> + * @version $Rev:$ $Date:$
>>> + */
>>> +public class ClassLoadingRulesUtilTest
>>> extends
>>> TestCase {
>>> +
>>> + public void testConfiguration() throws
>>> Exception {
>>> + EnvironmentType environmentType =
>>> EnvironmentType.Factory.newInstance();
>>> +
>>>
>>> environmentType
>>> .setInverseClassloading(EmptyType.Factory.newInstance());
>>> +
>>> environmentType.setHiddenClasses(newFilter("hidden"));
>>> +
>>>
>>> environmentType
>>> .setNonOverridableClasses(newFilter("nonOverrideable"));
>>> +
>>> environmentType.setPrivateClasses(newFilter("private"));
>>> +
>>> + ClassLoadingRules
>>> classLoadingRules =
>>> new ClassLoadingRules();
>>> +
>>> ClassLoadingRulesUtil.configureRules(classLoadingRules,
>>> environmentType);
>>> +
>>> +
>>> assertTrue(classLoadingRules.isInverseClassLoading());
>>> +
>>> assertPrefix(classLoadingRules.getHiddenRule(),
>>> "hidden");
>>> +
>>> assertPrefix(classLoadingRules.getNonOverrideableRule(),
>>> "nonOverrideable");
>>> +
>>> assertPrefix(classLoadingRules.getPrivateRule(),
>>> "private");
>>> + }
>>> +
>>> + private void
>>> assertPrefix(ClassLoadingRule
>>> classLoadingRule, String
>>> filter) {
>>> + Set<String> classPrefixes =
>>> classLoadingRule.getClassPrefixes();
>>> + assertEquals(1,
>>> classPrefixes.size());
>>> +
>>> assertTrue(classPrefixes.contains(filter));
>>> + }
>>> +
>>> + private ClassFilterType newFilter(String
>>> filter) {
>>> + ClassFilterType hiddenClasses =
>>> ClassFilterType.Factory.newInstance();
>>> + hiddenClasses.addFilter(filter);
>>> + return hiddenClasses;
>>> + }
>>> +
>>> +}
>>> Modified:
>>> geronimo/server/trunk/framework/modules/
>>> geronimo-upgrade/src/test/resources/appclient_dep_1_result.xml
>>> URL:
>>> http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-upgrade/src/test/resources/appclient_dep_1_result.xml?rev=712326&r1=712325&r2=712326&view=diff
>>>
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> ====================================================================
>>> ---
>>> geronimo/server/trunk/framework/modules/
>>> geronimo-upgrade/src/test/resources/appclient_dep_1_result.xml
>>> (original)
>>> +++
>>> geronimo/server/trunk/framework/modules/
>>> geronimo-upgrade/src/test/resources/appclient_dep_1_result.xml
>>> Fri Nov 7 16:40:08 2008
>>> @@ -44,6 +44,7 @@
>>> </dep:dependencies>
>>> <dep:hidden-classes/>
>>> <dep:non-overridable-classes/>
>>> + <dep:private-classes/>
>>> </dep:environment>
>>> <module>
>>>
>>> <java>appclient_dep_resref_single_client.jar</java>
>>> @@ -89,6 +90,7 @@
>>> </dep:dependencies>
>>> <dep:hidden-classes/>
>>> <dep:non-overridable-classes/>
>>> + <dep:private-classes/>
>>> </dep:client-environment>
>>> <dep:server-environment
>>> xmlns:dep="http://geronimo.apache.org/xml/ns/deployment-1.2
>>> ">
>>> <dep:moduleId>
>>> @@ -100,6 +102,7 @@
>>> <dep:dependencies/>
>>> <dep:hidden-classes/>
>>> <dep:non-overridable-classes/>
>>> + <dep:private-classes/>
>>> </dep:server-environment>
>>> <resource-ref
>>> xmlns="http://geronimo.apache.org/xml/ns/naming-1.2
>>> ">
>>> <ref-name>url/URL</ref-name>
>>> @@ -126,6 +129,7 @@
>>> <dep:dependencies/>
>>> <dep:hidden-classes/>
>>> <dep:non-overridable-classes/>
>>> + <dep:private-classes/>
>>> <dep:suppress-default-environment/>
>>> </dep:environment>
>>> <resourceadapter>
>>> Modified:
>>> geronimo/server/trunk/framework/modules/
>>> geronimo-upgrade/src/test/resources/appclient_ejb_1_result.xml
>>> URL:
>>> http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-upgrade/src/test/resources/appclient_ejb_1_result.xml?rev=712326&r1=712325&r2=712326&view=diff
>>>
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> =
>>> ====================================================================
>>> ---
>>> geronimo/server/trunk/framework/modules/
>>> geronimo-upgrade/src/test/resources/appclient_ejb_1_result.xml
>>> (original)
>>> +++
>>> geronimo/server/trunk/framework/modules/
>>> geronimo-upgrade/src/test/resources/appclient_ejb_1_result.xml
>>> Fri Nov 7 16:40:08 2008
>>> @@ -32,6 +32,7 @@
>>> </dep:dependencies>
>>> <dep:hidden-classes/>
>>> <dep:non-overridable-classes/>
>>> + <dep:private-classes/>
>>> </dep:environment>
>>> <module>
>>> <ejb>appclient_ejb_1_ejb.jar</ejb>
>>> @@ -46,6 +47,7 @@
>>> <dep:dependencies/>
>>> <dep:hidden-classes/>
>>> -- ~Jason Warner
>>> --
>>> ~Jason Warner
>>
>
|