[jboss-cvs] JBossAS SVN: r97307 - in projects/jboss-osgi/trunk/reactor/framework/src: test/java/org/jboss/test/osgi/service and 1 other directory.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Wed Dec 2 11:51:33 EST 2009


Author: alesj
Date: 2009-12-02 11:51:32 -0500 (Wed, 02 Dec 2009)
New Revision: 97307

Modified:
   projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/bundle/ContextComparator.java
   projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/bundle/KernelDictionaryFactory.java
   projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/service/ServiceMixUnitTestCase.java
Log:
Fix order bug.

Modified: projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/bundle/ContextComparator.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/bundle/ContextComparator.java	2009-12-02 16:37:13 UTC (rev 97306)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/bundle/ContextComparator.java	2009-12-02 16:51:32 UTC (rev 97307)
@@ -43,7 +43,7 @@
       {
          Long id1 = MDRUtils.getId(c1);
          Long id2 = MDRUtils.getId(c2);
-         if (id1 == null || id2 == null)
+         if (id1 == null && id2 == null)
             return 0;
          if (id1 != null && id2 == null)
             return -1;

Modified: projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/bundle/KernelDictionaryFactory.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/bundle/KernelDictionaryFactory.java	2009-12-02 16:37:13 UTC (rev 97306)
+++ projects/jboss-osgi/trunk/reactor/framework/src/main/java/org/jboss/osgi/framework/bundle/KernelDictionaryFactory.java	2009-12-02 16:51:32 UTC (rev 97307)
@@ -24,7 +24,9 @@
 import java.util.Dictionary;
 import java.util.Enumeration;
 import java.util.HashSet;
+import java.util.Map;
 import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
 
 import org.jboss.beans.info.spi.BeanInfo;
 import org.jboss.kernel.spi.config.KernelConfigurator;
@@ -78,19 +80,20 @@
 
    private class KernelDictionary extends Dictionary<String, Object>
    {
+      private Map<Object, Object> map;
       private KernelControllerContext context;
-      private Object name;
-      private String[] classes = EMPTY;
 
       private KernelDictionary(KernelControllerContext context)
       {
          this.context = context;
-         this.name = context.getName();
+         this.map = new ConcurrentHashMap<Object, Object>(2);
+         map.put(NAME, context.getName());
+         map.put(Constants.OBJECTCLASS, EMPTY);
       }
 
       public int size()
       {
-         return 2;
+         return map.size();
       }
 
       public boolean isEmpty()
@@ -101,63 +104,52 @@
       @SuppressWarnings({"unchecked"})
       public Enumeration<String> keys()
       {
-         Set<String> keys = new HashSet<String>();
-         keys.add(Constants.OBJECTCLASS);
-         keys.add(NAME);
-         return Iterators.toEnumeration(keys.iterator());
+         return Iterators.toEnumeration(map.keySet().iterator());
       }
 
       @SuppressWarnings({"unchecked"})
       public Enumeration<Object> elements()
       {
-         Set<Object> elements = new HashSet<Object>();
-         elements.add(name);
-         elements.add(classes);
-         return Iterators.toEnumeration(elements.iterator());
+         return Iterators.toEnumeration(map.values().iterator());
       }
 
       public Object get(Object key)
       {
-         if (NAME.equals(key))
+         Object value = map.get(key);
+         if (value != EMPTY)
+            return value;
+
+         ClassInfo clazz = null;
+         Object target = context.getTarget();
+         BeanInfo info = context.getBeanInfo();
+         if (target != null)
          {
-            return name;
+            clazz = getClassInfo(target.getClass());
          }
-         else if (Constants.OBJECTCLASS.equals(key))
+         else if (info != null)
          {
-            if (classes == EMPTY)
-            {
-               ClassInfo clazz = null;
-               Object target = context.getTarget();
-               BeanInfo info = context.getBeanInfo();
-               if (target != null)
-               {
-                  clazz = getClassInfo(target.getClass());
-               }
-               else if (info != null)
-               {
-                  clazz = info.getClassInfo();
-               }
+            clazz = info.getClassInfo();
+         }
 
-               if (clazz != null)
-               {
-                  Set<String> clazzes = new HashSet<String>();
-                  traverseClass(clazz, clazzes);
-                  classes = clazzes.toArray(new String[clazzes.size()]);
-               }
-            }
-            return classes;
+         String[] classes = EMPTY;
+         if (clazz != null)
+         {
+            Set<String> clazzes = new HashSet<String>();
+            traverseClass(clazz, clazzes);
+            classes = clazzes.toArray(new String[clazzes.size()]);
+            map.put(Constants.OBJECTCLASS, classes);
          }
-         return null;
+         return classes;
       }
 
       public Object put(String key, Object value)
       {
-         return null;
+         return map.put(key, value);
       }
 
       public Object remove(Object key)
       {
-         return null;
+         return map.remove(key);
       }
 
       protected void traverseClass(ClassInfo clazz, Set<String> classes)

Modified: projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/service/ServiceMixUnitTestCase.java
===================================================================
--- projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/service/ServiceMixUnitTestCase.java	2009-12-02 16:37:13 UTC (rev 97306)
+++ projects/jboss-osgi/trunk/reactor/framework/src/test/java/org/jboss/test/osgi/service/ServiceMixUnitTestCase.java	2009-12-02 16:51:32 UTC (rev 97307)
@@ -188,25 +188,29 @@
             assertNotNull(reg1);
             try
             {
-               // OSGi service should bubble on top
-               ServiceReference osgiRef = bundleContext1.getServiceReference(A.class.getName());
-               assertNotNull(osgiRef);
-
-               ServiceReference[] refs = bundleContext1.getServiceReferences(A.class.getName(), null);
+               ServiceReference[] refs = bundleContext1.getServiceReferences(A.class.getName(), "(a=b)");
                assertNotNull(refs);
-               assertEquals(2, refs.length);
-               assertSame(osgiRef, refs[0]);
-               ServiceReference mcRef = refs[1];
+               assertEquals(1, refs.length);
+               ServiceReference osgiRef = refs[0];
 
-               refs = bundleContext1.getServiceReferences(A.class.getName(), "(a=b)");
+               refs = bundleContext1.getServiceReferences(A.class.getName(), "(bean.name=A)");
                assertNotNull(refs);
                assertEquals(1, refs.length);
-               assertSame(osgiRef, refs[0]);
+               ServiceReference mcRef = refs[0];
 
-               refs = bundleContext1.getServiceReferences(A.class.getName(), "(bean.name=A)");
+               // OSGi service should bubble on top
+               assertEquals("OSgi service has not bubbled on top", osgiRef, bundleContext1.getServiceReference(A.class.getName()));
+
+               // compare
+               assertTrue(osgiRef.compareTo(mcRef) < 0);
+               assertTrue(0 < mcRef.compareTo(osgiRef));
+
+               // ranking order first
+               refs = bundleContext1.getServiceReferences(A.class.getName(), null);
                assertNotNull(refs);
-               assertEquals(1, refs.length);
-               assertEquals(mcRef, refs[0]);
+               assertEquals(2, refs.length);
+               assertEquals(osgiRef, refs[0]);
+               assertEquals(mcRef, refs[1]);               
             }
             finally
             {




More information about the jboss-cvs-commits mailing list