You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by da...@apache.org on 2006/08/17 03:33:00 UTC

svn commit: r432101 - in /geronimo/sandbox/plugins/global-jndi: ./ src/ src/java/ src/java/org/ src/java/org/apache/ src/java/org/apache/geronimo/ src/java/org/apache/geronimo/gjndi/ src/java/org/apache/geronimo/gjndi/java/ src/site/ src/site/apt/ src/...

Author: dain
Date: Wed Aug 16 18:32:59 2006
New Revision: 432101

URL: http://svn.apache.org/viewvc?rev=432101&view=rev
Log:
Starting of a global jndi plugin

Added:
    geronimo/sandbox/plugins/global-jndi/
    geronimo/sandbox/plugins/global-jndi/LICENSE.txt
    geronimo/sandbox/plugins/global-jndi/NOTICE.txt
    geronimo/sandbox/plugins/global-jndi/pom.xml
    geronimo/sandbox/plugins/global-jndi/src/
    geronimo/sandbox/plugins/global-jndi/src/java/
    geronimo/sandbox/plugins/global-jndi/src/java/org/
    geronimo/sandbox/plugins/global-jndi/src/java/org/apache/
    geronimo/sandbox/plugins/global-jndi/src/java/org/apache/geronimo/
    geronimo/sandbox/plugins/global-jndi/src/java/org/apache/geronimo/gjndi/
    geronimo/sandbox/plugins/global-jndi/src/java/org/apache/geronimo/gjndi/GlobalContextBootstrap.java
    geronimo/sandbox/plugins/global-jndi/src/java/org/apache/geronimo/gjndi/GlobalContextGBean.java
    geronimo/sandbox/plugins/global-jndi/src/java/org/apache/geronimo/gjndi/JavaCompContextGBean.java
    geronimo/sandbox/plugins/global-jndi/src/java/org/apache/geronimo/gjndi/KernelContextGBean.java
    geronimo/sandbox/plugins/global-jndi/src/java/org/apache/geronimo/gjndi/java/
    geronimo/sandbox/plugins/global-jndi/src/java/org/apache/geronimo/gjndi/java/javaURLContextFactory.java
    geronimo/sandbox/plugins/global-jndi/src/site/
    geronimo/sandbox/plugins/global-jndi/src/site/apt/
    geronimo/sandbox/plugins/global-jndi/src/site/site.xml
    geronimo/sandbox/plugins/global-jndi/src/test/
    geronimo/sandbox/plugins/global-jndi/src/test-data/
    geronimo/sandbox/plugins/global-jndi/src/test/org/
    geronimo/sandbox/plugins/global-jndi/src/test/org/apache/
    geronimo/sandbox/plugins/global-jndi/src/test/org/apache/geronimo/
    geronimo/sandbox/plugins/global-jndi/src/test/org/apache/geronimo/gjndi/
    geronimo/sandbox/plugins/global-jndi/src/test/org/apache/geronimo/gjndi/AbstractContextTest.java
    geronimo/sandbox/plugins/global-jndi/src/test/org/apache/geronimo/gjndi/JavaCompContextTest.java
    geronimo/sandbox/plugins/global-jndi/src/test/org/apache/geronimo/gjndi/KernelContextGBeanTest.java

Added: geronimo/sandbox/plugins/global-jndi/LICENSE.txt
URL: http://svn.apache.org/viewvc/geronimo/sandbox/plugins/global-jndi/LICENSE.txt?rev=432101&view=auto
==============================================================================
--- geronimo/sandbox/plugins/global-jndi/LICENSE.txt (added)
+++ geronimo/sandbox/plugins/global-jndi/LICENSE.txt Wed Aug 16 18:32:59 2006
@@ -0,0 +1,203 @@
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed 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.
+

