[jboss-osgi-commits] JBoss-OSGI SVN: r87270 - in projects/jboss-osgi/trunk: runtime/spi/src/main/java/org/jboss/osgi/service/log and 3 other directories.

jboss-osgi-commits at lists.jboss.org jboss-osgi-commits at lists.jboss.org
Tue Apr 14 06:12:06 EDT 2009


Author: thomas.diesler at jboss.com
Date: 2009-04-14 06:12:06 -0400 (Tue, 14 Apr 2009)
New Revision: 87270

Modified:
   projects/jboss-osgi/trunk/runtime/felix/src/main/resources/jboss-osgi-beans.xml
   projects/jboss-osgi/trunk/runtime/spi/src/main/java/org/jboss/osgi/service/log/LogEntryCache.java
   projects/jboss-osgi/trunk/runtime/spi/src/main/java/org/jboss/osgi/spi/Constants.java
   projects/jboss-osgi/trunk/testsuite/src/test/java/org/jboss/test/osgi/example/log/LogServiceTestCase.java
   projects/jboss-osgi/trunk/testsuite/src/test/java/org/jboss/test/osgi/example/log/bundleA/ServiceA.java
   projects/jboss-osgi/trunk/testsuite/src/test/java/org/jboss/test/osgi/example/log/bundleA/ServiceActivator.java
Log:
Don't rely on framework emmitted events for testing

Modified: projects/jboss-osgi/trunk/runtime/felix/src/main/resources/jboss-osgi-beans.xml
===================================================================
--- projects/jboss-osgi/trunk/runtime/felix/src/main/resources/jboss-osgi-beans.xml	2009-04-14 08:18:29 UTC (rev 87269)
+++ projects/jboss-osgi/trunk/runtime/felix/src/main/resources/jboss-osgi-beans.xml	2009-04-14 10:12:06 UTC (rev 87270)
@@ -11,6 +11,7 @@
     <entry>
       <key>org.osgi.framework.system.packages</key>
       <value>
+        org.jboss.osgi.spi,
         org.jboss.osgi.service.log,
         org.osgi.framework; version=1.4,
         org.osgi.service.log; version=1.3,

Modified: projects/jboss-osgi/trunk/runtime/spi/src/main/java/org/jboss/osgi/service/log/LogEntryCache.java
===================================================================
--- projects/jboss-osgi/trunk/runtime/spi/src/main/java/org/jboss/osgi/service/log/LogEntryCache.java	2009-04-14 08:18:29 UTC (rev 87269)
+++ projects/jboss-osgi/trunk/runtime/spi/src/main/java/org/jboss/osgi/service/log/LogEntryCache.java	2009-04-14 10:12:06 UTC (rev 87270)
@@ -73,8 +73,10 @@
     */
    public void clear()
    {
-      // entries.clear() would need synchronization
-      entries = new ArrayList<LogEntry>();
+      synchronized (entries)
+      {
+         entries.clear();
+      }
    }
 
    /**
@@ -95,10 +97,29 @@
     */
    public List<LogEntry> getLog()
    {
-      return new ArrayList<LogEntry>(entries);
+      return getLog(false);
    }
    
    /**
+    * Get the list of cached entries and optionally clears the list.
+    * 
+    * Note, that the LogService delivers LogEntries asynchronously.
+    * Client should not rely on a certain LogEntry already beein delivered 
+    * when calling this method. 
+    */
+   public List<LogEntry> getLog(boolean clear)
+   {
+      synchronized (entries)
+      {
+         ArrayList<LogEntry> retList = new ArrayList<LogEntry>(entries);
+         if (clear == true)
+            entries.clear();
+         
+         return retList;
+      }
+   }
+   
+   /**
     * Listener method called for each LogEntry object created. 
     */
    public void logged(LogEntry entry)
@@ -106,20 +127,24 @@
       // Replace entry with a unified wrapper
       entry = new LogEntryImpl(entry);
       
