[Osgi-messages] SF.net SVN: osgi:[254] papoose-cmpn/trunk/event/src/main/java/org/papoose/ event/P
Status: Beta
Brought to you by:
maguro
|
From: <osg...@li...> - 2010-02-24 23:38:38
|
Revision: 254
http://osgi.svn.sourceforge.net/osgi/?rev=254&view=rev
Author: maguro
Date: 2010-02-24 23:38:32 +0000 (Wed, 24 Feb 2010)
Log Message:
-----------
Papoose boot level service for event admin
Modified Paths:
--------------
papoose-cmpn/trunk/event/src/main/java/org/papoose/event/PapooseBootLevelService.java
Modified: papoose-cmpn/trunk/event/src/main/java/org/papoose/event/PapooseBootLevelService.java
===================================================================
--- papoose-cmpn/trunk/event/src/main/java/org/papoose/event/PapooseBootLevelService.java 2010-02-24 18:28:47 UTC (rev 253)
+++ papoose-cmpn/trunk/event/src/main/java/org/papoose/event/PapooseBootLevelService.java 2010-02-24 23:38:32 UTC (rev 254)
@@ -16,9 +16,19 @@
*/
package org.papoose.event;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.ScheduledThreadPoolExecutor;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
+import java.util.logging.Level;
import java.util.logging.Logger;
+import org.osgi.framework.BundleContext;
+
import org.papoose.core.Papoose;
+import org.papoose.event.util.Util;
/**
@@ -27,17 +37,82 @@
public class PapooseBootLevelService
{
private final static String CLASS_NAME = PapooseBootLevelService.class.getName();
+ public final static String LOG_SERVICE_USE_PAPOOSE_THREAD_POOL = CLASS_NAME + ".usePapooseThreadPool";
+ public final static String LOG_SERVICE_CORE_POOL_SIZE = CLASS_NAME + ".corePoolSize";
+ public final static String LOG_SERVICE_MAX_POOL_SIZE = CLASS_NAME + ".maximumPoolSize";
+ public final static String LOG_SERVICE_KEEP_ALIVE_TIME = CLASS_NAME + ".keepAliveTime";
+ public final static String LOG_SERVICE_TIME_UNIT = CLASS_NAME + ".timeUnit";
+ public final static String LOG_SERVICE_SCHEDULE_CORE_POOL_SIZE = CLASS_NAME + ".scheduleCorePoolSize";
private final static Logger LOGGER = Logger.getLogger(CLASS_NAME);
+ private volatile EventAdminImpl eventAdminService;
public void start(Papoose papoose)
{
LOGGER.entering(CLASS_NAME, "start", papoose);
+
+ if (papoose == null) throw new IllegalArgumentException("Papoose instance is null");
+
+ if (eventAdminService != null)
+ {
+ LOGGER.log(Level.WARNING, "Event Admin service already started");
+ return;
+ }
+
+ ExecutorService executor;
+
+ if (papoose.getProperty(LOG_SERVICE_USE_PAPOOSE_THREAD_POOL) != null)
+ {
+ LOGGER.finest("Using Papoose's thread pool");
+
+ executor = papoose.getExecutorService();
+ }
+ else
+ {
+ int corePoolSize = Util.parseInt(papoose.getProperty(LOG_SERVICE_CORE_POOL_SIZE), 1);
+ int maximumPoolSize = Util.parseInt(papoose.getProperty(LOG_SERVICE_MAX_POOL_SIZE), 5);
+ int keepAliveTime = Util.parseInt(papoose.getProperty(LOG_SERVICE_KEEP_ALIVE_TIME), 1);
+ TimeUnit unit = Util.parseTimeUnit(papoose.getProperty(LOG_SERVICE_TIME_UNIT), TimeUnit.SECONDS);
+
+ if (LOGGER.isLoggable(Level.FINEST))
+ {
+ LOGGER.finest("Creating own thread pool");
+ LOGGER.finest("corePoolSize: " + corePoolSize);
+ LOGGER.finest("maximumPoolSize: " + maximumPoolSize);
+ LOGGER.finest("keepAliveTime: " + keepAliveTime);
+ LOGGER.finest("unit: " + unit);
+ }
+
+ executor = new ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime, unit, new LinkedBlockingQueue<Runnable>());
+ }
+
+ int scheduleCorePoolSize = Util.parseInt(papoose.getProperty(LOG_SERVICE_SCHEDULE_CORE_POOL_SIZE), 1);
+
+ if (LOGGER.isLoggable(Level.FINEST)) LOGGER.finest("scheduleCorePoolSize: " + scheduleCorePoolSize);
+
+ ScheduledExecutorService scheduledExecutor = new ScheduledThreadPoolExecutor(scheduleCorePoolSize);
+
+ BundleContext bundleContext = papoose.getSystemBundleContext();
+
+ eventAdminService = new EventAdminImpl(bundleContext, executor, scheduledExecutor);
+
+ eventAdminService.start();
+
LOGGER.exiting(CLASS_NAME, "start");
}
public void stop()
{
LOGGER.entering(CLASS_NAME, "stop");
+
+ if (eventAdminService == null)
+ {
+ LOGGER.log(Level.WARNING, "Event Admin service already stopped");
+ return;
+ }
+
+ eventAdminService.stop();
+ eventAdminService = null;
+
LOGGER.exiting(CLASS_NAME, "stop");
}
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|