[Osgi-messages] SF.net SVN: osgi:[244] papoose-cmpn/trunk/event
Status: Beta
Brought to you by:
maguro
|
From: <osg...@li...> - 2010-02-19 19:28:31
|
Revision: 244
http://osgi.svn.sourceforge.net/osgi/?rev=244&view=rev
Author: maguro
Date: 2010-02-19 19:28:25 +0000 (Fri, 19 Feb 2010)
Log Message:
-----------
Logging added
Modified Paths:
--------------
papoose-cmpn/trunk/event/pom.xml
papoose-cmpn/trunk/event/src/main/java/org/papoose/event/EventAdminImpl.java
Added Paths:
-----------
papoose-cmpn/trunk/event/src/main/java/org/papoose/event/util/LogServiceTracker.java
Modified: papoose-cmpn/trunk/event/pom.xml
===================================================================
--- papoose-cmpn/trunk/event/pom.xml 2010-02-19 16:02:59 UTC (rev 243)
+++ papoose-cmpn/trunk/event/pom.xml 2010-02-19 19:28:25 UTC (rev 244)
@@ -23,7 +23,7 @@
<instructions>
<Bundle-SymbolicName>org.papoose.cmpn.event</Bundle-SymbolicName>
<Export-Package>org.papoose.event</Export-Package>
- <Import-Package>org.osgi.framework;version="[1.4,1.5]",org.osgi.service.event;version="[1.1,1.2]",org.osgi.util.tracker;version="[1.3,1.4]"</Import-Package>
+ <Import-Package>org.osgi.framework;version="[1.4,1.5]",org.osgi.service.event;version="[1.1,1.2]",org.osgi.service.log;version="[1.2,1.3]",org.osgi.util.tracker;version="[1.3,1.4]"</Import-Package>
<Private-Package>org.papoose.event.util</Private-Package>
</instructions>
</configuration>
Modified: papoose-cmpn/trunk/event/src/main/java/org/papoose/event/EventAdminImpl.java
===================================================================
--- papoose-cmpn/trunk/event/src/main/java/org/papoose/event/EventAdminImpl.java 2010-02-19 16:02:59 UTC (rev 243)
+++ papoose-cmpn/trunk/event/src/main/java/org/papoose/event/EventAdminImpl.java 2010-02-19 19:28:25 UTC (rev 244)
@@ -26,6 +26,7 @@
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.Executor;
import java.util.concurrent.ExecutorService;
+import java.util.concurrent.RejectedExecutionException;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
@@ -41,8 +42,10 @@
import org.osgi.service.event.EventConstants;
import org.osgi.service.event.EventHandler;
import org.osgi.service.event.TopicPermission;
+import org.osgi.service.log.LogService;
import org.osgi.util.tracker.ServiceTracker;
+import org.papoose.event.util.LogServiceTracker;
import org.papoose.event.util.SerialExecutor;
@@ -64,6 +67,7 @@
private final Listeners listeners = new Listeners();
private final ExecutorService executor;
private final ScheduledExecutorService scheduledExecutor;
+ private final LogServiceTracker loggers;
private int timeout = 60;
private TimeUnit timeUnit = TimeUnit.SECONDS;
@@ -73,6 +77,7 @@
this.executor = executor;
this.scheduledExecutor = scheduledExecutor;
+ this.loggers = new LogServiceTracker(context);
}
public int getTimeout()
@@ -187,6 +192,7 @@
}
catch (InvalidSyntaxException e)
{
+ loggers.log(reference, LogService.LOG_WARNING, "Service had an invalid filter " + filter + ", ignoring", e);
LOGGER.finest("Service had an invalid filter " + filter + ", ignoring");
LOGGER.exiting(CLASS_NAME, "addingService", null);
return null;
@@ -262,6 +268,8 @@
private void add(EventListener listener)
{
+ LOGGER.entering(CLASS_NAME, "add", listener);
+
for (String[] tokens : listener.paths)
{
Listeners lPtr = listeners;
@@ -286,10 +294,14 @@
set.add(listener);
}
}
+
+ LOGGER.exiting(CLASS_NAME, "add");
}
private void remove(EventListener listener)
{
+ LOGGER.entering(CLASS_NAME, "remove", listener);
+
for (String[] tokens : listener.paths)
{
Listeners lPtr = listeners;
@@ -307,10 +319,14 @@
if (set == null) return;
set.remove(listener);
}
+
+ LOGGER.exiting(CLASS_NAME, "remove");
}
private Set<EventListener> collectListeners(Event event)
{
+ LOGGER.entering(CLASS_NAME, "collectListeners", event);
+
Listeners lPtr = listeners;
Set<EventListener> set = new HashSet<EventListener>();
@@ -329,15 +345,21 @@
addListeners(set, lPtr.handlers.get(tokens[tokens.length - 1]), event);
}
+ LOGGER.exiting(CLASS_NAME, "collectListeners", set);
+
return set;
}
private static void addListeners(Set<EventListener> to, Set<EventListener> from, Event event)
{
+ LOGGER.entering(CLASS_NAME, "addListeners", new Object[]{ to, from, event });
+
for (EventListener eventListener : from)
{
if (event.matches(eventListener.filter)) to.add(eventListener);
}
+
+ LOGGER.exiting(CLASS_NAME, "addListeners");
}
private class TimeoutRunnable implements Runnable
@@ -367,14 +389,23 @@
{
public void run()
{
+ loggers.log(listener.reference, LogService.LOG_WARNING, "Listener timeout, will be blacklisted");
+ LOGGER.log(Level.WARNING, "Listener timeout, will be blacklisted");
+
remove(listener);
}
}, timeout, timeUnit);
listener.handleEvent(event);
}
+ catch (RejectedExecutionException ree)
+ {
+ loggers.log(listener.reference, LogService.LOG_WARNING, "Unable to schedule timeout for listener call, call skipped", ree);
+ LOGGER.log(Level.WARNING, "Unable to schedule timeout for listener call, call skipped", ree);
+ }
catch (Throwable t)
{
+ loggers.log(listener.reference, LogService.LOG_WARNING, "Listener threw exception", t);
LOGGER.log(Level.WARNING, "Listener threw exception", t);
}
finally
@@ -383,6 +414,12 @@
if (latch != null) latch.countDown();
}
}
+
+ @Override
+ public String toString()
+ {
+ return getClass().getName() + " [listener=" + listener + " event=" + event + "]";
+ }
}
private static class Listeners
@@ -411,5 +448,20 @@
EventHandler handler = (EventHandler) context.getService(reference);
if (handler != null) handler.handleEvent(event);
}
+
+ @Override
+ public String toString()
+ {
+ StringBuilder builder = new StringBuilder("(");
+ for (String[] path : paths)
+ {
+ if (builder.length() > 1) builder.append(", ");
+ builder.append(path[0]);
+ for (int i = 1; i < path.length; i++) builder.append("/").append(path[i]);
+ }
+ builder.append(")");
+
+ return getClass().getName() + " [paths=" + builder + " reference=" + reference + " filter=" + filter + "]";
+ }
}
}
Added: papoose-cmpn/trunk/event/src/main/java/org/papoose/event/util/LogServiceTracker.java
===================================================================
--- papoose-cmpn/trunk/event/src/main/java/org/papoose/event/util/LogServiceTracker.java (rev 0)
+++ papoose-cmpn/trunk/event/src/main/java/org/papoose/event/util/LogServiceTracker.java 2010-02-19 19:28:25 UTC (rev 244)
@@ -0,0 +1,66 @@
+/**
+ *
+ * Copyright 2010 (C) The original author or authors
+ *
+ * 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.papoose.event.util;
+
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceReference;
+import org.osgi.service.log.LogService;
+import org.osgi.util.tracker.ServiceTracker;
+
+
+/**
+ * @version $Revision: $ $Date: $
+ */
+public class LogServiceTracker extends ServiceTracker implements LogService
+{
+ public LogServiceTracker(BundleContext context)
+ {
+ super(context, LogService.class.getName(), null);
+ }
+
+ public void log(int level, String message)
+ {
+ for (LogService service : (LogService[]) getServices())
+ {
+ service.log(level, message);
+ }
+ }
+
+ public void log(int level, String message, Throwable exception)
+ {
+ for (LogService service : (LogService[]) getServices())
+ {
+ service.log(level, message, exception);
+ }
+ }
+
+ public void log(ServiceReference sr, int level, String message)
+ {
+ for (LogService service : (LogService[]) getServices())
+ {
+ service.log(sr, level, message);
+ }
+ }
+
+ public void log(ServiceReference sr, int level, String message, Throwable exception)
+ {
+ for (LogService service : (LogService[]) getServices())
+ {
+ service.log(sr, level, message, exception);
+ }
+ }
+}
Property changes on: papoose-cmpn/trunk/event/src/main/java/org/papoose/event/util/LogServiceTracker.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Added: svn:eol-style
+ native
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|