-      if (filters.size() == 0)
+      List<LogEntryFilter> snapshot = new ArrayList<LogEntryFilter>(filters);
+      synchronized (entries)
       {
-         entries.add(entry);
-         return;
-      }
-
-      // Add the entry if if matches at least one filter
-      for (LogEntryFilter filter : filters)
-      {
-         if (match(filter, entry))
+         if (snapshot.size() == 0)
          {
             entries.add(entry);
-            break;
+            return;
          }
+
+         // Add the entry if if matches at least one filter
+         for (LogEntryFilter filter : snapshot)
+         {
+            if (match(filter, entry))
+            {
+               entries.add(entry);
+               break;
+            }
+         }
       }
    }
 

Modified: projects/jboss-osgi/trunk/runtime/spi/src/main/java/org/jboss/osgi/spi/Constants.java
===================================================================
--- projects/jboss-osgi/trunk/runtime/spi/src/main/java/org/jboss/osgi/spi/Constants.java	2009-04-14 08:18:29 UTC (rev 87269)
+++ projects/jboss-osgi/trunk/runtime/spi/src/main/java/org/jboss/osgi/spi/Constants.java	2009-04-14 10:12:06 UTC (rev 87270)
@@ -24,6 +24,7 @@
 //$Id$
 
 import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleEvent;
 import org.osgi.service.log.LogService;
 
 /**
@@ -46,31 +47,58 @@
    public final static String PROPERTY_DEFERRED_START = "org.jboss.osgi.deferred.start";
 
    /**
-    * Return the string representation of a bundle state
+    * Return the string representation of a {@link Bundle} state
     */
    public static String bundleState(int bundleState)
    {
       String retState = "[" + bundleState + "]";
-      
       if (Bundle.UNINSTALLED == bundleState)
-         retState = "[UNINSTALLED]";
+         retState = "UNINSTALLED";
       else if (Bundle.INSTALLED == bundleState)
-         retState = "[INSTALLED]";
+         retState = "INSTALLED";
       else if (Bundle.RESOLVED == bundleState)
-         retState = "[RESOLVED]";
+         retState = "RESOLVED";
       else if (Bundle.STARTING == bundleState)
-         retState = "[STARTING]";
+         retState = "STARTING";
       else if (Bundle.STOPPING == bundleState)
-         retState = "[STOPPING]";
+         retState = "STOPPING";
       else if (Bundle.ACTIVE == bundleState)
-         retState = "[ACTIVE]";
-      
+         retState = "ACTIVE";
       return retState;
    }
    
    /**
-    * Return the string representation of a log level
+    * Return the string representation of a {@link BundleEvent} type
     */
