Package tigase.server.xmppsession

## Class SessionManager

- java.lang.Object
- - tigase.server.BasicComponent
  - - tigase.server.AbstractMessageReceiver
    - - tigase.server.xmppsession.SessionManager

- All Implemented Interfaces:
    `ClusteredComponentIfc`, `Configurable`, `XMPPService`, `ConfigurationChangedAware`, `Initializable`, `RegistrarBean`, `MessageReceiver`, `PacketWriterWithTimeout`, `ServerComponent`, `SessionManagerHandler`, `StatisticsContainer`, `StatisticsContainerIfc`, `OnlineJidsReporter`, `VHostListener`
  Direct Known Subclasses:
    `SessionManagerClustered`

      @Bean(name="sess-man",
            parent=Kernel.class,
            active=true,
            exportable=true)
      @ConfigType({DefaultMode,SessionManagerMode})
      @ClusterModeRequired(active=false)
      public class SessionManager
      extends AbstractMessageReceiver
      implements Configurable, SessionManagerHandler, OnlineJidsReporter, RegistrarBean

  Class SessionManager
  Created: Tue Nov 22 07:07:11 2005
  Author:
    Artur Hefczyc

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class | Description
    --- | --- | ---
    `static class` | `SessionManager.DefaultHandlerProc` |
    `static interface` | `SessionManager.MessageArchive` |
    `static interface` | `SessionManager.ProcessorResultWriter` |
    `static class` | `SessionManager.SessionCloseProc` |
    `static class` | `SessionManager.SessionOpenProc` |
    `static class` | `SessionManager.SMPacketWriter` |

    - ### Nested classes/interfaces inherited from class tigase.server.BasicComponent

      `BasicComponent.ServerInfoVHostItemExtension`

    - ### Nested classes/interfaces inherited from interface tigase.server.PacketWriterWithTimeout

      `PacketWriterWithTimeout.Handler`

  - ### Field Summary

    Fields
    Modifier and Type | Field | Description
    --- | --- | ---
    `protected static java.lang.String` | `ADMIN_COMMAND_NODE` |
    `protected java.util.concurrent.ConcurrentHashMap<JID,​XMPPResourceConnection>` | `connectionsByFrom` | A Map with connectionID as a key and an object with all the user connection data as a value
    `protected SessionManager.MessageArchive` | `messageArchive` |
    `protected java.util.concurrent.ConcurrentHashMap<BareJID,​XMPPSession>` | `sessionsByNodeId` | A Map with bare user JID as a key and a user session object as a value.

    - ### Fields inherited from class tigase.server.AbstractMessageReceiver

      `HOUR, INCOMING_FILTERS_PROP_KEY, INCOMING_FILTERS_PROP_VAL, MAX_QUEUE_SIZE_PROP_KEY, MAX_QUEUE_SIZE_PROP_VAL, maxInQueueSize, maxOutQueueSize, maxQueueSize, MINUTE, OUTGOING_FILTERS_PROP_KEY, OUTGOING_FILTERS_PROP_VAL, PACKET_DELIVERY_RETRY_COUNT_PROP_KEY, SCHEDULER_THREADS_PROP_KEY, SECOND`

    - ### Fields inherited from class tigase.server.BasicComponent

      `admins, ALL_PROP_KEY, COMMAND_PROP_NODE, scriptCommands, scriptEngineManager, SCRIPTS_DIR_PROP_DEF, SCRIPTS_DIR_PROP_KEY, trusted, vHostManager`

    - ### Fields inherited from interface tigase.conf.Configurable

      `ADMINS_PROP_KEY, AMP_CLASS_NAME, AMP_CLUST_CLASS_NAME, AUTH_DOMAIN_POOL_CLASS, AUTH_REPO_DOMAINS_PROP_KEY, AUTH_REPO_PARAMS_NODE, AUTH_REPO_POOL_CLASS, AUTH_REPO_URL_PROP_KEY, BOSH_CLUST_COMP_CLASS_NAME, BOSH_COMP_CLASS_NAME, C2S_CLUST_COMP_CLASS_NAME, C2S_COMP_CLASS_NAME, CL_COMP_CLASS_NAME, CLUSTER_CONECT, CLUSTER_CONTR_CLASS_NAME, CLUSTER_LISTEN, CLUSTER_MODE, CLUSTER_NODES, CLUSTER_NODES_PROP_KEY, COMP_PROT_CLASS_NAME, COMPONENT_ID_PROP_KEY, DEF_AMP_NAME, DEF_BOSH_NAME, DEF_C2S_NAME, DEF_CL_COMP_NAME, DEF_CLUST_CONTR_NAME, DEF_COMP_PROT_NAME, DEF_EVENTBUS_NAME, DEF_EXT_COMP_NAME, DEF_HOSTNAME_PROP_KEY, DEF_MONITOR_NAME, DEF_S2S_NAME, DEF_SM_NAME, DEF_STATS_NAME, DEF_VHOST_MAN_NAME, DEF_WS2S_NAME, DERBY_REPO_CLASS_PROP_VAL, DERBY_REPO_URL_PROP_VAL, DRUPAL_REPO_URL_PROP_VAL, DRUPALWP_REPO_CLASS_PROP_VAL, DUMMY_REPO_CLASS_PROP_VAL, EVENTBUS_CLASS_NAME, EXT_COMP_CLASS_NAME, GEN_ADMINS, GEN_AUTH_DB, GEN_AUTH_DB_URI, GEN_COMP_CLASS, GEN_COMP_NAME, GEN_CONF, GEN_CONFIG, GEN_CONFIG_ALL, GEN_CONFIG_COMP, GEN_CONFIG_CS, GEN_CONFIG_DEF, GEN_CONFIG_SM, GEN_DEBUG, GEN_DEBUG_PACKAGES, GEN_EXT_COMP, GEN_MAX_QUEUE_SIZE, GEN_SCRIPT_DIR, GEN_SM_PLUGINS, GEN_SREC_ADMINS, GEN_SREC_DB, GEN_SREC_DB_URI, GEN_TEST, GEN_TRUSTED, GEN_USER_DB, GEN_USER_DB_URI, GEN_USER_DB_URI_PROP_KEY, GEN_VIRT_HOSTS, HOSTNAMES_PROP_KEY, LIBRESOURCE_REPO_CLASS_PROP_VAL, LIBRESOURCE_REPO_URL_PROP_VAL, MONITOR_CLASS_NAME, MONITOR_CLUST_CLASS_NAME, MONITORING, MYSQL_REPO_CLASS_PROP_VAL, MYSQL_REPO_URL_PROP_VAL, PGSQL_REPO_CLASS_PROP_VAL, PGSQL_REPO_URL_PROP_VAL, ROUTER_COMP_CLASS_NAME, S2S_CLUST_COMP_CLASS_NAME, S2S_COMP_CLASS_NAME, SHARED_AUTH_REPO_PARAMS_PROP_KEY, SHARED_AUTH_REPO_PROP_KEY, SHARED_USER_REPO_PARAMS_PROP_KEY, SHARED_USER_REPO_PROP_KEY, SM_CLUST_COMP_CLASS_NAME, SM_COMP_CLASS_NAME, STANZA_WHITE_CHAR_ACK, STANZA_XMPP_ACK, STATS_CLASS_NAME, STRINGPREP_PROCESSOR, TIGASE_AUTH_REPO_CLASS_PROP_VAL, TIGASE_AUTH_REPO_URL_PROP_VAL, TIGASE_CUSTOM_AUTH_REPO_CLASS_PROP_VAL, TRUSTED_PROP_KEY, USER_DOMAIN_POOL_CLASS, USER_REPO_DOMAINS_PROP_KEY, USER_REPO_PARAMS_NODE, USER_REPO_POOL_CLASS, USER_REPO_POOL_SIZE, USER_REPO_POOL_SIZE_PROP_KEY, USER_REPO_URL_PROP_KEY, VHOST_MAN_CLASS_NAME, VHOST_MAN_CLUST_CLASS_NAME, WS2S_CLASS_NAME, WS2S_CLUST_CLASS_NAME, XML_REPO_CLASS_PROP_VAL, XML_REPO_URL_PROP_VAL, XMPP_STANZA_ACK`

    - ### Fields inherited from interface tigase.server.xmppsession.SessionManagerHandler

      `COMMIT_HANDLER_KEY`

    - ### Fields inherited from interface tigase.disco.XMPPService

      `CMD_FEATURES, DEF_FEATURES, INFO_XMLNS, ITEMS_XMLNS`

  - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `SessionManager()` |

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `boolean` | `addOutPacket​(Packet packet)` |
    `protected void` | `addOutPackets​(Packet packet, XMPPResourceConnection conn, java.util.Queue<Packet> results)` |
    `XMPPImplIfc` | `addPlugin​(XMPPImplIfc proc)` |
    `protected boolean` | `addTrusted​(JID jid)` |
    `protected void` | `checkSingleUserConnectionsLimit​(XMPPResourceConnection conn)` |
    `protected void` | `closeConnection​(XMPPResourceConnection connection, JID connectionId, java.lang.String userId, boolean closeOnly)` |
    `protected void` | `closeSession​(XMPPResourceConnection conn, boolean closeOnly)` |
    `boolean` | `containsJid​(BareJID jid)` | The method checks whether the given JID is known to the installation, either user connected to local machine or any of the cluster nodes.
    `boolean` | `containsJidLocally​(BareJID jid)` | The method checks whether the given JID is known to local cluster node as connected user.
    `boolean` | `containsJidLocally​(JID jid)` | The method checks whether the given JID is known to local cluster node as connected user.
    `protected XMPPResourceConnection` | `createUserSession​(JID conn_id, java.lang.String domain)` |
    `protected boolean` | `delTrusted​(JID jid)` |
    `void` | `everyMinute()` | Utility method executed precisely every minute.
    `void` | `everySecond()` | Utility method executed precisely every second.
    `protected boolean` | `fastAddOutPacket​(Packet packet)` |
    `JID[]` | `getConnectionIdsForJid​(BareJID jid)` | Retrieve all connection IDs (CIDs) for the given user.
    `java.lang.String` | `getDiscoCategoryType()` | Method returns component category type used for service discovery responses.
    `java.lang.String` | `getDiscoDescription()` | Method returns description used for service discovery responses.
    `java.util.List<Element>` | `getDiscoFeatures​(JID from)` | Method returns list of features provided by this component for provided JID.
    `Element` | `getDiscoInfo​(java.lang.String node, JID jid, JID from)` | Returns service discovery info for the component.
    `java.util.List<Element>` | `getDiscoItems​(java.lang.String node, JID jid, JID from)` | Returns service discovery items for the component.
    `protected java.lang.Integer` | `getMaxQueueSize​(int def)` |
    `int` | `getOpenUsersConnectionsAmount()` |
    `java.util.Map<java.lang.String,​XMPPPacketFilterIfc>` | `getOutFilters()` |
    `java.util.Map<java.lang.String,​XMPPPostprocessorIfc>` | `getPostProcessors()` |
    `java.util.Map<java.lang.String,​XMPPPreprocessorIfc>` | `getPreProcessors()` |
    `java.util.Map<java.lang.String,​XMPPProcessorIfc>` | `getProcessors()` |
    `XMPPResourceConnection` | `getResourceConnection​(JID jid)` |
    `protected XMPPSession` | `getSession​(BareJID jid)` |
    `java.lang.Integer` | `getSingleUserConnectionsLimit()` |
    `void` | `getStatistics​(StatisticsList list)` | Method returns component statistics.
    `protected XMPPResourceConnection` | `getXMPPResourceConnection​(Packet p)` |
    `protected XMPPResourceConnection` | `getXMPPResourceConnection​(JID connId)` |
    `void` | `handleDomainChange​(java.lang.String domain, XMPPResourceConnection conn)` |
    `void` | `handleLocalPacket​(Packet packet, XMPPResourceConnection conn)` |
    `void` | `handleLogin​(BareJID userId, XMPPResourceConnection conn)` |
    `void` | `handleLogout​(BareJID userId, XMPPResourceConnection conn)` |
    `void` | `handlePresenceSet​(XMPPResourceConnection conn)` |
    `void` | `handleResourceBind​(XMPPResourceConnection conn)` |
    `boolean` | `handlesLocalDomains()` | Indicates whether the component accepts packets to all local domains.
    `boolean` | `hasCompleteJidsInfo()` | Method checks whether the clustering strategy has a complete JIDs info.
    `int` | `hashCodeForPacket​(Packet packet)` | This method decides how incoming packets are distributed among processing threads.
    `void` | `initBindings​(javax.script.Bindings binds)` | Initialize a mapping of key/value pairs which can be used in scripts loaded by the server
    `void` | `initialize()` | Method will be called, when bean will be created, configured and ready to use.
    `protected boolean` | `isBrokenPacket​(Packet p)` |
    `boolean` | `isLocalDomain​(java.lang.String domain, boolean includeComponents)` |
    `protected XMPPResourceConnection` | `loginUserSession​(JID conn_id, java.lang.String domain, BareJID user_id, java.lang.String resource, java.lang.String xmpp_sessionId, boolean tmpSession)` |
    `protected void` | `nodeShutdown​(ShutdownEvent event)` |
    `protected boolean` | `processAdminsOrDomains​(Packet packet)` |
    `protected boolean` | `processCommand​(Packet pc)` |
    `int` | `processingInThreads()` | Concurrency control method.
    `int` | `processingOutThreads()` | Concurrency control method.
    `void` | `processPacket​(Packet packet)` | This is the main `Packet` processing method.
    `protected void` | `processPacket​(Packet packet, XMPPResourceConnection conn)` |
    `protected void` | `processPresenceUpdate​(XMPPSession session, Element packet)` |
    `void` | `register​(Kernel kernel)` | Method called when bean is being registered allowing developer to programatically register other beans.
    `protected void` | `registerNewSession​(BareJID userId, XMPPResourceConnection conn)` |
    `void` | `removePlugin​(java.lang.String plug_id)` |
    `void` | `removePlugin​(XMPPImplIfc proc)` |
    `int` | `schedulerThreads()` | Method returns default number of threads used by SchedulerExecutorService
    `protected void` | `sendToAdmins​(Packet packet)` |
    `void` | `setAllPlugins​(java.util.concurrent.ConcurrentSkipListSet<XMPPImplIfc> allPlugins)` |
    `void` | `setName​(java.lang.String name)` | Method used to assign component name (localpart of the component)
    `void` | `setSchedulerThreads_size​(int size)` |
    `void` | `setSmThreadsPool​(java.lang.String val)` |
    `boolean` | `skipPrivacy()` |
    `void` | `start()` |
    `void` | `stop()` |
    `void` | `unregister​(Kernel kernel)` | Method called while bean is being unregistered.
    `protected void` | `xmppStreamMoved​(XMPPResourceConnection conn, JID oldConnId, JID newConnId)` |

    - ### Methods inherited from class tigase.server.AbstractMessageReceiver

      `addOutPacketNB, addOutPackets, addOutPacketWithTimeout, addOutPacketWithTimeout, addPacket, addPacketNB, addPackets, addRegexRouting, addTimerTask, addTimerTask, addTimerTask, addTimerTaskWithTimeout, addTimerTaskWithTimeout, beanConfigurationChanged, clearRegexRoutings, everyHour, getRegexRoutings, getResourceForPacketWithTimeout, isInRegexRoutings, newPacketId, processOutPacket, processPacket, release, removeRegexRouting, setCompId, setIncoming_filters, setOutgoing_filters, setParent, updateFiltersName`

    - ### Methods inherited from class tigase.server.BasicComponent

      `addComponentDomain, canCallCommand, canCallCommand, checkCommandAcl, checkCommandAcl, createScriptEngineManager, getComponentId, getComponentInfo, getDefaults, getDefHostName, getDefVHostItem, getDiscoCategory, getDiscoExtensionsForm, getDiscoFeatures, getName, getNodesConnected, getNodesConnectedWithLocal, getScriptCommands, getScriptItems, getServiceEntity, getServiceEntityCaps, getVHostItem, handlesNameSubdomains, handlesNonLocalDomains, initializationCompleted, isAdmin, isInitializationComplete, isLocalDomain, isLocalDomainOrComponent, isNonAdminCommands, isSubdomain, isTrusted, isTrusted, nodeConnected, nodeDisconnected, onNodeConnected, onNodeDisconnected, processScriptCommand, reloadScripts, removeComponentDomain, removeServiceDiscoveryItem, setAdmins, setClusterController, setCommandsACL, setProperties, setScriptsBaseDir, setVHostManager, updateServiceDiscoveryItem, updateServiceDiscoveryItem, updateServiceDiscoveryItem, updateServiceEntity`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

    - ### Methods inherited from interface tigase.conf.Configurable

      `getDefaults, setProperties`

    - ### Methods inherited from interface tigase.server.MessageReceiver

      `getDefHostName`

    - ### Methods inherited from interface tigase.server.ServerComponent

      `getComponentId, getComponentInfo, getName, initializationCompleted, isInitializationComplete, processPacket, release`

    - ### Methods inherited from interface tigase.server.xmppsession.SessionManagerHandler

      `getComponentId`

    - ### Methods inherited from interface tigase.stats.StatisticsContainerIfc

      `getName`

