def __init__(self, name):

        # set name
        self.__name = name

        # logger
        self.logger = Activator().getInstance('LoggerFactory').getLogger('Dispatcher')

        # onStop-delegates
        self.__onStopDelegates = []

        # request-queue
        self.__queueRequest = Queue()

        # request-handler
        self.__requestHandler = RequestHandler(self.logger)

        # running-flag
        self.__running = False

        # request-count
        self.requestCount = 0

        # thread
        self.__thread = Thread(target = self.run)
        self.__thread.setName(self.__name)
        self.__thread.setDaemon(True)
class Dispatcher(IActivator):

    # instance
    Instance = None

    # lock
    InstanceLock = Lock()

    """ -------------------------------------------------------------------- """
    """ __new__                                                              """
    """ -------------------------------------------------------------------- """
    def __new__(cls, *p, **k):
        if Dispatcher.Instance is None:
            Dispatcher.Instance = object.__new__(cls, *p, **k)
        return Dispatcher.Instance

    """ -------------------------------------------------------------------- """
    """ __init__                                                             """
    """ -------------------------------------------------------------------- """
    def __init__(self, name):

        # set name
        self.__name = name

        # logger
        self.logger = Activator().getInstance('LoggerFactory').getLogger('Dispatcher')

        # onStop-delegates
        self.__onStopDelegates = []

        # request-queue
        self.__queueRequest = Queue()

        # request-handler
        self.__requestHandler = RequestHandler(self.logger)

        # running-flag
        self.__running = False

        # request-count
        self.requestCount = 0

        # thread
        self.__thread = Thread(target = self.run)
        self.__thread.setName(self.__name)
        self.__thread.setDaemon(True)

    """ -------------------------------------------------------------------- """
    """ getName                                                              """
    """ -------------------------------------------------------------------- """
    def getName(self):
        return self.__name

    """ -------------------------------------------------------------------- """
    """ start                                                              """
    """ -------------------------------------------------------------------- """
    def start(self):

        # log
        self.logger.info('Starting...')

        # start thread
        self.__thread.start()

    """ -------------------------------------------------------------------- """
    """ stop                                                                 """
    """ -------------------------------------------------------------------- """
    def stop(self):

        # running-flag
        self.__running = False

        # join
        self.__thread.join(2.0)

        # shutdown if still alive
        if self.__thread.isAlive():
            self.shutdown()

    """ -------------------------------------------------------------------- """
    """ run                                                                  """
    """ -------------------------------------------------------------------- """
    def run(self):

        # running-flag
        self.__running = True

        # debug
        self.logger.info("up and running")

        # main-loop
        while self.__running:

            # process queue
            try:
                # get and process request
                request = self.__queueRequest.get()
                # handle request
                self.__running = self.__requestHandler.handleRequest(request)
            except Empty, emp:
                self.logger.error("request-queue is empty (%s)" % emp)
            except Exception, e:
                self.logger.error("failed to process request (%s)" % e)