+   public static String bundleEvent(int eventType)
+   {
+      String retType = "[" + eventType + "]";
+      if (BundleEvent.INSTALLED == eventType)
+         retType = "INSTALLED";
+      else if (BundleEvent.LAZY_ACTIVATION == eventType)
+         retType = "LAZY_ACTIVATION";
+      else if (BundleEvent.RESOLVED == eventType)
+         retType = "RESOLVED";
+      else if (BundleEvent.STARTING == eventType)
+         retType = "STARTING";
+      else if (BundleEvent.STARTED == eventType)
+         retType = "STARTED";
+      else if (BundleEvent.STOPPING == eventType)
+         retType = "STOPPING";
+      else if (BundleEvent.STOPPED == eventType)
+         retType = "STOPPED";
+      else if (BundleEvent.UNINSTALLED == eventType)
+         retType = "UNINSTALLED";
+      else if (BundleEvent.UNRESOLVED == eventType)
+         retType = "UNRESOLVED";
+      else if (BundleEvent.UPDATED == eventType)
+         retType = "UPDATED";
+      return retType;
+   }
+   
+   /**
+    * Return the string representation of a {@link LogService} level
+    */
    public static String logLevel(int level)
    {
       String logLevel;

Modified: projects/jboss-osgi/trunk/testsuite/src/test/java/org/jboss/test/osgi/example/log/LogServiceTestCase.java
===================================================================
--- projects/jboss-osgi/trunk/testsuite/src/test/java/org/jboss/test/osgi/example/log/LogServiceTestCase.java	2009-04-14 08:18:29 UTC (rev 87269)
+++ projects/jboss-osgi/trunk/testsuite/src/test/java/org/jboss/test/osgi/example/log/LogServiceTestCase.java	2009-04-14 10:12:06 UTC (rev 87270)
@@ -55,8 +55,8 @@
 
       // Setup the LogEntryCache
       final LogEntryCache logEntryCache = new LogEntryCache();
-      logEntryCache.addFilter(new LogEntryFilter("example-log(.*)", LogService.LOG_INFO, "BundleEvent(.*)"));
-      logEntryCache.addFilter(new LogEntryFilter(null, -1, "\\[ServiceA\\](.*)"));
+      logEntryCache.addFilter(new LogEntryFilter("example-log(.*)", LogService.LOG_INFO, "\\[ServiceActivator\\](.*)"));
+      logEntryCache.addFilter(new LogEntryFilter(null, 0, "\\[ServiceA\\](.*)"));
       
       // Track the LogReaderService to add the LogEntryCache as LogListener
       ServiceTracker tracker = new ServiceTracker(sysContext, LogReaderService.class.getName(), null)
@@ -82,21 +82,21 @@
       Bundle bundleA = sysContext.installBundle(testURL.toExternalForm());
       bundleA.start();
       
-      // Stop and uninstall the test bundle
-      bundleA.stop();
+      // Verify that the bundle is active
+      assertEquals("Test bundle ACTIVE", Bundle.ACTIVE, bundleA.getState());
+      
+      // Verify the received log entries
+      List<LogEntry> entries = logEntryCache.getLog(true);
+
+      // Verify the the log entries
+      assertEquals("Number of entries", 2, entries.size());
+      assertEquals("[ServiceA] new Service", entries.get(0).getMessage());
+      assertEquals("[ServiceActivator] BundleEvent STARTED", entries.get(1).getMessage());
+      
+      // Uninstall the test bundle
       bundleA.uninstall();
       
       // Uninstall the 3rd party LogService
       logServiceBundle.uninstall();
-      
-      // Verify the received log entries
-      List<LogEntry> entries = logEntryCache.getLog();
-      assertEquals("Number of entries", 6, entries.size());
-      assertEquals("BundleEvent INSTALLED", entries.get(0).getMessage());
-      assertEquals("BundleEvent RESOLVED", entries.get(1).getMessage());
-      assertEquals("[ServiceA] addingService: org.apache.felix.log.LogServiceImpl", entries.get(2).getMessage());
-      assertEquals("BundleEvent STARTED", entries.get(3).getMessage());
-      assertEquals("BundleEvent STOPPED", entries.get(4).getMessage());
-      assertEquals("BundleEvent UNINSTALLED", entries.get(5).getMessage());
    }
 }
\ No newline at end of file

Modified: projects/jboss-osgi/trunk/testsuite/src/test/java/org/jboss/test/osgi/example/log/bundleA/ServiceA.java
===================================================================
--- projects/jboss-osgi/trunk/testsuite/src/test/java/org/jboss/test/osgi/example/log/bundleA/ServiceA.java	2009-04-14 08:18:29 UTC (rev 87269)
+++ projects/jboss-osgi/trunk/testsuite/src/test/java/org/jboss/test/osgi/example/log/bundleA/ServiceA.java	2009-04-14 10:12:06 UTC (rev 87270)
@@ -43,30 +43,28 @@
    
    public ServiceA(BundleContext context)
    {
-      // Track changes in LogService registration
+      trackLogService(context);
+      log.log(LOG_INFO, "[ServiceA] new Service");
+   }
+
+   private void trackLogService(BundleContext context)
+   {
       ServiceTracker tracker = new ServiceTracker(context, LogService.class.getName(), null)
       {
          @Override
-         public Object addingService(ServiceReference sref)
+         public Object addingService(ServiceReference reference)
          {
-            log = (LogService)super.addingService(sref);
-            log.log(sref, LOG_INFO, "[ServiceA] addingService: " + log.getClass().getName());
+            log = (LogService)super.addingService(reference);
             return log;
          }
 
          @Override
-         public void removedService(ServiceReference sref, Object service)
+         public void removedService(ServiceReference reference, Object service)
          {
-            super.removedService(sref, service);
-            log.log(sref, LOG_INFO, "[ServiceA] removedService: " + service.getClass().getName());
+            super.removedService(reference, service);
             log = new SystemLogService(context);
          }
       };
       tracker.open();
    }
