is this a backout only, or is there new code here?

On Aug 1, 2005, at 2:21 AM, [EMAIL PROTECTED] wrote:

Author: dain
Date: Sun Jul 31 23:21:08 2005
New Revision: 226753

URL: http://svn.apache.org/viewcvs?rev=226753&view=rev
Log:
Remove GBeanName code

Removed:
geronimo/branches/v1_0_M4-QA/modules/kernel/src/java/org/apache/ geronimo/gbean/GBeanName.java geronimo/branches/v1_0_M4-QA/modules/kernel/src/test/org/apache/ geronimo/gbean/GBeanNameTest.java
Modified:
geronimo/branches/v1_0_M4-QA/modules/deployment/src/java/org/ apache/geronimo/deployment/GBeanDataRegistry.java geronimo/branches/v1_0_M4-QA/modules/kernel/src/java/org/apache/ geronimo/kernel/basic/BasicKernel.java geronimo/branches/v1_0_M4-QA/modules/kernel/src/java/org/apache/ geronimo/kernel/basic/BasicRegistry.java

Modified: geronimo/branches/v1_0_M4-QA/modules/deployment/src/java/ org/apache/geronimo/deployment/GBeanDataRegistry.java URL: http://svn.apache.org/viewcvs/geronimo/branches/v1_0_M4-QA/ modules/deployment/src/java/org/apache/geronimo/deployment/ GBeanDataRegistry.java?rev=226753&r1=226752&r2=226753&view=diff ====================================================================== ======== --- geronimo/branches/v1_0_M4-QA/modules/deployment/src/java/org/ apache/geronimo/deployment/GBeanDataRegistry.java (original) +++ geronimo/branches/v1_0_M4-QA/modules/deployment/src/java/org/ apache/geronimo/deployment/GBeanDataRegistry.java Sun Jul 31 23:21:08 2005
@@ -25,7 +25,6 @@
 import javax.management.ObjectName;

 import org.apache.geronimo.gbean.GBeanData;