- - ### Field Detail

    - #### ADMIN_COMMAND_NODE

          protected static final java.lang.String ADMIN_COMMAND_NODE

      See Also:
        Constant Field Values

    - #### connectionsByFrom

          protected java.util.concurrent.ConcurrentHashMap<JID,​XMPPResourceConnection> connectionsByFrom

      A Map with connectionID as a key and an object with all the user connection data as a value

    - #### sessionsByNodeId

          protected java.util.concurrent.ConcurrentHashMap<BareJID,​XMPPSession> sessionsByNodeId

      A Map with bare user JID as a key and a user session object as a value.

    - #### messageArchive

          @Inject(nullAllowed=true)
          protected SessionManager.MessageArchive messageArchive

  - ### Constructor Detail

    - #### SessionManager

          public SessionManager()

  - ### Method Detail

    - #### addOutPacket

          public boolean addOutPacket​(Packet packet)

      Overrides:
        `addOutPacket` in class `AbstractMessageReceiver`

    - #### addPlugin

          public XMPPImplIfc addPlugin​(XMPPImplIfc proc)
                                throws java.lang.ClassNotFoundException,
                                       java.lang.InstantiationException,
                                       java.lang.IllegalAccessException,
                                       TigaseDBException

      Throws:
        `java.lang.ClassNotFoundException`
        `java.lang.InstantiationException`
        `java.lang.IllegalAccessException`
        `TigaseDBException`

    - #### containsJid

          public boolean containsJid​(BareJID jid)

      Description copied from interface: `OnlineJidsReporter`
      The method checks whether the given JID is known to the installation, either user connected to local machine or any of the cluster nodes. False result does not mean the user is not connected. It means the method does not know anything about the JID. Some clustering strategies may not cache online users information.
      Specified by:
        `containsJid` in interface `OnlineJidsReporter`
      Parameters:
        `jid` - a user's JID for whom we query information.
      Returns:
        true if the user is known as online to the installation, false if the method does not know.

    - #### containsJidLocally

          public boolean containsJidLocally​(BareJID jid)

      Description copied from interface: `OnlineJidsReporter`
      The method checks whether the given JID is known to local cluster node as connected user. False result means that given JID is not connected to local cluster node but it may be connected to other cluster node. Result of this method should be independent of used clustering strategy.
      Specified by:
        `containsJidLocally` in interface `OnlineJidsReporter`
      Parameters:
        `jid` - a user's JID for whom we query information
      Returns:
        true if user is known as connected to local cluster node, false if it is not connected to local node

    - #### containsJidLocally

          public boolean containsJidLocally​(JID jid)

      Description copied from interface: `OnlineJidsReporter`
      The method checks whether the given JID is known to local cluster node as connected user. False result means that given JID is not connected to local cluster node but it may be connected to other cluster node. Result of this method should be independent of used clustering strategy.
      Specified by:
        `containsJidLocally` in interface `OnlineJidsReporter`
      Parameters:
        `jid` - a user's JID for whom we query information
      Returns:
        true if user is known as connected to local cluster node, false if it is not connected to local node

    - #### handleLocalPacket

          public void handleLocalPacket​(Packet packet,
                                        XMPPResourceConnection conn)

    - #### handleLogin

          public void handleLogin​(BareJID userId,
                                  XMPPResourceConnection conn)

      Specified by:
        `handleLogin` in interface `SessionManagerHandler`

    - #### handleLogout

          public void handleLogout​(BareJID userId,
                                   XMPPResourceConnection conn)

      Specified by:
        `handleLogout` in interface `SessionManagerHandler`

    - #### handlePresenceSet

          public void handlePresenceSet​(XMPPResourceConnection conn)

      Specified by:
        `handlePresenceSet` in interface `SessionManagerHandler`

    - #### handleResourceBind

          public void handleResourceBind​(XMPPResourceConnection conn)

      Specified by:
        `handleResourceBind` in interface `SessionManagerHandler`

    - #### checkSingleUserConnectionsLimit

          protected void checkSingleUserConnectionsLimit​(XMPPResourceConnection conn)

    - #### handlesLocalDomains

          public boolean handlesLocalDomains()

      Description copied from interface: `VHostListener`
      Indicates whether the component accepts packets to all local domains. The best example would be SM component which usually handles all requests sent to any local domain.
      Specified by:
        `handlesLocalDomains` in interface `VHostListener`
      Overrides:
        `handlesLocalDomains` in class `BasicComponent`
      Returns:
        'true' if the component accepts packets to local domains 'false' otherwise.

    - #### hashCodeForPacket

          public int hashCodeForPacket​(Packet packet)

      Description copied from class: `AbstractMessageReceiver`
      This method decides how incoming packets are distributed among processing threads. Different components needs different distribution to efficient use all threads and avoid packets re-ordering.
      If there are N processing threads, packets are distributed among threads using following code:

           int threadNo = Math.abs(hashCodeForPacket(packet) % N);

      For a PubSub component, for example, a better packets distribution would be based on the PubSub channel name, for SM a better distribution is based on the destination address, etc....
      Overrides:
        `hashCodeForPacket` in class `AbstractMessageReceiver`
      Parameters:
        `packet` - is a `Packet` which needs to be processed by some thread.
      Returns:
        a hash code generated for the input thread.

    - #### initBindings

          public void initBindings​(javax.script.Bindings binds)

      Description copied from class: `BasicComponent`
      Initialize a mapping of key/value pairs which can be used in scripts loaded by the server
      Overrides:
        `initBindings` in class `BasicComponent`
      Parameters:
        `binds` - A mapping of key/value pairs, all of whose keys are Strings.

    - #### processingInThreads

          public int processingInThreads()

      Description copied from class: `AbstractMessageReceiver`
      Concurrency control method. Returns preferable number of threads set for this component.
      Overrides:
        `processingInThreads` in class `AbstractMessageReceiver`
      Returns:
        preferable number of threads set for this component.

    - #### processingOutThreads

          public int processingOutThreads()

      Description copied from class: `AbstractMessageReceiver`
      Concurrency control method. Returns preferable number of threads set for this component.
      Overrides:
        `processingOutThreads` in class `AbstractMessageReceiver`
      Returns:
        preferable number of threads set for this component.

    - #### processPacket

          public void processPacket​(Packet packet)

      Description copied from class: `AbstractMessageReceiver`
      This is the main `Packet` processing method. It is called concurrently from many threads so implementing it in thread save manner is essential. The method is called for each packet addressed to the component.
      Please note, the `Packet` instance may be processed by different parts of the server, different components or plugins at the same time. Therefore this is very important to tread the `Packet` instance as unmodifiable object.
      Processing in this method is asynchronous, therefore there is no result value. If there are some 'result' packets generated during processing, they should be passed back using `addOutPacket(Packet)` method.
      Specified by:
        `processPacket` in class `AbstractMessageReceiver`
      Parameters:
        `packet` - is an instance of the `Packet` class passed for processing.

    - #### removePlugin

          public void removePlugin​(XMPPImplIfc proc)

    - #### removePlugin

          public void removePlugin​(java.lang.String plug_id)

    - #### skipPrivacy

          public boolean skipPrivacy()

    - #### start

          public void start()

      Specified by:
        `start` in interface `MessageReceiver`
      Overrides:
        `start` in class `AbstractMessageReceiver`

    - #### stop

          public void stop()

      Overrides:
        `stop` in class `AbstractMessageReceiver`

    - #### getConnectionIdsForJid

          public JID[] getConnectionIdsForJid​(BareJID jid)

      Description copied from interface: `OnlineJidsReporter`
      Retrieve all connection IDs (CIDs) for the given user.
      Specified by:
        `getConnectionIdsForJid` in interface `OnlineJidsReporter`
      Parameters:
        `jid` - id of the user for which we want to retrieve the list.
      Returns:
        an array of `JID` containing all Connection IDs (CIDs) for the given user.

    - #### getDiscoCategoryType

          public java.lang.String getDiscoCategoryType()

      Description copied from class: `BasicComponent`
      Method returns component category type used for service discovery responses.
      Overrides:
        `getDiscoCategoryType` in class `BasicComponent`
      Returns:
        category type of a component

    - #### getDiscoDescription

          public java.lang.String getDiscoDescription()

      Description copied from class: `BasicComponent`
      Method returns description used for service discovery responses.
      Overrides:
        `getDiscoDescription` in class `BasicComponent`
      Returns:
        description of a component

    - #### getDiscoFeatures

          public java.util.List<Element> getDiscoFeatures​(JID from)

      Description copied from class: `BasicComponent`
      Method returns list of features provided by this component for provided JID.
      Specified by:
        `getDiscoFeatures` in interface `XMPPService`
      Overrides:
        `getDiscoFeatures` in class `BasicComponent`
      Parameters:
        `from` - a request sender address. Some service disco elements are meant to be available only to system administrarors. The component is responsible to check whether the sender is the component administrator and return results appropriate.
      Returns:
        list of features

    - #### getDiscoInfo

          public Element getDiscoInfo​(java.lang.String node,
                                      JID jid,
                                      JID from)

      Description copied from interface: `XMPPService`
      Returns service discovery info for the component. If the jid is null then this is info for the top level request. SM may return disco info on the top level. Other components should not.
      Specified by:
        `getDiscoInfo` in interface `XMPPService`
      Overrides:
        `getDiscoInfo` in class `BasicComponent`
      Parameters:
        `node` - is service discovery node for which the request is made. Is normally null for the component top level request.
        `jid` - is the jid to which the request has been made.
        `from` - is the request sender address. Some service discovery information is only meant for administrators.
      Returns:
        returns an XML Element with service discovery data.

    - #### getDiscoItems

          public java.util.List<Element> getDiscoItems​(java.lang.String node,
                                                       JID jid,
                                                       JID from)

      Description copied from interface: `XMPPService`
      Returns service discovery items for the component. If the JID is null then this is request for the top level request. SM may return disco items on the top level, other components should just return it's top level service discovery item for null node.
      Specified by:
        `getDiscoItems` in interface `XMPPService`
      Overrides:
        `getDiscoItems` in class `BasicComponent`
      Parameters:
        `node` - is a service discovery node for which the request has been made.
        `jid` - is the jid to which the request has been made.
        `from` - is the request sender address. Some service discovery information is only meant for administrators.
      Returns:
        a list of service discovery items for this component or the component itself disco item for the top level request.

    - #### getResourceConnection

          public XMPPResourceConnection getResourceConnection​(JID jid)

    - #### getOpenUsersConnectionsAmount

          public int getOpenUsersConnectionsAmount()

    - #### getSingleUserConnectionsLimit

          public java.lang.Integer getSingleUserConnectionsLimit()

    - #### getStatistics

          public void getStatistics​(StatisticsList list)

      Description copied from class: `AbstractMessageReceiver`
      Method returns component statistics. Please note, the method can be called every second by the server monitoring system therefore no extensive or lengthy calculations are allowed. If there are some statistics requiring lengthy operations like database access they must have `Level.FINEST` assigned and must be put inside the level guard to prevent generating them by the system monitor. The system monitor does not collect `FINEST` statistics.
      Level guard code looks like the example below:

           if (list.checkLevel(Level.FINEST)) {
             // Some CPU intensive calculations or lengthy operations
             list.add(getName(), "Statistic description", stat_value, Level.FINEST);
           }

      This way you make sure your extensive operation is not executed every second by the monitoring system and does not affect the server performance.
      Specified by:
        `getStatistics` in interface `StatisticsContainerIfc`
      Overrides:
        `getStatistics` in class `AbstractMessageReceiver`
      Parameters:
        `list` - is a `StatistcsList` where all statistics are stored.

    - #### hasCompleteJidsInfo

          public boolean hasCompleteJidsInfo()

      Description copied from interface: `OnlineJidsReporter`
      Method checks whether the clustering strategy has a complete JIDs info. That is whether the strategy knows about all users connected to all nodes. Some strategies may choose not to share this information among nodes, hence the methods returns false. Other may synchronize this information and can provide it to further optimize cluster traffic.
      Specified by:
        `hasCompleteJidsInfo` in interface `OnlineJidsReporter`
      Returns:
        a true boolean value if the strategy has a complete information about all users connected to all cluster nodes.

    - #### isLocalDomain

          public boolean isLocalDomain​(java.lang.String domain,
                                       boolean includeComponents)

      Specified by:
        `isLocalDomain` in interface `SessionManagerHandler`

    - #### setName

          public void setName​(java.lang.String name)

      Description copied from interface: `ServerComponent`
      Method used to assign component name (localpart of the component)
      Specified by:
        `setName` in interface `ServerComponent`
      Overrides:
        `setName` in class `AbstractMessageReceiver`
      Parameters:
        `name` - to be assigned

    - #### setAllPlugins

          public void setAllPlugins​(java.util.concurrent.ConcurrentSkipListSet<XMPPImplIfc> allPlugins)

    - #### setSmThreadsPool

          public void setSmThreadsPool​(java.lang.String val)

    - #### initialize

          public void initialize()

      Description copied from interface: `Initializable`
      Method will be called, when bean will be created, configured and ready to use.
      Specified by:
        `initialize` in interface `Initializable`
      Overrides:
        `initialize` in class `BasicComponent`

    - #### setSchedulerThreads_size

          public void setSchedulerThreads_size​(int size)

      Overrides:
        `setSchedulerThreads_size` in class `AbstractMessageReceiver`

    - #### schedulerThreads

          public int schedulerThreads()

      Description copied from class: `AbstractMessageReceiver`
      Method returns default number of threads used by SchedulerExecutorService
      Overrides:
        `schedulerThreads` in class `AbstractMessageReceiver`
      Returns:
        a value of `int`

    - #### register

          public void register​(Kernel kernel)

      Description copied from interface: `RegistrarBean`
      Method called when bean is being registered allowing developer to programatically register other beans.
      Specified by:
        `register` in interface `RegistrarBean`
      Parameters:
        `kernel` - - instance from local scope

    - #### unregister

          public void unregister​(Kernel kernel)

      Description copied from interface: `RegistrarBean`
      Method called while bean is being unregistered.
      Specified by:
        `unregister` in interface `RegistrarBean`
      Parameters:
        `kernel` - - instance from local scope

    - #### getProcessors

          public java.util.Map<java.lang.String,​XMPPProcessorIfc> getProcessors()

    - #### getPreProcessors

          public java.util.Map<java.lang.String,​XMPPPreprocessorIfc> getPreProcessors()

    - #### getPostProcessors

          public java.util.Map<java.lang.String,​XMPPPostprocessorIfc> getPostProcessors()

    - #### getOutFilters

          public java.util.Map<java.lang.String,​XMPPPacketFilterIfc> getOutFilters()

    - #### everySecond

          public void everySecond()

      Description copied from class: `AbstractMessageReceiver`
      Utility method executed precisely every second. A component can overwrite the method to put own code to be executed at the regular intervals of time.
      Note, no extensive calculations should happen in this method nor long lasting operations. It is essential that the method processing does not exceed 1 second. The overriding method must call the the super method first and only then run own code.
      Overrides:
        `everySecond` in class `AbstractMessageReceiver`

    - #### everyMinute

          public void everyMinute()

      Description copied from class: `AbstractMessageReceiver`
      Utility method executed precisely every minute. A component can overwrite the method to put own code to be executed at the regular intervals of time.
      Note, no extensive calculations should happen in this method nor long lasting operations. It is essential that the method processing does not exceed 1 minute. The overriding method must call the the super method first and only then run own code.
      Overrides:
        `everyMinute` in class `AbstractMessageReceiver`

    - #### handleDomainChange

          public void handleDomainChange​(java.lang.String domain,
                                         XMPPResourceConnection conn)

      Specified by:
        `handleDomainChange` in interface `SessionManagerHandler`

    - #### addOutPackets

          protected void addOutPackets​(Packet packet,
                                       XMPPResourceConnection conn,
                                       java.util.Queue<Packet> results)

    - #### addTrusted

          protected boolean addTrusted​(JID jid)

    - #### closeConnection

          protected void closeConnection​(XMPPResourceConnection connection,
                                         JID connectionId,
                                         java.lang.String userId,
                                         boolean closeOnly)

    - #### closeSession

          protected void closeSession​(XMPPResourceConnection conn,
                                      boolean closeOnly)

    - #### createUserSession

          protected XMPPResourceConnection createUserSession​(JID conn_id,
                                                             java.lang.String domain)
                                                      throws TigaseStringprepException

      Throws:
        `TigaseStringprepException`

    - #### delTrusted

          protected boolean delTrusted​(JID jid)

    - #### fastAddOutPacket

          protected boolean fastAddOutPacket​(Packet packet)

    - #### loginUserSession

          protected XMPPResourceConnection loginUserSession​(JID conn_id,
                                                            java.lang.String domain,
                                                            BareJID user_id,
                                                            java.lang.String resource,
                                                            java.lang.String xmpp_sessionId,
                                                            boolean tmpSession)

    - #### processAdminsOrDomains

          protected boolean processAdminsOrDomains​(Packet packet)

    - #### processCommand

          protected boolean processCommand​(Packet pc)

    - #### processPacket

          protected void processPacket​(Packet packet,
                                       XMPPResourceConnection conn)

    - #### processPresenceUpdate

          protected void processPresenceUpdate​(XMPPSession session,
                                               Element packet)

    - #### registerNewSession

          protected void registerNewSession​(BareJID userId,
                                            XMPPResourceConnection conn)

    - #### sendToAdmins

          protected void sendToAdmins​(Packet packet)

    - #### nodeShutdown

          @HandleEvent
          protected void nodeShutdown​(ShutdownEvent event)

    - #### xmppStreamMoved

          protected void xmppStreamMoved​(XMPPResourceConnection conn,
                                         JID oldConnId,
                                         JID newConnId)

    - #### getMaxQueueSize

          protected java.lang.Integer getMaxQueueSize​(int def)

      Overrides:
        `getMaxQueueSize` in class `AbstractMessageReceiver`

    - #### getSession

          protected XMPPSession getSession​(BareJID jid)

    - #### getXMPPResourceConnection

          protected XMPPResourceConnection getXMPPResourceConnection​(JID connId)

    - #### getXMPPResourceConnection

          protected XMPPResourceConnection getXMPPResourceConnection​(Packet p)

    - #### isBrokenPacket

          protected boolean isBrokenPacket​(Packet p)