-   
-   public String echo(String msg)
-   {
-      return msg;
-   }
 }
\ No newline at end of file

Modified: projects/jboss-osgi/trunk/testsuite/src/test/java/org/jboss/test/osgi/example/log/bundleA/ServiceActivator.java
===================================================================
--- projects/jboss-osgi/trunk/testsuite/src/test/java/org/jboss/test/osgi/example/log/bundleA/ServiceActivator.java	2009-04-14 08:18:29 UTC (rev 87269)
+++ projects/jboss-osgi/trunk/testsuite/src/test/java/org/jboss/test/osgi/example/log/bundleA/ServiceActivator.java	2009-04-14 10:12:06 UTC (rev 87270)
@@ -23,26 +23,66 @@
 
 //$Id$
 
+import static org.osgi.service.log.LogService.LOG_INFO;
+
+import org.jboss.osgi.service.log.SystemLogService;
+import org.jboss.osgi.spi.Constants;
 import org.osgi.framework.BundleActivator;
 import org.osgi.framework.BundleContext;
-import org.osgi.framework.ServiceRegistration;
+import org.osgi.framework.BundleEvent;
+import org.osgi.framework.BundleListener;
+import org.osgi.framework.ServiceReference;
+import org.osgi.framework.SynchronousBundleListener;
+import org.osgi.service.log.LogService;
+import org.osgi.util.tracker.ServiceTracker;
 
 public class ServiceActivator implements BundleActivator
 {
-   private ServiceRegistration registration;
+   private LogService log;
+   
+   public void start(final BundleContext context)
+   {
+      // Track the LogService
+      trackLogService(context);
+      
+      // Register a SynchronousBundleListener 
+      BundleListener listener = new SynchronousBundleListener()
+      {
+         public void bundleChanged(BundleEvent event)
+         {
+            log.log(LOG_INFO, "[ServiceActivator] BundleEvent " + Constants.bundleEvent(event.getType()));
+         }
+      };
+      context.addBundleListener(listener);
 
-   public void start(BundleContext context)
-   {
       ServiceA service = new ServiceA(context);
-      registration = context.registerService(ServiceA.class.getName(), service, null);
+      context.registerService(ServiceA.class.getName(), service, null);
    }
 
    public void stop(BundleContext context)
    {
-      if (registration != null)
+      // Do Nothing. It is unnecessary to unregister services or Framework listeners
+      // because they must be clean up by the Framework anyway.
+   }
+
+   private void trackLogService(BundleContext context)
+   {
+      ServiceTracker tracker = new ServiceTracker(context, LogService.class.getName(), null)
       {
-         registration.unregister();
-         registration = null;
-      }
+         @Override
+         public Object addingService(ServiceReference reference)
+         {
+            log = (LogService)super.addingService(reference);
+            return log;
+         }
+
+         @Override
+         public void removedService(ServiceReference reference, Object service)
+         {
+            super.removedService(reference, service);
+            log = new SystemLogService(context);
+         }
+      };
+      tracker.open();
    }
 }
\ No newline at end of file




More information about the jboss-osgi-commits mailing list