geronimo-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From David Jencks <david_jen...@yahoo.com>
Subject Re: svn commit: r712326 - in /geronimo/server/trunk: framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/classloader/ framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/config/ framework/modules/geronimo
Date Wed, 12 Nov 2008 18:51:23 GMT

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
>>
>


Mime
View raw message