Class PersistentDeliveryService

  • All Implemented Interfaces:
    Service

    public class PersistentDeliveryService
    extends BaseService
    The JADE service to manage the persistent storage of undelivered ACL messages installed on the platform.
    Author:
    Giovanni Rimassa - FRAMeTech s.r.l.
    • Field Detail

      • PERSISTENT_DELIVERY_FILTER

        public static final String PERSISTENT_DELIVERY_FILTER
        This constant is the name of the property whose value contains the name of the application-specific class that will be used by the PersistentDeliveryService on the local container as a filter for undelivered ACL messages
        See Also:
        Constant Field Values
      • PERSISTENT_DELIVERY_STORAGENODES

        public static final String PERSISTENT_DELIVERY_STORAGENODES
        This constant is the name of the property whose value contains the semicolon separated names of the nodes where messages can be stored. By default all nodes are considered. This implies that whenever the delivery of a message fails all slices are asked to see if they have a filer that must store the message. Similarly whenever a new agent is created all slices are asked to see if they have messages to flush. When the platform is composed by 100 or more containers (e.g. when there are mobile terminals running split containers) this may be very un-efficient --> using this option to limit the number of slices to be asked is highly recommended
        See Also:
        Constant Field Values
      • PERSISTENT_DELIVERY_SENDFAILUREPERIOD

        public static final String PERSISTENT_DELIVERY_SENDFAILUREPERIOD
        This constant is the name of the property whose value contains an integer representing how often (in milliseconds) the PersistentDeliveryService will try to send again previously undelivered ACL messages which have been buffered.
        See Also:
        Constant Field Values
      • PERSISTENT_DELIVERY_STORAGEMETHOD

        public static final String PERSISTENT_DELIVERY_STORAGEMETHOD
        This constant is the name of the property whose value contains the storage method used to persist undelivered ACL messages by the PersistentDeliveryService on the local container. The supported values for this parameter are:
        • file - A directory tree on the local filesystem is used.
        If this property is not specified undelivered ACL messages are kept in memory and not persisted at all.
        See Also:
        Constant Field Values
      • PERSISTENT_DELIVERY_BASEDIR

        public static final String PERSISTENT_DELIVERY_BASEDIR
        This constant is the name of the property whose value contains the root of the directory tree that is used to persist undelivered ACL messages when the file storage method is selected.
        See Also:
        Constant Field Values
    • Constructor Detail

      • PersistentDeliveryService

        public PersistentDeliveryService()
    • Method Detail

      • init

        public void init​(AgentContainer ac,
                         Profile p)
                  throws ProfileException
        Description copied from interface: Service
        Performs the passive initialization step of the service. This method is called before activating the service. Its role should be simply the one of a constructor, setting up the internal data as needed. Service implementations should not use the Service Manager and Service Finder facilities from within this method. A distributed initialization protocol, if needed, should be exectuted within the boot() method.
        Specified by:
        init in interface Service
        Overrides:
        init in class BaseService
        Parameters:
        ac - The agent container this service is activated on.
        p - The configuration profile for this service.
        Throws:
        ProfileException - If the given profile is not valid.
      • getName

        public String getName()
        Description copied from interface: Service
        Retrieve the name of this service, that can be used to look up its slices in the Service Finder.
        Returns:
        The name of this service.
        See Also:
        ServiceFinder
      • getHorizontalInterface

        public Class getHorizontalInterface()
        Description copied from class: BaseService
        This should be properly implemented by the services that have non-empty slices.
        Specified by:
        getHorizontalInterface in interface Service
        Overrides:
        getHorizontalInterface in class BaseService
        Returns:
        A Class object, representing the interface that is implemented by the slices of this service. Let s be the Class object corresponding to the Service.Slice interface, and let c be the returned Class object. Then, the two following conditions must hold:
        1. c.isInterface() == true
        2. s.isAssignableFrom(c) == true
      • getLocalSlice

        public Service.Slice getLocalSlice()
        Description copied from class: BaseService
        This should be properly implemented by the services that have non-empty slices.
        Specified by:
        getLocalSlice in interface Service
        Overrides:
        getLocalSlice in class BaseService
        Returns:
        The slice of this service that resides on the local platform node, or null if no such slice exists.
      • getCommandFilter

        public Filter getCommandFilter​(boolean direction)
        Description copied from class: BaseService
        This should be properly implemented by the services that have filters. Note that when called multiple times with the same value of the direction parameter this method MUST always return the same object!
        Specified by:
        getCommandFilter in interface Service
        Overrides:
        getCommandFilter in class BaseService
        Parameters:
        direction - One of the two constants Filter.INCOMING and Filter.OUTGOING, distinguishing between the two filter chains managed by the command processor.
        Returns:
        A Filter object, used by this service to intercept and process kernel-level commands. If the service does not wish to install a command filter for one or both directions, it can just return null when appropriate.
        See Also:
        CommandProcessor
      • boot

        public void boot​(Profile myProfile)
                  throws ServiceException
        Activate the PersistentDeliveryManager and instantiate the PersistentDeliveryFilter. Note that getting the MessagingService (required to instantiate the PersistentDeliveryManager) cannot be done in the init() method since at that time the MessagingService may not be installed yet.
        Specified by:
        boot in interface Service
        Overrides:
        boot in class BaseService
        Parameters:
        myProfile - The configuration profile for this service.
        Throws:
        ServiceException - If a problem occurs during service initialization.