[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