-import org.apache.geronimo.gbean.GBeanName;
 import org.apache.geronimo.kernel.GBeanNotFoundException;

 /**

Modified: geronimo/branches/v1_0_M4-QA/modules/kernel/src/java/org/ apache/geronimo/kernel/basic/BasicKernel.java URL: http://svn.apache.org/viewcvs/geronimo/branches/v1_0_M4-QA/ modules/kernel/src/java/org/apache/geronimo/kernel/basic/ BasicKernel.java?rev=226753&r1=226752&r2=226753&view=diff ====================================================================== ======== --- geronimo/branches/v1_0_M4-QA/modules/kernel/src/java/org/apache/ geronimo/kernel/basic/BasicKernel.java (original) +++ geronimo/branches/v1_0_M4-QA/modules/kernel/src/java/org/apache/ geronimo/kernel/basic/BasicKernel.java Sun Jul 31 23:21:08 2005
@@ -21,7 +21,6 @@
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.LinkedList;
-import java.util.Map;
 import java.util.Set;
 import javax.management.ObjectName;

@@ -29,7 +28,6 @@
 import org.apache.commons.logging.LogFactory;
 import org.apache.geronimo.gbean.GBeanData;
 import org.apache.geronimo.gbean.GBeanInfo;
-import org.apache.geronimo.gbean.GBeanName;
 import org.apache.geronimo.gbean.runtime.GBeanInstance;
 import org.apache.geronimo.kernel.DependencyManager;
 import org.apache.geronimo.kernel.GBeanAlreadyExistsException;
@@ -128,7 +126,7 @@
throw new IllegalArgumentException("Kernel name may not contain a ':', '*' or '?' character");
         }
         this.kernelName = kernelName;
-        this.registry = new BasicRegistry();
+        this.registry = new BasicRegistry(kernelName);
     }

     public String getKernelName() {
@@ -158,97 +156,88 @@
         return proxyManager;
     }

- public Object getAttribute(ObjectName objectName, String attributeName) throws GBeanNotFoundException, NoSuchAttributeException, Exception { - GBeanInstance gbeanInstance = registry.getGBeanInstance (createGBeanName(objectName)); + public Object getAttribute(ObjectName name, String attributeName) throws GBeanNotFoundException, NoSuchAttributeException, Exception { + GBeanInstance gbeanInstance = registry.getGBeanInstance (name);
         return gbeanInstance.getAttribute(attributeName);
     }

- public void setAttribute(ObjectName objectName, String attributeName, Object attributeValue) throws GBeanNotFoundException, NoSuchAttributeException, Exception { - GBeanInstance gbeanInstance = registry.getGBeanInstance (createGBeanName(objectName)); + public void setAttribute(ObjectName name, String attributeName, Object attributeValue) throws GBeanNotFoundException, NoSuchAttributeException, Exception { + GBeanInstance gbeanInstance = registry.getGBeanInstance (name);
         gbeanInstance.setAttribute(attributeName, attributeValue);
     }

- public Object invoke(ObjectName objectName, String methodName) throws GBeanNotFoundException, NoSuchOperationException, InternalKernelException, Exception {
-        return invoke(objectName, methodName, NO_ARGS, NO_TYPES);
+ public Object invoke(ObjectName name, String methodName) throws GBeanNotFoundException, NoSuchOperationException, InternalKernelException, Exception {
+        return invoke(name, methodName, NO_ARGS, NO_TYPES);
     }

- public Object invoke(ObjectName objectName, String methodName, Object[] args, String[] types) throws GBeanNotFoundException, NoSuchOperationException, InternalKernelException, Exception { - GBeanInstance gbeanInstance = registry.getGBeanInstance (createGBeanName(objectName)); + public Object invoke(ObjectName name, String methodName, Object [] args, String[] types) throws GBeanNotFoundException, NoSuchOperationException, InternalKernelException, Exception { + GBeanInstance gbeanInstance = registry.getGBeanInstance (name);
         return gbeanInstance.invoke(methodName, args, types);
     }

     public boolean isLoaded(ObjectName name) {
-        return registry.isRegistered(createGBeanName(name));
+        return registry.isRegistered(name);
     }

public GBeanInfo getGBeanInfo(ObjectName name) throws GBeanNotFoundException { - GBeanInstance gbeanInstance = registry.getGBeanInstance (createGBeanName(name)); + GBeanInstance gbeanInstance = registry.getGBeanInstance (name);
         return gbeanInstance.getGBeanInfo();
     }

public GBeanData getGBeanData(ObjectName name) throws GBeanNotFoundException, InternalKernelException { - GBeanInstance gbeanInstance = registry.getGBeanInstance (createGBeanName(name)); + GBeanInstance gbeanInstance = registry.getGBeanInstance (name);
         return gbeanInstance.getGBeanData();
     }

public void loadGBean(GBeanData gbeanData, ClassLoader classLoader) throws GBeanAlreadyExistsException, InternalKernelException {
-        ObjectName objectName = gbeanData.getName();
- GBeanInstance gbeanInstance = new GBeanInstance(gbeanData, this, dependencyManager, lifecycleMonitor.createLifecycleBroadcaster (objectName), classLoader);
+        ObjectName name = gbeanData.getName();
+ GBeanInstance gbeanInstance = new GBeanInstance(gbeanData, this, dependencyManager, lifecycleMonitor.createLifecycleBroadcaster (name), classLoader);
         registry.register(gbeanInstance);
     }

public void startGBean(ObjectName name) throws GBeanNotFoundException, InternalKernelException, IllegalStateException { - GBeanInstance gbeanInstance = registry.getGBeanInstance (createGBeanName(name)); + GBeanInstance gbeanInstance = registry.getGBeanInstance (name);
         gbeanInstance.start();
     }

public void startRecursiveGBean(ObjectName name) throws GBeanNotFoundException, InternalKernelException, IllegalStateException { - GBeanInstance gbeanInstance = registry.getGBeanInstance (createGBeanName(name)); + GBeanInstance gbeanInstance = registry.getGBeanInstance (name);
         gbeanInstance.startRecursive();
     }

public void stopGBean(ObjectName name) throws GBeanNotFoundException, InternalKernelException, IllegalStateException { - GBeanInstance gbeanInstance = registry.getGBeanInstance (createGBeanName(name)); + GBeanInstance gbeanInstance = registry.getGBeanInstance (name);
         gbeanInstance.stop();
     }

public void unloadGBean(ObjectName name) throws GBeanNotFoundException, InternalKernelException, IllegalStateException {
-        GBeanName gbeanName = createGBeanName(name);
- GBeanInstance gbeanInstance = registry.getGBeanInstance (gbeanName); + GBeanInstance gbeanInstance = registry.getGBeanInstance (name);
         gbeanInstance.die();
-        registry.unregister(gbeanName);
+        registry.unregister(name);
     }

public int getGBeanState(ObjectName name) throws GBeanNotFoundException { - GBeanInstance gbeanInstance = registry.getGBeanInstance (createGBeanName(name)); + GBeanInstance gbeanInstance = registry.getGBeanInstance (name);
         return gbeanInstance.getState();
     }

public long getGBeanStartTime(ObjectName name) throws GBeanNotFoundException { - GBeanInstance gbeanInstance = registry.getGBeanInstance (createGBeanName(name)); + GBeanInstance gbeanInstance = registry.getGBeanInstance (name);
         return gbeanInstance.getStartTime();
     }

public boolean isGBeanEnabled(ObjectName name) throws GBeanNotFoundException { - GBeanInstance gbeanInstance = registry.getGBeanInstance (createGBeanName(name)); + GBeanInstance gbeanInstance = registry.getGBeanInstance (name);
         return gbeanInstance.isEnabled();
     }

public void setGBeanEnabled(ObjectName name, boolean enabled) throws GBeanNotFoundException { - GBeanInstance gbeanInstance = registry.getGBeanInstance (createGBeanName(name)); + GBeanInstance gbeanInstance = registry.getGBeanInstance (name);
         gbeanInstance.setEnabled(enabled);
     }

     public Set listGBeans(ObjectName pattern) {
- String domain = (pattern == null || pattern.isDomainPattern ()) ? null : pattern.getDomain(); - Map props = pattern == null ? null : pattern.getKeyPropertyList();
-        Set gbeans = registry.listGBeans(domain, props);
-        Set result = new HashSet(gbeans.size());
-        for (Iterator i = gbeans.iterator(); i.hasNext();) {
-            GBeanInstance instance = (GBeanInstance) i.next();
-            result.add(instance.getObjectNameObject());
-        }
-        return result;
+        return registry.listGBeans(pattern);
     }

     public Set listGBeans(Set patterns) {
@@ -356,14 +345,7 @@
     }

public ClassLoader getClassLoaderFor(ObjectName name) throws GBeanNotFoundException { - GBeanInstance gbeanInstance = registry.getGBeanInstance (createGBeanName(name)); + GBeanInstance gbeanInstance = registry.getGBeanInstance (name);
         return gbeanInstance.getClassLoader();
-    }
-
-    private GBeanName createGBeanName(ObjectName objectName) {
-        if (objectName.getDomain().length() == 0) {
- return new GBeanName(kernelName, objectName.getKeyPropertyList());
-        }
-        return new GBeanName(objectName);
     }
 }

Modified: geronimo/branches/v1_0_M4-QA/modules/kernel/src/java/org/ apache/geronimo/kernel/basic/BasicRegistry.java URL: http://svn.apache.org/viewcvs/geronimo/branches/v1_0_M4-QA/ modules/kernel/src/java/org/apache/geronimo/kernel/basic/ BasicRegistry.java?rev=226753&r1=226752&r2=226753&view=diff ====================================================================== ======== --- geronimo/branches/v1_0_M4-QA/modules/kernel/src/java/org/apache/ geronimo/kernel/basic/BasicRegistry.java (original) +++ geronimo/branches/v1_0_M4-QA/modules/kernel/src/java/org/apache/ geronimo/kernel/basic/BasicRegistry.java Sun Jul 31 23:21:08 2005
@@ -21,15 +21,17 @@
 import java.util.Set;
 import java.util.HashSet;
 import java.util.Iterator;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.regex.Pattern;

 import javax.management.ObjectName;
-import javax.management.MalformedObjectNameException;

 import org.apache.geronimo.kernel.Kernel;
 import org.apache.geronimo.kernel.GBeanAlreadyExistsException;
 import org.apache.geronimo.kernel.GBeanNotFoundException;
 import org.apache.geronimo.kernel.InternalKernelException;
-import org.apache.geronimo.gbean.GBeanName;
 import org.apache.geronimo.gbean.runtime.GBeanInstance;

 /**
@@ -37,23 +39,27 @@
  */
 public class BasicRegistry {
     private final Map registry = new HashMap();
-    private String kernelName = "";
+    private final Map domainIndex = new HashMap();
+    private String defaultDomainName;
+
+    public BasicRegistry(String defaultDomainName) {
+        this.defaultDomainName = defaultDomainName;
+    }

     /**
-     * Start the registry and associate it with a kernel.
-     *
-     * @param kernel the kernel to associate with
+     * Start the registry.
      */
     public void start(Kernel kernel) {
-        kernelName = kernel.getKernelName();
     }

     /**
      * Shut down the registry and unregister any GBeans
      */
-    public synchronized void stop() {
-        registry.clear();
-        kernelName = "";
+    public void stop() {
+        synchronized (this) {
+            registry.clear();
+            domainIndex.clear();
+        }
     }

     /**
@@ -62,8 +68,10 @@
      * @param name the name of the GBean to check for
      * @return true if there is a GBean registered with that name
      */
-    public synchronized boolean isRegistered(GBeanName name) {
-        return registry.containsKey(name);
+    public boolean isRegistered(ObjectName name) {
+        synchronized (this) {
+            return registry.containsKey(name);
+        }
     }

     /**
@@ -73,11 +81,30 @@
* @throws GBeanAlreadyExistsException if there is already a GBean registered with the instance's name
      */
public synchronized void register(GBeanInstance gbeanInstance) throws GBeanAlreadyExistsException { - GBeanName name = createGBeanName (gbeanInstance.getObjectNameObject()); + // do as much work as possible outside of the synchronized block
+        ObjectName name = gbeanInstance.getObjectNameObject();
         if (registry.containsKey(name)) {
- throw new GBeanAlreadyExistsException("GBean already registered: " + name); + throw new GBeanAlreadyExistsException("GBean already registered: " + name.getCanonicalName());
+        }
+
+        String domainName = name.getDomain();
+        if (domainName.length() == 0) {
+            domainName = defaultDomainName;
+        }
+
+ // convert properties list to a HashMap as it is more efficient then the synchronized Hashtable
+        Map properties = new HashMap(name.getKeyPropertyList());
+
+        synchronized (this) {
+            registry.put(name, gbeanInstance);
+
+            Map nameToProperties = (Map) domainIndex.get(domainName);
+            if (nameToProperties == null) {
+                nameToProperties = new HashMap();
+                domainIndex.put(domainName, nameToProperties);
+            }
+            nameToProperties.put(name, properties);
         }
-        registry.put(name, gbeanInstance);
     }

     /**
@@ -86,12 +113,15 @@
      * @param name the name of the GBean to unregister
* @throws GBeanNotFoundException if there is no GBean registered with the supplied name
      */
- public synchronized void unregister(GBeanName name) throws GBeanNotFoundException, InternalKernelException {
-        if (registry.remove(name) == null) {
-            try {
- throw new GBeanNotFoundException(name.getObjectName ());
-            } catch (MalformedObjectNameException e) {
-                throw new InternalKernelException(e);
+ public synchronized void unregister(ObjectName name) throws GBeanNotFoundException, InternalKernelException {
+        String domainName = name.getDomain();
+        synchronized (this) {
+            registry.remove(name);
+
+            // just leave the an empty nameToProperty map
+            Map nameToProperties = (Map) domainIndex.get(domainName);
+            if (nameToProperties != null) {
+                nameToProperties.remove(name);
             }
         }
     }
@@ -103,14 +133,13 @@
      * @return the GBeanInstance
* @throws GBeanNotFoundException if there is no GBean registered with the supplied name
      */
- public synchronized GBeanInstance getGBeanInstance(GBeanName name) throws GBeanNotFoundException {
-        GBeanInstance instance = (GBeanInstance) registry.get(name);
+ public synchronized GBeanInstance getGBeanInstance(ObjectName name) throws GBeanNotFoundException {
+        GBeanInstance instance;
+        synchronized (this) {
+            instance = (GBeanInstance) registry.get(name);
+        }
         if (instance == null) {
-            try {
- throw new GBeanNotFoundException(name.getObjectName ());
-            } catch (MalformedObjectNameException e) {
-                throw new InternalKernelException(e);
-            }
+            throw new GBeanNotFoundException(name);
         }
         return instance;
     }
@@ -119,31 +148,131 @@
     /**
      * Search the registry for GBeans matching a name pattern.
      *
-     * @param domain the domain to query in; null indicates all
-     * @param properties the properties the GBeans must have
+     * @param pattern object name pattern
* @return an unordered Set<GBeanInstance> of GBeans that matched the pattern
      */
-    public Set listGBeans(String domain, Map properties) {
- // fairly dumb implementation that iterates the list of all registered GBeans
-        Map clone;
-        synchronized(this) {
-            clone = new HashMap(registry);
+    public Set listGBeans(ObjectName pattern) {
+        if (pattern == null) {
+            synchronized (this) {
+                return new HashSet(registry.keySet());
+            }
         }
-        Set result = new HashSet(clone.size());
- for (Iterator i = clone.entrySet().iterator(); i.hasNext ();) {
-            Map.Entry entry = (Map.Entry) i.next();
-            GBeanName name = (GBeanName) entry.getKey();
-            if (name.matches(domain, properties)) {
-                result.add(entry.getValue());
+
+        String patternDomain = pattern.getDomain();
+        if (patternDomain.length() == 0) {
+            patternDomain = defaultDomainName;
+        }
+
+        // work with a copy of the registry key set
+        List nameToProperties;
+        if (!pattern.isDomainPattern()) {
+            synchronized (this) {
+ // create an array list big enough to match all names... extra space is better than resizing
+                nameToProperties = new ArrayList(registry.size());
+
+                // find we are only matching one specific domain, so
+                // just grab it directly from the index
+                Map map = (Map) domainIndex.get(patternDomain);
+                if (map != null) {
+                    nameToProperties.addAll(map.entrySet());
+                }
+            }
+        } else if (patternDomain.equals("*")) {
+            // this
+            //  is very commmon, so support it directly
+            synchronized (this) {
+ // create an array list big enough to match all names... extra space is better than resizing
+                nameToProperties = new ArrayList(registry.size());
+
+ // find we are matching all domain, so just grab all of them directly + for (Iterator iterator = domainIndex.values ().iterator(); iterator.hasNext();) {
+                    Map map = (Map) iterator.next();
+
+ // we can just copy the entry set directly into the list we don't + // have to worry about duplicates as the maps are mutually exclusive
+                    nameToProperties.addAll(map.entrySet());
+                }
+            }
+        } else {
+ String perl5Pattern = domainPatternToPerl5 (patternDomain);
+            Pattern domainPattern = Pattern.compile(perl5Pattern);
+
+            synchronized (this) {
+ // create an array list big enough to match all names... extra space is better than resizing
+                nameToProperties = new ArrayList(registry.size());
+
+                // find all of the matching domains
+ for (Iterator iterator = domainIndex.entrySet ().iterator(); iterator.hasNext();) {
+                    Map.Entry entry = (Map.Entry) iterator.next();
+                    String domain = (String) entry.getKey();
+                    if (domainPattern.matcher(domain).matches()) {
+ // we can just copy the entry set directly into the list we don't + // have to worry about duplicates as the maps are mutually exclusive
+                        Map map = (Map) entry.getValue();
+                        nameToProperties.addAll(map.entrySet());
+                    }
+                }
             }
         }
-        return result;
+
+        if (nameToProperties.isEmpty()) {
+            return Collections.EMPTY_SET;
+        }
+
+ // convert the pattern property list to a HashMap as it is not synchronized + Map patternProperties = new HashMap (pattern.getKeyPropertyList());
+        patternProperties.remove("*");
+        boolean isMatchAll = patternProperties.isEmpty();
+        boolean isPropertyPattern = pattern.isPropertyPattern();
+
+        Set matchingNames = new HashSet();
+ for (Iterator iterator = nameToProperties.iterator(); iterator.hasNext();) {
+            Map.Entry entry = (Map.Entry) iterator.next();
+            Map properties = (Map) entry.getValue();
+
+            if (isMatchAll) {
+                matchingNames.add(entry.getKey());
+            } else if (isPropertyPattern) {
+ if (properties.entrySet().containsAll (patternProperties.entrySet())) {
+                    matchingNames.add(entry.getKey());
+                }
+            } else {
+ if (properties.entrySet().equals (patternProperties.entrySet())) {
+                    matchingNames.add(entry.getKey());
+                }
+            }
+        }
+        return matchingNames;
     }

-    private GBeanName createGBeanName(ObjectName objectName) {
-        if (objectName.getDomain().length() == 0) {
- return new GBeanName(kernelName, objectName.getKeyPropertyList());
+    private static String domainPatternToPerl5(String pattern) {
+        char[] patternCharacters = pattern.toCharArray();
+ StringBuffer buffer = new StringBuffer(2 * patternCharacters.length); + for (int position = 0; position < patternCharacters.length; position++) {
+            char character = patternCharacters[position];
+            switch (character) {
+                case '*':
+                    // replace '*' with '.*'
+                    buffer.append(".*");
+                    break;
+                case '?':
+                    // replace '?' with '.'
+                    buffer.append('.');
+                    break;
+                default:
+                    // escape any perl5 characters with '\'
+                    if (isPerl5MetaCharacter(character)) {
+                        buffer.append('\\');
+                    }
+                    buffer.append(character);
+                    break;
+            }
         }
-        return new GBeanName(objectName);
+
+        return buffer.toString();
+    }
+
+    private static boolean isPerl5MetaCharacter(char character) {
+        return ("'*?+[]()|^$.{}\\".indexOf(character) >= 0);
     }
 }




--
Geir Magnusson Jr                                  +1-203-665-6437
[EMAIL PROTECTED]


Reply via email to