Added: geronimo/sandbox/plugins/global-jndi/NOTICE.txt
URL: http://svn.apache.org/viewvc/geronimo/sandbox/plugins/global-jndi/NOTICE.txt?rev=432101&view=auto
==============================================================================
--- geronimo/sandbox/plugins/global-jndi/NOTICE.txt (added)
+++ geronimo/sandbox/plugins/global-jndi/NOTICE.txt Wed Aug 16 18:32:59 2006
@@ -0,0 +1,3 @@
+This product includes software developed by
+The Apache Software Foundation (http://www.apache.org/).
+

Added: geronimo/sandbox/plugins/global-jndi/pom.xml
URL: http://svn.apache.org/viewvc/geronimo/sandbox/plugins/global-jndi/pom.xml?rev=432101&view=auto
==============================================================================
--- geronimo/sandbox/plugins/global-jndi/pom.xml (added)
+++ geronimo/sandbox/plugins/global-jndi/pom.xml Wed Aug 16 18:32:59 2006
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+    Copyright 2006 The Apache Software Foundation
+
+    Licensed 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.
+-->
+
+<!-- $Rev: 429882 $ $Date: 2006-08-08 16:33:09 -0700 (Tue, 08 Aug 2006) $ -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.apache.geronimo.modules</groupId>
+        <artifactId>modules</artifactId>
+        <version>1.2-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+
+    <groupId>org.apache.geronimo.sandbox</groupId>
+    <artifactId>geronimo-global-jndi</artifactId>
+    <name>Geronimo :: Global JNDI</name>
+    
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.xbean</groupId>
+            <artifactId>xbean-naming</artifactId>
+            <version>COL-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.geronimo.modules</groupId>
+            <artifactId>geronimo-naming</artifactId>
+            <version>${pom.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>backport-util-concurrent</groupId>
+            <artifactId>backport-util-concurrent</artifactId>
+        </dependency>
+    </dependencies>
+</project>
+

Added: geronimo/sandbox/plugins/global-jndi/src/java/org/apache/geronimo/gjndi/GlobalContextBootstrap.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/plugins/global-jndi/src/java/org/apache/geronimo/gjndi/GlobalContextBootstrap.java?rev=432101&view=auto
==============================================================================
--- geronimo/sandbox/plugins/global-jndi/src/java/org/apache/geronimo/gjndi/GlobalContextBootstrap.java (added)
+++ geronimo/sandbox/plugins/global-jndi/src/java/org/apache/geronimo/gjndi/GlobalContextBootstrap.java Wed Aug 16 18:32:59 2006
@@ -0,0 +1,61 @@
+/**
+ *
+ * Copyright 2006 The Apache Software Foundation
+ *
+ *  Licensed 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.gjndi;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.geronimo.gbean.AbstractName;
+import org.apache.geronimo.gbean.GBeanData;
+import org.apache.geronimo.kernel.Kernel;
+import org.apache.geronimo.kernel.KernelRegistry;
+import org.apache.xbean.naming.global.GlobalContextManager;
+
+import java.net.URI;
+
+/**
+ * URLContextFactory for the java: namespace.
+ *
+ * @version $Rev: 355877 $ $Date: 2005-12-10 18:48:27 -0800 (Sat, 10 Dec 2005) $
+ */
+public class GlobalContextBootstrap extends GlobalContextManager {
+    private static final Log log = LogFactory.getLog(GlobalContextBootstrap.class);
+
+    private static boolean initalized;
+
+    public GlobalContextBootstrap() {
+        synchronized (GlobalContextBootstrap.class) {
+            if (!GlobalContextBootstrap.initalized) {
+                ClassLoader classLoader = getClass().getClassLoader();
+
+                Kernel kernel = KernelRegistry.getSingleKernel();
+
+                try {
+                    AbstractName globalContextName = new AbstractName(new URI("bootstrap/global-jndi/0/boot?name=GlobalContext"));
+                    kernel.loadGBean(new GBeanData(globalContextName, GlobalContextGBean.GBEAN_INFO), classLoader);
+                    kernel.startGBean(globalContextName);
+
+                    AbstractName javaCompName = new AbstractName(new URI("bootstrap/global-jndi/0/boot?name=JavaComp"));
+                    kernel.loadGBean(new GBeanData(javaCompName, JavaCompContextGBean.GBEAN_INFO), classLoader);
+                    kernel.startGBean(javaCompName);
+                } catch (Exception e) {
+                    GlobalContextBootstrap.log.error("Unable to bootstrap global jndi gbeans");
+                }
+                GlobalContextBootstrap.initalized = true;
+            }
+        }
+    }
+}

Added: geronimo/sandbox/plugins/global-jndi/src/java/org/apache/geronimo/gjndi/GlobalContextGBean.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/plugins/global-jndi/src/java/org/apache/geronimo/gjndi/GlobalContextGBean.java?rev=432101&view=auto
==============================================================================
--- geronimo/sandbox/plugins/global-jndi/src/java/org/apache/geronimo/gjndi/GlobalContextGBean.java (added)
+++ geronimo/sandbox/plugins/global-jndi/src/java/org/apache/geronimo/gjndi/GlobalContextGBean.java Wed Aug 16 18:32:59 2006
@@ -0,0 +1,76 @@
+/**
+ *
+ * Copyright 2006 The Apache Software Foundation
+ *
+ *  Licensed 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.gjndi;
+
+import org.apache.geronimo.gbean.GBeanInfo;
+import org.apache.geronimo.gbean.GBeanInfoBuilder;
+import org.apache.geronimo.gbean.GBeanLifecycle;
+import org.apache.geronimo.gbean.AbstractNameQuery;
+import org.apache.geronimo.gbean.AbstractName;
+import org.apache.geronimo.kernel.Kernel;
+import org.apache.xbean.naming.global.GlobalContextManager;
+
+import javax.naming.Context;
+import javax.naming.NamingException;
+import java.util.Collections;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class GlobalContextGBean extends KernelContextGBean implements GBeanLifecycle {
+    public GlobalContextGBean(Kernel kernel) throws NamingException {
+        super("", new AbstractNameQuery(null, Collections.EMPTY_MAP, Context.class.getName()), kernel);
+    }
+
+    public void doStart() {
+        super.doStart();
+        GlobalContextManager.setGlobalContext(this);
+    }
+
+    public void doStop() {
+        GlobalContextManager.setGlobalContext(null);
+        super.doStop();
+    }
+
+    public void doFail() {
+        GlobalContextManager.setGlobalContext(null);
+        super.doFail();
+    }
+
+    protected String createBindingName(AbstractName abstractName, Object value) throws NamingException {
+        if (value instanceof Context) {
+            // don't bind yourself
+            if (value == this) return null;
+
+            Context context = (Context) value;
+            return context.getNameInNamespace();
+        }
+        throw new NamingException("value is not a context: abstractName=" + abstractName + " valueType=" + value.getClass().getName());
+    }
+
+    public static final GBeanInfo GBEAN_INFO;
+
+    public static GBeanInfo getGBeanInfo() {
+        return GBEAN_INFO;
+    }
+
+    static {
+        GBeanInfoBuilder builder = GBeanInfoBuilder.createStatic(GlobalContextGBean.class, "GlobalContext");
+        builder.setConstructor(new String[]{"kernel"});
+        GBEAN_INFO = builder.getBeanInfo();
+    }
+}

Added: geronimo/sandbox/plugins/global-jndi/src/java/org/apache/geronimo/gjndi/JavaCompContextGBean.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/plugins/global-jndi/src/java/org/apache/geronimo/gjndi/JavaCompContextGBean.java?rev=432101&view=auto
==============================================================================
--- geronimo/sandbox/plugins/global-jndi/src/java/org/apache/geronimo/gjndi/JavaCompContextGBean.java (added)
+++ geronimo/sandbox/plugins/global-jndi/src/java/org/apache/geronimo/gjndi/JavaCompContextGBean.java Wed Aug 16 18:32:59 2006
@@ -0,0 +1,49 @@
+/**
+ *
+ * Copyright 2006 The Apache Software Foundation
+ *
+ *  Licensed 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.gjndi;
+
+import org.apache.geronimo.gbean.GBeanInfo;
+import org.apache.geronimo.gbean.GBeanInfoBuilder;
+import org.apache.geronimo.naming.java.RootContext;
+import org.apache.xbean.naming.context.ContextFlyweight;
+
+import javax.naming.Context;
+import javax.naming.NamingException;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class JavaCompContextGBean extends ContextFlyweight {
+    protected Context getContext() {
+        return RootContext.getComponentContext();
+    }
+
+    public String getNameInNamespace() throws NamingException {
+        return "java:comp";
+    }
+
+    public static final GBeanInfo GBEAN_INFO;
+
+    public static GBeanInfo getGBeanInfo() {
+        return GBEAN_INFO;
+    }
+
+    static {
+        GBeanInfoBuilder builder = GBeanInfoBuilder.createStatic(JavaCompContextGBean.class, "Context");
+        GBEAN_INFO = builder.getBeanInfo();
+    }
+}

Added: geronimo/sandbox/plugins/global-jndi/src/java/org/apache/geronimo/gjndi/KernelContextGBean.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/plugins/global-jndi/src/java/org/apache/geronimo/gjndi/KernelContextGBean.java?rev=432101&view=auto
==============================================================================
--- geronimo/sandbox/plugins/global-jndi/src/java/org/apache/geronimo/gjndi/KernelContextGBean.java (added)
+++ geronimo/sandbox/plugins/global-jndi/src/java/org/apache/geronimo/gjndi/KernelContextGBean.java Wed Aug 16 18:32:59 2006
@@ -0,0 +1,198 @@
+/**
+ *
+ * Copyright 2006 The Apache Software Foundation
+ *
+ *  Licensed 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.gjndi;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.geronimo.gbean.AbstractName;
+import org.apache.geronimo.gbean.AbstractNameQuery;
+import org.apache.geronimo.gbean.GBeanInfo;
+import org.apache.geronimo.gbean.GBeanInfoBuilder;
+import org.apache.geronimo.gbean.GBeanLifecycle;
+import org.apache.geronimo.kernel.GBeanNotFoundException;
+import org.apache.geronimo.kernel.Kernel;
+import org.apache.geronimo.kernel.lifecycle.LifecycleAdapter;
+import org.apache.geronimo.kernel.lifecycle.LifecycleListener;
+import org.apache.xbean.naming.context.UnmodifiableContext;
+
+import javax.naming.NamingException;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Iterator;
+import java.util.Set;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class KernelContextGBean extends UnmodifiableContext implements GBeanLifecycle {
+    private static final Log log = LogFactory.getLog(KernelContextGBean.class);
+
+    private final Kernel kernel;
+    private final AbstractNameQuery abstractNameQuery;
+    private final LifecycleListener listener = new ContextLifecycleListener();
+    private final Map bindingsByAbstractName = new HashMap();
+
+    public KernelContextGBean(String nameInNamespace, AbstractNameQuery abstractNameQuery, Kernel kernel) throws NamingException {
+        super(nameInNamespace, Collections.EMPTY_MAP, false);
+        this.abstractNameQuery = abstractNameQuery;
+        this.kernel = kernel;
+    }
+
+    public synchronized void doStart() {
+        kernel.getLifecycleMonitor().addLifecycleListener(listener, abstractNameQuery);
+        Set set = kernel.listGBeans(abstractNameQuery);
+        for (Iterator iterator = set.iterator(); iterator.hasNext();) {
+            AbstractName abstractName = (AbstractName) iterator.next();
+            try {
+                if (kernel.isRunning(abstractName)) {
+                    addBinding(abstractName);
+                }
+            } catch (NamingException e) {
+                log.error("Error adding binding for " + abstractName);
+            }
+        }
+
+    }
+
+    public void doStop() {
+        destroy();
+    }
+
+    public void doFail() {
+        destroy();
+    }
+
+    private synchronized void destroy() {
+        kernel.getLifecycleMonitor().removeLifecycleListener(listener);
+        for (Iterator iterator = bindingsByAbstractName.values().iterator(); iterator.hasNext();) {
+            try {
+                String name = (String) iterator.next();
+                removeDeepBinding(name);
+            } catch (NamingException ignored) {
+            }
+        }
+        bindingsByAbstractName.clear();
+    }
+
+    private class ContextLifecycleListener extends LifecycleAdapter {
+        public void running(AbstractName abstractName) {
+            try {
+                addBinding(abstractName);
+            } catch (NamingException e) {
+                log.error("Error adding binding for " + abstractName);
+            }
+        }
+
+        public void stopping(AbstractName abstractName) {
+            removeBinding(abstractName);
+        }
+
+        public void stopped(AbstractName abstractName) {
+            removeBinding(abstractName);
+        }
+
+        public void failed(AbstractName abstractName) {
+            removeBinding(abstractName);
+        }
+
+        public void unloaded(AbstractName abstractName) {
+            removeBinding(abstractName);
+        }
+    }
+
+    /**
+     * Binds the specified gbean.  This method uses createBindingName and preprocessValue before binding the object.
+     * @param abstractName the abstract name of the gbean to bind
+     * @throws NamingException if an error occurs during binding
+     */
+    protected synchronized void addBinding(AbstractName abstractName) throws NamingException {
+        // get the gbean
+        Object value = null;
+        try {
+            value = kernel.getGBean(abstractName);
+        } catch (GBeanNotFoundException e) {
+            throw new NamingException("GBean not found: " + abstractName);
+        }
+
+        // generate a name for this binding
+        String name = createBindingName(abstractName, value);
+        if (name == null) return;
+
+        // give sub classes a chance to preprocess the value
+        value = preprocessVaue(abstractName, name, value);
+        if (value == null) return;
+
+        // bind the value
+
+        addDeepBinding(name, value);
+
+        // remember where we bound this value
+        bindingsByAbstractName.put(abstractName, name);
+    }
+
+    /**
+     * Unbinds the specified gbean.
+     * @param abstractName the abstract name of the gbean to unbind
+     */
+    protected synchronized void removeBinding(AbstractName abstractName) {
+        String name = (String) bindingsByAbstractName.remove(abstractName);
+        if (name != null) {
+            try {
+                removeDeepBinding(name);
+            } catch (NamingException ignored) {
+            }
+        }
+    }
+
+    /**
+     * Create a name under which we will bind the specified gbean with the specified value.
+     * By default, this method simply returns the "name" element of the abstract name
+     * @param abstractName the abstract name of the gbean to bind
+     * @param value the gbean instance
+     * @return the name under which the gbean should be bound
+     */
+    protected String createBindingName(AbstractName abstractName, Object value) throws NamingException {
+        return (String) abstractName.getName().get("name");
+    }
+
+    /**
+     * Preprocess the value before it is bound.  This is usefult for wrapping values with reference objects.
+     * By default, this method simply return the value.
+     * @param abstractName the abstract name of the gbean to bind
+     * @param name the name under which the gbean will be bound
+     * @param value the gbean instance
+     * @return the value to bind
+     */
+    protected Object preprocessVaue(AbstractName abstractName, String name, Object value) throws NamingException {
+        return value;
+    }
+
+    public static final GBeanInfo GBEAN_INFO;
+
+    public static GBeanInfo getGBeanInfo() {
+        return GBEAN_INFO;
+    }
+
+    static {
+        GBeanInfoBuilder builder = GBeanInfoBuilder.createStatic(KernelContextGBean.class, "Context");
+        builder.addAttribute("nameInNamespace", String.class, true);
+        builder.addAttribute("abstractNameQuery", AbstractNameQuery.class, true);
+        builder.setConstructor(new String[]{"nameInNamespace", "abstractNameQuery", "kernel"});
+        GBEAN_INFO = builder.getBeanInfo();
+    }
+}

Added: geronimo/sandbox/plugins/global-jndi/src/java/org/apache/geronimo/gjndi/java/javaURLContextFactory.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/plugins/global-jndi/src/java/org/apache/geronimo/gjndi/java/javaURLContextFactory.java?rev=432101&view=auto
==============================================================================
--- geronimo/sandbox/plugins/global-jndi/src/java/org/apache/geronimo/gjndi/java/javaURLContextFactory.java (added)
+++ geronimo/sandbox/plugins/global-jndi/src/java/org/apache/geronimo/gjndi/java/javaURLContextFactory.java Wed Aug 16 18:32:59 2006
@@ -0,0 +1,27 @@
+/**
+ *
+ * Copyright 2006 The Apache Software Foundation
+ *
+ *  Licensed 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.gjndi.java;
+
+import org.apache.geronimo.gjndi.GlobalContextBootstrap;
+
+/**
+ * URLContextFactory for the java: namespace.
+ *
+ * @version $Rev: 355877 $ $Date: 2005-12-10 18:48:27 -0800 (Sat, 10 Dec 2005) $
+ */
+public class javaURLContextFactory extends GlobalContextBootstrap {
+}

Added: geronimo/sandbox/plugins/global-jndi/src/site/site.xml
URL: http://svn.apache.org/viewvc/geronimo/sandbox/plugins/global-jndi/src/site/site.xml?rev=432101&view=auto
==============================================================================
--- geronimo/sandbox/plugins/global-jndi/src/site/site.xml (added)
+++ geronimo/sandbox/plugins/global-jndi/src/site/site.xml Wed Aug 16 18:32:59 2006
@@ -0,0 +1,62 @@
+<?xml version="1.0"?>
+<!--
+    Copyright 2006 The Apache Software Foundation
+
+    Licensed 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.
+-->
+
+<!-- $Id: site.xml 429761 2006-08-08 18:31:52Z jdillon $ -->
+
+<project name="${project.name}">
+    <skin>
+        <groupId>org.apache.geronimo.genesis.config</groupId>
+        <artifactId>geronimo-skin</artifactId>
+        <version>1.0.0-SNAPSHOT</version>
+    </skin>
+    
+    <publishDate format="dd MMM yyyy"/>
+    
+    <bannerLeft>
+        <src>images/topleft_logo_437x64.gif</src>
+    </bannerLeft>
+    
+    <!--
+    <bannerRight>
+        <name>${project.name}</name>
+    </bannerRight>
+    -->
+    
+    <body>
+        <!--
+        <links>
+            <item name="Geronimo" href="http://geronimo.apache.org/"/>
+            <item name="Apache" href="http://apache.org/"/>
+        </links>
+        -->
+        
+        <menu name="Geronimo">
+            <item name="Home" href="http://geronimo.apache.org/"/>
+        </menu>
+        
+        <menu ref="parent"/>
+        
+        <menu ref="modules"/>
+        
+        <menu ref="reports"/>
+        
+        ${reports}
+        
+    </body>
+</project>
+
+

Added: geronimo/sandbox/plugins/global-jndi/src/test/org/apache/geronimo/gjndi/AbstractContextTest.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/plugins/global-jndi/src/test/org/apache/geronimo/gjndi/AbstractContextTest.java?rev=432101&view=auto
==============================================================================
--- geronimo/sandbox/plugins/global-jndi/src/test/org/apache/geronimo/gjndi/AbstractContextTest.java (added)
+++ geronimo/sandbox/plugins/global-jndi/src/test/org/apache/geronimo/gjndi/AbstractContextTest.java Wed Aug 16 18:32:59 2006
@@ -0,0 +1,176 @@
+/**
+ *
+ * Copyright 2006 The Apache Software Foundation
+ *
+ *  Licensed 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.gjndi;
+
+import junit.framework.TestCase;
+
+import javax.naming.Context;
+import javax.naming.NamingException;
+import javax.naming.Name;
+import javax.naming.NamingEnumeration;
+import javax.naming.NameClassPair;
+import javax.naming.Binding;
+import java.util.Map;
+import java.util.Iterator;
+import java.util.TreeSet;
+import java.util.HashMap;
+
+import org.apache.xbean.naming.context.ContextUtil;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public abstract class AbstractContextTest extends TestCase {
+    public static void assertEq(Map expected, Context actual) throws NamingException {
+        AbstractContextTest.assertEq(ContextUtil.buildMapTree(expected), actual, actual, null);
+    }
+
+    public static void assertEq(Map expected, String pathInExpected, Context actual) throws NamingException {
+        ContextUtil.Node node = ContextUtil.buildMapTree(expected);
+        Name parsedName = actual.getNameParser("").parse(pathInExpected);
+        for (int i = 0; i < parsedName.size(); i++) {
+            String part = parsedName.get(i);
+            Object value = node.get(part);
+            if (value == null) {
+                throw new NamingException("look for " + parsedName.getPrefix(i+1) + " in node tree is null ");
+            }
+            node = (ContextUtil.Node) value;
+        }
+
+        AbstractContextTest.assertEq(node, actual, actual, null);
+    }
+
+    private static void assertEq(ContextUtil.Node node, Context rootContext, Context currentContext, String path) throws NamingException {
+        for (Iterator iterator = node.entrySet().iterator(); iterator.hasNext();) {
+            Map.Entry entry = (Map.Entry) iterator.next();
+            String expectedName = (String) entry.getKey();
+            Object expectedValue = entry.getValue();
+
+            String fullName = path == null ? expectedName : path + "/" + expectedName;
+
+            // verify we can lookup by string name and parsed name using the root context and current context
+            Object value = AbstractContextTest.assertLookup(expectedValue, currentContext, expectedName);
+            Object absoluteValue = AbstractContextTest.assertLookup(expectedValue, rootContext, fullName);
+            assertSame(fullName, value, absoluteValue);
+
+            if (expectedValue instanceof ContextUtil.Node) {
+                ContextUtil.Node expectedNode = (ContextUtil.Node) expectedValue;
+
+                // verufy listing of this context returns the expected results
+                AbstractContextTest.assertList(expectedNode, currentContext, expectedName);
+                AbstractContextTest.assertList(expectedNode, rootContext, fullName);
+
+                AbstractContextTest.assertEq(expectedNode, rootContext, (Context) value, fullName);
+            }
+        }
+    }
+
+    public static Object assertLookup(Object expectedValue, Context context, String name) throws NamingException {
+        Object value = context.lookup(name);
+
+        String contextName = context.getNameInNamespace();
+        if (contextName == null || contextName.length() == 0) contextName = "<root>";
+
+        assertNotNull("lookup of " +  name + " on " + contextName + " returned null", value);
+
+        if (expectedValue instanceof ContextUtil.Node) {
+            assertTrue("Expected lookup of " +  name + " on " + contextName + " to return a Context, but got a " + value.getClass().getName(),
+                    value instanceof Context);
+        } else {
+            assertEquals("lookup of " + name + " on " + contextName, expectedValue, value);
+        }
+
+        Name parsedName = context.getNameParser("").parse(name);
+        Object valueFromParsedName = context.lookup(parsedName);
+        assertSame("lookup of " +  name + " on " + contextName + " using a parsed name", value, valueFromParsedName);
+
+        return value;
+    }
+
+    public static void assertList(ContextUtil.Node node, Context context, String name) throws NamingException {
+        String contextName = context.getNameInNamespace();
+        if (contextName == null || contextName.length() == 0) contextName = "<root>";
+
+        AbstractContextTest.assertListResults(node, context.list(name), contextName, name, false);
+        AbstractContextTest.assertListResults(node, context.listBindings(name), contextName, name, true);
+
+        Name parsedName = context.getNameParser("").parse(name);
+        AbstractContextTest.assertListResults(node, context.list(parsedName), contextName, "parsed name " + name, false);
+        AbstractContextTest.assertListResults(node, context.listBindings(parsedName), contextName, "parsed name " + name, true);
+    }
+
+    public static void assertListResults(ContextUtil.Node node, NamingEnumeration enumeration, String contextName, String name, boolean wasListBinding) {
+        Map actualValues;
+        if (wasListBinding) {
+            actualValues = AbstractContextTest.toListBindingResults(enumeration);
+        } else {
+            actualValues = AbstractContextTest.toListResults(enumeration);
+        }
+
+        for (Iterator iterator = node.entrySet().iterator(); iterator.hasNext();) {
+            Map.Entry entry = (Map.Entry) iterator.next();
+            String expectedName = (String) entry.getKey();
+            Object expectedValue = entry.getValue();
+
+            Object actualValue = actualValues.get(expectedName);
+
+            assertNotNull("list of " + name + " on " + contextName + " did not find value for " + name, actualValue);
+            if (wasListBinding) {
+                if (expectedValue instanceof ContextUtil.Node) {
+                    assertTrue("Expected list of " + name + " on " + contextName + " result value for " + name + " to return a Context, but got a " + actualValue.getClass().getName(),
+                        actualValue instanceof Context);
+                } else {
+                    assertEquals("list of " + name + " on " + contextName + " for value for " + name, expectedValue, actualValue);
+                }
+            } else {
+                if (!(expectedValue instanceof ContextUtil.Node)) {
+                    assertEquals("list of " + name + " on " + contextName + " for value for " + name, expectedValue.getClass().getName(), actualValue);
+                } else {
+                    // can't really test this since it the value is the name of a nested node class
+                }
+            }
+        }
+
+        TreeSet extraNames = new TreeSet(actualValues.keySet());
+        extraNames.removeAll(node.keySet());
+        if (!extraNames.isEmpty()) {
+            fail("list of " + name + " on " + contextName + " found extra values: " + extraNames);
+        }
+    }
+
+    private static Map toListResults(NamingEnumeration enumeration) {
+        Map result = new HashMap();
+        while (enumeration.hasMoreElements()) {
+            NameClassPair nameClassPair = (NameClassPair) enumeration.nextElement();
+            String name = nameClassPair.getName();
+            assertFalse(result.containsKey(name));
+            result.put(name, nameClassPair.getClassName());
+        }
+        return result;
+    }
+
+    private static Map toListBindingResults(NamingEnumeration enumeration) {
+        Map result = new HashMap();
+        while (enumeration.hasMoreElements()) {
+            Binding binding = (Binding) enumeration.nextElement();
+            String name = binding.getName();
+            assertFalse(result.containsKey(name));
+            result.put(name, binding.getObject());
+        }
+        return result;
+    }
+}

Added: geronimo/sandbox/plugins/global-jndi/src/test/org/apache/geronimo/gjndi/JavaCompContextTest.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/plugins/global-jndi/src/test/org/apache/geronimo/gjndi/JavaCompContextTest.java?rev=432101&view=auto
==============================================================================
--- geronimo/sandbox/plugins/global-jndi/src/test/org/apache/geronimo/gjndi/JavaCompContextTest.java (added)
+++ geronimo/sandbox/plugins/global-jndi/src/test/org/apache/geronimo/gjndi/JavaCompContextTest.java Wed Aug 16 18:32:59 2006
@@ -0,0 +1,206 @@
+/**
+ *
+ * Copyright 2006 The Apache Software Foundation
+ *
+ *  Licensed 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.gjndi;
+
+import junit.framework.TestCase;
+
+import javax.naming.NamingException;
+import javax.naming.CompositeName;
+import javax.naming.CompoundName;
+import javax.naming.Context;
+import javax.naming.NamingEnumeration;
+import javax.naming.NameClassPair;
+import javax.naming.Binding;
+import javax.naming.LinkRef;
+import javax.naming.InitialContext;
+import java.util.Map;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+import java.util.Properties;
+import java.util.Collections;
+
+import org.apache.geronimo.naming.java.RootContext;
+import org.apache.xbean.naming.context.UnmodifiableContext;
+import org.apache.xbean.naming.context.ImmutableContext;
+import org.apache.xbean.naming.global.GlobalContextManager;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class JavaCompContextTest extends TestCase {
+    protected UnmodifiableContext readOnlyContext;
+    protected Properties syntax;
+    protected Map envBinding;
+    protected Context initialContext;
+    protected Context compContext;
+    protected Context envContext;
+
+    public void testInitialContext() throws NamingException {
+        assertEquals("Hello", initialContext.lookup("java:comp/env/hello"));
+        assertEquals("Hello", initialContext.lookup(new CompositeName("java:comp/env/hello")));
+    }
+
+    public void testLookup() throws NamingException {
+        assertEquals("Hello", envContext.lookup("hello"));
+        assertEquals("Hello", compContext.lookup("env/hello"));
+        try {
+            envContext.lookup("foo");
+            fail();
+        } catch (NamingException e) {
+            // OK
+        }
+        assertEquals("Hello", envContext.lookup(new CompositeName("hello")));
+        assertEquals("Hello", compContext.lookup(new CompositeName("env/hello")));
+        assertEquals("Hello", envContext.lookup(new CompoundName("hello", syntax)));
+        assertEquals("Hello", compContext.lookup(new CompoundName("env/hello", syntax)));
+
+        assertEquals(envContext, envContext.lookup(""));
+    }
+
+    public void testSubContext() throws NamingException {
+        assertEquals("long name", initialContext.lookup("java:comp/env/here/there/anywhere"));
+        Context intermediate = (Context)initialContext.lookup("java:comp/env/here/there");
+        assertNotNull(intermediate);
+        assertEquals("long name", intermediate.lookup("anywhere"));
+    }
+
+    public void testSchemeLookup() throws NamingException {
+//        envContext.lookup("dns:apache.org");
+        assertEquals("Hello", envContext.lookup("java:comp/env/hello"));
+        assertEquals("Hello", compContext.lookup("java:comp/env/hello"));
+    }
+
+    public void testLookupLink() throws NamingException {
+        assertEquals("Hello", envContext.lookup("link"));
+    }
+
+    public void testComposeName() throws NamingException {
+        assertEquals("org/research/user/jane", envContext.composeName("user/jane", "org/research"));
+        assertEquals("research/user/jane", envContext.composeName("user/jane", "research"));
+        assertEquals(new CompositeName("org/research/user/jane"), envContext.composeName(new CompositeName("user/jane"), new CompositeName("org/research")));
+        assertEquals(new CompositeName("research/user/jane"), envContext.composeName(new CompositeName("user/jane"), new CompositeName("research")));
+    }
+
+    public void testList() throws NamingException {
+        NamingEnumeration ne;
+        Map expected;
+        Map result;
+
+        expected = new HashMap();
+        for (Iterator i = envBinding.entrySet().iterator(); i.hasNext();) {
+            Map.Entry entry = (Map.Entry) i.next();
+            expected.put(entry.getKey(), entry.getValue().getClass().getName());
+        }
+        ne = envContext.list("");
+        result = new HashMap();
+        while (ne.hasMore()) {
+            NameClassPair pair = (NameClassPair) ne.next();
+            result.put(pair.getName(), pair.getClassName());
+        }
+        assertEquals(expected, result);
+
+        try {
+            ne.next();
+            fail();
+        } catch (NoSuchElementException e) {
+            // ok
+        }
+        try {
+            ne.nextElement();
+            fail();
+        } catch (NoSuchElementException e) {
+            // ok
+        }
+    }
+
+    public void testListBindings() throws NamingException {
+        NamingEnumeration ne;
+        ne = envContext.listBindings("");
+        int count = 0;
+        while (ne.hasMore()) {
+            count ++;
+            Binding pair = (Binding) ne.next();
+            assertTrue(envBinding.containsKey(pair.getName()));
+            if (! (envBinding.get(pair.getName()) instanceof Context)) {
+                assertEquals(pair.getObject(), envBinding.get(pair.getName()));
+            }
+        }
+        assertEquals(envBinding.size(), count);
+
+        try {
+            ne.next();
+            fail();
+        } catch (NoSuchElementException e) {
+            // ok
+        }
+        try {
+            ne.nextElement();
+            fail();
+        } catch (NoSuchElementException e) {
+            // ok
+        }
+    }
+
+    public void testSpeed() throws NamingException {
+        Context comp = (Context) initialContext.lookup("java:comp");
+
+        long start = System.currentTimeMillis();
+        for (int i=0; i < 1000000; i++) {
+            // initialContext.lookup("java:comp/hello"); // this is sloooow due to scheme resolution
+            // envContext.lookup("hello");
+            comp.lookup("env/hello");
+        }
+
+        long end = System.currentTimeMillis();
+        System.out.println("lookup(String) milliseconds: " + (end - start));
+    }
+
+    protected void setUp() throws Exception {
+        super.setUp();
+        System.setProperty("java.naming.factory.initial", GlobalContextManager.class.getName());
+        System.setProperty("java.naming.factory.url.pkgs", "org.apache.geronimo.knaming");
+
+        LinkRef link = new LinkRef("java:comp/env/hello");
+
+        Map bindings = new HashMap();
+        bindings.put("env/hello", "Hello");
+        bindings.put("env/world", "Hello World");
+        bindings.put("env/here/there/anywhere", "long name");
+        bindings.put("env/link", link);
+
+        readOnlyContext = new UnmodifiableContext(bindings);
+
+        envBinding = new HashMap();
+        envBinding.put("hello", "Hello");
+        envBinding.put("world", "Hello World");
+        envBinding.put("here", readOnlyContext.lookup("env/here"));
+        envBinding.put("link", link);
+
+        RootContext.setComponentContext(readOnlyContext);
+
+        Context javaCompContext = new JavaCompContextGBean();
+        Context globalContext = new ImmutableContext(Collections.singletonMap(javaCompContext.getNameInNamespace(), javaCompContext));
+        GlobalContextManager.setGlobalContext(globalContext);
+
+        initialContext = new InitialContext();
+        compContext = (Context) initialContext.lookup("java:comp");
+        envContext = (Context) initialContext.lookup("java:comp/env");
+
+        syntax = new Properties();
+    }
+}

Added: geronimo/sandbox/plugins/global-jndi/src/test/org/apache/geronimo/gjndi/KernelContextGBeanTest.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/plugins/global-jndi/src/test/org/apache/geronimo/gjndi/KernelContextGBeanTest.java?rev=432101&view=auto
==============================================================================
--- geronimo/sandbox/plugins/global-jndi/src/test/org/apache/geronimo/gjndi/KernelContextGBeanTest.java (added)
+++ geronimo/sandbox/plugins/global-jndi/src/test/org/apache/geronimo/gjndi/KernelContextGBeanTest.java Wed Aug 16 18:32:59 2006
@@ -0,0 +1,171 @@
+/**
+ *
+ * Copyright 2006 The Apache Software Foundation
+ *
+ *  Licensed 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.gjndi;
+
+import org.apache.geronimo.gbean.GBeanData;
+import org.apache.geronimo.gbean.GBeanInfo;
+import org.apache.geronimo.gbean.GBeanInfoBuilder;
+import org.apache.geronimo.gbean.AbstractName;
+import org.apache.geronimo.kernel.Kernel;
+import org.apache.geronimo.kernel.KernelFactory;
+import org.apache.geronimo.kernel.config.ConfigurationData;
+import org.apache.geronimo.kernel.config.ConfigurationUtil;
+import org.apache.geronimo.kernel.config.EditableConfigurationManager;
+import org.apache.geronimo.kernel.config.EditableKernelConfigurationManager;
+import org.apache.geronimo.kernel.repository.Artifact;
+import org.apache.geronimo.kernel.repository.DefaultArtifactManager;
+import org.apache.geronimo.kernel.repository.DefaultArtifactResolver;
+import org.apache.geronimo.naming.java.RootContext;
+import org.apache.xbean.naming.context.ImmutableContext;
+import org.apache.xbean.naming.global.GlobalContextManager;
+
+import javax.naming.Context;
+import javax.naming.InitialContext;
+import java.util.HashMap;
+import java.util.Hashtable;
+import java.util.Map;
+import java.util.Iterator;
+import java.util.Collections;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class KernelContextGBeanTest extends AbstractContextTest {
+    private Kernel kernel;
+    private EditableConfigurationManager configurationManager;
+    private ConfigurationData configurationData;
+    private GBeanInfo immutableContextGBeanInfo;
+    private Hashtable contextEnv;
+
+    public void test() throws Exception {
+        Map globalBindings = new HashMap();
+        globalBindings.put("java:comp/string", "foo");
+        globalBindings.put("java:comp/nested/context/string", "bar");
+        globalBindings.put("java:comp/a/b/c/d/e/string", "beer");
+        globalBindings.put("java:comp/a/b/c/d/e/one", new Integer(1));
+        globalBindings.put("java:comp/a/b/c/d/e/two", new Integer(2));
+        globalBindings.put("java:comp/a/b/c/d/e/three", new Integer(3));
+        globalBindings.put("test/env/foo", new Integer(42));
+        globalBindings.put("test/baz", "caz");
+
+        Map javaCompBindings = getNestedBindings(globalBindings, "java:comp/");
+        ImmutableContext javaCompContext = new ImmutableContext(javaCompBindings);
+        RootContext.setComponentContext(javaCompContext);
+
+        GBeanData javaComp = configurationData.addGBean("JavaComp", JavaCompContextGBean.GBEAN_INFO);
+        AbstractName javaCompName = javaComp.getAbstractName();
+
+        GBeanData test = configurationData.addGBean("Test", immutableContextGBeanInfo);
+        AbstractName testName = test.getAbstractName();
+        test.setAttribute("nameInNamespace", "test");
+        Map testBindings = getNestedBindings(globalBindings, "test/");
+        test.setAttribute("bindings", testBindings);
+
+        configurationManager.loadConfiguration(configurationData);
+        configurationManager.startConfiguration(configurationData.getId());
+
+        InitialContext ctx = new InitialContext(contextEnv);
+        assertEq(globalBindings, ctx);
+
+        //
+        // stop test context
+        //
+        kernel.stopGBean(testName);
+
+        HashMap javaCompOnlyBindings = new HashMap(globalBindings);
+        javaCompOnlyBindings.remove("test/env/foo");
+        javaCompOnlyBindings.remove("test/baz");
+        assertEq(javaCompOnlyBindings, ctx);
+
+        //
+        // stop java context
+        //
+        kernel.stopGBean(javaCompName);
+
+        assertEq(Collections.EMPTY_MAP, ctx);
+
+
+        //
+        // restart java context
+        //
+        kernel.startGBean(javaCompName);
+
+        assertEq(javaCompOnlyBindings, ctx);
+
+        //
+        // restart test context
+        //
+        kernel.startGBean(testName);
+
+        assertEq(globalBindings, ctx);
+    }
+
+    protected Map getNestedBindings(Map globalBindings, String nestedPath) {
+        HashMap nestedBindings = new HashMap();
+        for (Iterator iterator = globalBindings.entrySet().iterator(); iterator.hasNext();) {
+            Map.Entry entry = (Map.Entry) iterator.next();
+            String globalName = (String) entry.getKey();
+            Object value = entry.getValue();
+
+            if (globalName.startsWith(nestedPath)) {
+                String nestedName = globalName.substring(nestedPath.length());
+                nestedBindings.put(nestedName, value);
+            }
+        }
+        return nestedBindings;
+    }
+
+    protected void setUp() throws Exception {
+        super.setUp();
+
+        kernel = KernelFactory.newInstance().createKernel("test");
+        kernel.boot();
+
+        ConfigurationData bootstrap = new ConfigurationData(new Artifact("bootstrap", "bootstrap", "", "car"), kernel.getNaming());
+
+        GBeanData artifactManagerData = bootstrap.addGBean("ArtifactManager", DefaultArtifactManager.GBEAN_INFO);
+
+        GBeanData artifactResolverData = bootstrap.addGBean("ArtifactResolver", DefaultArtifactResolver.GBEAN_INFO);
+        artifactResolverData.setReferencePattern("ArtifactManager", artifactManagerData.getAbstractName());
+
+        GBeanData configurationManagerData = bootstrap.addGBean("ConfigurationManager", EditableKernelConfigurationManager.GBEAN_INFO);
+        configurationManagerData.setReferencePattern("ArtifactManager", artifactManagerData.getAbstractName());
+        configurationManagerData.setReferencePattern("ArtifactResolver", artifactResolverData.getAbstractName());
+
+        ConfigurationUtil.loadBootstrapConfiguration(kernel, bootstrap, getClass().getClassLoader());
+
+        configurationManager = ConfigurationUtil.getEditableConfigurationManager(kernel);
+
+        configurationData = new ConfigurationData(new Artifact("test", "test", "", "car"), kernel.getNaming());
+        configurationData.addGBean("GlobalContext", GlobalContextGBean.GBEAN_INFO);
+
+        GBeanInfoBuilder builder = new GBeanInfoBuilder(ImmutableContext.class);
+        builder.setConstructor(new String[] {"nameInNamespace", "bindings", "cacheReferences"});
+        builder.addAttribute("nameInNamespace", String.class, true);
+        builder.addAttribute("bindings", Map.class, true);
+        builder.addAttribute("cacheReferences", boolean.class, true);
+        immutableContextGBeanInfo = builder.getBeanInfo();
+
+        contextEnv = new Hashtable();
+        contextEnv.put(Context.INITIAL_CONTEXT_FACTORY, GlobalContextManager.class.getName());
+    }
+
+    protected void tearDown() throws Exception {
+        kernel.shutdown();
+        super.tearDown();
+    }
+}



Re: svn commit: r432101 - in /geronimo/sandbox/plugins/global-jndi: ./ src/ src/java/ src/java/org/ src/java/org/apache/ src/java/org/apache/geronimo/ src/java/org/apache/geronimo/gjndi/ src/java/org/apache/geronimo/gjndi/java/ src/site/ src/site/apt/ src/...

Posted by Jason Dillon <ja...@planet57.com>.
Peep at modules/transaction/pom.xml, you just need to add the <build>  
section to get the standard layout.

I'd really like to fix all modules to use the standard layout...

--jason


On Aug 17, 2006, at 8:04 AM, Dain Sundstrom wrote:

> I'm using the modules pom as a parent, so as soon as you change  
> that (or give me another correct pom), I'll move this to the  
> correct layout.
>
> -dain
>
> On Aug 16, 2006, at 7:28 PM, Jason Dillon wrote:
>
>> Hey if you are gonna add new modules, can you please use the m2  
>> standard layout?
>>
>> --jason
>>
>>
>> On Aug 16, 2006, at 6:33 PM, dain@apache.org wrote:
>>
>>> Author: dain
>>> Date: Wed Aug 16 18:32:59 2006
>>> New Revision: 432101
>>>
>>> URL: http://svn.apache.org/viewvc?rev=432101&view=rev
>>> Log:
>>> Starting of a global jndi plugin
>>>
>>> Added:
>>>     geronimo/sandbox/plugins/global-jndi/
>>>     geronimo/sandbox/plugins/global-jndi/LICENSE.txt
>>>     geronimo/sandbox/plugins/global-jndi/NOTICE.txt
>>>     geronimo/sandbox/plugins/global-jndi/pom.xml
>>>     geronimo/sandbox/plugins/global-jndi/src/
>>>     geronimo/sandbox/plugins/global-jndi/src/java/
>>>     geronimo/sandbox/plugins/global-jndi/src/java/org/
>>>     geronimo/sandbox/plugins/global-jndi/src/java/org/apache/
>>>     geronimo/sandbox/plugins/global-jndi/src/java/org/apache/ 
>>> geronimo/
>>>     geronimo/sandbox/plugins/global-jndi/src/java/org/apache/ 
>>> geronimo/gjndi/
>>>     geronimo/sandbox/plugins/global-jndi/src/java/org/apache/ 
>>> geronimo/gjndi/GlobalContextBootstrap.java
>>>     geronimo/sandbox/plugins/global-jndi/src/java/org/apache/ 
>>> geronimo/gjndi/GlobalContextGBean.java
>>>     geronimo/sandbox/plugins/global-jndi/src/java/org/apache/ 
>>> geronimo/gjndi/JavaCompContextGBean.java
>>>     geronimo/sandbox/plugins/global-jndi/src/java/org/apache/ 
>>> geronimo/gjndi/KernelContextGBean.java
>>>     geronimo/sandbox/plugins/global-jndi/src/java/org/apache/ 
>>> geronimo/gjndi/java/
>>>     geronimo/sandbox/plugins/global-jndi/src/java/org/apache/ 
>>> geronimo/gjndi/java/javaURLContextFactory.java
>>>     geronimo/sandbox/plugins/global-jndi/src/site/
>>>     geronimo/sandbox/plugins/global-jndi/src/site/apt/
>>>     geronimo/sandbox/plugins/global-jndi/src/site/site.xml
>>>     geronimo/sandbox/plugins/global-jndi/src/test/
>>>     geronimo/sandbox/plugins/global-jndi/src/test-data/
>>>     geronimo/sandbox/plugins/global-jndi/src/test/org/
>>>     geronimo/sandbox/plugins/global-jndi/src/test/org/apache/
>>>     geronimo/sandbox/plugins/global-jndi/src/test/org/apache/ 
>>> geronimo/
>>>     geronimo/sandbox/plugins/global-jndi/src/test/org/apache/ 
>>> geronimo/gjndi/
>>>     geronimo/sandbox/plugins/global-jndi/src/test/org/apache/ 
>>> geronimo/gjndi/AbstractContextTest.java
>>>     geronimo/sandbox/plugins/global-jndi/src/test/org/apache/ 
>>> geronimo/gjndi/JavaCompContextTest.java
>>>     geronimo/sandbox/plugins/global-jndi/src/test/org/apache/ 
>>> geronimo/gjndi/KernelContextGBeanTest.java
>>>
>>> Added: geronimo/sandbox/plugins/global-jndi/LICENSE.txt
>>> URL: http://svn.apache.org/viewvc/geronimo/sandbox/plugins/global- 
>>> jndi/LICENSE.txt?rev=432101&view=auto
>>> ==================================================================== 
>>> ==========
>>> --- geronimo/sandbox/plugins/global-jndi/LICENSE.txt (added)
>>> +++ geronimo/sandbox/plugins/global-jndi/LICENSE.txt Wed Aug 16  
>>> 18:32:59 2006
>>> @@ -0,0 +1,203 @@
>>> +
>>> +                                 Apache License
>>> +                           Version 2.0, January 2004
>>> +                        http://www.apache.org/licenses/
>>> +
>>> +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
>>> +
>>> +   1. Definitions.
>>> +
>>> +      "License" shall mean the terms and conditions for use,  
>>> reproduction,
>>> +      and distribution as defined by Sections 1 through 9 of  
>>> this document.
>>> +
>>> +      "Licensor" shall mean the copyright owner or entity  
>>> authorized by
>>> +      the copyright owner that is granting the License.
>>> +
>>> +      "Legal Entity" shall mean the union of the acting entity  
>>> and all
>>> +      other entities that control, are controlled by, or are  
>>> under common
>>> +      control with that entity. For the purposes of this  
>>> definition,
>>> +      "control" means (i) the power, direct or indirect, to  
>>> cause the
>>> +      direction or management of such entity, whether by  
>>> contract or
>>> +      otherwise, or (ii) ownership of fifty percent (50%) or  
>>> more of the
>>> +      outstanding shares, or (iii) beneficial ownership of such  
>>> entity.
>>> +
>>> +      "You" (or "Your") shall mean an individual or Legal Entity
>>> +      exercising permissions granted by this License.
>>> +
>>> +      "Source" form shall mean the preferred form for making  
>>> modifications,
>>> +      including but not limited to software source code,  
>>> documentation
>>> +      source, and configuration files.
>>> +
>>> +      "Object" form shall mean any form resulting from mechanical
>>> +      transformation or translation of a Source form, including but
>>> +      not limited to compiled object code, generated documentation,
>>> +      and conversions to other media types.
>>> +
>>> +      "Work" shall mean the work of authorship, whether in  
>>> Source or
>>> +      Object form, made available under the License, as  
>>> indicated by a
>>> +      copyright notice that is included in or attached to the work
>>> +      (an example is provided in the Appendix below).
>>> +
>>> +      "Derivative Works" shall mean any work, whether in Source  
>>> or Object
>>> +      form, that is based on (or derived from) the Work and for  
>>> which the
>>> +      editorial revisions, annotations, elaborations, or other  
>>> modifications
>>> +      represent, as a whole, an original work of authorship. For  
>>> the purposes
>>> +      of this License, Derivative Works shall not include works  
>>> that remain
>>> +      separable from, or merely link (or bind by name) to the  
>>> interfaces of,
>>> +      the Work and Derivative Works thereof.
>>> +
>>> +      "Contribution" shall mean any work of authorship, including
>>> +      the original version of the Work and any modifications or  
>>> additions
>>> +      to that Work or Derivative Works thereof, that is  
>>> intentionally
>>> +      submitted to Licensor for inclusion in the Work by the  
>>> copyright owner
>>> +      or by an individual or Legal Entity authorized to submit  
>>> on behalf of
>>> +      the copyright owner. For the purposes of this definition,  
>>> "submitted"
>>> +      means any form of electronic, verbal, or written  
>>> communication sent
>>> +      to the Licensor or its representatives, including but not  
>>> limited to
>>> +      communication on electronic mailing lists, source code  
>>> control systems,
>>> +      and issue tracking systems that are managed by, or on  
>>> behalf of, the
>>> +      Licensor for the purpose of discussing and improving the  
>>> Work, but
>>> +      excluding communication that is conspicuously marked or  
>>> otherwise
>>> +      designated in writing by the copyright owner as "Not a  
>>> Contribution."
>>> +
>>> +      "Contributor" shall mean Licensor and any individual or  
>>> Legal Entity
>>> +      on behalf of whom a Contribution has been received by  
>>> Licensor and
>>> +      subsequently incorporated within the Work.
>>> +
>>> +   2. Grant of Copyright License. Subject to the terms and  
>>> conditions of
>>> +      this License, each Contributor hereby grants to You a  
>>> perpetual,
>>> +      worldwide, non-exclusive, no-charge, royalty-free,  
>>> irrevocable
>>> +      copyright license to reproduce, prepare Derivative Works of,
>>> +      publicly display, publicly perform, sublicense, and  
>>> distribute the
>>> +      Work and such Derivative Works in Source or Object form.
>>> +
>>> +   3. Grant of Patent License. Subject to the terms and  
>>> conditions of
>>> +      this License, each Contributor hereby grants to You a  
>>> perpetual,
>>> +      worldwide, non-exclusive, no-charge, royalty-free,  
>>> irrevocable
>>> +      (except as stated in this section) patent license to make,  
>>> have made,
>>> +      use, offer to sell, sell, import, and otherwise transfer  
>>> the Work,
>>> +      where such license applies only to those patent claims  
>>> licensable
>>> +      by such Contributor that are necessarily infringed by their
>>> +      Contribution(s) alone or by combination of their  
>>> Contribution(s)
>>> +      with the Work to which such Contribution(s) was submitted.  
>>> If You
>>> +      institute patent litigation against any entity (including a
>>> +      cross-claim or counterclaim in a lawsuit) alleging that  
>>> the Work
>>> +      or a Contribution incorporated within the Work constitutes  
>>> direct
>>> +      or contributory patent infringement, then any patent licenses
>>> +      granted to You under this License for that Work shall  
>>> terminate
>>> +      as of the date such litigation is filed.
>>> +
>>> +   4. Redistribution. You may reproduce and distribute copies of  
>>> the
>>> +      Work or Derivative Works thereof in any medium, with or  
>>> without
>>> +      modifications, and in Source or Object form, provided that  
>>> You
>>> +      meet the following conditions:
>>> +
>>> +      (a) You must give any other recipients of the Work or
>>> +          Derivative Works a copy of this License; and
>>> +
>>> +      (b) You must cause any modified files to carry prominent  
>>> notices
>>> +          stating that You changed the files; and
>>> +
>>> +      (c) You must retain, in the Source form of any Derivative  
>>> Works
>>> +          that You distribute, all copyright, patent, trademark,  
>>> and
>>> +          attribution notices from the Source form of the Work,
>>> +          excluding those notices that do not pertain to any  
>>> part of
>>> +          the Derivative Works; and
>>> +
>>> +      (d) If the Work includes a "NOTICE" text file as part of its
>>> +          distribution, then any Derivative Works that You  
>>> distribute must
>>> +          include a readable copy of the attribution notices  
>>> contained
>>> +          within such NOTICE file, excluding those notices that  
>>> do not
>>> +          pertain to any part of the Derivative Works, in at  
>>> least one
>>> +          of the following places: within a NOTICE text file  
>>> distributed
>>> +          as part of the Derivative Works; within the Source  
>>> form or
>>> +          documentation, if provided along with the Derivative  
>>> Works; or,
>>> +          within a display generated by the Derivative Works, if  
>>> and
>>> +          wherever such third-party notices normally appear. The  
>>> contents
>>> +          of the NOTICE file are for informational purposes only  
>>> and
>>> +          do not modify the License. You may add Your own  
>>> attribution
>>> +          notices within Derivative Works that You distribute,  
>>> alongside
>>> +          or as an addendum to the NOTICE text from the Work,  
>>> provided
>>> +          that such additional attribution notices cannot be  
>>> construed
>>> +          as modifying the License.
>>> +
>>> +      You may add Your own copyright statement to Your  
>>> modifications and
>>> +      may provide additional or different license terms and  
>>> conditions
>>> +      for use, reproduction, or distribution of Your  
>>> modifications, or
>>> +      for any such Derivative Works as a whole, provided Your use,
>>> +      reproduction, and distribution of the Work otherwise  
>>> complies with
>>> +      the conditions stated in this License.
>>> +
>>> +   5. Submission of Contributions. Unless You explicitly state  
>>> otherwise,
>>> +      any Contribution intentionally submitted for inclusion in  
>>> the Work
>>> +      by You to the Licensor shall be under the terms and  
>>> conditions of
>>> +      this License, without any additional terms or conditions.
>>> +      Notwithstanding the above, nothing herein shall supersede  
>>> or modify
>>> +      the terms of any separate license agreement you may have  
>>> executed
>>> +      with Licensor regarding such Contributions.
>>> +
>>> +   6. Trademarks. This License does not grant permission to use  
>>> the trade
>>> +      names, trademarks, service marks, or product names of the  
>>> Licensor,
>>> +      except as required for reasonable and customary use in  
>>> describing the
>>> +      origin of the Work and reproducing the content of the  
>>> NOTICE file.
>>> +
>>> +   7. Disclaimer of Warranty. Unless required by applicable law or
>>> +      agreed to in writing, Licensor provides the Work (and each
>>> +      Contributor provides its Contributions) on an "AS IS" BASIS,
>>> +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either  
>>> express or
>>> +      implied, including, without limitation, any warranties or  
>>> conditions
>>> +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
>>> +      PARTICULAR PURPOSE. You are solely responsible for  
>>> determining the
>>> +      appropriateness of using or redistributing the Work and  
>>> assume any
>>> +      risks associated with Your exercise of permissions under  
>>> this License.
>>> +
>>> +   8. Limitation of Liability. In no event and under no legal  
>>> theory,
>>> +      whether in tort (including negligence), contract, or  
>>> otherwise,
>>> +      unless required by applicable law (such as deliberate and  
>>> grossly
>>> +      negligent acts) or agreed to in writing, shall any  
>>> Contributor be
>>> +      liable to You for damages, including any direct, indirect,  
>>> special,
>>> +      incidental, or consequential damages of any character  
>>> arising as a
>>> +      result of this License or out of the use or inability to  
>>> use the
>>> +      Work (including but not limited to damages for loss of  
>>> goodwill,
>>> +      work stoppage, computer failure or malfunction, or any and  
>>> all
>>> +      other commercial damages or losses), even if such Contributor
>>> +      has been advised of the possibility of such damages.
>>> +
>>> +   9. Accepting Warranty or Additional Liability. While  
>>> redistributing
>>> +      the Work or Derivative Works thereof, You may choose to  
>>> offer,
>>> +      and charge a fee for, acceptance of support, warranty,  
>>> indemnity,
>>> +      or other liability obligations and/or rights consistent  
>>> with this
>>> +      License. However, in accepting such obligations, You may  
>>> act only
>>> +      on Your own behalf and on Your sole responsibility, not on  
>>> behalf
>>> +      of any other Contributor, and only if You agree to indemnify,
>>> +      defend, and hold each Contributor harmless for any liability
>>> +      incurred by, or claims asserted against, such Contributor  
>>> by reason
>>> +      of your accepting any such warranty or additional liability.
>>> +
>>> +   END OF TERMS AND CONDITIONS
>>> +
>>> +   APPENDIX: How to apply the Apache License to your work.
>>> +
>>> +      To apply the Apache License to your work, attach the  
>>> following
>>> +      boilerplate notice, with the fields enclosed by brackets "[]"
>>> +      replaced with your own identifying information. (Don't  
>>> include
>>> +      the brackets!)  The text should be enclosed in the  
>>> appropriate
>>> +      comment syntax for the file format. We also recommend that a
>>> +      file or class name and description of purpose be included  
>>> on the
>>> +      same "printed page" as the copyright notice for easier
>>> +      identification within third-party archives.
>>> +
>>> +   Copyright [yyyy] [name of copyright owner]
>>> +
>>> +   Licensed 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.
>>> +
>>>
>>> Added: geronimo/sandbox/plugins/global-jndi/NOTICE.txt
>>> URL: http://svn.apache.org/viewvc/geronimo/sandbox/plugins/global- 
>>> jndi/NOTICE.txt?rev=432101&view=auto
>>> ==================================================================== 
>>> ==========
>>> --- geronimo/sandbox/plugins/global-jndi/NOTICE.txt (added)
>>> +++ geronimo/sandbox/plugins/global-jndi/NOTICE.txt Wed Aug 16  
>>> 18:32:59 2006
>>> @@ -0,0 +1,3 @@
>>> +This product includes software developed by
>>> +The Apache Software Foundation (http://www.apache.org/).
>>> +
>>>
>>> Added: geronimo/sandbox/plugins/global-jndi/pom.xml
>>> URL: http://svn.apache.org/viewvc/geronimo/sandbox/plugins/global- 
>>> jndi/pom.xml?rev=432101&view=auto
>>> ==================================================================== 
>>> ==========
>>> --- geronimo/sandbox/plugins/global-jndi/pom.xml (added)
>>> +++ geronimo/sandbox/plugins/global-jndi/pom.xml Wed Aug 16  
>>> 18:32:59 2006
>>> @@ -0,0 +1,52 @@
>>> +<?xml version="1.0" encoding="ISO-8859-1"?>
>>> +<!--
>>> +    Copyright 2006 The Apache Software Foundation
>>> +
>>> +    Licensed 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.
>>> +-->
>>> +
>>> +<!-- $Rev: 429882 $ $Date: 2006-08-08 16:33:09 -0700 (Tue, 08  
>>> Aug 2006) $ -->
>>> +
>>> +<project xmlns="http://maven.apache.org/POM/4.0.0"  
>>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
>>> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http:// 
>>> maven.apache.org/maven-v4_0_0.xsd">
>>> +
>>> +    <modelVersion>4.0.0</modelVersion>
>>> +
>>> +    <parent>
>>> +        <groupId>org.apache.geronimo.modules</groupId>
>>> +        <artifactId>modules</artifactId>
>>> +        <version>1.2-SNAPSHOT</version>
>>> +        <relativePath>../pom.xml</relativePath>
>>> +    </parent>
>>> +
>>> +    <groupId>org.apache.geronimo.sandbox</groupId>
>>> +    <artifactId>geronimo-global-jndi</artifactId>
>>> +    <name>Geronimo :: Global JNDI</name>
>>> +
>>> +    <dependencies>
>>> +        <dependency>
>>> +            <groupId>org.apache.xbean</groupId>
>>> +            <artifactId>xbean-naming</artifactId>
>>> +            <version>COL-SNAPSHOT</version>
>>> +        </dependency>
>>> +        <dependency>
>>> +            <groupId>org.apache.geronimo.modules</groupId>
>>> +            <artifactId>geronimo-naming</artifactId>
>>> +            <version>${pom.version}</version>
>>> +        </dependency>
>>> +        <dependency>
>>> +            <groupId>backport-util-concurrent</groupId>
>>> +            <artifactId>backport-util-concurrent</artifactId>
>>> +        </dependency>
>>> +    </dependencies>
>>> +</project>
>>> +
>>>
>>> Added: geronimo/sandbox/plugins/global-jndi/src/java/org/apache/ 
>>> geronimo/gjndi/GlobalContextBootstrap.java
>>> URL: http://svn.apache.org/viewvc/geronimo/sandbox/plugins/global- 
>>> jndi/src/java/org/apache/geronimo/gjndi/ 
>>> GlobalContextBootstrap.java?rev=432101&view=auto
>>> ==================================================================== 
>>> ==========
>>> --- geronimo/sandbox/plugins/global-jndi/src/java/org/apache/ 
>>> geronimo/gjndi/GlobalContextBootstrap.java (added)
>>> +++ geronimo/sandbox/plugins/global-jndi/src/java/org/apache/ 
>>> geronimo/gjndi/GlobalContextBootstrap.java Wed Aug 16 18:32:59 2006
>>> @@ -0,0 +1,61 @@
>>> +/**
>>> + *
>>> + * Copyright 2006 The Apache Software Foundation
>>> + *
>>> + *  Licensed 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.gjndi;
>>> +
>>> +import org.apache.commons.logging.Log;
>>> +import org.apache.commons.logging.LogFactory;
>>> +import org.apache.geronimo.gbean.AbstractName;
>>> +import org.apache.geronimo.gbean.GBeanData;
>>> +import org.apache.geronimo.kernel.Kernel;
>>> +import org.apache.geronimo.kernel.KernelRegistry;
>>> +import org.apache.xbean.naming.global.GlobalContextManager;
>>> +
>>> +import java.net.URI;
>>> +
>>> +/**
>>> + * URLContextFactory for the java: namespace.
>>> + *
>>> + * @version $Rev: 355877 $ $Date: 2005-12-10 18:48:27 -0800  
>>> (Sat, 10 Dec 2005) $
>>> + */
>>> +public class GlobalContextBootstrap extends GlobalContextManager {
>>> +    private static final Log log = LogFactory.getLog 
>>> (GlobalContextBootstrap.class);
>>> +
>>> +    private static boolean initalized;
>>> +
>>> +    public GlobalContextBootstrap() {
>>> +        synchronized (GlobalContextBootstrap.class) {
>>> +            if (!GlobalContextBootstrap.initalized) {
>>> +                ClassLoader classLoader = getClass 
>>> ().getClassLoader();
>>> +
>>> +                Kernel kernel = KernelRegistry.getSingleKernel();
>>> +
>>> +                try {
>>> +                    AbstractName globalContextName = new  
>>> AbstractName(new URI("bootstrap/global-jndi/0/boot? 
>>> name=GlobalContext"));
>>> +                    kernel.loadGBean(new GBeanData 
>>> (globalContextName, GlobalContextGBean.GBEAN_INFO), classLoader);
>>> +                    kernel.startGBean(globalContextName);
>>> +
>>> +                    AbstractName javaCompName = new AbstractName 
>>> (new URI("bootstrap/global-jndi/0/boot?name=JavaComp"));
>>> +                    kernel.loadGBean(new GBeanData(javaCompName,  
>>> JavaCompContextGBean.GBEAN_INFO), classLoader);
>>> +                    kernel.startGBean(javaCompName);
>>> +                } catch (Exception e) {
>>> +                    GlobalContextBootstrap.log.error("Unable to  
>>> bootstrap global jndi gbeans");
>>> +                }
>>> +                GlobalContextBootstrap.initalized = true;
>>> +            }
>>> +        }
>>> +    }
>>> +}
>>>
>>> Added: geronimo/sandbox/plugins/global-jndi/src/java/org/apache/ 
>>> geronimo/gjndi/GlobalContextGBean.java
>>> URL: http://svn.apache.org/viewvc/geronimo/sandbox/plugins/global- 
>>> jndi/src/java/org/apache/geronimo/gjndi/GlobalContextGBean.java? 
>>> rev=432101&view=auto
>>> ==================================================================== 
>>> ==========
>>> --- geronimo/sandbox/plugins/global-jndi/src/java/org/apache/ 
>>> geronimo/gjndi/GlobalContextGBean.java (added)
>>> +++ geronimo/sandbox/plugins/global-jndi/src/java/org/apache/ 
>>> geronimo/gjndi/GlobalContextGBean.java Wed Aug 16 18:32:59 2006
>>> @@ -0,0 +1,76 @@
>>> +/**
>>> + *
>>> + * Copyright 2006 The Apache Software Foundation
>>> + *
>>> + *  Licensed 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.gjndi;
>>> +
>>> +import org.apache.geronimo.gbean.GBeanInfo;
>>> +import org.apache.geronimo.gbean.GBeanInfoBuilder;
>>> +import org.apache.geronimo.gbean.GBeanLifecycle;
>>> +import org.apache.geronimo.gbean.AbstractNameQuery;
>>> +import org.apache.geronimo.gbean.AbstractName;
>>> +import org.apache.geronimo.kernel.Kernel;
>>> +import org.apache.xbean.naming.global.GlobalContextManager;
>>> +
>>> +import javax.naming.Context;
>>> +import javax.naming.NamingException;
>>> +import java.util.Collections;
>>> +
>>> +/**
>>> + * @version $Rev$ $Date$
>>> + */
>>> +public class GlobalContextGBean extends KernelContextGBean  
>>> implements GBeanLifecycle {
>>> +    public GlobalContextGBean(Kernel kernel) throws  
>>> NamingException {
>>> +        super("", new AbstractNameQuery(null,  
>>> Collections.EMPTY_MAP, Context.class.getName()), kernel);
>>> +    }
>>> +
>>> +    public void doStart() {
>>> +        super.doStart();
>>> +        GlobalContextManager.setGlobalContext(this);
>>> +    }
>>> +
>>> +    public void doStop() {
>>> +        GlobalContextManager.setGlobalContext(null);
>>> +        super.doStop();
>>> +    }
>>> +
>>> +    public void doFail() {
>>> +        GlobalContextManager.setGlobalContext(null);
>>> +        super.doFail();
>>> +    }
>>> +
>>> +    protected String createBindingName(AbstractName  
>>> abstractName, Object value) throws NamingException {
>>> +        if (value instanceof Context) {
>>> +            // don't bind yourself
>>> +            if (value == this) return null;
>>> +
>>> +            Context context = (Context) value;
>>> +            return context.getNameInNamespace();
>>> +        }
>>> +        throw new NamingException("value is not a context:  
>>> abstractName=" + abstractName + " valueType=" + value.getClass 
>>> ().getName());
>>> +    }
>>> +
>>> +    public static final GBeanInfo GBEAN_INFO;
>>> +
>>> +    public static GBeanInfo getGBeanInfo() {
>>> +        return GBEAN_INFO;
>>> +    }
>>> +
>>> +    static {
>>> +        GBeanInfoBuilder builder = GBeanInfoBuilder.createStatic 
>>> (GlobalContextGBean.class, "GlobalContext");
>>> +        builder.setConstructor(new String[]{"kernel"});
>>> +        GBEAN_INFO = builder.getBeanInfo();
>>> +    }
>>> +}
>>>
>>> Added: geronimo/sandbox/plugins/global-jndi/src/java/org/apache/ 
>>> geronimo/gjndi/JavaCompContextGBean.java
>>> URL: http://svn.apache.org/viewvc/geronimo/sandbox/plugins/global- 
>>> jndi/src/java/org/apache/geronimo/gjndi/JavaCompContextGBean.java? 
>>> rev=432101&view=auto
>>> ==================================================================== 
>>> ==========
>>> --- geronimo/sandbox/plugins/global-jndi/src/java/org/apache/ 
>>> geronimo/gjndi/JavaCompContextGBean.java (added)
>>> +++ geronimo/sandbox/plugins/global-jndi/src/java/org/apache/ 
>>> geronimo/gjndi/JavaCompContextGBean.java Wed Aug 16 18:32:59 2006
>>> @@ -0,0 +1,49 @@
>>> +/**
>>> + *
>>> + * Copyright 2006 The Apache Software Foundation
>>> + *
>>> + *  Licensed 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.gjndi;
>>> +
>>> +import org.apache.geronimo.gbean.GBeanInfo;
>>> +import org.apache.geronimo.gbean.GBeanInfoBuilder;
>>> +import org.apache.geronimo.naming.java.RootContext;
>>> +import org.apache.xbean.naming.context.ContextFlyweight;
>>> +
>>> +import javax.naming.Context;
>>> +import javax.naming.NamingException;
>>> +
>>> +/**
>>> + * @version $Rev$ $Date$
>>> + */
>>> +public class JavaCompContextGBean extends ContextFlyweight {
>>> +    protected Context getContext() {
>>> +        return RootContext.getComponentContext();
>>> +    }
>>> +
>>> +    public String getNameInNamespace() throws NamingException {
>>> +        return "java:comp";
>>> +    }
>>> +
>>> +    public static final GBeanInfo GBEAN_INFO;
>>> +
>>> +    public static GBeanInfo getGBeanInfo() {
>>> +        return GBEAN_INFO;
>>> +    }
>>> +
>>> +    static {
>>> +        GBeanInfoBuilder builder = GBeanInfoBuilder.createStatic 
>>> (JavaCompContextGBean.class, "Context");
>>> +        GBEAN_INFO = builder.getBeanInfo();
>>> +    }
>>> +}
>>>
>>> Added: geronimo/sandbox/plugins/global-jndi/src/java/org/apache/ 
>>> geronimo/gjndi/KernelContextGBean.java
>>> URL: http://svn.apache.org/viewvc/geronimo/sandbox/plugins/global- 
>>> jndi/src/java/org/apache/geronimo/gjndi/KernelContextGBean.java? 
>>> rev=432101&view=auto
>>> ==================================================================== 
>>> ==========
>>> --- geronimo/sandbox/plugins/global-jndi/src/java/org/apache/ 
>>> geronimo/gjndi/KernelContextGBean.java (added)
>>> +++ geronimo/sandbox/plugins/global-jndi/src/java/org/apache/ 
>>> geronimo/gjndi/KernelContextGBean.java Wed Aug 16 18:32:59 2006
>>> @@ -0,0 +1,198 @@
>>> +/**
>>> + *
>>> + * Copyright 2006 The Apache Software Foundation
>>> + *
>>> + *  Licensed 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.gjndi;
>>> +
>>> +import org.apache.commons.logging.Log;
>>> +import org.apache.commons.logging.LogFactory;
>>> +import org.apache.geronimo.gbean.AbstractName;
>>> +import org.apache.geronimo.gbean.AbstractNameQuery;
>>> +import org.apache.geronimo.gbean.GBeanInfo;
>>> +import org.apache.geronimo.gbean.GBeanInfoBuilder;
>>> +import org.apache.geronimo.gbean.GBeanLifecycle;
>>> +import org.apache.geronimo.kernel.GBeanNotFoundException;
>>> +import org.apache.geronimo.kernel.Kernel;
>>> +import org.apache.geronimo.kernel.lifecycle.LifecycleAdapter;
>>> +import org.apache.geronimo.kernel.lifecycle.LifecycleListener;
>>> +import org.apache.xbean.naming.context.UnmodifiableContext;
>>> +
>>> +import javax.naming.NamingException;
>>> +import java.util.Collections;
>>> +import java.util.HashMap;
>>> +import java.util.Map;
>>> +import java.util.Iterator;
>>> +import java.util.Set;
>>> +
>>> +/**
>>> + * @version $Rev$ $Date$
>>> + */
>>> +public class KernelContextGBean extends UnmodifiableContext  
>>> implements GBeanLifecycle {
>>> +    private static final Log log = LogFactory.getLog 
>>> (KernelContextGBean.class);
>>> +
>>> +    private final Kernel kernel;
>>> +    private final AbstractNameQuery abstractNameQuery;
>>> +    private final LifecycleListener listener = new  
>>> ContextLifecycleListener();
>>> +    private final Map bindingsByAbstractName = new HashMap();
>>> +
>>> +    public KernelContextGBean(String nameInNamespace,  
>>> AbstractNameQuery abstractNameQuery, Kernel kernel) throws  
>>> NamingException {
>>> +        super(nameInNamespace, Collections.EMPTY_MAP, false);
>>> +        this.abstractNameQuery = abstractNameQuery;
>>> +        this.kernel = kernel;
>>> +    }
>>> +
>>> +    public synchronized void doStart() {
>>> +        kernel.getLifecycleMonitor().addLifecycleListener 
>>> (listener, abstractNameQuery);
>>> +        Set set = kernel.listGBeans(abstractNameQuery);
>>> +        for (Iterator iterator = set.iterator(); iterator.hasNext 
>>> ();) {
>>> +            AbstractName abstractName = (AbstractName)  
>>> iterator.next();
>>> +            try {
>>> +                if (kernel.isRunning(abstractName)) {
>>> +                    addBinding(abstractName);
>>> +                }
>>> +            } catch (NamingException e) {
>>> +                log.error("Error adding binding for " +  
>>> abstractName);
>>> +            }
>>> +        }
>>> +
>>> +    }
>>> +
>>> +    public void doStop() {
>>> +        destroy();
>>> +    }
>>> +
>>> +    public void doFail() {
>>> +        destroy();
>>> +    }
>>> +
>>> +    private synchronized void destroy() {
>>> +        kernel.getLifecycleMonitor().removeLifecycleListener 
>>> (listener);
>>> +        for (Iterator iterator = bindingsByAbstractName.values 
>>> ().iterator(); iterator.hasNext();) {
>>> +            try {
>>> +                String name = (String) iterator.next();
>>> +                removeDeepBinding(name);
>>> +            } catch (NamingException ignored) {
>>> +            }
>>> +        }
>>> +        bindingsByAbstractName.clear();
>>> +    }
>>> +
>>> +    private class ContextLifecycleListener extends  
>>> LifecycleAdapter {
>>> +        public void running(AbstractName abstractName) {
>>> +            try {
>>> +                addBinding(abstractName);
>>> +            } catch (NamingException e) {
>>> +                log.error("Error adding binding for " +  
>>> abstractName);
>>> +            }
>>> +        }
>>> +
>>> +        public void stopping(AbstractName abstractName) {
>>> +            removeBinding(abstractName);
>>> +        }
>>> +
>>> +        public void stopped(AbstractName abstractName) {
>>> +            removeBinding(abstractName);
>>> +        }
>>> +
>>> +        public void failed(AbstractName abstractName) {
>>> +            removeBinding(abstractName);
>>> +        }
>>> +
>>> +        public void unloaded(AbstractName abstractName) {
>>> +            removeBinding(abstractName);
>>> +        }
>>> +    }
>>> +
>>> +    /**
>>> +     * Binds the specified gbean.  This method uses  
>>> createBindingName and preprocessValue before binding the object.
>>> +     * @param abstractName the abstract name of the gbean to bind
>>> +     * @throws NamingException if an error occurs during binding
>>> +     */
>>> +    protected synchronized void addBinding(AbstractName  
>>> abstractName) throws NamingException {
>>> +        // get the gbean
>>> +        Object value = null;
>>> +        try {
>>> +            value = kernel.getGBean(abstractName);
>>> +        } catch (GBeanNotFoundException e) {
>>> +            throw new NamingException("GBean not found: " +  
>>> abstractName);
>>> +        }
>>> +
>>> +        // generate a name for this binding
>>> +        String name = createBindingName(abstractName, value);
>>> +        if (name == null) return;
>>> +
>>> +        // give sub classes a chance to preprocess the value
>>> +        value = preprocessVaue(abstractName, name, value);
>>> +        if (value == null) return;
>>> +
>>> +        // bind the value
>>> +
>>> +        addDeepBinding(name, value);
>>> +
>>> +        // remember where we bound this value
>>> +        bindingsByAbstractName.put(abstractName, name);
>>> +    }
>>> +
>>> +    /**
>>> +     * Unbinds the specified gbean.
>>> +     * @param abstractName the abstract name of the gbean to unbind
>>> +     */
>>> +    protected synchronized void removeBinding(AbstractName  
>>> abstractName) {
>>> +        String name = (String) bindingsByAbstractName.remove 
>>> (abstractName);
>>> +        if (name != null) {
>>> +            try {
>>> +                removeDeepBinding(name);
>>> +            } catch (NamingException ignored) {
>>> +            }
>>> +        }
>>> +    }
>>> +
>>> +    /**
>>> +     * Create a name under which we will bind the specified  
>>> gbean with the specified value.
>>> +     * By default, this method simply returns the "name" element  
>>> of the abstract name
>>> +     * @param abstractName the abstract name of the gbean to bind
>>> +     * @param value the gbean instance
>>> +     * @return the name under which the gbean should be bound
>>> +     */
>>> +    protected String createBindingName(AbstractName  
>>> abstractName, Object value) throws NamingException {
>>> +        return (String) abstractName.getName().get("name");
>>> +    }
>>> +
>>> +    /**
>>> +     * Preprocess the value before it is bound.  This is usefult  
>>> for wrapping values with reference objects.
>>> +     * By default, this method simply return the value.
>>> +     * @param abstractName the abstract name of the gbean to bind
>>> +     * @param name the name under which the gbean will be bound
>>> +     * @param value the gbean instance
>>> +     * @return the value to bind
>>> +     */
>>> +    protected Object preprocessVaue(AbstractName abstractName,  
>>> String name, Object value) throws NamingException {
>>> +        return value;
>>> +    }
>>> +
>>> +    public static final GBeanInfo GBEAN_INFO;
>>> +
>>> +    public static GBeanInfo getGBeanInfo() {
>>> +        return GBEAN_INFO;
>>> +    }
>>> +
>>> +    static {
>>> +        GBeanInfoBuilder builder = GBeanInfoBuilder.createStatic 
>>> (KernelContextGBean.class, "Context");
>>> +        builder.addAttribute("nameInNamespace", String.class,  
>>> true);
>>> +        builder.addAttribute("abstractNameQuery",  
>>> AbstractNameQuery.class, true);
>>> +        builder.setConstructor(new String[]{"nameInNamespace",  
>>> "abstractNameQuery", "kernel"});
>>> +        GBEAN_INFO = builder.getBeanInfo();
>>> +    }
>>> +}
>>>
>>> Added: geronimo/sandbox/plugins/global-jndi/src/java/org/apache/ 
>>> geronimo/gjndi/java/javaURLContextFactory.java
>>> URL: http://svn.apache.org/viewvc/geronimo/sandbox/plugins/global- 
>>> jndi/src/java/org/apache/geronimo/gjndi/java/ 
>>> javaURLContextFactory.java?rev=432101&view=auto
>>> ==================================================================== 
>>> ==========
>>> --- geronimo/sandbox/plugins/global-jndi/src/java/org/apache/ 
>>> geronimo/gjndi/java/javaURLContextFactory.java (added)
>>> +++ geronimo/sandbox/plugins/global-jndi/src/java/org/apache/ 
>>> geronimo/gjndi/java/javaURLContextFactory.java Wed Aug 16  
>>> 18:32:59 2006
>>> @@ -0,0 +1,27 @@
>>> +/**
>>> + *
>>> + * Copyright 2006 The Apache Software Foundation
>>> + *
>>> + *  Licensed 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.gjndi.java;
>>> +
>>> +import org.apache.geronimo.gjndi.GlobalContextBootstrap;
>>> +
>>> +/**
>>> + * URLContextFactory for the java: namespace.
>>> + *
>>> + * @version $Rev: 355877 $ $Date: 2005-12-10 18:48:27 -0800  
>>> (Sat, 10 Dec 2005) $
>>> + */
>>> +public class javaURLContextFactory extends GlobalContextBootstrap {
>>> +}
>>>
>>> Added: geronimo/sandbox/plugins/global-jndi/src/site/site.xml
>>> URL: http://svn.apache.org/viewvc/geronimo/sandbox/plugins/global- 
>>> jndi/src/site/site.xml?rev=432101&view=auto
>>> ==================================================================== 
>>> ==========
>>> --- geronimo/sandbox/plugins/global-jndi/src/site/site.xml (added)
>>> +++ geronimo/sandbox/plugins/global-jndi/src/site/site.xml Wed  
>>> Aug 16 18:32:59 2006
>>> @@ -0,0 +1,62 @@
>>> +<?xml version="1.0"?>
>>> +<!--
>>> +    Copyright 2006 The Apache Software Foundation
>>> +
>>> +    Licensed 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.
>>> +-->
>>> +
>>> +<!-- $Id: site.xml 429761 2006-08-08 18:31:52Z jdillon $ -->
>>> +
>>> +<project name="${project.name}">
>>> +    <skin>
>>> +        <groupId>org.apache.geronimo.genesis.config</groupId>
>>> +        <artifactId>geronimo-skin</artifactId>
>>> +        <version>1.0.0-SNAPSHOT</version>
>>> +    </skin>
>>> +
>>> +    <publishDate format="dd MMM yyyy"/>
>>> +
>>> +    <bannerLeft>
>>> +        <src>images/topleft_logo_437x64.gif</src>
>>> +    </bannerLeft>
>>> +
>>> +    <!--
>>> +    <bannerRight>
>>> +        <name>${project.name}</name>
>>> +    </bannerRight>
>>> +    -->
>>> +
>>> +    <body>
>>> +        <!--
>>> +        <links>
>>> +            <item name="Geronimo" href="http:// 
>>> geronimo.apache.org/"/>
>>> +            <item name="Apache" href="http://apache.org/"/>
>>> +        </links>
>>> +        -->
>>> +
>>> +        <menu name="Geronimo">
>>> +            <item name="Home" href="http://geronimo.apache.org/"/>
>>> +        </menu>
>>> +
>>> +        <menu ref="parent"/>
>>> +
>>> +        <menu ref="modules"/>
>>> +
>>> +        <menu ref="reports"/>
>>> +
>>> +        ${reports}
>>> +
>>> +    </body>
>>> +</project>
>>> +
>>> +
>>>
>>> Added: geronimo/sandbox/plugins/global-jndi/src/test/org/apache/ 
>>> geronimo/gjndi/AbstractContextTest.java
>>> URL: http://svn.apache.org/viewvc/geronimo/sandbox/plugins/global- 
>>> jndi/src/test/org/apache/geronimo/gjndi/AbstractContextTest.java? 
>>> rev=432101&view=auto
>>> ==================================================================== 
>>> ==========
>>> --- geronimo/sandbox/plugins/global-jndi/src/test/org/apache/ 
>>> geronimo/gjndi/AbstractContextTest.java (added)
>>> +++ geronimo/sandbox/plugins/global-jndi/src/test/org/apache/ 
>>> geronimo/gjndi/AbstractContextTest.java Wed Aug 16 18:32:59 2006
>>> @@ -0,0 +1,176 @@
>>> +/**
>>> + *
>>> + * Copyright 2006 The Apache Software Foundation
>>> + *
>>> + *  Licensed 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.gjndi;
>>> +
>>> +import junit.framework.TestCase;
>>> +
>>> +import javax.naming.Context;
>>> +import javax.naming.NamingException;
>>> +import javax.naming.Name;
>>> +import javax.naming.NamingEnumeration;
>>> +import javax.naming.NameClassPair;
>>> +import javax.naming.Binding;
>>> +import java.util.Map;
>>> +import java.util.Iterator;
>>> +import java.util.TreeSet;
>>> +import java.util.HashMap;
>>> +
>>> +import org.apache.xbean.naming.context.ContextUtil;
>>> +
>>> +/**
>>> + * @version $Rev$ $Date$
>>> + */
>>> +public abstract class AbstractContextTest extends TestCase {
>>> +    public static void assertEq(Map expected, Context actual)  
>>> throws NamingException {
>>> +        AbstractContextTest.assertEq(ContextUtil.buildMapTree 
>>> (expected), actual, actual, null);
>>> +    }
>>> +
>>> +    public static void assertEq(Map expected, String  
>>> pathInExpected, Context actual) throws NamingException {
>>> +        ContextUtil.Node node = ContextUtil.buildMapTree(expected);
>>> +        Name parsedName = actual.getNameParser("").parse 
>>> (pathInExpected);
>>> +        for (int i = 0; i < parsedName.size(); i++) {
>>> +            String part = parsedName.get(i);
>>> +            Object value = node.get(part);
>>> +            if (value == null) {
>>> +                throw new NamingException("look for " +  
>>> parsedName.getPrefix(i+1) + " in node tree is null ");
>>> +            }
>>> +            node = (ContextUtil.Node) value;
>>> +        }
>>> +
>>> +        AbstractContextTest.assertEq(node, actual, actual, null);
>>> +    }
>>> +
>>> +    private static void assertEq(ContextUtil.Node node, Context  
>>> rootContext, Context currentContext, String path) throws  
>>> NamingException {
>>> +        for (Iterator iterator = node.entrySet().iterator();  
>>> iterator.hasNext();) {
>>> +            Map.Entry entry = (Map.Entry) iterator.next();
>>> +            String expectedName = (String) entry.getKey();
>>> +            Object expectedValue = entry.getValue();
>>> +
>>> +            String fullName = path == null ? expectedName : path  
>>> + "/" + expectedName;
>>> +
>>> +            // verify we can lookup by string name and parsed  
>>> name using the root context and current context
>>> +            Object value = AbstractContextTest.assertLookup 
>>> (expectedValue, currentContext, expectedName);
>>> +            Object absoluteValue =  
>>> AbstractContextTest.assertLookup(expectedValue, rootContext,  
>>> fullName);
>>> +            assertSame(fullName, value, absoluteValue);
>>> +
>>> +            if (expectedValue instanceof ContextUtil.Node) {
>>> +                ContextUtil.Node expectedNode =  
>>> (ContextUtil.Node) expectedValue;
>>> +
>>> +                // verufy listing of this context returns the  
>>> expected results
>>> +                AbstractContextTest.assertList(expectedNode,  
>>> currentContext, expectedName);
>>> +                AbstractContextTest.assertList(expectedNode,  
>>> rootContext, fullName);
>>> +
>>> +                AbstractContextTest.assertEq(expectedNode,  
>>> rootContext, (Context) value, fullName);
>>> +            }
>>> +        }
>>> +    }
>>> +
>>> +    public static Object assertLookup(Object expectedValue,  
>>> Context context, String name) throws NamingException {
>>> +        Object value = context.lookup(name);
>>> +
>>> +        String contextName = context.getNameInNamespace();
>>> +        if (contextName == null || contextName.length() == 0)  
>>> contextName = "<root>";
>>> +
>>> +        assertNotNull("lookup of " +  name + " on " +  
>>> contextName + " returned null", value);
>>> +
>>> +        if (expectedValue instanceof ContextUtil.Node) {
>>> +            assertTrue("Expected lookup of " +  name + " on " +  
>>> contextName + " to return a Context, but got a " + value.getClass 
>>> ().getName(),
>>> +                    value instanceof Context);
>>> +        } else {
>>> +            assertEquals("lookup of " + name + " on " +  
>>> contextName, expectedValue, value);
>>> +        }
>>> +
>>> +        Name parsedName = context.getNameParser("").parse(name);
>>> +        Object valueFromParsedName = context.lookup(parsedName);
>>> +        assertSame("lookup of " +  name + " on " + contextName +  
>>> " using a parsed name", value, valueFromParsedName);
>>> +
>>> +        return value;
>>> +    }
>>> +
>>> +    public static void assertList(ContextUtil.Node node, Context  
>>> context, String name) throws NamingException {
>>> +        String contextName = context.getNameInNamespace();
>>> +        if (contextName == null || contextName.length() == 0)  
>>> contextName = "<root>";
>>> +
>>> +        AbstractContextTest.assertListResults(node, context.list 
>>> (name), contextName, name, false);
>>> +        AbstractContextTest.assertListResults(node,  
>>> context.listBindings(name), contextName, name, true);
>>> +
>>> +        Name parsedName = context.getNameParser("").parse(name);
>>> +        AbstractContextTest.assertListResults(node, context.list 
>>> (parsedName), contextName, "parsed name " + name, false);
>>> +        AbstractContextTest.assertListResults(node,  
>>> context.listBindings(parsedName), contextName, "parsed name " +  
>>> name, true);
>>> +    }
>>> +
>>> +    public static void assertListResults(ContextUtil.Node node,  
>>> NamingEnumeration enumeration, String contextName, String name,  
>>> boolean wasListBinding) {
>>> +        Map actualValues;
>>> +        if (wasListBinding) {
>>> +            actualValues =  
>>> AbstractContextTest.toListBindingResults(enumeration);
>>> +        } else {
>>> +            actualValues = AbstractContextTest.toListResults 
>>> (enumeration);
>>> +        }
>>> +
>>> +        for (Iterator iterator = node.entrySet().iterator();  
>>> iterator.hasNext();) {
>>> +            Map.Entry entry = (Map.Entry) iterator.next();
>>> +            String expectedName = (String) entry.getKey();
>>> +            Object expectedValue = entry.getValue();
>>> +
>>> +            Object actualValue = actualValues.get(expectedName);
>>> +
>>> +            assertNotNull("list of " + name + " on " +  
>>> contextName + " did not find value for " + name, actualValue);
>>> +            if (wasListBinding) {
>>> +                if (expectedValue instanceof ContextUtil.Node) {
>>> +                    assertTrue("Expected list of " + name + " on  
>>> " + contextName + " result value for " + name + " to return a  
>>> Context, but got a " + actualValue.getClass().getName(),
>>> +                        actualValue instanceof Context);
>>> +                } else {
>>> +                    assertEquals("list of " + name + " on " +  
>>> contextName + " for value for " + name, expectedValue, actualValue);
>>> +                }
>>> +            } else {
>>> +                if (!(expectedValue instanceof ContextUtil.Node)) {
>>> +                    assertEquals("list of " + name + " on " +  
>>> contextName + " for value for " + name, expectedValue.getClass 
>>> ().getName(), actualValue);
>>> +                } else {
>>> +                    // can't really test this since it the value  
>>> is the name of a nested node class
>>> +                }
>>> +            }
>>> +        }
>>> +
>>> +        TreeSet extraNames = new TreeSet(actualValues.keySet());
>>> +        extraNames.removeAll(node.keySet());
>>> +        if (!extraNames.isEmpty()) {
>>> +            fail("list of " + name + " on " + contextName + "  
>>> found extra values: " + extraNames);
>>> +        }
>>> +    }
>>> +
>>> +    private static Map toListResults(NamingEnumeration  
>>> enumeration) {
>>> +        Map result = new HashMap();
>>> +        while (enumeration.hasMoreElements()) {
>>> +            NameClassPair nameClassPair = (NameClassPair)  
>>> enumeration.nextElement();
>>> +            String name = nameClassPair.getName();
>>> +            assertFalse(result.containsKey(name));
>>> +            result.put(name, nameClassPair.getClassName());
>>> +        }
>>> +        return result;
>>> +    }
>>> +
>>> +    private static Map toListBindingResults(NamingEnumeration  
>>> enumeration) {
>>> +        Map result = new HashMap();
>>> +        while (enumeration.hasMoreElements()) {
>>> +            Binding binding = (Binding) enumeration.nextElement();
>>> +            String name = binding.getName();
>>> +            assertFalse(result.containsKey(name));
>>> +            result.put(name, binding.getObject());
>>> +        }
>>> +        return result;
>>> +    }
>>> +}
>>>
>>> Added: geronimo/sandbox/plugins/global-jndi/src/test/org/apache/ 
>>> geronimo/gjndi/JavaCompContextTest.java
>>> URL: http://svn.apache.org/viewvc/geronimo/sandbox/plugins/global- 
>>> jndi/src/test/org/apache/geronimo/gjndi/JavaCompContextTest.java? 
>>> rev=432101&view=auto
>>> ==================================================================== 
>>> ==========
>>> --- geronimo/sandbox/plugins/global-jndi/src/test/org/apache/ 
>>> geronimo/gjndi/JavaCompContextTest.java (added)
>>> +++ geronimo/sandbox/plugins/global-jndi/src/test/org/apache/ 
>>> geronimo/gjndi/JavaCompContextTest.java Wed Aug 16 18:32:59 2006
>>> @@ -0,0 +1,206 @@
>>> +/**
>>> + *
>>> + * Copyright 2006 The Apache Software Foundation
>>> + *
>>> + *  Licensed 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.gjndi;
>>> +
>>> +import junit.framework.TestCase;
>>> +
>>> +import javax.naming.NamingException;
>>> +import javax.naming.CompositeName;
>>> +import javax.naming.CompoundName;
>>> +import javax.naming.Context;
>>> +import javax.naming.NamingEnumeration;
>>> +import javax.naming.NameClassPair;
>>> +import javax.naming.Binding;
>>> +import javax.naming.LinkRef;
>>> +import javax.naming.InitialContext;
>>> +import java.util.Map;
>>> +import java.util.HashMap;
>>> +import java.util.Iterator;
>>> +import java.util.NoSuchElementException;
>>> +import java.util.Properties;
>>> +import java.util.Collections;
>>> +
>>> +import org.apache.geronimo.naming.java.RootContext;
>>> +import org.apache.xbean.naming.context.UnmodifiableContext;
>>> +import org.apache.xbean.naming.context.ImmutableContext;
>>> +import org.apache.xbean.naming.global.GlobalContextManager;
>>> +
>>> +/**
>>> + * @version $Rev$ $Date$
>>> + */
>>> +public class JavaCompContextTest extends TestCase {
>>> +    protected UnmodifiableContext readOnlyContext;
>>> +    protected Properties syntax;
>>> +    protected Map envBinding;
>>> +    protected Context initialContext;
>>> +    protected Context compContext;
>>> +    protected Context envContext;
>>> +
>>> +    public void testInitialContext() throws NamingException {
>>> +        assertEquals("Hello", initialContext.lookup("java:comp/ 
>>> env/hello"));
>>> +        assertEquals("Hello", initialContext.lookup(new  
>>> CompositeName("java:comp/env/hello")));
>>> +    }
>>> +
>>> +    public void testLookup() throws NamingException {
>>> +        assertEquals("Hello", envContext.lookup("hello"));
>>> +        assertEquals("Hello", compContext.lookup("env/hello"));
>>> +        try {
>>> +            envContext.lookup("foo");
>>> +            fail();
>>> +        } catch (NamingException e) {
>>> +            // OK
>>> +        }
>>> +        assertEquals("Hello", envContext.lookup(new CompositeName 
>>> ("hello")));
>>> +        assertEquals("Hello", compContext.lookup(new  
>>> CompositeName("env/hello")));
>>> +        assertEquals("Hello", envContext.lookup(new CompoundName 
>>> ("hello", syntax)));
>>> +        assertEquals("Hello", compContext.lookup(new CompoundName 
>>> ("env/hello", syntax)));
>>> +
>>> +        assertEquals(envContext, envContext.lookup(""));
>>> +    }
>>> +
>>> +    public void testSubContext() throws NamingException {
>>> +        assertEquals("long name", initialContext.lookup 
>>> ("java:comp/env/here/there/anywhere"));
>>> +        Context intermediate = (Context)initialContext.lookup 
>>> ("java:comp/env/here/there");
>>> +        assertNotNull(intermediate);
>>> +        assertEquals("long name", intermediate.lookup("anywhere"));
>>> +    }
>>> +
>>> +    public void testSchemeLookup() throws NamingException {
>>> +//        envContext.lookup("dns:apache.org");
>>> +        assertEquals("Hello", envContext.lookup("java:comp/env/ 
>>> hello"));
>>> +        assertEquals("Hello", compContext.lookup("java:comp/env/ 
>>> hello"));
>>> +    }
>>> +
>>> +    public void testLookupLink() throws NamingException {
>>> +        assertEquals("Hello", envContext.lookup("link"));
>>> +    }
>>> +
>>> +    public void testComposeName() throws NamingException {
>>> +        assertEquals("org/research/user/jane",  
>>> envContext.composeName("user/jane", "org/research"));
>>> +        assertEquals("research/user/jane", envContext.composeName 
>>> ("user/jane", "research"));
>>> +        assertEquals(new CompositeName("org/research/user/ 
>>> jane"), envContext.composeName(new CompositeName("user/jane"),  
>>> new CompositeName("org/research")));
>>> +        assertEquals(new CompositeName("research/user/jane"),  
>>> envContext.composeName(new CompositeName("user/jane"), new  
>>> CompositeName("research")));
>>> +    }
>>> +
>>> +    public void testList() throws NamingException {
>>> +        NamingEnumeration ne;
>>> +        Map expected;
>>> +        Map result;
>>> +
>>> +        expected = new HashMap();
>>> +        for (Iterator i = envBinding.entrySet().iterator();  
>>> i.hasNext();) {
>>> +            Map.Entry entry = (Map.Entry) i.next();
>>> +            expected.put(entry.getKey(), entry.getValue 
>>> ().getClass().getName());
>>> +        }
>>> +        ne = envContext.list("");
>>> +        result = new HashMap();
>>> +        while (ne.hasMore()) {
>>> +            NameClassPair pair = (NameClassPair) ne.next();
>>> +            result.put(pair.getName(), pair.getClassName());
>>> +        }
>>> +        assertEquals(expected, result);
>>> +
>>> +        try {
>>> +            ne.next();
>>> +            fail();
>>> +        } catch (NoSuchElementException e) {
>>> +            // ok
>>> +        }
>>> +        try {
>>> +            ne.nextElement();
>>> +            fail();
>>> +        } catch (NoSuchElementException e) {
>>> +            // ok
>>> +        }
>>> +    }
>>> +
>>> +    public void testListBindings() throws NamingException {
>>> +        NamingEnumeration ne;
>>> +        ne = envContext.listBindings("");
>>> +        int count = 0;
>>> +        while (ne.hasMore()) {
>>> +            count ++;
>>> +            Binding pair = (Binding) ne.next();
>>> +            assertTrue(envBinding.containsKey(pair.getName()));
>>> +            if (! (envBinding.get(pair.getName()) instanceof  
>>> Context)) {
>>> +                assertEquals(pair.getObject(), envBinding.get 
>>> (pair.getName()));
>>> +            }
>>> +        }
>>> +        assertEquals(envBinding.size(), count);
>>> +
>>> +        try {
>>> +            ne.next();
>>> +            fail();
>>> +        } catch (NoSuchElementException e) {
>>> +            // ok
>>> +        }
>>> +        try {
>>> +            ne.nextElement();
>>> +            fail();
>>> +        } catch (NoSuchElementException e) {
>>> +            // ok
>>> +        }
>>> +    }
>>> +
>>> +    public void testSpeed() throws NamingException {
>>> +        Context comp = (Context) initialContext.lookup 
>>> ("java:comp");
>>> +
>>> +        long start = System.currentTimeMillis();
>>> +        for (int i=0; i < 1000000; i++) {
>>> +            // initialContext.lookup("java:comp/hello"); // this  
>>> is sloooow due to scheme resolution
>>> +            // envContext.lookup("hello");
>>> +            comp.lookup("env/hello");
>>> +        }
>>> +
>>> +        long end = System.currentTimeMillis();
>>> +        System.out.println("lookup(String) milliseconds: " +  
>>> (end - start));
>>> +    }
>>> +
>>> +    protected void setUp() throws Exception {
>>> +        super.setUp();
>>> +        System.setProperty("java.naming.factory.initial",  
>>> GlobalContextManager.class.getName());
>>> +        System.setProperty("java.naming.factory.url.pkgs",  
>>> "org.apache.geronimo.knaming");
>>> +
>>> +        LinkRef link = new LinkRef("java:comp/env/hello");
>>> +
>>> +        Map bindings = new HashMap();
>>> +        bindings.put("env/hello", "Hello");
>>> +        bindings.put("env/world", "Hello World");
>>> +        bindings.put("env/here/there/anywhere", "long name");
>>> +        bindings.put("env/link", link);
>>> +
>>> +        readOnlyContext = new UnmodifiableContext(bindings);
>>> +
>>> +        envBinding = new HashMap();
>>> +        envBinding.put("hello", "Hello");
>>> +        envBinding.put("world", "Hello World");
>>> +        envBinding.put("here", readOnlyContext.lookup("env/here"));
>>> +        envBinding.put("link", link);
>>> +
>>> +        RootContext.setComponentContext(readOnlyContext);
>>> +
>>> +        Context javaCompContext = new JavaCompContextGBean();
>>> +        Context globalContext = new ImmutableContext 
>>> (Collections.singletonMap(javaCompContext.getNameInNamespace(),  
>>> javaCompContext));
>>> +        GlobalContextManager.setGlobalContext(globalContext);
>>> +
>>> +        initialContext = new InitialContext();
>>> +        compContext = (Context) initialContext.lookup("java:comp");
>>> +        envContext = (Context) initialContext.lookup("java:comp/ 
>>> env");
>>> +
>>> +        syntax = new Properties();
>>> +    }
>>> +}
>>>
>>> Added: geronimo/sandbox/plugins/global-jndi/src/test/org/apache/ 
>>> geronimo/gjndi/KernelContextGBeanTest.java
>>> URL: http://svn.apache.org/viewvc/geronimo/sandbox/plugins/global- 
>>> jndi/src/test/org/apache/geronimo/gjndi/ 
>>> KernelContextGBeanTest.java?rev=432101&view=auto
>>> ==================================================================== 
>>> ==========
>>> --- geronimo/sandbox/plugins/global-jndi/src/test/org/apache/ 
>>> geronimo/gjndi/KernelContextGBeanTest.java (added)
>>> +++ geronimo/sandbox/plugins/global-jndi/src/test/org/apache/ 
>>> geronimo/gjndi/KernelContextGBeanTest.java Wed Aug 16 18:32:59 2006
>>> @@ -0,0 +1,171 @@
>>> +/**
>>> + *
>>> + * Copyright 2006 The Apache Software Foundation
>>> + *
>>> + *  Licensed 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.gjndi;
>>> +
>>> +import org.apache.geronimo.gbean.GBeanData;
>>> +import org.apache.geronimo.gbean.GBeanInfo;
>>> +import org.apache.geronimo.gbean.GBeanInfoBuilder;
>>> +import org.apache.geronimo.gbean.AbstractName;
>>> +import org.apache.geronimo.kernel.Kernel;
>>> +import org.apache.geronimo.kernel.KernelFactory;
>>> +import org.apache.geronimo.kernel.config.ConfigurationData;
>>> +import org.apache.geronimo.kernel.config.ConfigurationUtil;
>>> +import  
>>> org.apache.geronimo.kernel.config.EditableConfigurationManager;
>>> +import  
>>> org.apache.geronimo.kernel.config.EditableKernelConfigurationManager 
>>> ;
>>> +import org.apache.geronimo.kernel.repository.Artifact;
>>> +import  
>>> org.apache.geronimo.kernel.repository.DefaultArtifactManager;
>>> +import  
>>> org.apache.geronimo.kernel.repository.DefaultArtifactResolver;
>>> +import org.apache.geronimo.naming.java.RootContext;
>>> +import org.apache.xbean.naming.context.ImmutableContext;
>>> +import org.apache.xbean.naming.global.GlobalContextManager;
>>> +
>>> +import javax.naming.Context;
>>> +import javax.naming.InitialContext;
>>> +import java.util.HashMap;
>>> +import java.util.Hashtable;
>>> +import java.util.Map;
>>> +import java.util.Iterator;
>>> +import java.util.Collections;
>>> +
>>> +/**
>>> + * @version $Rev$ $Date$
>>> + */
>>> +public class KernelContextGBeanTest extends AbstractContextTest {
>>> +    private Kernel kernel;
>>> +    private EditableConfigurationManager configurationManager;
>>> +    private ConfigurationData configurationData;
>>> +    private GBeanInfo immutableContextGBeanInfo;
>>> +    private Hashtable contextEnv;
>>> +
>>> +    public void test() throws Exception {
>>> +        Map globalBindings = new HashMap();
>>> +        globalBindings.put("java:comp/string", "foo");
>>> +        globalBindings.put("java:comp/nested/context/string",  
>>> "bar");
>>> +        globalBindings.put("java:comp/a/b/c/d/e/string", "beer");
>>> +        globalBindings.put("java:comp/a/b/c/d/e/one", new Integer 
>>> (1));
>>> +        globalBindings.put("java:comp/a/b/c/d/e/two", new Integer 
>>> (2));
>>> +        globalBindings.put("java:comp/a/b/c/d/e/three", new  
>>> Integer(3));
>>> +        globalBindings.put("test/env/foo", new Integer(42));
>>> +        globalBindings.put("test/baz", "caz");
>>> +
>>> +        Map javaCompBindings = getNestedBindings(globalBindings,  
>>> "java:comp/");
>>> +        ImmutableContext javaCompContext = new ImmutableContext 
>>> (javaCompBindings);
>>> +        RootContext.setComponentContext(javaCompContext);
>>> +
>>> +        GBeanData javaComp = configurationData.addGBean 
>>> ("JavaComp", JavaCompContextGBean.GBEAN_INFO);
>>> +        AbstractName javaCompName = javaComp.getAbstractName();
>>> +
>>> +        GBeanData test = configurationData.addGBean("Test",  
>>> immutableContextGBeanInfo);
>>> +        AbstractName testName = test.getAbstractName();
>>> +        test.setAttribute("nameInNamespace", "test");
>>> +        Map testBindings = getNestedBindings(globalBindings,  
>>> "test/");
>>> +        test.setAttribute("bindings", testBindings);
>>> +
>>> +        configurationManager.loadConfiguration(configurationData);
>>> +        configurationManager.startConfiguration 
>>> (configurationData.getId());
>>> +
>>> +        InitialContext ctx = new InitialContext(contextEnv);
>>> +        assertEq(globalBindings, ctx);
>>> +
>>> +        //
>>> +        // stop test context
>>> +        //
>>> +        kernel.stopGBean(testName);
>>> +
>>> +        HashMap javaCompOnlyBindings = new HashMap(globalBindings);
>>> +        javaCompOnlyBindings.remove("test/env/foo");
>>> +        javaCompOnlyBindings.remove("test/baz");
>>> +        assertEq(javaCompOnlyBindings, ctx);
>>> +
>>> +        //
>>> +        // stop java context
>>> +        //
>>> +        kernel.stopGBean(javaCompName);
>>> +
>>> +        assertEq(Collections.EMPTY_MAP, ctx);
>>> +
>>> +
>>> +        //
>>> +        // restart java context
>>> +        //
>>> +        kernel.startGBean(javaCompName);
>>> +
>>> +        assertEq(javaCompOnlyBindings, ctx);
>>> +
>>> +        //
>>> +        // restart test context
>>> +        //
>>> +        kernel.startGBean(testName);
>>> +
>>> +        assertEq(globalBindings, ctx);
>>> +    }
>>> +
>>> +    protected Map getNestedBindings(Map globalBindings, String  
>>> nestedPath) {
>>> +        HashMap nestedBindings = new HashMap();
>>> +        for (Iterator iterator = globalBindings.entrySet 
>>> ().iterator(); iterator.hasNext();) {
>>> +            Map.Entry entry = (Map.Entry) iterator.next();
>>> +            String globalName = (String) entry.getKey();
>>> +            Object value = entry.getValue();
>>> +
>>> +            if (globalName.startsWith(nestedPath)) {
>>> +                String nestedName = globalName.substring 
>>> (nestedPath.length());
>>> +                nestedBindings.put(nestedName, value);
>>> +            }
>>> +        }
>>> +        return nestedBindings;
>>> +    }
>>> +
>>> +    protected void setUp() throws Exception {
>>> +        super.setUp();
>>> +
>>> +        kernel = KernelFactory.newInstance().createKernel("test");
>>> +        kernel.boot();
>>> +
>>> +        ConfigurationData bootstrap = new ConfigurationData(new  
>>> Artifact("bootstrap", "bootstrap", "", "car"), kernel.getNaming());
>>> +
>>> +        GBeanData artifactManagerData = bootstrap.addGBean 
>>> ("ArtifactManager", DefaultArtifactManager.GBEAN_INFO);
>>> +
>>> +        GBeanData artifactResolverData = bootstrap.addGBean 
>>> ("ArtifactResolver", DefaultArtifactResolver.GBEAN_INFO);
>>> +        artifactResolverData.setReferencePattern 
>>> ("ArtifactManager", artifactManagerData.getAbstractName());
>>> +
>>> +        GBeanData configurationManagerData = bootstrap.addGBean 
>>> ("ConfigurationManager",  
>>> EditableKernelConfigurationManager.GBEAN_INFO);
>>> +        configurationManagerData.setReferencePattern 
>>> ("ArtifactManager", artifactManagerData.getAbstractName());
>>> +        configurationManagerData.setReferencePattern 
>>> ("ArtifactResolver", artifactResolverData.getAbstractName());
>>> +
>>> +        ConfigurationUtil.loadBootstrapConfiguration(kernel,  
>>> bootstrap, getClass().getClassLoader());
>>> +
>>> +        configurationManager =  
>>> ConfigurationUtil.getEditableConfigurationManager(kernel);
>>> +
>>> +        configurationData = new ConfigurationData(new Artifact 
>>> ("test", "test", "", "car"), kernel.getNaming());
>>> +        configurationData.addGBean("GlobalContext",  
>>> GlobalContextGBean.GBEAN_INFO);
>>> +
>>> +        GBeanInfoBuilder builder = new GBeanInfoBuilder 
>>> (ImmutableContext.class);
>>> +        builder.setConstructor(new String[] {"nameInNamespace",  
>>> "bindings", "cacheReferences"});
>>> +        builder.addAttribute("nameInNamespace", String.class,  
>>> true);
>>> +        builder.addAttribute("bindings", Map.class, true);
>>> +        builder.addAttribute("cacheReferences", boolean.class,  
>>> true);
>>> +        immutableContextGBeanInfo = builder.getBeanInfo();
>>> +
>>> +        contextEnv = new Hashtable();
>>> +        contextEnv.put(Context.INITIAL_CONTEXT_FACTORY,  
>>> GlobalContextManager.class.getName());
>>> +    }
>>> +
>>> +    protected void tearDown() throws Exception {
>>> +        kernel.shutdown();
>>> +        super.tearDown();
>>> +    }
>>> +}
>>>
>>>
>


Re: svn commit: r432101 - in /geronimo/sandbox/plugins/global-jndi: ./ src/ src/java/ src/java/org/ src/java/org/apache/ src/java/org/apache/geronimo/ src/java/org/apache/geronimo/gjndi/ src/java/org/apache/geronimo/gjndi/java/ src/site/ src/site/apt/ src/...

Posted by Dain Sundstrom <da...@iq80.com>.
I'm using the modules pom as a parent, so as soon as you change that  
(or give me another correct pom), I'll move this to the correct layout.

-dain

On Aug 16, 2006, at 7:28 PM, Jason Dillon wrote:

> Hey if you are gonna add new modules, can you please use the m2  
> standard layout?
>
> --jason
>
>
> On Aug 16, 2006, at 6:33 PM, dain@apache.org wrote:
>
>> Author: dain
>> Date: Wed Aug 16 18:32:59 2006
>> New Revision: 432101
>>
>> URL: http://svn.apache.org/viewvc?rev=432101&view=rev
>> Log:
>> Starting of a global jndi plugin
>>
>> Added:
>>     geronimo/sandbox/plugins/global-jndi/
>>     geronimo/sandbox/plugins/global-jndi/LICENSE.txt
>>     geronimo/sandbox/plugins/global-jndi/NOTICE.txt
>>     geronimo/sandbox/plugins/global-jndi/pom.xml
>>     geronimo/sandbox/plugins/global-jndi/src/
>>     geronimo/sandbox/plugins/global-jndi/src/java/
>>     geronimo/sandbox/plugins/global-jndi/src/java/org/
>>     geronimo/sandbox/plugins/global-jndi/src/java/org/apache/
>>     geronimo/sandbox/plugins/global-jndi/src/java/org/apache/ 
>> geronimo/
>>     geronimo/sandbox/plugins/global-jndi/src/java/org/apache/ 
>> geronimo/gjndi/
>>     geronimo/sandbox/plugins/global-jndi/src/java/org/apache/ 
>> geronimo/gjndi/GlobalContextBootstrap.java
>>     geronimo/sandbox/plugins/global-jndi/src/java/org/apache/ 
>> geronimo/gjndi/GlobalContextGBean.java
>>     geronimo/sandbox/plugins/global-jndi/src/java/org/apache/ 
>> geronimo/gjndi/JavaCompContextGBean.java
>>     geronimo/sandbox/plugins/global-jndi/src/java/org/apache/ 
>> geronimo/gjndi/KernelContextGBean.java
>>     geronimo/sandbox/plugins/global-jndi/src/java/org/apache/ 
>> geronimo/gjndi/java/
>>     geronimo/sandbox/plugins/global-jndi/src/java/org/apache/ 
>> geronimo/gjndi/java/javaURLContextFactory.java
>>     geronimo/sandbox/plugins/global-jndi/src/site/
>>     geronimo/sandbox/plugins/global-jndi/src/site/apt/
>>     geronimo/sandbox/plugins/global-jndi/src/site/site.xml
>>     geronimo/sandbox/plugins/global-jndi/src/test/
>>     geronimo/sandbox/plugins/global-jndi/src/test-data/
>>     geronimo/sandbox/plugins/global-jndi/src/test/org/
>>     geronimo/sandbox/plugins/global-jndi/src/test/org/apache/
>>     geronimo/sandbox/plugins/global-jndi/src/test/org/apache/ 
>> geronimo/
>>     geronimo/sandbox/plugins/global-jndi/src/test/org/apache/ 
>> geronimo/gjndi/
>>     geronimo/sandbox/plugins/global-jndi/src/test/org/apache/ 
>> geronimo/gjndi/AbstractContextTest.java
>>     geronimo/sandbox/plugins/global-jndi/src/test/org/apache/ 
>> geronimo/gjndi/JavaCompContextTest.java
>>     geronimo/sandbox/plugins/global-jndi/src/test/org/apache/ 
>> geronimo/gjndi/KernelContextGBeanTest.java
>>
>> Added: geronimo/sandbox/plugins/global-jndi/LICENSE.txt
>> URL: http://svn.apache.org/viewvc/geronimo/sandbox/plugins/global- 
>> jndi/LICENSE.txt?rev=432101&view=auto
>> ===================================================================== 
>> =========
>> --- geronimo/sandbox/plugins/global-jndi/LICENSE.txt (added)
>> +++ geronimo/sandbox/plugins/global-jndi/LICENSE.txt Wed Aug 16  
>> 18:32:59 2006
>> @@ -0,0 +1,203 @@
>> +
>> +                                 Apache License
>> +                           Version 2.0, January 2004
>> +                        http://www.apache.org/licenses/
>> +
>> +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
>> +
>> +   1. Definitions.
>> +
>> +      "License" shall mean the terms and conditions for use,  
>> reproduction,
>> +      and distribution as defined by Sections 1 through 9 of this  
>> document.
>> +
>> +      "Licensor" shall mean the copyright owner or entity  
>> authorized by
>> +      the copyright owner that is granting the License.
>> +
>> +      "Legal Entity" shall mean the union of the acting entity  
>> and all
>> +      other entities that control, are controlled by, or are  
>> under common
>> +      control with that entity. For the purposes of this definition,
>> +      "control" means (i) the power, direct or indirect, to cause  
>> the
>> +      direction or management of such entity, whether by contract or
>> +      otherwise, or (ii) ownership of fifty percent (50%) or more  
>> of the
>> +      outstanding shares, or (iii) beneficial ownership of such  
>> entity.
>> +
>> +      "You" (or "Your") shall mean an individual or Legal Entity
>> +      exercising permissions granted by this License.
>> +
>> +      "Source" form shall mean the preferred form for making  
>> modifications,
>> +      including but not limited to software source code,  
>> documentation
>> +      source, and configuration files.
>> +
>> +      "Object" form shall mean any form resulting from mechanical
>> +      transformation or translation of a Source form, including but
>> +      not limited to compiled object code, generated documentation,
>> +      and conversions to other media types.
>> +
>> +      "Work" shall mean the work of authorship, whether in Source or
>> +      Object form, made available under the License, as indicated  
>> by a
>> +      copyright notice that is included in or attached to the work
>> +      (an example is provided in the Appendix below).
>> +
>> +      "Derivative Works" shall mean any work, whether in Source  
>> or Object
>> +      form, that is based on (or derived from) the Work and for  
>> which the
>> +      editorial revisions, annotations, elaborations, or other  
>> modifications
>> +      represent, as a whole, an original work of authorship. For  
>> the purposes
>> +      of this License, Derivative Works shall not include works  
>> that remain
>> +      separable from, or merely link (or bind by name) to the  
>> interfaces of,
>> +      the Work and Derivative Works thereof.
>> +
>> +      "Contribution" shall mean any work of authorship, including
>> +      the original version of the Work and any modifications or  
>> additions
>> +      to that Work or Derivative Works thereof, that is  
>> intentionally
>> +      submitted to Licensor for inclusion in the Work by the  
>> copyright owner
>> +      or by an individual or Legal Entity authorized to submit on  
>> behalf of
>> +      the copyright owner. For the purposes of this definition,  
>> "submitted"
>> +      means any form of electronic, verbal, or written  
>> communication sent
>> +      to the Licensor or its representatives, including but not  
>> limited to
>> +      communication on electronic mailing lists, source code  
>> control systems,
>> +      and issue tracking systems that are managed by, or on  
>> behalf of, the
>> +      Licensor for the purpose of discussing and improving the  
>> Work, but
>> +      excluding communication that is conspicuously marked or  
>> otherwise
>> +      designated in writing by the copyright owner as "Not a  
>> Contribution."
>> +
>> +      "Contributor" shall mean Licensor and any individual or  
>> Legal Entity
>> +      on behalf of whom a Contribution has been received by  
>> Licensor and
>> +      subsequently incorporated within the Work.
>> +
>> +   2. Grant of Copyright License. Subject to the terms and  
>> conditions of
>> +      this License, each Contributor hereby grants to You a  
>> perpetual,
>> +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
>> +      copyright license to reproduce, prepare Derivative Works of,
>> +      publicly display, publicly perform, sublicense, and  
>> distribute the
>> +      Work and such Derivative Works in Source or Object form.
>> +
>> +   3. Grant of Patent License. Subject to the terms and  
>> conditions of
>> +      this License, each Contributor hereby grants to You a  
>> perpetual,
>> +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
>> +      (except as stated in this section) patent license to make,  
>> have made,
>> +      use, offer to sell, sell, import, and otherwise transfer  
>> the Work,
>> +      where such license applies only to those patent claims  
>> licensable
>> +      by such Contributor that are necessarily infringed by their
>> +      Contribution(s) alone or by combination of their  
>> Contribution(s)
>> +      with the Work to which such Contribution(s) was submitted.  
>> If You
>> +      institute patent litigation against any entity (including a
>> +      cross-claim or counterclaim in a lawsuit) alleging that the  
>> Work
>> +      or a Contribution incorporated within the Work constitutes  
>> direct
>> +      or contributory patent infringement, then any patent licenses
>> +      granted to You under this License for that Work shall  
>> terminate
>> +      as of the date such litigation is filed.
>> +
>> +   4. Redistribution. You may reproduce and distribute copies of the
>> +      Work or Derivative Works thereof in any medium, with or  
>> without
>> +      modifications, and in Source or Object form, provided that You
>> +      meet the following conditions:
>> +
>> +      (a) You must give any other recipients of the Work or
>> +          Derivative Works a copy of this License; and
>> +
>> +      (b) You must cause any modified files to carry prominent  
>> notices
>> +          stating that You changed the files; and
>> +
>> +      (c) You must retain, in the Source form of any Derivative  
>> Works
>> +          that You distribute, all copyright, patent, trademark, and
>> +          attribution notices from the Source form of the Work,
>> +          excluding those notices that do not pertain to any part of
>> +          the Derivative Works; and
>> +
>> +      (d) If the Work includes a "NOTICE" text file as part of its
>> +          distribution, then any Derivative Works that You  
>> distribute must
>> +          include a readable copy of the attribution notices  
>> contained
>> +          within such NOTICE file, excluding those notices that  
>> do not
>> +          pertain to any part of the Derivative Works, in at  
>> least one
>> +          of the following places: within a NOTICE text file  
>> distributed
>> +          as part of the Derivative Works; within the Source form or
>> +          documentation, if provided along with the Derivative  
>> Works; or,
>> +          within a display generated by the Derivative Works, if and
>> +          wherever such third-party notices normally appear. The  
>> contents
>> +          of the NOTICE file are for informational purposes only and
>> +          do not modify the License. You may add Your own  
>> attribution
>> +          notices within Derivative Works that You distribute,  
>> alongside
>> +          or as an addendum to the NOTICE text from the Work,  
>> provided
>> +          that such additional attribution notices cannot be  
>> construed
>> +          as modifying the License.
>> +
>> +      You may add Your own copyright statement to Your  
>> modifications and
>> +      may provide additional or different license terms and  
>> conditions
>> +      for use, reproduction, or distribution of Your  
>> modifications, or
>> +      for any such Derivative Works as a whole, provided Your use,
>> +      reproduction, and distribution of the Work otherwise  
>> complies with
>> +      the conditions stated in this License.
>> +
>> +   5. Submission of Contributions. Unless You explicitly state  
>> otherwise,
>> +      any Contribution intentionally submitted for inclusion in  
>> the Work
>> +      by You to the Licensor shall be under the terms and  
>> conditions of
>> +      this License, without any additional terms or conditions.
>> +      Notwithstanding the above, nothing herein shall supersede  
>> or modify
>> +      the terms of any separate license agreement you may have  
>> executed
>> +      with Licensor regarding such Contributions.
>> +
>> +   6. Trademarks. This License does not grant permission to use  
>> the trade
>> +      names, trademarks, service marks, or product names of the  
>> Licensor,
>> +      except as required for reasonable and customary use in  
>> describing the
>> +      origin of the Work and reproducing the content of the  
>> NOTICE file.
>> +
>> +   7. Disclaimer of Warranty. Unless required by applicable law or
>> +      agreed to in writing, Licensor provides the Work (and each
>> +      Contributor provides its Contributions) on an "AS IS" BASIS,
>> +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either  
>> express or
>> +      implied, including, without limitation, any warranties or  
>> conditions
>> +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
>> +      PARTICULAR PURPOSE. You are solely responsible for  
>> determining the
>> +      appropriateness of using or redistributing the Work and  
>> assume any
>> +      risks associated with Your exercise of permissions under  
>> this License.
>> +
>> +   8. Limitation of Liability. In no event and under no legal  
>> theory,
>> +      whether in tort (including negligence), contract, or  
>> otherwise,
>> +      unless required by applicable law (such as deliberate and  
>> grossly
>> +      negligent acts) or agreed to in writing, shall any  
>> Contributor be
>> +      liable to You for damages, including any direct, indirect,  
>> special,
>> +      incidental, or consequential damages of any character  
>> arising as a
>> +      result of this License or out of the use or inability to  
>> use the
>> +      Work (including but not limited to damages for loss of  
>> goodwill,
>> +      work stoppage, computer failure or malfunction, or any and all
>> +      other commercial damages or losses), even if such Contributor
>> +      has been advised of the possibility of such damages.
>> +
>> +   9. Accepting Warranty or Additional Liability. While  
>> redistributing
>> +      the Work or Derivative Works thereof, You may choose to offer,
>> +      and charge a fee for, acceptance of support, warranty,  
>> indemnity,
>> +      or other liability obligations and/or rights consistent  
>> with this
>> +      License. However, in accepting such obligations, You may  
>> act only
>> +      on Your own behalf and on Your sole responsibility, not on  
>> behalf
>> +      of any other Contributor, and only if You agree to indemnify,
>> +      defend, and hold each Contributor harmless for any liability
>> +      incurred by, or claims asserted against, such Contributor  
>> by reason
>> +      of your accepting any such warranty or additional liability.
>> +
>> +   END OF TERMS AND CONDITIONS
>> +
>> +   APPENDIX: How to apply the Apache License to your work.
>> +
>> +      To apply the Apache License to your work, attach the following
>> +      boilerplate notice, with the fields enclosed by brackets "[]"
>> +      replaced with your own identifying information. (Don't include
>> +      the brackets!)  The text should be enclosed in the appropriate
>> +      comment syntax for the file format. We also recommend that a
>> +      file or class name and description of purpose be included  
>> on the
>> +      same "printed page" as the copyright notice for easier
>> +      identification within third-party archives.
>> +
>> +   Copyright [yyyy] [name of copyright owner]
>> +
>> +   Licensed 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.
>> +
>>
>> Added: geronimo/sandbox/plugins/global-jndi/NOTICE.txt
>> URL: http://svn.apache.org/viewvc/geronimo/sandbox/plugins/global- 
>> jndi/NOTICE.txt?rev=432101&view=auto
>> ===================================================================== 
>> =========
>> --- geronimo/sandbox/plugins/global-jndi/NOTICE.txt (added)
>> +++ geronimo/sandbox/plugins/global-jndi/NOTICE.txt Wed Aug 16  
>> 18:32:59 2006
>> @@ -0,0 +1,3 @@
>> +This product includes software developed by
>> +The Apache Software Foundation (http://www.apache.org/).
>> +
>>
>> Added: geronimo/sandbox/plugins/global-jndi/pom.xml
>> URL: http://svn.apache.org/viewvc/geronimo/sandbox/plugins/global- 
>> jndi/pom.xml?rev=432101&view=auto
>> ===================================================================== 
>> =========
>> --- geronimo/sandbox/plugins/global-jndi/pom.xml (added)
>> +++ geronimo/sandbox/plugins/global-jndi/pom.xml Wed Aug 16  
>> 18:32:59 2006
>> @@ -0,0 +1,52 @@
>> +<?xml version="1.0" encoding="ISO-8859-1"?>
>> +<!--
>> +    Copyright 2006 The Apache Software Foundation
>> +
>> +    Licensed 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.
>> +-->
>> +
>> +<!-- $Rev: 429882 $ $Date: 2006-08-08 16:33:09 -0700 (Tue, 08 Aug  
>> 2006) $ -->
>> +
>> +<project xmlns="http://maven.apache.org/POM/4.0.0"  
>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
>> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http:// 
>> maven.apache.org/maven-v4_0_0.xsd">
>> +
>> +    <modelVersion>4.0.0</modelVersion>
>> +
>> +    <parent>
>> +        <groupId>org.apache.geronimo.modules</groupId>
>> +        <artifactId>modules</artifactId>
>> +        <version>1.2-SNAPSHOT</version>
>> +        <relativePath>../pom.xml</relativePath>
>> +    </parent>
>> +
>> +    <groupId>org.apache.geronimo.sandbox</groupId>
>> +    <artifactId>geronimo-global-jndi</artifactId>
>> +    <name>Geronimo :: Global JNDI</name>
>> +
>> +    <dependencies>
>> +        <dependency>
>> +            <groupId>org.apache.xbean</groupId>
>> +            <artifactId>xbean-naming</artifactId>
>> +            <version>COL-SNAPSHOT</version>
>> +        </dependency>
>> +        <dependency>
>> +            <groupId>org.apache.geronimo.modules</groupId>
>> +            <artifactId>geronimo-naming</artifactId>
>> +            <version>${pom.version}</version>
>> +        </dependency>
>> +        <dependency>
>> +            <groupId>backport-util-concurrent</groupId>
>> +            <artifactId>backport-util-concurrent</artifactId>
>> +        </dependency>
>> +    </dependencies>
>> +</project>
>> +
>>
>> Added: geronimo/sandbox/plugins/global-jndi/src/java/org/apache/ 
>> geronimo/gjndi/GlobalContextBootstrap.java
>> URL: http://svn.apache.org/viewvc/geronimo/sandbox/plugins/global- 
>> jndi/src/java/org/apache/geronimo/gjndi/ 
>> GlobalContextBootstrap.java?rev=432101&view=auto
>> ===================================================================== 
>> =========
>> --- geronimo/sandbox/plugins/global-jndi/src/java/org/apache/ 
>> geronimo/gjndi/GlobalContextBootstrap.java (added)
>> +++ geronimo/sandbox/plugins/global-jndi/src/java/org/apache/ 
>> geronimo/gjndi/GlobalContextBootstrap.java Wed Aug 16 18:32:59 2006
>> @@ -0,0 +1,61 @@
>> +/**
>> + *
>> + * Copyright 2006 The Apache Software Foundation
>> + *
>> + *  Licensed 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.gjndi;
>> +
>> +import org.apache.commons.logging.Log;
>> +import org.apache.commons.logging.LogFactory;
>> +import org.apache.geronimo.gbean.AbstractName;
>> +import org.apache.geronimo.gbean.GBeanData;
>> +import org.apache.geronimo.kernel.Kernel;
>> +import org.apache.geronimo.kernel.KernelRegistry;
>> +import org.apache.xbean.naming.global.GlobalContextManager;
>> +
>> +import java.net.URI;
>> +
>> +/**
>> + * URLContextFactory for the java: namespace.
>> + *
>> + * @version $Rev: 355877 $ $Date: 2005-12-10 18:48:27 -0800 (Sat,  
>> 10 Dec 2005) $
>> + */
>> +public class GlobalContextBootstrap extends GlobalContextManager {
>> +    private static final Log log = LogFactory.getLog 
>> (GlobalContextBootstrap.class);
>> +
>> +    private static boolean initalized;
>> +
>> +    public GlobalContextBootstrap() {
>> +        synchronized (GlobalContextBootstrap.class) {
>> +            if (!GlobalContextBootstrap.initalized) {
>> +                ClassLoader classLoader = getClass 
>> ().getClassLoader();
>> +
>> +                Kernel kernel = KernelRegistry.getSingleKernel();
>> +
>> +                try {
>> +                    AbstractName globalContextName = new  
>> AbstractName(new URI("bootstrap/global-jndi/0/boot? 
>> name=GlobalContext"));
>> +                    kernel.loadGBean(new GBeanData 
>> (globalContextName, GlobalContextGBean.GBEAN_INFO), classLoader);
>> +                    kernel.startGBean(globalContextName);
>> +
>> +                    AbstractName javaCompName = new AbstractName 
>> (new URI("bootstrap/global-jndi/0/boot?name=JavaComp"));
>> +                    kernel.loadGBean(new GBeanData(javaCompName,  
>> JavaCompContextGBean.GBEAN_INFO), classLoader);
>> +                    kernel.startGBean(javaCompName);
>> +                } catch (Exception e) {
>> +                    GlobalContextBootstrap.log.error("Unable to  
>> bootstrap global jndi gbeans");
>> +                }
>> +                GlobalContextBootstrap.initalized = true;
>> +            }
>> +        }
>> +    }
>> +}
>>
>> Added: geronimo/sandbox/plugins/global-jndi/src/java/org/apache/ 
>> geronimo/gjndi/GlobalContextGBean.java
>> URL: http://svn.apache.org/viewvc/geronimo/sandbox/plugins/global- 
>> jndi/src/java/org/apache/geronimo/gjndi/GlobalContextGBean.java? 
>> rev=432101&view=auto
>> ===================================================================== 
>> =========
>> --- geronimo/sandbox/plugins/global-jndi/src/java/org/apache/ 
>> geronimo/gjndi/GlobalContextGBean.java (added)
>> +++ geronimo/sandbox/plugins/global-jndi/src/java/org/apache/ 
>> geronimo/gjndi/GlobalContextGBean.java Wed Aug 16 18:32:59 2006
>> @@ -0,0 +1,76 @@
>> +/**
>> + *
>> + * Copyright 2006 The Apache Software Foundation
>> + *
>> + *  Licensed 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.gjndi;
>> +
>> +import org.apache.geronimo.gbean.GBeanInfo;
>> +import org.apache.geronimo.gbean.GBeanInfoBuilder;
>> +import org.apache.geronimo.gbean.GBeanLifecycle;
>> +import org.apache.geronimo.gbean.AbstractNameQuery;
>> +import org.apache.geronimo.gbean.AbstractName;
>> +import org.apache.geronimo.kernel.Kernel;
>> +import org.apache.xbean.naming.global.GlobalContextManager;
>> +
>> +import javax.naming.Context;
>> +import javax.naming.NamingException;
>> +import java.util.Collections;
>> +
>> +/**
>> + * @version $Rev$ $Date$
>> + */
>> +public class GlobalContextGBean extends KernelContextGBean  
>> implements GBeanLifecycle {
>> +    public GlobalContextGBean(Kernel kernel) throws  
>> NamingException {
>> +        super("", new AbstractNameQuery(null,  
>> Collections.EMPTY_MAP, Context.class.getName()), kernel);
>> +    }
>> +
>> +    public void doStart() {
>> +        super.doStart();
>> +        GlobalContextManager.setGlobalContext(this);
>> +    }
>> +
>> +    public void doStop() {
>> +        GlobalContextManager.setGlobalContext(null);
>> +        super.doStop();
>> +    }
>> +
>> +    public void doFail() {
>> +        GlobalContextManager.setGlobalContext(null);
>> +        super.doFail();
>> +    }
>> +
>> +    protected String createBindingName(AbstractName abstractName,  
>> Object value) throws NamingException {
>> +        if (value instanceof Context) {
>> +            // don't bind yourself
>> +            if (value == this) return null;
>> +
>> +            Context context = (Context) value;
>> +            return context.getNameInNamespace();
>> +        }
>> +        throw new NamingException("value is not a context:  
>> abstractName=" + abstractName + " valueType=" + value.getClass 
>> ().getName());
>> +    }
>> +
>> +    public static final GBeanInfo GBEAN_INFO;
>> +
>> +    public static GBeanInfo getGBeanInfo() {
>> +        return GBEAN_INFO;
>> +    }
>> +
>> +    static {
>> +        GBeanInfoBuilder builder = GBeanInfoBuilder.createStatic 
>> (GlobalContextGBean.class, "GlobalContext");
>> +        builder.setConstructor(new String[]{"kernel"});
>> +        GBEAN_INFO = builder.getBeanInfo();
>> +    }
>> +}
>>
>> Added: geronimo/sandbox/plugins/global-jndi/src/java/org/apache/ 
>> geronimo/gjndi/JavaCompContextGBean.java
>> URL: http://svn.apache.org/viewvc/geronimo/sandbox/plugins/global- 
>> jndi/src/java/org/apache/geronimo/gjndi/JavaCompContextGBean.java? 
>> rev=432101&view=auto
>> ===================================================================== 
>> =========
>> --- geronimo/sandbox/plugins/global-jndi/src/java/org/apache/ 
>> geronimo/gjndi/JavaCompContextGBean.java (added)
>> +++ geronimo/sandbox/plugins/global-jndi/src/java/org/apache/ 
>> geronimo/gjndi/JavaCompContextGBean.java Wed Aug 16 18:32:59 2006
>> @@ -0,0 +1,49 @@
>> +/**
>> + *
>> + * Copyright 2006 The Apache Software Foundation
>> + *
>> + *  Licensed 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.gjndi;
>> +
>> +import org.apache.geronimo.gbean.GBeanInfo;
>> +import org.apache.geronimo.gbean.GBeanInfoBuilder;
>> +import org.apache.geronimo.naming.java.RootContext;
>> +import org.apache.xbean.naming.context.ContextFlyweight;
>> +
>> +import javax.naming.Context;
>> +import javax.naming.NamingException;
>> +
>> +/**
>> + * @version $Rev$ $Date$
>> + */
>> +public class JavaCompContextGBean extends ContextFlyweight {
>> +    protected Context getContext() {
>> +        return RootContext.getComponentContext();
>> +    }
>> +
>> +    public String getNameInNamespace() throws NamingException {
>> +        return "java:comp";
>> +    }
>> +
>> +    public static final GBeanInfo GBEAN_INFO;
>> +
>> +    public static GBeanInfo getGBeanInfo() {
>> +        return GBEAN_INFO;
>> +    }
>> +
>> +    static {
>> +        GBeanInfoBuilder builder = GBeanInfoBuilder.createStatic 
>> (JavaCompContextGBean.class, "Context");
>> +        GBEAN_INFO = builder.getBeanInfo();
>> +    }
>> +}
>>
>> Added: geronimo/sandbox/plugins/global-jndi/src/java/org/apache/ 
>> geronimo/gjndi/KernelContextGBean.java
>> URL: http://svn.apache.org/viewvc/geronimo/sandbox/plugins/global- 
>> jndi/src/java/org/apache/geronimo/gjndi/KernelContextGBean.java? 
>> rev=432101&view=auto
>> ===================================================================== 
>> =========
>> --- geronimo/sandbox/plugins/global-jndi/src/java/org/apache/ 
>> geronimo/gjndi/KernelContextGBean.java (added)
>> +++ geronimo/sandbox/plugins/global-jndi/src/java/org/apache/ 
>> geronimo/gjndi/KernelContextGBean.java Wed Aug 16 18:32:59 2006
>> @@ -0,0 +1,198 @@
>> +/**
>> + *
>> + * Copyright 2006 The Apache Software Foundation
>> + *
>> + *  Licensed 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.gjndi;
>> +
>> +import org.apache.commons.logging.Log;
>> +import org.apache.commons.logging.LogFactory;
>> +import org.apache.geronimo.gbean.AbstractName;
>> +import org.apache.geronimo.gbean.AbstractNameQuery;
>> +import org.apache.geronimo.gbean.GBeanInfo;
>> +import org.apache.geronimo.gbean.GBeanInfoBuilder;
>> +import org.apache.geronimo.gbean.GBeanLifecycle;
>> +import org.apache.geronimo.kernel.GBeanNotFoundException;
>> +import org.apache.geronimo.kernel.Kernel;
>> +import org.apache.geronimo.kernel.lifecycle.LifecycleAdapter;
>> +import org.apache.geronimo.kernel.lifecycle.LifecycleListener;
>> +import org.apache.xbean.naming.context.UnmodifiableContext;
>> +
>> +import javax.naming.NamingException;
>> +import java.util.Collections;
>> +import java.util.HashMap;
>> +import java.util.Map;
>> +import java.util.Iterator;
>> +import java.util.Set;
>> +
>> +/**
>> + * @version $Rev$ $Date$
>> + */
>> +public class KernelContextGBean extends UnmodifiableContext  
>> implements GBeanLifecycle {
>> +    private static final Log log = LogFactory.getLog 
>> (KernelContextGBean.class);
>> +
>> +    private final Kernel kernel;
>> +    private final AbstractNameQuery abstractNameQuery;
>> +    private final LifecycleListener listener = new  
>> ContextLifecycleListener();
>> +    private final Map bindingsByAbstractName = new HashMap();
>> +
>> +    public KernelContextGBean(String nameInNamespace,  
>> AbstractNameQuery abstractNameQuery, Kernel kernel) throws  
>> NamingException {
>> +        super(nameInNamespace, Collections.EMPTY_MAP, false);
>> +        this.abstractNameQuery = abstractNameQuery;
>> +        this.kernel = kernel;
>> +    }
>> +
>> +    public synchronized void doStart() {
>> +        kernel.getLifecycleMonitor().addLifecycleListener 
>> (listener, abstractNameQuery);
>> +        Set set = kernel.listGBeans(abstractNameQuery);
>> +        for (Iterator iterator = set.iterator(); iterator.hasNext 
>> ();) {
>> +            AbstractName abstractName = (AbstractName)  
>> iterator.next();
>> +            try {
>> +                if (kernel.isRunning(abstractName)) {
>> +                    addBinding(abstractName);
>> +                }
>> +            } catch (NamingException e) {
>> +                log.error("Error adding binding for " +  
>> abstractName);
>> +            }
>> +        }
>> +
>> +    }
>> +
>> +    public void doStop() {
>> +        destroy();
>> +    }
>> +
>> +    public void doFail() {
>> +        destroy();
>> +    }
>> +
>> +    private synchronized void destroy() {
>> +        kernel.getLifecycleMonitor().removeLifecycleListener 
>> (listener);
>> +        for (Iterator iterator = bindingsByAbstractName.values 
>> ().iterator(); iterator.hasNext();) {
>> +            try {
>> +                String name = (String) iterator.next();
>> +                removeDeepBinding(name);
>> +            } catch (NamingException ignored) {
>> +            }
>> +        }
>> +        bindingsByAbstractName.clear();
>> +    }
>> +
>> +    private class ContextLifecycleListener extends  
>> LifecycleAdapter {
>> +        public void running(AbstractName abstractName) {
>> +            try {
>> +                addBinding(abstractName);
>> +            } catch (NamingException e) {
>> +                log.error("Error adding binding for " +  
>> abstractName);
>> +            }
>> +        }
>> +
>> +        public void stopping(AbstractName abstractName) {
>> +            removeBinding(abstractName);
>> +        }
>> +
>> +        public void stopped(AbstractName abstractName) {
>> +            removeBinding(abstractName);
>> +        }
>> +
>> +        public void failed(AbstractName abstractName) {
>> +            removeBinding(abstractName);
>> +        }
>> +
>> +        public void unloaded(AbstractName abstractName) {
>> +            removeBinding(abstractName);
>> +        }
>> +    }
>> +
>> +    /**
>> +     * Binds the specified gbean.  This method uses  
>> createBindingName and preprocessValue before binding the object.
>> +     * @param abstractName the abstract name of the gbean to bind
>> +     * @throws NamingException if an error occurs during binding
>> +     */
>> +    protected synchronized void addBinding(AbstractName  
>> abstractName) throws NamingException {
>> +        // get the gbean
>> +        Object value = null;
>> +        try {
>> +            value = kernel.getGBean(abstractName);
>> +        } catch (GBeanNotFoundException e) {
>> +            throw new NamingException("GBean not found: " +  
>> abstractName);
>> +        }
>> +
>> +        // generate a name for this binding
>> +        String name = createBindingName(abstractName, value);
>> +        if (name == null) return;
>> +
>> +        // give sub classes a chance to preprocess the value
>> +        value = preprocessVaue(abstractName, name, value);
>> +        if (value == null) return;
>> +
>> +        // bind the value
>> +
>> +        addDeepBinding(name, value);
>> +
>> +        // remember where we bound this value
>> +        bindingsByAbstractName.put(abstractName, name);
>> +    }
>> +
>> +    /**
>> +     * Unbinds the specified gbean.
>> +     * @param abstractName the abstract name of the gbean to unbind
>> +     */
>> +    protected synchronized void removeBinding(AbstractName  
>> abstractName) {
>> +        String name = (String) bindingsByAbstractName.remove 
>> (abstractName);
>> +        if (name != null) {
>> +            try {
>> +                removeDeepBinding(name);
>> +            } catch (NamingException ignored) {
>> +            }
>> +        }
>> +    }
>> +
>> +    /**
>> +     * Create a name under which we will bind the specified gbean  
>> with the specified value.
>> +     * By default, this method simply returns the "name" element  
>> of the abstract name
>> +     * @param abstractName the abstract name of the gbean to bind
>> +     * @param value the gbean instance
>> +     * @return the name under which the gbean should be bound
>> +     */
>> +    protected String createBindingName(AbstractName abstractName,  
>> Object value) throws NamingException {
>> +        return (String) abstractName.getName().get("name");
>> +    }
>> +
>> +    /**
>> +     * Preprocess the value before it is bound.  This is usefult  
>> for wrapping values with reference objects.
>> +     * By default, this method simply return the value.
>> +     * @param abstractName the abstract name of the gbean to bind
>> +     * @param name the name under which the gbean will be bound
>> +     * @param value the gbean instance
>> +     * @return the value to bind
>> +     */
>> +    protected Object preprocessVaue(AbstractName abstractName,  
>> String name, Object value) throws NamingException {
>> +        return value;
>> +    }
>> +
>> +    public static final GBeanInfo GBEAN_INFO;
>> +
>> +    public static GBeanInfo getGBeanInfo() {
>> +        return GBEAN_INFO;
>> +    }
>> +
>> +    static {
>> +        GBeanInfoBuilder builder = GBeanInfoBuilder.createStatic 
>> (KernelContextGBean.class, "Context");
>> +        builder.addAttribute("nameInNamespace", String.class, true);
>> +        builder.addAttribute("abstractNameQuery",  
>> AbstractNameQuery.class, true);
>> +        builder.setConstructor(new String[]{"nameInNamespace",  
>> "abstractNameQuery", "kernel"});
>> +        GBEAN_INFO = builder.getBeanInfo();
>> +    }
>> +}
>>
>> Added: geronimo/sandbox/plugins/global-jndi/src/java/org/apache/ 
>> geronimo/gjndi/java/javaURLContextFactory.java
>> URL: http://svn.apache.org/viewvc/geronimo/sandbox/plugins/global- 
>> jndi/src/java/org/apache/geronimo/gjndi/java/ 
>> javaURLContextFactory.java?rev=432101&view=auto
>> ===================================================================== 
>> =========
>> --- geronimo/sandbox/plugins/global-jndi/src/java/org/apache/ 
>> geronimo/gjndi/java/javaURLContextFactory.java (added)
>> +++ geronimo/sandbox/plugins/global-jndi/src/java/org/apache/ 
>> geronimo/gjndi/java/javaURLContextFactory.java Wed Aug 16 18:32:59  
>> 2006
>> @@ -0,0 +1,27 @@
>> +/**
>> + *
>> + * Copyright 2006 The Apache Software Foundation
>> + *
>> + *  Licensed 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.gjndi.java;
>> +
>> +import org.apache.geronimo.gjndi.GlobalContextBootstrap;
>> +
>> +/**
>> + * URLContextFactory for the java: namespace.
>> + *
>> + * @version $Rev: 355877 $ $Date: 2005-12-10 18:48:27 -0800 (Sat,  
>> 10 Dec 2005) $
>> + */
>> +public class javaURLContextFactory extends GlobalContextBootstrap {
>> +}
>>
>> Added: geronimo/sandbox/plugins/global-jndi/src/site/site.xml
>> URL: http://svn.apache.org/viewvc/geronimo/sandbox/plugins/global- 
>> jndi/src/site/site.xml?rev=432101&view=auto
>> ===================================================================== 
>> =========
>> --- geronimo/sandbox/plugins/global-jndi/src/site/site.xml (added)
>> +++ geronimo/sandbox/plugins/global-jndi/src/site/site.xml Wed Aug  
>> 16 18:32:59 2006
>> @@ -0,0 +1,62 @@
>> +<?xml version="1.0"?>
>> +<!--
>> +    Copyright 2006 The Apache Software Foundation
>> +
>> +    Licensed 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.
>> +-->
>> +
>> +<!-- $Id: site.xml 429761 2006-08-08 18:31:52Z jdillon $ -->
>> +
>> +<project name="${project.name}">
>> +    <skin>
>> +        <groupId>org.apache.geronimo.genesis.config</groupId>
>> +        <artifactId>geronimo-skin</artifactId>
>> +        <version>1.0.0-SNAPSHOT</version>
>> +    </skin>
>> +
>> +    <publishDate format="dd MMM yyyy"/>
>> +
>> +    <bannerLeft>
>> +        <src>images/topleft_logo_437x64.gif</src>
>> +    </bannerLeft>
>> +
>> +    <!--
>> +    <bannerRight>
>> +        <name>${project.name}</name>
>> +    </bannerRight>
>> +    -->
>> +
>> +    <body>
>> +        <!--
>> +        <links>
>> +            <item name="Geronimo" href="http:// 
>> geronimo.apache.org/"/>
>> +            <item name="Apache" href="http://apache.org/"/>
>> +        </links>
>> +        -->
>> +
>> +        <menu name="Geronimo">
>> +            <item name="Home" href="http://geronimo.apache.org/"/>
>> +        </menu>
>> +
>> +        <menu ref="parent"/>
>> +
>> +        <menu ref="modules"/>
>> +
>> +        <menu ref="reports"/>
>> +
>> +        ${reports}
>> +
>> +    </body>
>> +</project>
>> +
>> +
>>
>> Added: geronimo/sandbox/plugins/global-jndi/src/test/org/apache/ 
>> geronimo/gjndi/AbstractContextTest.java
>> URL: http://svn.apache.org/viewvc/geronimo/sandbox/plugins/global- 
>> jndi/src/test/org/apache/geronimo/gjndi/AbstractContextTest.java? 
>> rev=432101&view=auto
>> ===================================================================== 
>> =========
>> --- geronimo/sandbox/plugins/global-jndi/src/test/org/apache/ 
>> geronimo/gjndi/AbstractContextTest.java (added)
>> +++ geronimo/sandbox/plugins/global-jndi/src/test/org/apache/ 
>> geronimo/gjndi/AbstractContextTest.java Wed Aug 16 18:32:59 2006
>> @@ -0,0 +1,176 @@
>> +/**
>> + *
>> + * Copyright 2006 The Apache Software Foundation
>> + *
>> + *  Licensed 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.gjndi;
>> +
>> +import junit.framework.TestCase;
>> +
>> +import javax.naming.Context;
>> +import javax.naming.NamingException;
>> +import javax.naming.Name;
>> +import javax.naming.NamingEnumeration;
>> +import javax.naming.NameClassPair;
>> +import javax.naming.Binding;
>> +import java.util.Map;
>> +import java.util.Iterator;
>> +import java.util.TreeSet;
>> +import java.util.HashMap;
>> +
>> +import org.apache.xbean.naming.context.ContextUtil;
>> +
>> +/**
>> + * @version $Rev$ $Date$
>> + */
>> +public abstract class AbstractContextTest extends TestCase {
>> +    public static void assertEq(Map expected, Context actual)  
>> throws NamingException {
>> +        AbstractContextTest.assertEq(ContextUtil.buildMapTree 
>> (expected), actual, actual, null);
>> +    }
>> +
>> +    public static void assertEq(Map expected, String  
>> pathInExpected, Context actual) throws NamingException {
>> +        ContextUtil.Node node = ContextUtil.buildMapTree(expected);
>> +        Name parsedName = actual.getNameParser("").parse 
>> (pathInExpected);
>> +        for (int i = 0; i < parsedName.size(); i++) {
>> +            String part = parsedName.get(i);
>> +            Object value = node.get(part);
>> +            if (value == null) {
>> +                throw new NamingException("look for " +  
>> parsedName.getPrefix(i+1) + " in node tree is null ");
>> +            }
>> +            node = (ContextUtil.Node) value;
>> +        }
>> +
>> +        AbstractContextTest.assertEq(node, actual, actual, null);
>> +    }
>> +
>> +    private static void assertEq(ContextUtil.Node node, Context  
>> rootContext, Context currentContext, String path) throws  
>> NamingException {
>> +        for (Iterator iterator = node.entrySet().iterator();  
>> iterator.hasNext();) {
>> +            Map.Entry entry = (Map.Entry) iterator.next();
>> +            String expectedName = (String) entry.getKey();
>> +            Object expectedValue = entry.getValue();
>> +
>> +            String fullName = path == null ? expectedName : path  
>> + "/" + expectedName;
>> +
>> +            // verify we can lookup by string name and parsed  
>> name using the root context and current context
>> +            Object value = AbstractContextTest.assertLookup 
>> (expectedValue, currentContext, expectedName);
>> +            Object absoluteValue =  
>> AbstractContextTest.assertLookup(expectedValue, rootContext,  
>> fullName);
>> +            assertSame(fullName, value, absoluteValue);
>> +
>> +            if (expectedValue instanceof ContextUtil.Node) {
>> +                ContextUtil.Node expectedNode =  
>> (ContextUtil.Node) expectedValue;
>> +
>> +                // verufy listing of this context returns the  
>> expected results
>> +                AbstractContextTest.assertList(expectedNode,  
>> currentContext, expectedName);
>> +                AbstractContextTest.assertList(expectedNode,  
>> rootContext, fullName);
>> +
>> +                AbstractContextTest.assertEq(expectedNode,  
>> rootContext, (Context) value, fullName);
>> +            }
>> +        }
>> +    }
>> +
>> +    public static Object assertLookup(Object expectedValue,  
>> Context context, String name) throws NamingException {
>> +        Object value = context.lookup(name);
>> +
>> +        String contextName = context.getNameInNamespace();
>> +        if (contextName == null || contextName.length() == 0)  
>> contextName = "<root>";
>> +
>> +        assertNotNull("lookup of " +  name + " on " + contextName  
>> + " returned null", value);
>> +
>> +        if (expectedValue instanceof ContextUtil.Node) {
>> +            assertTrue("Expected lookup of " +  name + " on " +  
>> contextName + " to return a Context, but got a " + value.getClass 
>> ().getName(),
>> +                    value instanceof Context);
>> +        } else {
>> +            assertEquals("lookup of " + name + " on " +  
>> contextName, expectedValue, value);
>> +        }
>> +
>> +        Name parsedName = context.getNameParser("").parse(name);
>> +        Object valueFromParsedName = context.lookup(parsedName);
>> +        assertSame("lookup of " +  name + " on " + contextName +  
>> " using a parsed name", value, valueFromParsedName);
>> +
>> +        return value;
>> +    }
>> +
>> +    public static void assertList(ContextUtil.Node node, Context  
>> context, String name) throws NamingException {
>> +        String contextName = context.getNameInNamespace();
>> +        if (contextName == null || contextName.length() == 0)  
>> contextName = "<root>";
>> +
>> +        AbstractContextTest.assertListResults(node, context.list 
>> (name), contextName, name, false);
>> +        AbstractContextTest.assertListResults(node,  
>> context.listBindings(name), contextName, name, true);
>> +
>> +        Name parsedName = context.getNameParser("").parse(name);
>> +        AbstractContextTest.assertListResults(node, context.list 
>> (parsedName), contextName, "parsed name " + name, false);
>> +        AbstractContextTest.assertListResults(node,  
>> context.listBindings(parsedName), contextName, "parsed name " +  
>> name, true);
>> +    }
>> +
>> +    public static void assertListResults(ContextUtil.Node node,  
>> NamingEnumeration enumeration, String contextName, String name,  
>> boolean wasListBinding) {
>> +        Map actualValues;
>> +        if (wasListBinding) {
>> +            actualValues =  
>> AbstractContextTest.toListBindingResults(enumeration);
>> +        } else {
>> +            actualValues = AbstractContextTest.toListResults 
>> (enumeration);
>> +        }
>> +
>> +        for (Iterator iterator = node.entrySet().iterator();  
>> iterator.hasNext();) {
>> +            Map.Entry entry = (Map.Entry) iterator.next();
>> +            String expectedName = (String) entry.getKey();
>> +            Object expectedValue = entry.getValue();
>> +
>> +            Object actualValue = actualValues.get(expectedName);
>> +
>> +            assertNotNull("list of " + name + " on " +  
>> contextName + " did not find value for " + name, actualValue);
>> +            if (wasListBinding) {
>> +                if (expectedValue instanceof ContextUtil.Node) {
>> +                    assertTrue("Expected list of " + name + " on  
>> " + contextName + " result value for " + name + " to return a  
>> Context, but got a " + actualValue.getClass().getName(),
>> +                        actualValue instanceof Context);
>> +                } else {
>> +                    assertEquals("list of " + name + " on " +  
>> contextName + " for value for " + name, expectedValue, actualValue);
>> +                }
>> +            } else {
>> +                if (!(expectedValue instanceof ContextUtil.Node)) {
>> +                    assertEquals("list of " + name + " on " +  
>> contextName + " for value for " + name, expectedValue.getClass 
>> ().getName(), actualValue);
>> +                } else {
>> +                    // can't really test this since it the value  
>> is the name of a nested node class
>> +                }
>> +            }
>> +        }
>> +
>> +        TreeSet extraNames = new TreeSet(actualValues.keySet());
>> +        extraNames.removeAll(node.keySet());
>> +        if (!extraNames.isEmpty()) {
>> +            fail("list of " + name + " on " + contextName + "  
>> found extra values: " + extraNames);
>> +        }
>> +    }
>> +
>> +    private static Map toListResults(NamingEnumeration  
>> enumeration) {
>> +        Map result = new HashMap();
>> +        while (enumeration.hasMoreElements()) {
>> +            NameClassPair nameClassPair = (NameClassPair)  
>> enumeration.nextElement();
>> +            String name = nameClassPair.getName();
>> +            assertFalse(result.containsKey(name));
>> +            result.put(name, nameClassPair.getClassName());
>> +        }
>> +        return result;
>> +    }
>> +
>> +    private static Map toListBindingResults(NamingEnumeration  
>> enumeration) {
>> +        Map result = new HashMap();
>> +        while (enumeration.hasMoreElements()) {
>> +            Binding binding = (Binding) enumeration.nextElement();
>> +            String name = binding.getName();
>> +            assertFalse(result.containsKey(name));
>> +            result.put(name, binding.getObject());
>> +        }
>> +        return result;
>> +    }
>> +}
>>
>> Added: geronimo/sandbox/plugins/global-jndi/src/test/org/apache/ 
>> geronimo/gjndi/JavaCompContextTest.java
>> URL: http://svn.apache.org/viewvc/geronimo/sandbox/plugins/global- 
>> jndi/src/test/org/apache/geronimo/gjndi/JavaCompContextTest.java? 
>> rev=432101&view=auto
>> ===================================================================== 
>> =========
>> --- geronimo/sandbox/plugins/global-jndi/src/test/org/apache/ 
>> geronimo/gjndi/JavaCompContextTest.java (added)
>> +++ geronimo/sandbox/plugins/global-jndi/src/test/org/apache/ 
>> geronimo/gjndi/JavaCompContextTest.java Wed Aug 16 18:32:59 2006
>> @@ -0,0 +1,206 @@
>> +/**
>> + *
>> + * Copyright 2006 The Apache Software Foundation
>> + *
>> + *  Licensed 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.gjndi;
>> +
>> +import junit.framework.TestCase;
>> +
>> +import javax.naming.NamingException;
>> +import javax.naming.CompositeName;
>> +import javax.naming.CompoundName;
>> +import javax.naming.Context;
>> +import javax.naming.NamingEnumeration;
>> +import javax.naming.NameClassPair;
>> +import javax.naming.Binding;
>> +import javax.naming.LinkRef;
>> +import javax.naming.InitialContext;
>> +import java.util.Map;
>> +import java.util.HashMap;
>> +import java.util.Iterator;
>> +import java.util.NoSuchElementException;
>> +import java.util.Properties;
>> +import java.util.Collections;
>> +
>> +import org.apache.geronimo.naming.java.RootContext;
>> +import org.apache.xbean.naming.context.UnmodifiableContext;
>> +import org.apache.xbean.naming.context.ImmutableContext;
>> +import org.apache.xbean.naming.global.GlobalContextManager;
>> +
>> +/**
>> + * @version $Rev$ $Date$
>> + */
>> +public class JavaCompContextTest extends TestCase {
>> +    protected UnmodifiableContext readOnlyContext;
>> +    protected Properties syntax;
>> +    protected Map envBinding;
>> +    protected Context initialContext;
>> +    protected Context compContext;
>> +    protected Context envContext;
>> +
>> +    public void testInitialContext() throws NamingException {
>> +        assertEquals("Hello", initialContext.lookup("java:comp/ 
>> env/hello"));
>> +        assertEquals("Hello", initialContext.lookup(new  
>> CompositeName("java:comp/env/hello")));
>> +    }
>> +
>> +    public void testLookup() throws NamingException {
>> +        assertEquals("Hello", envContext.lookup("hello"));
>> +        assertEquals("Hello", compContext.lookup("env/hello"));
>> +        try {
>> +            envContext.lookup("foo");
>> +            fail();
>> +        } catch (NamingException e) {
>> +            // OK
>> +        }
>> +        assertEquals("Hello", envContext.lookup(new CompositeName 
>> ("hello")));
>> +        assertEquals("Hello", compContext.lookup(new CompositeName 
>> ("env/hello")));
>> +        assertEquals("Hello", envContext.lookup(new CompoundName 
>> ("hello", syntax)));
>> +        assertEquals("Hello", compContext.lookup(new CompoundName 
>> ("env/hello", syntax)));
>> +
>> +        assertEquals(envContext, envContext.lookup(""));
>> +    }
>> +
>> +    public void testSubContext() throws NamingException {
>> +        assertEquals("long name", initialContext.lookup 
>> ("java:comp/env/here/there/anywhere"));
>> +        Context intermediate = (Context)initialContext.lookup 
>> ("java:comp/env/here/there");
>> +        assertNotNull(intermediate);
>> +        assertEquals("long name", intermediate.lookup("anywhere"));
>> +    }
>> +
>> +    public void testSchemeLookup() throws NamingException {
>> +//        envContext.lookup("dns:apache.org");
>> +        assertEquals("Hello", envContext.lookup("java:comp/env/ 
>> hello"));
>> +        assertEquals("Hello", compContext.lookup("java:comp/env/ 
>> hello"));
>> +    }
>> +
>> +    public void testLookupLink() throws NamingException {
>> +        assertEquals("Hello", envContext.lookup("link"));
>> +    }
>> +
>> +    public void testComposeName() throws NamingException {
>> +        assertEquals("org/research/user/jane",  
>> envContext.composeName("user/jane", "org/research"));
>> +        assertEquals("research/user/jane", envContext.composeName 
>> ("user/jane", "research"));
>> +        assertEquals(new CompositeName("org/research/user/jane"),  
>> envContext.composeName(new CompositeName("user/jane"), new  
>> CompositeName("org/research")));
>> +        assertEquals(new CompositeName("research/user/jane"),  
>> envContext.composeName(new CompositeName("user/jane"), new  
>> CompositeName("research")));
>> +    }
>> +
>> +    public void testList() throws NamingException {
>> +        NamingEnumeration ne;
>> +        Map expected;
>> +        Map result;
>> +
>> +        expected = new HashMap();
>> +        for (Iterator i = envBinding.entrySet().iterator();  
>> i.hasNext();) {
>> +            Map.Entry entry = (Map.Entry) i.next();
>> +            expected.put(entry.getKey(), entry.getValue().getClass 
>> ().getName());
>> +        }
>> +        ne = envContext.list("");
>> +        result = new HashMap();
>> +        while (ne.hasMore()) {
>> +            NameClassPair pair = (NameClassPair) ne.next();
>> +            result.put(pair.getName(), pair.getClassName());
>> +        }
>> +        assertEquals(expected, result);
>> +
>> +        try {
>> +            ne.next();
>> +            fail();
>> +        } catch (NoSuchElementException e) {
>> +            // ok
>> +        }
>> +        try {
>> +            ne.nextElement();
>> +            fail();
>> +        } catch (NoSuchElementException e) {
>> +            // ok
>> +        }
>> +    }
>> +
>> +    public void testListBindings() throws NamingException {
>> +        NamingEnumeration ne;
>> +        ne = envContext.listBindings("");
>> +        int count = 0;
>> +        while (ne.hasMore()) {
>> +            count ++;
>> +            Binding pair = (Binding) ne.next();
>> +            assertTrue(envBinding.containsKey(pair.getName()));
>> +            if (! (envBinding.get(pair.getName()) instanceof  
>> Context)) {
>> +                assertEquals(pair.getObject(), envBinding.get 
>> (pair.getName()));
>> +            }
>> +        }
>> +        assertEquals(envBinding.size(), count);
>> +
>> +        try {
>> +            ne.next();
>> +            fail();
>> +        } catch (NoSuchElementException e) {
>> +            // ok
>> +        }
>> +        try {
>> +            ne.nextElement();
>> +            fail();
>> +        } catch (NoSuchElementException e) {
>> +            // ok
>> +        }
>> +    }
>> +
>> +    public void testSpeed() throws NamingException {
>> +        Context comp = (Context) initialContext.lookup("java:comp");
>> +
>> +        long start = System.currentTimeMillis();
>> +        for (int i=0; i < 1000000; i++) {
>> +            // initialContext.lookup("java:comp/hello"); // this  
>> is sloooow due to scheme resolution
>> +            // envContext.lookup("hello");
>> +            comp.lookup("env/hello");
>> +        }
>> +
>> +        long end = System.currentTimeMillis();
>> +        System.out.println("lookup(String) milliseconds: " + (end  
>> - start));
>> +    }
>> +
>> +    protected void setUp() throws Exception {
>> +        super.setUp();
>> +        System.setProperty("java.naming.factory.initial",  
>> GlobalContextManager.class.getName());
>> +        System.setProperty("java.naming.factory.url.pkgs",  
>> "org.apache.geronimo.knaming");
>> +
>> +        LinkRef link = new LinkRef("java:comp/env/hello");
>> +
>> +        Map bindings = new HashMap();
>> +        bindings.put("env/hello", "Hello");
>> +        bindings.put("env/world", "Hello World");
>> +        bindings.put("env/here/there/anywhere", "long name");
>> +        bindings.put("env/link", link);
>> +
>> +        readOnlyContext = new UnmodifiableContext(bindings);
>> +
>> +        envBinding = new HashMap();
>> +        envBinding.put("hello", "Hello");
>> +        envBinding.put("world", "Hello World");
>> +        envBinding.put("here", readOnlyContext.lookup("env/here"));
>> +        envBinding.put("link", link);
>> +
>> +        RootContext.setComponentContext(readOnlyContext);
>> +
>> +        Context javaCompContext = new JavaCompContextGBean();
>> +        Context globalContext = new ImmutableContext 
>> (Collections.singletonMap(javaCompContext.getNameInNamespace(),  
>> javaCompContext));
>> +        GlobalContextManager.setGlobalContext(globalContext);
>> +
>> +        initialContext = new InitialContext();
>> +        compContext = (Context) initialContext.lookup("java:comp");
>> +        envContext = (Context) initialContext.lookup("java:comp/ 
>> env");
>> +
>> +        syntax = new Properties();
>> +    }
>> +}
>>
>> Added: geronimo/sandbox/plugins/global-jndi/src/test/org/apache/ 
>> geronimo/gjndi/KernelContextGBeanTest.java
>> URL: http://svn.apache.org/viewvc/geronimo/sandbox/plugins/global- 
>> jndi/src/test/org/apache/geronimo/gjndi/ 
>> KernelContextGBeanTest.java?rev=432101&view=auto
>> ===================================================================== 
>> =========
>> --- geronimo/sandbox/plugins/global-jndi/src/test/org/apache/ 
>> geronimo/gjndi/KernelContextGBeanTest.java (added)
>> +++ geronimo/sandbox/plugins/global-jndi/src/test/org/apache/ 
>> geronimo/gjndi/KernelContextGBeanTest.java Wed Aug 16 18:32:59 2006
>> @@ -0,0 +1,171 @@
>> +/**
>> + *
>> + * Copyright 2006 The Apache Software Foundation
>> + *
>> + *  Licensed 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.gjndi;
>> +
>> +import org.apache.geronimo.gbean.GBeanData;
>> +import org.apache.geronimo.gbean.GBeanInfo;
>> +import org.apache.geronimo.gbean.GBeanInfoBuilder;
>> +import org.apache.geronimo.gbean.AbstractName;
>> +import org.apache.geronimo.kernel.Kernel;
>> +import org.apache.geronimo.kernel.KernelFactory;
>> +import org.apache.geronimo.kernel.config.ConfigurationData;
>> +import org.apache.geronimo.kernel.config.ConfigurationUtil;
>> +import  
>> org.apache.geronimo.kernel.config.EditableConfigurationManager;
>> +import  
>> org.apache.geronimo.kernel.config.EditableKernelConfigurationManager;
>> +import org.apache.geronimo.kernel.repository.Artifact;
>> +import org.apache.geronimo.kernel.repository.DefaultArtifactManager;
>> +import  
>> org.apache.geronimo.kernel.repository.DefaultArtifactResolver;
>> +import org.apache.geronimo.naming.java.RootContext;
>> +import org.apache.xbean.naming.context.ImmutableContext;
>> +import org.apache.xbean.naming.global.GlobalContextManager;
>> +
>> +import javax.naming.Context;
>> +import javax.naming.InitialContext;
>> +import java.util.HashMap;
>> +import java.util.Hashtable;
>> +import java.util.Map;
>> +import java.util.Iterator;
>> +import java.util.Collections;
>> +
>> +/**
>> + * @version $Rev$ $Date$
>> + */
>> +public class KernelContextGBeanTest extends AbstractContextTest {
>> +    private Kernel kernel;
>> +    private EditableConfigurationManager configurationManager;
>> +    private ConfigurationData configurationData;
>> +    private GBeanInfo immutableContextGBeanInfo;
>> +    private Hashtable contextEnv;
>> +
>> +    public void test() throws Exception {
>> +        Map globalBindings = new HashMap();
>> +        globalBindings.put("java:comp/string", "foo");
>> +        globalBindings.put("java:comp/nested/context/string",  
>> "bar");
>> +        globalBindings.put("java:comp/a/b/c/d/e/string", "beer");
>> +        globalBindings.put("java:comp/a/b/c/d/e/one", new Integer 
>> (1));
>> +        globalBindings.put("java:comp/a/b/c/d/e/two", new Integer 
>> (2));
>> +        globalBindings.put("java:comp/a/b/c/d/e/three", new  
>> Integer(3));
>> +        globalBindings.put("test/env/foo", new Integer(42));
>> +        globalBindings.put("test/baz", "caz");
>> +
>> +        Map javaCompBindings = getNestedBindings(globalBindings,  
>> "java:comp/");
>> +        ImmutableContext javaCompContext = new ImmutableContext 
>> (javaCompBindings);
>> +        RootContext.setComponentContext(javaCompContext);
>> +
>> +        GBeanData javaComp = configurationData.addGBean 
>> ("JavaComp", JavaCompContextGBean.GBEAN_INFO);
>> +        AbstractName javaCompName = javaComp.getAbstractName();
>> +
>> +        GBeanData test = configurationData.addGBean("Test",  
>> immutableContextGBeanInfo);
>> +        AbstractName testName = test.getAbstractName();
>> +        test.setAttribute("nameInNamespace", "test");
>> +        Map testBindings = getNestedBindings(globalBindings,  
>> "test/");
>> +        test.setAttribute("bindings", testBindings);
>> +
>> +        configurationManager.loadConfiguration(configurationData);
>> +        configurationManager.startConfiguration 
>> (configurationData.getId());
>> +
>> +        InitialContext ctx = new InitialContext(contextEnv);
>> +        assertEq(globalBindings, ctx);
>> +
>> +        //
>> +        // stop test context
>> +        //
>> +        kernel.stopGBean(testName);
>> +
>> +        HashMap javaCompOnlyBindings = new HashMap(globalBindings);
>> +        javaCompOnlyBindings.remove("test/env/foo");
>> +        javaCompOnlyBindings.remove("test/baz");
>> +        assertEq(javaCompOnlyBindings, ctx);
>> +
>> +        //
>> +        // stop java context
>> +        //
>> +        kernel.stopGBean(javaCompName);
>> +
>> +        assertEq(Collections.EMPTY_MAP, ctx);
>> +
>> +
>> +        //
>> +        // restart java context
>> +        //
>> +        kernel.startGBean(javaCompName);
>> +
>> +        assertEq(javaCompOnlyBindings, ctx);
>> +
>> +        //
>> +        // restart test context
>> +        //
>> +        kernel.startGBean(testName);
>> +
>> +        assertEq(globalBindings, ctx);
>> +    }
>> +
>> +    protected Map getNestedBindings(Map globalBindings, String  
>> nestedPath) {
>> +        HashMap nestedBindings = new HashMap();
>> +        for (Iterator iterator = globalBindings.entrySet 
>> ().iterator(); iterator.hasNext();) {
>> +            Map.Entry entry = (Map.Entry) iterator.next();
>> +            String globalName = (String) entry.getKey();
>> +            Object value = entry.getValue();
>> +
>> +            if (globalName.startsWith(nestedPath)) {
>> +                String nestedName = globalName.substring 
>> (nestedPath.length());
>> +                nestedBindings.put(nestedName, value);
>> +            }
>> +        }
>> +        return nestedBindings;
>> +    }
>> +
>> +    protected void setUp() throws Exception {
>> +        super.setUp();
>> +
>> +        kernel = KernelFactory.newInstance().createKernel("test");
>> +        kernel.boot();
>> +
>> +        ConfigurationData bootstrap = new ConfigurationData(new  
>> Artifact("bootstrap", "bootstrap", "", "car"), kernel.getNaming());
>> +
>> +        GBeanData artifactManagerData = bootstrap.addGBean 
>> ("ArtifactManager", DefaultArtifactManager.GBEAN_INFO);
>> +
>> +        GBeanData artifactResolverData = bootstrap.addGBean 
>> ("ArtifactResolver", DefaultArtifactResolver.GBEAN_INFO);
>> +        artifactResolverData.setReferencePattern 
>> ("ArtifactManager", artifactManagerData.getAbstractName());
>> +
>> +        GBeanData configurationManagerData = bootstrap.addGBean 
>> ("ConfigurationManager",  
>> EditableKernelConfigurationManager.GBEAN_INFO);
>> +        configurationManagerData.setReferencePattern 
>> ("ArtifactManager", artifactManagerData.getAbstractName());
>> +        configurationManagerData.setReferencePattern 
>> ("ArtifactResolver", artifactResolverData.getAbstractName());
>> +
>> +        ConfigurationUtil.loadBootstrapConfiguration(kernel,  
>> bootstrap, getClass().getClassLoader());
>> +
>> +        configurationManager =  
>> ConfigurationUtil.getEditableConfigurationManager(kernel);
>> +
>> +        configurationData = new ConfigurationData(new Artifact 
>> ("test", "test", "", "car"), kernel.getNaming());
>> +        configurationData.addGBean("GlobalContext",  
>> GlobalContextGBean.GBEAN_INFO);
>> +
>> +        GBeanInfoBuilder builder = new GBeanInfoBuilder 
>> (ImmutableContext.class);
>> +        builder.setConstructor(new String[] {"nameInNamespace",  
>> "bindings", "cacheReferences"});
>> +        builder.addAttribute("nameInNamespace", String.class, true);
>> +        builder.addAttribute("bindings", Map.class, true);
>> +        builder.addAttribute("cacheReferences", boolean.class,  
>> true);
>> +        immutableContextGBeanInfo = builder.getBeanInfo();
>> +
>> +        contextEnv = new Hashtable();
>> +        contextEnv.put(Context.INITIAL_CONTEXT_FACTORY,  
>> GlobalContextManager.class.getName());
>> +    }
>> +
>> +    protected void tearDown() throws Exception {
>> +        kernel.shutdown();
>> +        super.tearDown();
>> +    }
>> +}
>>
>>


Re: svn commit: r432101 - in /geronimo/sandbox/plugins/global-jndi: ./ src/ src/java/ src/java/org/ src/java/org/apache/ src/java/org/apache/geronimo/ src/java/org/apache/geronimo/gjndi/ src/java/org/apache/geronimo/gjndi/java/ src/site/ src/site/apt/ src/...

Posted by Jason Dillon <ja...@planet57.com>.
Hey if you are gonna add new modules, can you please use the m2  
standard layout?

--jason


On Aug 16, 2006, at 6:33 PM, dain@apache.org wrote:

> Author: dain
> Date: Wed Aug 16 18:32:59 2006
> New Revision: 432101
>
> URL: http://svn.apache.org/viewvc?rev=432101&view=rev
> Log:
> Starting of a global jndi plugin
>
> Added:
>     geronimo/sandbox/plugins/global-jndi/
>     geronimo/sandbox/plugins/global-jndi/LICENSE.txt
>     geronimo/sandbox/plugins/global-jndi/NOTICE.txt
>     geronimo/sandbox/plugins/global-jndi/pom.xml
>     geronimo/sandbox/plugins/global-jndi/src/
>     geronimo/sandbox/plugins/global-jndi/src/java/
>     geronimo/sandbox/plugins/global-jndi/src/java/org/
>     geronimo/sandbox/plugins/global-jndi/src/java/org/apache/
>     geronimo/sandbox/plugins/global-jndi/src/java/org/apache/geronimo/
>     geronimo/sandbox/plugins/global-jndi/src/java/org/apache/ 
> geronimo/gjndi/
>     geronimo/sandbox/plugins/global-jndi/src/java/org/apache/ 
> geronimo/gjndi/GlobalContextBootstrap.java
>     geronimo/sandbox/plugins/global-jndi/src/java/org/apache/ 
> geronimo/gjndi/GlobalContextGBean.java
>     geronimo/sandbox/plugins/global-jndi/src/java/org/apache/ 
> geronimo/gjndi/JavaCompContextGBean.java
>     geronimo/sandbox/plugins/global-jndi/src/java/org/apache/ 
> geronimo/gjndi/KernelContextGBean.java
>     geronimo/sandbox/plugins/global-jndi/src/java/org/apache/ 
> geronimo/gjndi/java/
>     geronimo/sandbox/plugins/global-jndi/src/java/org/apache/ 
> geronimo/gjndi/java/javaURLContextFactory.java
>     geronimo/sandbox/plugins/global-jndi/src/site/
>     geronimo/sandbox/plugins/global-jndi/src/site/apt/
>     geronimo/sandbox/plugins/global-jndi/src/site/site.xml
>     geronimo/sandbox/plugins/global-jndi/src/test/
>     geronimo/sandbox/plugins/global-jndi/src/test-data/
>     geronimo/sandbox/plugins/global-jndi/src/test/org/
>     geronimo/sandbox/plugins/global-jndi/src/test/org/apache/
>     geronimo/sandbox/plugins/global-jndi/src/test/org/apache/geronimo/
>     geronimo/sandbox/plugins/global-jndi/src/test/org/apache/ 
> geronimo/gjndi/
>     geronimo/sandbox/plugins/global-jndi/src/test/org/apache/ 
> geronimo/gjndi/AbstractContextTest.java
>     geronimo/sandbox/plugins/global-jndi/src/test/org/apache/ 
> geronimo/gjndi/JavaCompContextTest.java
>     geronimo/sandbox/plugins/global-jndi/src/test/org/apache/ 
> geronimo/gjndi/KernelContextGBeanTest.java
>
> Added: geronimo/sandbox/plugins/global-jndi/LICENSE.txt
> URL: http://svn.apache.org/viewvc/geronimo/sandbox/plugins/global- 
> jndi/LICENSE.txt?rev=432101&view=auto
> ====================================================================== 
> ========
> --- geronimo/sandbox/plugins/global-jndi/LICENSE.txt (added)
> +++ geronimo/sandbox/plugins/global-jndi/LICENSE.txt Wed Aug 16  
> 18:32:59 2006
> @@ -0,0 +1,203 @@
> +
> +                                 Apache License
> +                           Version 2.0, January 2004
> +                        http://www.apache.org/licenses/
> +
> +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
> +
> +   1. Definitions.
> +
> +      "License" shall mean the terms and conditions for use,  
> reproduction,
> +      and distribution as defined by Sections 1 through 9 of this  
> document.
> +
> +      "Licensor" shall mean the copyright owner or entity  
> authorized by
> +      the copyright owner that is granting the License.
> +
> +      "Legal Entity" shall mean the union of the acting entity and  
> all
> +      other entities that control, are controlled by, or are under  
> common
> +      control with that entity. For the purposes of this definition,
> +      "control" means (i) the power, direct or indirect, to cause the
> +      direction or management of such entity, whether by contract or
> +      otherwise, or (ii) ownership of fifty percent (50%) or more  
> of the
> +      outstanding shares, or (iii) beneficial ownership of such  
> entity.
> +
> +      "You" (or "Your") shall mean an individual or Legal Entity
> +      exercising permissions granted by this License.
> +
> +      "Source" form shall mean the preferred form for making  
> modifications,
> +      including but not limited to software source code,  
> documentation
> +      source, and configuration files.
> +
> +      "Object" form shall mean any form resulting from mechanical
> +      transformation or translation of a Source form, including but
> +      not limited to compiled object code, generated documentation,
> +      and conversions to other media types.
> +
> +      "Work" shall mean the work of authorship, whether in Source or
> +      Object form, made available under the License, as indicated  
> by a
> +      copyright notice that is included in or attached to the work
> +      (an example is provided in the Appendix below).
> +
> +      "Derivative Works" shall mean any work, whether in Source or  
> Object
> +      form, that is based on (or derived from) the Work and for  
> which the
> +      editorial revisions, annotations, elaborations, or other  
> modifications
> +      represent, as a whole, an original work of authorship. For  
> the purposes
> +      of this License, Derivative Works shall not include works  
> that remain
> +      separable from, or merely link (or bind by name) to the  
> interfaces of,
> +      the Work and Derivative Works thereof.
> +
> +      "Contribution" shall mean any work of authorship, including
> +      the original version of the Work and any modifications or  
> additions
> +      to that Work or Derivative Works thereof, that is intentionally
> +      submitted to Licensor for inclusion in the Work by the  
> copyright owner
> +      or by an individual or Legal Entity authorized to submit on  
> behalf of
> +      the copyright owner. For the purposes of this definition,  
> "submitted"
> +      means any form of electronic, verbal, or written  
> communication sent
> +      to the Licensor or its representatives, including but not  
> limited to
> +      communication on electronic mailing lists, source code  
> control systems,
> +      and issue tracking systems that are managed by, or on behalf  
> of, the
> +      Licensor for the purpose of discussing and improving the  
> Work, but
> +      excluding communication that is conspicuously marked or  
> otherwise
> +      designated in writing by the copyright owner as "Not a  
> Contribution."
> +
> +      "Contributor" shall mean Licensor and any individual or  
> Legal Entity
> +      on behalf of whom a Contribution has been received by  
> Licensor and
> +      subsequently incorporated within the Work.
> +
> +   2. Grant of Copyright License. Subject to the terms and  
> conditions of
> +      this License, each Contributor hereby grants to You a  
> perpetual,
> +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
> +      copyright license to reproduce, prepare Derivative Works of,
> +      publicly display, publicly perform, sublicense, and  
> distribute the
> +      Work and such Derivative Works in Source or Object form.
> +
> +   3. Grant of Patent License. Subject to the terms and conditions of
> +      this License, each Contributor hereby grants to You a  
> perpetual,
> +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
> +      (except as stated in this section) patent license to make,  
> have made,
> +      use, offer to sell, sell, import, and otherwise transfer the  
> Work,
> +      where such license applies only to those patent claims  
> licensable
> +      by such Contributor that are necessarily infringed by their
> +      Contribution(s) alone or by combination of their Contribution 
> (s)
> +      with the Work to which such Contribution(s) was submitted.  
> If You
> +      institute patent litigation against any entity (including a
> +      cross-claim or counterclaim in a lawsuit) alleging that the  
> Work
> +      or a Contribution incorporated within the Work constitutes  
> direct
> +      or contributory patent infringement, then any patent licenses
> +      granted to You under this License for that Work shall terminate
> +      as of the date such litigation is filed.
> +
> +   4. Redistribution. You may reproduce and distribute copies of the
> +      Work or Derivative Works thereof in any medium, with or without
> +      modifications, and in Source or Object form, provided that You
> +      meet the following conditions:
> +
> +      (a) You must give any other recipients of the Work or
> +          Derivative Works a copy of this License; and
> +
> +      (b) You must cause any modified files to carry prominent  
> notices
> +          stating that You changed the files; and
> +
> +      (c) You must retain, in the Source form of any Derivative Works
> +          that You distribute, all copyright, patent, trademark, and
> +          attribution notices from the Source form of the Work,
> +          excluding those notices that do not pertain to any part of
> +          the Derivative Works; and
> +
> +      (d) If the Work includes a "NOTICE" text file as part of its
> +          distribution, then any Derivative Works that You  
> distribute must
> +          include a readable copy of the attribution notices  
> contained
> +          within such NOTICE file, excluding those notices that do  
> not
> +          pertain to any part of the Derivative Works, in at least  
> one
> +          of the following places: within a NOTICE text file  
> distributed
> +          as part of the Derivative Works; within the Source form or
> +          documentation, if provided along with the Derivative  
> Works; or,
> +          within a display generated by the Derivative Works, if and
> +          wherever such third-party notices normally appear. The  
> contents
> +          of the NOTICE file are for informational purposes only and
> +          do not modify the License. You may add Your own attribution
> +          notices within Derivative Works that You distribute,  
> alongside
> +          or as an addendum to the NOTICE text from the Work,  
> provided
> +          that such additional attribution notices cannot be  
> construed
> +          as modifying the License.
> +
> +      You may add Your own copyright statement to Your  
> modifications and
> +      may provide additional or different license terms and  
> conditions
> +      for use, reproduction, or distribution of Your  
> modifications, or
> +      for any such Derivative Works as a whole, provided Your use,
> +      reproduction, and distribution of the Work otherwise  
> complies with
> +      the conditions stated in this License.
> +
> +   5. Submission of Contributions. Unless You explicitly state  
> otherwise,
> +      any Contribution intentionally submitted for inclusion in  
> the Work
> +      by You to the Licensor shall be under the terms and  
> conditions of
> +      this License, without any additional terms or conditions.
> +      Notwithstanding the above, nothing herein shall supersede or  
> modify
> +      the terms of any separate license agreement you may have  
> executed
> +      with Licensor regarding such Contributions.
> +
> +   6. Trademarks. This License does not grant permission to use  
> the trade
> +      names, trademarks, service marks, or product names of the  
> Licensor,
> +      except as required for reasonable and customary use in  
> describing the
> +      origin of the Work and reproducing the content of the NOTICE  
> file.
> +
> +   7. Disclaimer of Warranty. Unless required by applicable law or
> +      agreed to in writing, Licensor provides the Work (and each
> +      Contributor provides its Contributions) on an "AS IS" BASIS,
> +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
> +      implied, including, without limitation, any warranties or  
> conditions
> +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
> +      PARTICULAR PURPOSE. You are solely responsible for  
> determining the
> +      appropriateness of using or redistributing the Work and  
> assume any
> +      risks associated with Your exercise of permissions under  
> this License.
> +
> +   8. Limitation of Liability. In no event and under no legal theory,
> +      whether in tort (including negligence), contract, or otherwise,
> +      unless required by applicable law (such as deliberate and  
> grossly
> +      negligent acts) or agreed to in writing, shall any  
> Contributor be
> +      liable to You for damages, including any direct, indirect,  
> special,
> +      incidental, or consequential damages of any character  
> arising as a
> +      result of this License or out of the use or inability to use  
> the
> +      Work (including but not limited to damages for loss of  
> goodwill,
> +      work stoppage, computer failure or malfunction, or any and all
> +      other commercial damages or losses), even if such Contributor
> +      has been advised of the possibility of such damages.
> +
> +   9. Accepting Warranty or Additional Liability. While  
> redistributing
> +      the Work or Derivative Works thereof, You may choose to offer,
> +      and charge a fee for, acceptance of support, warranty,  
> indemnity,
> +      or other liability obligations and/or rights consistent with  
> this
> +      License. However, in accepting such obligations, You may act  
> only
> +      on Your own behalf and on Your sole responsibility, not on  
> behalf
> +      of any other Contributor, and only if You agree to indemnify,
> +      defend, and hold each Contributor harmless for any liability
> +      incurred by, or claims asserted against, such Contributor by  
> reason
> +      of your accepting any such warranty or additional liability.
> +
> +   END OF TERMS AND CONDITIONS
> +
> +   APPENDIX: How to apply the Apache License to your work.
> +
> +      To apply the Apache License to your work, attach the following
> +      boilerplate notice, with the fields enclosed by brackets "[]"
> +      replaced with your own identifying information. (Don't include
> +      the brackets!)  The text should be enclosed in the appropriate
> +      comment syntax for the file format. We also recommend that a
> +      file or class name and description of purpose be included on  
> the
> +      same "printed page" as the copyright notice for easier
> +      identification within third-party archives.
> +
> +   Copyright [yyyy] [name of copyright owner]
> +
> +   Licensed 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.
> +
>
> Added: geronimo/sandbox/plugins/global-jndi/NOTICE.txt
> URL: http://svn.apache.org/viewvc/geronimo/sandbox/plugins/global- 
> jndi/NOTICE.txt?rev=432101&view=auto
> ====================================================================== 
> ========
> --- geronimo/sandbox/plugins/global-jndi/NOTICE.txt (added)
> +++ geronimo/sandbox/plugins/global-jndi/NOTICE.txt Wed Aug 16  
> 18:32:59 2006
> @@ -0,0 +1,3 @@
> +This product includes software developed by
> +The Apache Software Foundation (http://www.apache.org/).
> +
>
> Added: geronimo/sandbox/plugins/global-jndi/pom.xml
> URL: http://svn.apache.org/viewvc/geronimo/sandbox/plugins/global- 
> jndi/pom.xml?rev=432101&view=auto
> ====================================================================== 
> ========
> --- geronimo/sandbox/plugins/global-jndi/pom.xml (added)
> +++ geronimo/sandbox/plugins/global-jndi/pom.xml Wed Aug 16  
> 18:32:59 2006
> @@ -0,0 +1,52 @@
> +<?xml version="1.0" encoding="ISO-8859-1"?>
> +<!--
> +    Copyright 2006 The Apache Software Foundation
> +
> +    Licensed 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.
> +-->
> +
> +<!-- $Rev: 429882 $ $Date: 2006-08-08 16:33:09 -0700 (Tue, 08 Aug  
> 2006) $ -->
> +
> +<project xmlns="http://maven.apache.org/POM/4.0.0"  
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http:// 
> maven.apache.org/maven-v4_0_0.xsd">
> +
> +    <modelVersion>4.0.0</modelVersion>
> +
> +    <parent>
> +        <groupId>org.apache.geronimo.modules</groupId>
> +        <artifactId>modules</artifactId>
> +        <version>1.2-SNAPSHOT</version>
> +        <relativePath>../pom.xml</relativePath>
> +    </parent>
> +
> +    <groupId>org.apache.geronimo.sandbox</groupId>
> +    <artifactId>geronimo-global-jndi</artifactId>
> +    <name>Geronimo :: Global JNDI</name>
> +
> +    <dependencies>
> +        <dependency>
> +            <groupId>org.apache.xbean</groupId>
> +            <artifactId>xbean-naming</artifactId>
> +            <version>COL-SNAPSHOT</version>
> +        </dependency>
> +        <dependency>
> +            <groupId>org.apache.geronimo.modules</groupId>
> +            <artifactId>geronimo-naming</artifactId>
> +            <version>${pom.version}</version>
> +        </dependency>
> +        <dependency>
> +            <groupId>backport-util-concurrent</groupId>
> +            <artifactId>backport-util-concurrent</artifactId>
> +        </dependency>
> +    </dependencies>
> +</project>
> +
>
> Added: geronimo/sandbox/plugins/global-jndi/src/java/org/apache/ 
> geronimo/gjndi/GlobalContextBootstrap.java
> URL: http://svn.apache.org/viewvc/geronimo/sandbox/plugins/global- 
> jndi/src/java/org/apache/geronimo/gjndi/GlobalContextBootstrap.java? 
> rev=432101&view=auto
> ====================================================================== 
> ========
> --- geronimo/sandbox/plugins/global-jndi/src/java/org/apache/ 
> geronimo/gjndi/GlobalContextBootstrap.java (added)
> +++ geronimo/sandbox/plugins/global-jndi/src/java/org/apache/ 
> geronimo/gjndi/GlobalContextBootstrap.java Wed Aug 16 18:32:59 2006
> @@ -0,0 +1,61 @@
> +/**
> + *
> + * Copyright 2006 The Apache Software Foundation
> + *
> + *  Licensed 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.gjndi;
> +
> +import org.apache.commons.logging.Log;
> +import org.apache.commons.logging.LogFactory;
> +import org.apache.geronimo.gbean.AbstractName;
> +import org.apache.geronimo.gbean.GBeanData;
> +import org.apache.geronimo.kernel.Kernel;
> +import org.apache.geronimo.kernel.KernelRegistry;
> +import org.apache.xbean.naming.global.GlobalContextManager;
> +
> +import java.net.URI;
> +
> +/**
> + * URLContextFactory for the java: namespace.
> + *
> + * @version $Rev: 355877 $ $Date: 2005-12-10 18:48:27 -0800 (Sat,  
> 10 Dec 2005) $
> + */
> +public class GlobalContextBootstrap extends GlobalContextManager {
> +    private static final Log log = LogFactory.getLog 
> (GlobalContextBootstrap.class);
> +
> +    private static boolean initalized;
> +
> +    public GlobalContextBootstrap() {
> +        synchronized (GlobalContextBootstrap.class) {
> +            if (!GlobalContextBootstrap.initalized) {
> +                ClassLoader classLoader = getClass().getClassLoader 
> ();
> +
> +                Kernel kernel = KernelRegistry.getSingleKernel();
> +
> +                try {
> +                    AbstractName globalContextName = new  
> AbstractName(new URI("bootstrap/global-jndi/0/boot? 
> name=GlobalContext"));
> +                    kernel.loadGBean(new GBeanData 
> (globalContextName, GlobalContextGBean.GBEAN_INFO), classLoader);
> +                    kernel.startGBean(globalContextName);
> +
> +                    AbstractName javaCompName = new AbstractName 
> (new URI("bootstrap/global-jndi/0/boot?name=JavaComp"));
> +                    kernel.loadGBean(new GBeanData(javaCompName,  
> JavaCompContextGBean.GBEAN_INFO), classLoader);
> +                    kernel.startGBean(javaCompName);
> +                } catch (Exception e) {
> +                    GlobalContextBootstrap.log.error("Unable to  
> bootstrap global jndi gbeans");
> +                }
> +                GlobalContextBootstrap.initalized = true;
> +            }
> +        }
> +    }
> +}
>
> Added: geronimo/sandbox/plugins/global-jndi/src/java/org/apache/ 
> geronimo/gjndi/GlobalContextGBean.java
> URL: http://svn.apache.org/viewvc/geronimo/sandbox/plugins/global- 
> jndi/src/java/org/apache/geronimo/gjndi/GlobalContextGBean.java? 
> rev=432101&view=auto
> ====================================================================== 
> ========
> --- geronimo/sandbox/plugins/global-jndi/src/java/org/apache/ 
> geronimo/gjndi/GlobalContextGBean.java (added)
> +++ geronimo/sandbox/plugins/global-jndi/src/java/org/apache/ 
> geronimo/gjndi/GlobalContextGBean.java Wed Aug 16 18:32:59 2006
> @@ -0,0 +1,76 @@
> +/**
> + *
> + * Copyright 2006 The Apache Software Foundation
> + *
> + *  Licensed 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.gjndi;
> +
> +import org.apache.geronimo.gbean.GBeanInfo;
> +import org.apache.geronimo.gbean.GBeanInfoBuilder;
> +import org.apache.geronimo.gbean.GBeanLifecycle;
> +import org.apache.geronimo.gbean.AbstractNameQuery;
> +import org.apache.geronimo.gbean.AbstractName;
> +import org.apache.geronimo.kernel.Kernel;
> +import org.apache.xbean.naming.global.GlobalContextManager;
> +
> +import javax.naming.Context;
> +import javax.naming.NamingException;
> +import java.util.Collections;
> +
> +/**
> + * @version $Rev$ $Date$
> + */
> +public class GlobalContextGBean extends KernelContextGBean  
> implements GBeanLifecycle {
> +    public GlobalContextGBean(Kernel kernel) throws NamingException {
> +        super("", new AbstractNameQuery(null,  
> Collections.EMPTY_MAP, Context.class.getName()), kernel);
> +    }
> +
> +    public void doStart() {
> +        super.doStart();
> +        GlobalContextManager.setGlobalContext(this);
> +    }
> +
> +    public void doStop() {
> +        GlobalContextManager.setGlobalContext(null);
> +        super.doStop();
> +    }
> +
> +    public void doFail() {
> +        GlobalContextManager.setGlobalContext(null);
> +        super.doFail();
> +    }
> +
> +    protected String createBindingName(AbstractName abstractName,  
> Object value) throws NamingException {
> +        if (value instanceof Context) {
> +            // don't bind yourself
> +            if (value == this) return null;
> +
> +            Context context = (Context) value;
> +            return context.getNameInNamespace();
> +        }
> +        throw new NamingException("value is not a context:  
> abstractName=" + abstractName + " valueType=" + value.getClass 
> ().getName());
> +    }
> +
> +    public static final GBeanInfo GBEAN_INFO;
> +
> +    public static GBeanInfo getGBeanInfo() {
> +        return GBEAN_INFO;
> +    }
> +
> +    static {
> +        GBeanInfoBuilder builder = GBeanInfoBuilder.createStatic 
> (GlobalContextGBean.class, "GlobalContext");
> +        builder.setConstructor(new String[]{"kernel"});
> +        GBEAN_INFO = builder.getBeanInfo();
> +    }
> +}
>
> Added: geronimo/sandbox/plugins/global-jndi/src/java/org/apache/ 
> geronimo/gjndi/JavaCompContextGBean.java
> URL: http://svn.apache.org/viewvc/geronimo/sandbox/plugins/global- 
> jndi/src/java/org/apache/geronimo/gjndi/JavaCompContextGBean.java? 
> rev=432101&view=auto
> ====================================================================== 
> ========
> --- geronimo/sandbox/plugins/global-jndi/src/java/org/apache/ 
> geronimo/gjndi/JavaCompContextGBean.java (added)
> +++ geronimo/sandbox/plugins/global-jndi/src/java/org/apache/ 
> geronimo/gjndi/JavaCompContextGBean.java Wed Aug 16 18:32:59 2006
> @@ -0,0 +1,49 @@
> +/**
> + *
> + * Copyright 2006 The Apache Software Foundation
> + *
> + *  Licensed 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.gjndi;
> +
> +import org.apache.geronimo.gbean.GBeanInfo;
> +import org.apache.geronimo.gbean.GBeanInfoBuilder;
> +import org.apache.geronimo.naming.java.RootContext;
> +import org.apache.xbean.naming.context.ContextFlyweight;
> +
> +import javax.naming.Context;
> +import javax.naming.NamingException;
> +
> +/**
> + * @version $Rev$ $Date$
> + */
> +public class JavaCompContextGBean extends ContextFlyweight {
> +    protected Context getContext() {
> +        return RootContext.getComponentContext();
> +    }
> +
> +    public String getNameInNamespace() throws NamingException {
> +        return "java:comp";
> +    }
> +
> +    public static final GBeanInfo GBEAN_INFO;
> +
> +    public static GBeanInfo getGBeanInfo() {
> +        return GBEAN_INFO;
> +    }
> +
> +    static {
> +        GBeanInfoBuilder builder = GBeanInfoBuilder.createStatic 
> (JavaCompContextGBean.class, "Context");
> +        GBEAN_INFO = builder.getBeanInfo();
> +    }
> +}
>
> Added: geronimo/sandbox/plugins/global-jndi/src/java/org/apache/ 
> geronimo/gjndi/KernelContextGBean.java
> URL: http://svn.apache.org/viewvc/geronimo/sandbox/plugins/global- 
> jndi/src/java/org/apache/geronimo/gjndi/KernelContextGBean.java? 
> rev=432101&view=auto
> ====================================================================== 
> ========
> --- geronimo/sandbox/plugins/global-jndi/src/java/org/apache/ 
> geronimo/gjndi/KernelContextGBean.java (added)
> +++ geronimo/sandbox/plugins/global-jndi/src/java/org/apache/ 
> geronimo/gjndi/KernelContextGBean.java Wed Aug 16 18:32:59 2006
> @@ -0,0 +1,198 @@
> +/**
> + *
> + * Copyright 2006 The Apache Software Foundation
> + *
> + *  Licensed 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.gjndi;
> +
> +import org.apache.commons.logging.Log;
> +import org.apache.commons.logging.LogFactory;
> +import org.apache.geronimo.gbean.AbstractName;
> +import org.apache.geronimo.gbean.AbstractNameQuery;
> +import org.apache.geronimo.gbean.GBeanInfo;
> +import org.apache.geronimo.gbean.GBeanInfoBuilder;
> +import org.apache.geronimo.gbean.GBeanLifecycle;
> +import org.apache.geronimo.kernel.GBeanNotFoundException;
> +import org.apache.geronimo.kernel.Kernel;
> +import org.apache.geronimo.kernel.lifecycle.LifecycleAdapter;
> +import org.apache.geronimo.kernel.lifecycle.LifecycleListener;
> +import org.apache.xbean.naming.context.UnmodifiableContext;
> +
> +import javax.naming.NamingException;
> +import java.util.Collections;
> +import java.util.HashMap;
> +import java.util.Map;
> +import java.util.Iterator;
> +import java.util.Set;
> +
> +/**
> + * @version $Rev$ $Date$
> + */
> +public class KernelContextGBean extends UnmodifiableContext  
> implements GBeanLifecycle {
> +    private static final Log log = LogFactory.getLog 
> (KernelContextGBean.class);
> +
> +    private final Kernel kernel;
> +    private final AbstractNameQuery abstractNameQuery;
> +    private final LifecycleListener listener = new  
> ContextLifecycleListener();
> +    private final Map bindingsByAbstractName = new HashMap();
> +
> +    public KernelContextGBean(String nameInNamespace,  
> AbstractNameQuery abstractNameQuery, Kernel kernel) throws  
> NamingException {
> +        super(nameInNamespace, Collections.EMPTY_MAP, false);
> +        this.abstractNameQuery = abstractNameQuery;
> +        this.kernel = kernel;
> +    }
> +
> +    public synchronized void doStart() {
> +        kernel.getLifecycleMonitor().addLifecycleListener 
> (listener, abstractNameQuery);
> +        Set set = kernel.listGBeans(abstractNameQuery);
> +        for (Iterator iterator = set.iterator(); iterator.hasNext 
> ();) {
> +            AbstractName abstractName = (AbstractName)  
> iterator.next();
> +            try {
> +                if (kernel.isRunning(abstractName)) {
> +                    addBinding(abstractName);
> +                }
> +            } catch (NamingException e) {
> +                log.error("Error adding binding for " +  
> abstractName);
> +            }
> +        }
> +
> +    }
> +
> +    public void doStop() {
> +        destroy();
> +    }
> +
> +    public void doFail() {
> +        destroy();
> +    }
> +
> +    private synchronized void destroy() {
> +        kernel.getLifecycleMonitor().removeLifecycleListener 
> (listener);
> +        for (Iterator iterator = bindingsByAbstractName.values 
> ().iterator(); iterator.hasNext();) {
> +            try {
> +                String name = (String) iterator.next();
> +                removeDeepBinding(name);
> +            } catch (NamingException ignored) {
> +            }
> +        }
> +        bindingsByAbstractName.clear();
> +    }
> +
> +    private class ContextLifecycleListener extends LifecycleAdapter {
> +        public void running(AbstractName abstractName) {
> +            try {
> +                addBinding(abstractName);
> +            } catch (NamingException e) {
> +                log.error("Error adding binding for " +  
> abstractName);
> +            }
> +        }
> +
> +        public void stopping(AbstractName abstractName) {
> +            removeBinding(abstractName);
> +        }
> +
> +        public void stopped(AbstractName abstractName) {
> +            removeBinding(abstractName);
> +        }
> +
> +        public void failed(AbstractName abstractName) {
> +            removeBinding(abstractName);
> +        }
> +
> +        public void unloaded(AbstractName abstractName) {
> +            removeBinding(abstractName);
> +        }
> +    }
> +
> +    /**
> +     * Binds the specified gbean.  This method uses  
> createBindingName and preprocessValue before binding the object.
> +     * @param abstractName the abstract name of the gbean to bind
> +     * @throws NamingException if an error occurs during binding
> +     */
> +    protected synchronized void addBinding(AbstractName  
> abstractName) throws NamingException {
> +        // get the gbean
> +        Object value = null;
> +        try {
> +            value = kernel.getGBean(abstractName);
> +        } catch (GBeanNotFoundException e) {
> +            throw new NamingException("GBean not found: " +  
> abstractName);
> +        }
> +
> +        // generate a name for this binding
> +        String name = createBindingName(abstractName, value);
> +        if (name == null) return;
> +
> +        // give sub classes a chance to preprocess the value
> +        value = preprocessVaue(abstractName, name, value);
> +        if (value == null) return;
> +
> +        // bind the value
> +
> +        addDeepBinding(name, value);
> +
> +        // remember where we bound this value
> +        bindingsByAbstractName.put(abstractName, name);
> +    }
> +
> +    /**
> +     * Unbinds the specified gbean.
> +     * @param abstractName the abstract name of the gbean to unbind
> +     */
> +    protected synchronized void removeBinding(AbstractName  
> abstractName) {
> +        String name = (String) bindingsByAbstractName.remove 
> (abstractName);
> +        if (name != null) {
> +            try {
> +                removeDeepBinding(name);
> +            } catch (NamingException ignored) {
> +            }
> +        }
> +    }
> +
> +    /**
> +     * Create a name under which we will bind the specified gbean  
> with the specified value.
> +     * By default, this method simply returns the "name" element  
> of the abstract name
> +     * @param abstractName the abstract name of the gbean to bind
> +     * @param value the gbean instance
> +     * @return the name under which the gbean should be bound
> +     */
> +    protected String createBindingName(AbstractName abstractName,  
> Object value) throws NamingException {
> +        return (String) abstractName.getName().get("name");
> +    }
> +
> +    /**
> +     * Preprocess the value before it is bound.  This is usefult  
> for wrapping values with reference objects.
> +     * By default, this method simply return the value.
> +     * @param abstractName the abstract name of the gbean to bind
> +     * @param name the name under which the gbean will be bound
> +     * @param value the gbean instance
> +     * @return the value to bind
> +     */
> +    protected Object preprocessVaue(AbstractName abstractName,  
> String name, Object value) throws NamingException {
> +        return value;
> +    }
> +
> +    public static final GBeanInfo GBEAN_INFO;
> +
> +    public static GBeanInfo getGBeanInfo() {
> +        return GBEAN_INFO;
> +    }
> +
> +    static {
> +        GBeanInfoBuilder builder = GBeanInfoBuilder.createStatic 
> (KernelContextGBean.class, "Context");
> +        builder.addAttribute("nameInNamespace", String.class, true);
> +        builder.addAttribute("abstractNameQuery",  
> AbstractNameQuery.class, true);
> +        builder.setConstructor(new String[]{"nameInNamespace",  
> "abstractNameQuery", "kernel"});
> +        GBEAN_INFO = builder.getBeanInfo();
> +    }
> +}
>
> Added: geronimo/sandbox/plugins/global-jndi/src/java/org/apache/ 
> geronimo/gjndi/java/javaURLContextFactory.java
> URL: http://svn.apache.org/viewvc/geronimo/sandbox/plugins/global- 
> jndi/src/java/org/apache/geronimo/gjndi/java/ 
> javaURLContextFactory.java?rev=432101&view=auto
> ====================================================================== 
> ========
> --- geronimo/sandbox/plugins/global-jndi/src/java/org/apache/ 
> geronimo/gjndi/java/javaURLContextFactory.java (added)
> +++ geronimo/sandbox/plugins/global-jndi/src/java/org/apache/ 
> geronimo/gjndi/java/javaURLContextFactory.java Wed Aug 16 18:32:59  
> 2006
> @@ -0,0 +1,27 @@
> +/**
> + *
> + * Copyright 2006 The Apache Software Foundation
> + *
> + *  Licensed 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.gjndi.java;
> +
> +import org.apache.geronimo.gjndi.GlobalContextBootstrap;
> +
> +/**
> + * URLContextFactory for the java: namespace.
> + *
> + * @version $Rev: 355877 $ $Date: 2005-12-10 18:48:27 -0800 (Sat,  
> 10 Dec 2005) $
> + */
> +public class javaURLContextFactory extends GlobalContextBootstrap {
> +}
>
> Added: geronimo/sandbox/plugins/global-jndi/src/site/site.xml
> URL: http://svn.apache.org/viewvc/geronimo/sandbox/plugins/global- 
> jndi/src/site/site.xml?rev=432101&view=auto
> ====================================================================== 
> ========
> --- geronimo/sandbox/plugins/global-jndi/src/site/site.xml (added)
> +++ geronimo/sandbox/plugins/global-jndi/src/site/site.xml Wed Aug  
> 16 18:32:59 2006
> @@ -0,0 +1,62 @@
> +<?xml version="1.0"?>
> +<!--
> +    Copyright 2006 The Apache Software Foundation
> +
> +    Licensed 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.
> +-->
> +
> +<!-- $Id: site.xml 429761 2006-08-08 18:31:52Z jdillon $ -->
> +
> +<project name="${project.name}">
> +    <skin>
> +        <groupId>org.apache.geronimo.genesis.config</groupId>
> +        <artifactId>geronimo-skin</artifactId>
> +        <version>1.0.0-SNAPSHOT</version>
> +    </skin>
> +
> +    <publishDate format="dd MMM yyyy"/>
> +
> +    <bannerLeft>
> +        <src>images/topleft_logo_437x64.gif</src>
> +    </bannerLeft>
> +
> +    <!--
> +    <bannerRight>
> +        <name>${project.name}</name>
> +    </bannerRight>
> +    -->
> +
> +    <body>
> +        <!--
> +        <links>
> +            <item name="Geronimo" href="http:// 
> geronimo.apache.org/"/>
> +            <item name="Apache" href="http://apache.org/"/>
> +        </links>
> +        -->
> +
> +        <menu name="Geronimo">
> +            <item name="Home" href="http://geronimo.apache.org/"/>
> +        </menu>
> +
> +        <menu ref="parent"/>
> +
> +        <menu ref="modules"/>
> +
> +        <menu ref="reports"/>
> +
> +        ${reports}
> +
> +    </body>
> +</project>
> +
> +
>
> Added: geronimo/sandbox/plugins/global-jndi/src/test/org/apache/ 
> geronimo/gjndi/AbstractContextTest.java
> URL: http://svn.apache.org/viewvc/geronimo/sandbox/plugins/global- 
> jndi/src/test/org/apache/geronimo/gjndi/AbstractContextTest.java? 
> rev=432101&view=auto
> ====================================================================== 
> ========
> --- geronimo/sandbox/plugins/global-jndi/src/test/org/apache/ 
> geronimo/gjndi/AbstractContextTest.java (added)
> +++ geronimo/sandbox/plugins/global-jndi/src/test/org/apache/ 
> geronimo/gjndi/AbstractContextTest.java Wed Aug 16 18:32:59 2006
> @@ -0,0 +1,176 @@
> +/**
> + *
> + * Copyright 2006 The Apache Software Foundation
> + *
> + *  Licensed 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.gjndi;
> +
> +import junit.framework.TestCase;
> +
> +import javax.naming.Context;
> +import javax.naming.NamingException;
> +import javax.naming.Name;
> +import javax.naming.NamingEnumeration;
> +import javax.naming.NameClassPair;
> +import javax.naming.Binding;
> +import java.util.Map;
> +import java.util.Iterator;
> +import java.util.TreeSet;
> +import java.util.HashMap;
> +
> +import org.apache.xbean.naming.context.ContextUtil;
> +
> +/**
> + * @version $Rev$ $Date$
> + */
> +public abstract class AbstractContextTest extends TestCase {
> +    public static void assertEq(Map expected, Context actual)  
> throws NamingException {
> +        AbstractContextTest.assertEq(ContextUtil.buildMapTree 
> (expected), actual, actual, null);
> +    }
> +
> +    public static void assertEq(Map expected, String  
> pathInExpected, Context actual) throws NamingException {
> +        ContextUtil.Node node = ContextUtil.buildMapTree(expected);
> +        Name parsedName = actual.getNameParser("").parse 
> (pathInExpected);
> +        for (int i = 0; i < parsedName.size(); i++) {
> +            String part = parsedName.get(i);
> +            Object value = node.get(part);
> +            if (value == null) {
> +                throw new NamingException("look for " +  
> parsedName.getPrefix(i+1) + " in node tree is null ");
> +            }
> +            node = (ContextUtil.Node) value;
> +        }
> +
> +        AbstractContextTest.assertEq(node, actual, actual, null);
> +    }
> +
> +    private static void assertEq(ContextUtil.Node node, Context  
> rootContext, Context currentContext, String path) throws  
> NamingException {
> +        for (Iterator iterator = node.entrySet().iterator();  
> iterator.hasNext();) {
> +            Map.Entry entry = (Map.Entry) iterator.next();
> +            String expectedName = (String) entry.getKey();
> +            Object expectedValue = entry.getValue();
> +
> +            String fullName = path == null ? expectedName : path +  
> "/" + expectedName;
> +
> +            // verify we can lookup by string name and parsed name  
> using the root context and current context
> +            Object value = AbstractContextTest.assertLookup 
> (expectedValue, currentContext, expectedName);
> +            Object absoluteValue = AbstractContextTest.assertLookup 
> (expectedValue, rootContext, fullName);
> +            assertSame(fullName, value, absoluteValue);
> +
> +            if (expectedValue instanceof ContextUtil.Node) {
> +                ContextUtil.Node expectedNode = (ContextUtil.Node)  
> expectedValue;
> +
> +                // verufy listing of this context returns the  
> expected results
> +                AbstractContextTest.assertList(expectedNode,  
> currentContext, expectedName);
> +                AbstractContextTest.assertList(expectedNode,  
> rootContext, fullName);
> +
> +                AbstractContextTest.assertEq(expectedNode,  
> rootContext, (Context) value, fullName);
> +            }
> +        }
> +    }
> +
> +    public static Object assertLookup(Object expectedValue,  
> Context context, String name) throws NamingException {
> +        Object value = context.lookup(name);
> +
> +        String contextName = context.getNameInNamespace();
> +        if (contextName == null || contextName.length() == 0)  
> contextName = "<root>";
> +
> +        assertNotNull("lookup of " +  name + " on " + contextName  
> + " returned null", value);
> +
> +        if (expectedValue instanceof ContextUtil.Node) {
> +            assertTrue("Expected lookup of " +  name + " on " +  
> contextName + " to return a Context, but got a " + value.getClass 
> ().getName(),
> +                    value instanceof Context);
> +        } else {
> +            assertEquals("lookup of " + name + " on " +  
> contextName, expectedValue, value);
> +        }
> +
> +        Name parsedName = context.getNameParser("").parse(name);
> +        Object valueFromParsedName = context.lookup(parsedName);
> +        assertSame("lookup of " +  name + " on " + contextName + "  
> using a parsed name", value, valueFromParsedName);
> +
> +        return value;
> +    }
> +
> +    public static void assertList(ContextUtil.Node node, Context  
> context, String name) throws NamingException {
> +        String contextName = context.getNameInNamespace();
> +        if (contextName == null || contextName.length() == 0)  
> contextName = "<root>";
> +
> +        AbstractContextTest.assertListResults(node, context.list 
> (name), contextName, name, false);
> +        AbstractContextTest.assertListResults(node,  
> context.listBindings(name), contextName, name, true);
> +
> +        Name parsedName = context.getNameParser("").parse(name);
> +        AbstractContextTest.assertListResults(node, context.list 
> (parsedName), contextName, "parsed name " + name, false);
> +        AbstractContextTest.assertListResults(node,  
> context.listBindings(parsedName), contextName, "parsed name " +  
> name, true);
> +    }
> +
> +    public static void assertListResults(ContextUtil.Node node,  
> NamingEnumeration enumeration, String contextName, String name,  
> boolean wasListBinding) {
> +        Map actualValues;
> +        if (wasListBinding) {
> +            actualValues = AbstractContextTest.toListBindingResults 
> (enumeration);
> +        } else {
> +            actualValues = AbstractContextTest.toListResults 
> (enumeration);
> +        }
> +
> +        for (Iterator iterator = node.entrySet().iterator();  
> iterator.hasNext();) {
> +            Map.Entry entry = (Map.Entry) iterator.next();
> +            String expectedName = (String) entry.getKey();
> +            Object expectedValue = entry.getValue();
> +
> +            Object actualValue = actualValues.get(expectedName);
> +
> +            assertNotNull("list of " + name + " on " + contextName  
> + " did not find value for " + name, actualValue);
> +            if (wasListBinding) {
> +                if (expectedValue instanceof ContextUtil.Node) {
> +                    assertTrue("Expected list of " + name + " on "  
> + contextName + " result value for " + name + " to return a  
> Context, but got a " + actualValue.getClass().getName(),
> +                        actualValue instanceof Context);
> +                } else {
> +                    assertEquals("list of " + name + " on " +  
> contextName + " for value for " + name, expectedValue, actualValue);
> +                }
> +            } else {
> +                if (!(expectedValue instanceof ContextUtil.Node)) {
> +                    assertEquals("list of " + name + " on " +  
> contextName + " for value for " + name, expectedValue.getClass 
> ().getName(), actualValue);
> +                } else {
> +                    // can't really test this since it the value  
> is the name of a nested node class
> +                }
> +            }
> +        }
> +
> +        TreeSet extraNames = new TreeSet(actualValues.keySet());
> +        extraNames.removeAll(node.keySet());
> +        if (!extraNames.isEmpty()) {
> +            fail("list of " + name + " on " + contextName + "  
> found extra values: " + extraNames);
> +        }
> +    }
> +
> +    private static Map toListResults(NamingEnumeration enumeration) {
> +        Map result = new HashMap();
> +        while (enumeration.hasMoreElements()) {
> +            NameClassPair nameClassPair = (NameClassPair)  
> enumeration.nextElement();
> +            String name = nameClassPair.getName();
> +            assertFalse(result.containsKey(name));
> +            result.put(name, nameClassPair.getClassName());
> +        }
> +        return result;
> +    }
> +
> +    private static Map toListBindingResults(NamingEnumeration  
> enumeration) {
> +        Map result = new HashMap();
> +        while (enumeration.hasMoreElements()) {
> +            Binding binding = (Binding) enumeration.nextElement();
> +            String name = binding.getName();
> +            assertFalse(result.containsKey(name));
> +            result.put(name, binding.getObject());
> +        }
> +        return result;
> +    }
> +}
>
> Added: geronimo/sandbox/plugins/global-jndi/src/test/org/apache/ 
> geronimo/gjndi/JavaCompContextTest.java
> URL: http://svn.apache.org/viewvc/geronimo/sandbox/plugins/global- 
> jndi/src/test/org/apache/geronimo/gjndi/JavaCompContextTest.java? 
> rev=432101&view=auto
> ====================================================================== 
> ========
> --- geronimo/sandbox/plugins/global-jndi/src/test/org/apache/ 
> geronimo/gjndi/JavaCompContextTest.java (added)
> +++ geronimo/sandbox/plugins/global-jndi/src/test/org/apache/ 
> geronimo/gjndi/JavaCompContextTest.java Wed Aug 16 18:32:59 2006
> @@ -0,0 +1,206 @@
> +/**
> + *
> + * Copyright 2006 The Apache Software Foundation
> + *
> + *  Licensed 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.gjndi;
> +
> +import junit.framework.TestCase;
> +
> +import javax.naming.NamingException;
> +import javax.naming.CompositeName;
> +import javax.naming.CompoundName;
> +import javax.naming.Context;
> +import javax.naming.NamingEnumeration;
> +import javax.naming.NameClassPair;
> +import javax.naming.Binding;
> +import javax.naming.LinkRef;
> +import javax.naming.InitialContext;
> +import java.util.Map;
> +import java.util.HashMap;
> +import java.util.Iterator;
> +import java.util.NoSuchElementException;
> +import java.util.Properties;
> +import java.util.Collections;
> +
> +import org.apache.geronimo.naming.java.RootContext;
> +import org.apache.xbean.naming.context.UnmodifiableContext;
> +import org.apache.xbean.naming.context.ImmutableContext;
> +import org.apache.xbean.naming.global.GlobalContextManager;
> +
> +/**
> + * @version $Rev$ $Date$
> + */
> +public class JavaCompContextTest extends TestCase {
> +    protected UnmodifiableContext readOnlyContext;
> +    protected Properties syntax;
> +    protected Map envBinding;
> +    protected Context initialContext;
> +    protected Context compContext;
> +    protected Context envContext;
> +
> +    public void testInitialContext() throws NamingException {
> +        assertEquals("Hello", initialContext.lookup("java:comp/env/ 
> hello"));
> +        assertEquals("Hello", initialContext.lookup(new  
> CompositeName("java:comp/env/hello")));
> +    }
> +
> +    public void testLookup() throws NamingException {
> +        assertEquals("Hello", envContext.lookup("hello"));
> +        assertEquals("Hello", compContext.lookup("env/hello"));
> +        try {
> +            envContext.lookup("foo");
> +            fail();
> +        } catch (NamingException e) {
> +            // OK
> +        }
> +        assertEquals("Hello", envContext.lookup(new CompositeName 
> ("hello")));
> +        assertEquals("Hello", compContext.lookup(new CompositeName 
> ("env/hello")));
> +        assertEquals("Hello", envContext.lookup(new CompoundName 
> ("hello", syntax)));
> +        assertEquals("Hello", compContext.lookup(new CompoundName 
> ("env/hello", syntax)));
> +
> +        assertEquals(envContext, envContext.lookup(""));
> +    }
> +
> +    public void testSubContext() throws NamingException {
> +        assertEquals("long name", initialContext.lookup("java:comp/ 
> env/here/there/anywhere"));
> +        Context intermediate = (Context)initialContext.lookup 
> ("java:comp/env/here/there");
> +        assertNotNull(intermediate);
> +        assertEquals("long name", intermediate.lookup("anywhere"));
> +    }
> +
> +    public void testSchemeLookup() throws NamingException {
> +//        envContext.lookup("dns:apache.org");
> +        assertEquals("Hello", envContext.lookup("java:comp/env/ 
> hello"));
> +        assertEquals("Hello", compContext.lookup("java:comp/env/ 
> hello"));
> +    }
> +
> +    public void testLookupLink() throws NamingException {
> +        assertEquals("Hello", envContext.lookup("link"));
> +    }
> +
> +    public void testComposeName() throws NamingException {
> +        assertEquals("org/research/user/jane",  
> envContext.composeName("user/jane", "org/research"));
> +        assertEquals("research/user/jane", envContext.composeName 
> ("user/jane", "research"));
> +        assertEquals(new CompositeName("org/research/user/jane"),  
> envContext.composeName(new CompositeName("user/jane"), new  
> CompositeName("org/research")));
> +        assertEquals(new CompositeName("research/user/jane"),  
> envContext.composeName(new CompositeName("user/jane"), new  
> CompositeName("research")));
> +    }
> +
> +    public void testList() throws NamingException {
> +        NamingEnumeration ne;
> +        Map expected;
> +        Map result;
> +
> +        expected = new HashMap();
> +        for (Iterator i = envBinding.entrySet().iterator();  
> i.hasNext();) {
> +            Map.Entry entry = (Map.Entry) i.next();
> +            expected.put(entry.getKey(), entry.getValue().getClass 
> ().getName());
> +        }
> +        ne = envContext.list("");
> +        result = new HashMap();
> +        while (ne.hasMore()) {
> +            NameClassPair pair = (NameClassPair) ne.next();
> +            result.put(pair.getName(), pair.getClassName());
> +        }
> +        assertEquals(expected, result);
> +
> +        try {
> +            ne.next();
> +            fail();
> +        } catch (NoSuchElementException e) {
> +            // ok
> +        }
> +        try {
> +            ne.nextElement();
> +            fail();
> +        } catch (NoSuchElementException e) {
> +            // ok
> +        }
> +    }
> +
> +    public void testListBindings() throws NamingException {
> +        NamingEnumeration ne;
> +        ne = envContext.listBindings("");
> +        int count = 0;
> +        while (ne.hasMore()) {
> +            count ++;
> +            Binding pair = (Binding) ne.next();
> +            assertTrue(envBinding.containsKey(pair.getName()));
> +            if (! (envBinding.get(pair.getName()) instanceof  
> Context)) {
> +                assertEquals(pair.getObject(), envBinding.get 
> (pair.getName()));
> +            }
> +        }
> +        assertEquals(envBinding.size(), count);
> +
> +        try {
> +            ne.next();
> +            fail();
> +        } catch (NoSuchElementException e) {
> +            // ok
> +        }
> +        try {
> +            ne.nextElement();
> +            fail();
> +        } catch (NoSuchElementException e) {
> +            // ok
> +        }
> +    }
> +
> +    public void testSpeed() throws NamingException {
> +        Context comp = (Context) initialContext.lookup("java:comp");
> +
> +        long start = System.currentTimeMillis();
> +        for (int i=0; i < 1000000; i++) {
> +            // initialContext.lookup("java:comp/hello"); // this  
> is sloooow due to scheme resolution
> +            // envContext.lookup("hello");
> +            comp.lookup("env/hello");
> +        }
> +
> +        long end = System.currentTimeMillis();
> +        System.out.println("lookup(String) milliseconds: " + (end  
> - start));
> +    }
> +
> +    protected void setUp() throws Exception {
> +        super.setUp();
> +        System.setProperty("java.naming.factory.initial",  
> GlobalContextManager.class.getName());
> +        System.setProperty("java.naming.factory.url.pkgs",  
> "org.apache.geronimo.knaming");
> +
> +        LinkRef link = new LinkRef("java:comp/env/hello");
> +
> +        Map bindings = new HashMap();
> +        bindings.put("env/hello", "Hello");
> +        bindings.put("env/world", "Hello World");
> +        bindings.put("env/here/there/anywhere", "long name");
> +        bindings.put("env/link", link);
> +
> +        readOnlyContext = new UnmodifiableContext(bindings);
> +
> +        envBinding = new HashMap();
> +        envBinding.put("hello", "Hello");
> +        envBinding.put("world", "Hello World");
> +        envBinding.put("here", readOnlyContext.lookup("env/here"));
> +        envBinding.put("link", link);
> +
> +        RootContext.setComponentContext(readOnlyContext);
> +
> +        Context javaCompContext = new JavaCompContextGBean();
> +        Context globalContext = new ImmutableContext 
> (Collections.singletonMap(javaCompContext.getNameInNamespace(),  
> javaCompContext));
> +        GlobalContextManager.setGlobalContext(globalContext);
> +
> +        initialContext = new InitialContext();
> +        compContext = (Context) initialContext.lookup("java:comp");
> +        envContext = (Context) initialContext.lookup("java:comp/ 
> env");
> +
> +        syntax = new Properties();
> +    }
> +}
>
> Added: geronimo/sandbox/plugins/global-jndi/src/test/org/apache/ 
> geronimo/gjndi/KernelContextGBeanTest.java
> URL: http://svn.apache.org/viewvc/geronimo/sandbox/plugins/global- 
> jndi/src/test/org/apache/geronimo/gjndi/KernelContextGBeanTest.java? 
> rev=432101&view=auto
> ====================================================================== 
> ========
> --- geronimo/sandbox/plugins/global-jndi/src/test/org/apache/ 
> geronimo/gjndi/KernelContextGBeanTest.java (added)
> +++ geronimo/sandbox/plugins/global-jndi/src/test/org/apache/ 
> geronimo/gjndi/KernelContextGBeanTest.java Wed Aug 16 18:32:59 2006
> @@ -0,0 +1,171 @@
> +/**
> + *
> + * Copyright 2006 The Apache Software Foundation
> + *
> + *  Licensed 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.gjndi;
> +
> +import org.apache.geronimo.gbean.GBeanData;
> +import org.apache.geronimo.gbean.GBeanInfo;
> +import org.apache.geronimo.gbean.GBeanInfoBuilder;
> +import org.apache.geronimo.gbean.AbstractName;
> +import org.apache.geronimo.kernel.Kernel;
> +import org.apache.geronimo.kernel.KernelFactory;
> +import org.apache.geronimo.kernel.config.ConfigurationData;
> +import org.apache.geronimo.kernel.config.ConfigurationUtil;
> +import  
> org.apache.geronimo.kernel.config.EditableConfigurationManager;
> +import  
> org.apache.geronimo.kernel.config.EditableKernelConfigurationManager;
> +import org.apache.geronimo.kernel.repository.Artifact;
> +import org.apache.geronimo.kernel.repository.DefaultArtifactManager;
> +import org.apache.geronimo.kernel.repository.DefaultArtifactResolver;
> +import org.apache.geronimo.naming.java.RootContext;
> +import org.apache.xbean.naming.context.ImmutableContext;
> +import org.apache.xbean.naming.global.GlobalContextManager;
> +
> +import javax.naming.Context;
> +import javax.naming.InitialContext;
> +import java.util.HashMap;
> +import java.util.Hashtable;
> +import java.util.Map;
> +import java.util.Iterator;
> +import java.util.Collections;
> +
> +/**
> + * @version $Rev$ $Date$
> + */
> +public class KernelContextGBeanTest extends AbstractContextTest {
> +    private Kernel kernel;
> +    private EditableConfigurationManager configurationManager;
> +    private ConfigurationData configurationData;
> +    private GBeanInfo immutableContextGBeanInfo;
> +    private Hashtable contextEnv;
> +
> +    public void test() throws Exception {
> +        Map globalBindings = new HashMap();
> +        globalBindings.put("java:comp/string", "foo");
> +        globalBindings.put("java:comp/nested/context/string", "bar");
> +        globalBindings.put("java:comp/a/b/c/d/e/string", "beer");
> +        globalBindings.put("java:comp/a/b/c/d/e/one", new Integer 
> (1));
> +        globalBindings.put("java:comp/a/b/c/d/e/two", new Integer 
> (2));
> +        globalBindings.put("java:comp/a/b/c/d/e/three", new Integer 
> (3));
> +        globalBindings.put("test/env/foo", new Integer(42));
> +        globalBindings.put("test/baz", "caz");
> +
> +        Map javaCompBindings = getNestedBindings(globalBindings,  
> "java:comp/");
> +        ImmutableContext javaCompContext = new ImmutableContext 
> (javaCompBindings);
> +        RootContext.setComponentContext(javaCompContext);
> +
> +        GBeanData javaComp = configurationData.addGBean 
> ("JavaComp", JavaCompContextGBean.GBEAN_INFO);
> +        AbstractName javaCompName = javaComp.getAbstractName();
> +
> +        GBeanData test = configurationData.addGBean("Test",  
> immutableContextGBeanInfo);
> +        AbstractName testName = test.getAbstractName();
> +        test.setAttribute("nameInNamespace", "test");
> +        Map testBindings = getNestedBindings(globalBindings,  
> "test/");
> +        test.setAttribute("bindings", testBindings);
> +
> +        configurationManager.loadConfiguration(configurationData);
> +        configurationManager.startConfiguration 
> (configurationData.getId());
> +
> +        InitialContext ctx = new InitialContext(contextEnv);
> +        assertEq(globalBindings, ctx);
> +
> +        //
> +        // stop test context
> +        //
> +        kernel.stopGBean(testName);
> +
> +        HashMap javaCompOnlyBindings = new HashMap(globalBindings);
> +        javaCompOnlyBindings.remove("test/env/foo");
> +        javaCompOnlyBindings.remove("test/baz");
> +        assertEq(javaCompOnlyBindings, ctx);
> +
> +        //
> +        // stop java context
> +        //
> +        kernel.stopGBean(javaCompName);
> +
> +        assertEq(Collections.EMPTY_MAP, ctx);
> +
> +
> +        //
> +        // restart java context
> +        //
> +        kernel.startGBean(javaCompName);
> +
> +        assertEq(javaCompOnlyBindings, ctx);
> +
> +        //
> +        // restart test context
> +        //
> +        kernel.startGBean(testName);
> +
> +        assertEq(globalBindings, ctx);
> +    }
> +
> +    protected Map getNestedBindings(Map globalBindings, String  
> nestedPath) {
> +        HashMap nestedBindings = new HashMap();
> +        for (Iterator iterator = globalBindings.entrySet().iterator 
> (); iterator.hasNext();) {
> +            Map.Entry entry = (Map.Entry) iterator.next();
> +            String globalName = (String) entry.getKey();
> +            Object value = entry.getValue();
> +
> +            if (globalName.startsWith(nestedPath)) {
> +                String nestedName = globalName.substring 
> (nestedPath.length());
> +                nestedBindings.put(nestedName, value);
> +            }
> +        }
> +        return nestedBindings;
> +    }
> +
> +    protected void setUp() throws Exception {
> +        super.setUp();
> +
> +        kernel = KernelFactory.newInstance().createKernel("test");
> +        kernel.boot();
> +
> +        ConfigurationData bootstrap = new ConfigurationData(new  
> Artifact("bootstrap", "bootstrap", "", "car"), kernel.getNaming());
> +
> +        GBeanData artifactManagerData = bootstrap.addGBean 
> ("ArtifactManager", DefaultArtifactManager.GBEAN_INFO);
> +
> +        GBeanData artifactResolverData = bootstrap.addGBean 
> ("ArtifactResolver", DefaultArtifactResolver.GBEAN_INFO);
> +        artifactResolverData.setReferencePattern 
> ("ArtifactManager", artifactManagerData.getAbstractName());
> +
> +        GBeanData configurationManagerData = bootstrap.addGBean 
> ("ConfigurationManager",  
> EditableKernelConfigurationManager.GBEAN_INFO);
> +        configurationManagerData.setReferencePattern 
> ("ArtifactManager", artifactManagerData.getAbstractName());
> +        configurationManagerData.setReferencePattern 
> ("ArtifactResolver", artifactResolverData.getAbstractName());
> +
> +        ConfigurationUtil.loadBootstrapConfiguration(kernel,  
> bootstrap, getClass().getClassLoader());
> +
> +        configurationManager =  
> ConfigurationUtil.getEditableConfigurationManager(kernel);
> +
> +        configurationData = new ConfigurationData(new Artifact 
> ("test", "test", "", "car"), kernel.getNaming());
> +        configurationData.addGBean("GlobalContext",  
> GlobalContextGBean.GBEAN_INFO);
> +
> +        GBeanInfoBuilder builder = new GBeanInfoBuilder 
> (ImmutableContext.class);
> +        builder.setConstructor(new String[] {"nameInNamespace",  
> "bindings", "cacheReferences"});
> +        builder.addAttribute("nameInNamespace", String.class, true);
> +        builder.addAttribute("bindings", Map.class, true);
> +        builder.addAttribute("cacheReferences", boolean.class, true);
> +        immutableContextGBeanInfo = builder.getBeanInfo();
> +
> +        contextEnv = new Hashtable();
> +        contextEnv.put(Context.INITIAL_CONTEXT_FACTORY,  
> GlobalContextManager.class.getName());
> +    }
> +
> +    protected void tearDown() throws Exception {
> +        kernel.shutdown();
> +        super.tearDown();
> +    }
> +}
>
>