Package tigase.cluster

## Class SessionManagerClustered

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

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

      @Bean(name="sess-man",
            parent=Kernel.class,
            active=true,
            exportable=true)
      @ConfigType({DefaultMode,SessionManagerMode})
      @ClusterModeRequired(active=true)
      public class SessionManagerClustered
      extends SessionManager
      implements ClusteredComponentIfc, SessionManagerClusteredIfc

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

- - ### Nested Class Summary

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

      `SessionManager.DefaultHandlerProc, SessionManager.MessageArchive, SessionManager.ProcessorResultWriter, SessionManager.SessionCloseProc, SessionManager.SessionOpenProc, 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
    --- | --- | ---
    `static java.lang.String` | `CLUSTER_STRATEGY_VAR` |
    `static java.lang.String` | `MY_DOMAIN_NAME_PROP_KEY` |
    `static java.lang.String` | `STRATEGY_CLASS_PROP_KEY` |
    `static java.lang.String` | `STRATEGY_CLASS_PROP_VAL` |
    `static java.lang.String` | `STRATEGY_CLASS_PROPERTY` |
    `static int` | `SYNC_MAX_BATCH_SIZE` |

    - ### Fields inherited from class tigase.server.xmppsession.SessionManager

      `ADMIN_COMMAND_NODE, connectionsByFrom, messageArchive, sessionsByNodeId`

    - ### 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.cluster.api.SessionManagerClusteredIfc

      `SESSION_FOUND_KEY`

    - ### 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
    --- | ---
    `SessionManagerClustered()` |

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `protected void` | `checkSingleUserConnectionsLimit​(XMPPResourceConnection conn)` |
    `protected void` | `closeSession​(XMPPResourceConnection conn, boolean closeOnly)` | The method intercept user's disconnect event.
    `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.
    `void` | `everyHour()` | Utility method executed precisely every hour.
    `void` | `everyMinute()` | Utility method executed precisely every minute.
    `void` | `everySecond()` | Utility method executed precisely every second.
    `boolean` | `fastAddOutPacket​(Packet packet)` |
    `protected boolean` | `fillRoutedUserSessionEvent​(UserSessionEvent event)` |
    `protected boolean` | `fillRoutedUserSessionWithProcessorResultWriter​(UserSessionEventWithProcessorResultWriter event)` |
    `ComponentInfo` | `getComponentInfo()` | Allows to obtain various informations about components
    `JID[]` | `getConnectionIdsForJid​(BareJID jid)` | Retrieve all connection IDs (CIDs) for the given user.
    `java.lang.String` | `getDiscoDescription()` | Method returns description used for service discovery responses.
    `void` | `getStatistics​(StatisticsList list)` | Method returns component statistics.
    `ClusteringStrategyIfc` | `getStrategy()` | Returns active clustering strategy object.
    `XMPPResourceConnection` | `getXMPPResourceConnection​(Packet p)` |
    `java.util.concurrent.ConcurrentHashMap<JID,​XMPPResourceConnection>` | `getXMPPResourceConnections()` |
    `java.util.concurrent.ConcurrentHashMap<BareJID,​XMPPSession>` | `getXMPPSessions()` |
    `void` | `handleLocalPacket​(Packet packet, XMPPResourceConnection conn)` |
    `void` | `handleLogin​(BareJID userId, XMPPResourceConnection conn)` |
    `void` | `handleLogout​(BareJID userId, XMPPResourceConnection conn)` |
    `void` | `handleResourceBind​(XMPPResourceConnection conn)` |
    `boolean` | `hasCompleteJidsInfo()` | Method checks whether the clustering strategy has a complete JIDs info.
    `boolean` | `hasXMPPResourceConnectionForConnectionJid​(JID connJid)` | Method to check if there is XMPPResourceConnection instance for connection JID.
    `void` | `initBindings​(javax.script.Bindings binds)` | Initialize a mapping of key/value pairs which can be used in scripts loaded by the server
    `void` | `onNodeConnected​(JID jid)` |
    `void` | `onNodeDisconnected​(JID jid)` |
    `int` | `processingInThreads()` | Concurrency control method.
    `int` | `processingOutThreads()` | Concurrency control method.
    `void` | `processPacket​(Packet packet)` | This is the main `Packet` processing method.
    `void` | `processPacket​(Packet packet, XMPPResourceConnection conn)` |
    `void` | `processPresenceUpdate​(XMPPSession session, Element packet)` |
    `protected java.util.Collection<Subscription>` | `routeUserSessionEvent​(UserSessionEvent event, java.util.Collection<Subscription> subscriptions)` |
    `void` | `setClusterController​(ClusterControllerIfc cl_controller)` | Set's the configures the cluster controller object for cluster communication and API.
    `protected void` | `xmppStreamMoved​(XMPPResourceConnection conn, JID oldConnId, JID newConnId)` |

    - ### Methods inherited from class tigase.server.xmppsession.SessionManager

      `addOutPacket, addOutPackets, addPlugin, addTrusted, closeConnection, containsJidLocally, containsJidLocally, createUserSession, delTrusted, getDiscoCategoryType, getDiscoFeatures, getDiscoInfo, getDiscoItems, getMaxQueueSize, getOpenUsersConnectionsAmount, getOutFilters, getPostProcessors, getPreProcessors, getProcessors, getResourceConnection, getSession, getSingleUserConnectionsLimit, getXMPPResourceConnection, handleDomainChange, handlePresenceSet, handlesLocalDomains, hashCodeForPacket, initialize, isBrokenPacket, isLocalDomain, loginUserSession, nodeShutdown, processAdminsOrDomains, processCommand, register, registerNewSession, removePlugin, removePlugin, schedulerThreads, sendToAdmins, setAllPlugins, setName, setSchedulerThreads_size, setSmThreadsPool, skipPrivacy, start, stop, unregister`

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

      `addOutPacketNB, addOutPackets, addOutPacketWithTimeout, addOutPacketWithTimeout, addPacket, addPacketNB, addPackets, addRegexRouting, addTimerTask, addTimerTask, addTimerTask, addTimerTaskWithTimeout, addTimerTaskWithTimeout, beanConfigurationChanged, clearRegexRoutings, 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, 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, processScriptCommand, reloadScripts, removeComponentDomain, removeServiceDiscoveryItem, setAdmins, 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.cluster.api.ClusteredComponentIfc

      `nodeConnected, nodeDisconnected`

    - ### 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, getName, initializationCompleted, isInitializationComplete, processPacket, release, setName`

    - ### Methods inherited from interface tigase.cluster.api.SessionManagerClusteredIfc

      `getComponentId, getNodesConnected`

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

      `handleDomainChange, handlePresenceSet, isLocalDomain`

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

      `getName`

- - ### Field Detail

    - #### CLUSTER_STRATEGY_VAR

          public static final java.lang.String CLUSTER_STRATEGY_VAR

      See Also:
        Constant Field Values

    - #### MY_DOMAIN_NAME_PROP_KEY

          public static final java.lang.String MY_DOMAIN_NAME_PROP_KEY

      See Also:
        Constant Field Values

    - #### STRATEGY_CLASS_PROP_KEY

          public static final java.lang.String STRATEGY_CLASS_PROP_KEY

      See Also:
        Constant Field Values

    - #### STRATEGY_CLASS_PROP_VAL

          public static final java.lang.String STRATEGY_CLASS_PROP_VAL

      See Also:
        Constant Field Values

    - #### STRATEGY_CLASS_PROPERTY

          public static final java.lang.String STRATEGY_CLASS_PROPERTY

      See Also:
        Constant Field Values

    - #### SYNC_MAX_BATCH_SIZE

          public static final int SYNC_MAX_BATCH_SIZE

      See Also:
        Constant Field Values

  - ### Constructor Detail

    - #### SessionManagerClustered

          public SessionManagerClustered()

  - ### Method Detail

    - #### 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`
      Overrides:
        `containsJid` in class `SessionManager`
      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.

    - #### 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 `SessionManager`

    - #### 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 `SessionManager`

    - #### everyHour

          public void everyHour()

      Description copied from class: `AbstractMessageReceiver`
      Utility method executed precisely every hour. 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 hour. The overriding method must call the the super method first and only then run own code.
      Overrides:
        `everyHour` in class `AbstractMessageReceiver`

    - #### fastAddOutPacket

          public boolean fastAddOutPacket​(Packet packet)

      Specified by:
        `fastAddOutPacket` in interface `SessionManagerClusteredIfc`
      Overrides:
        `fastAddOutPacket` in class `SessionManager`

    - #### handleLocalPacket

          public void handleLocalPacket​(Packet packet,
                                        XMPPResourceConnection conn)

      Overrides:
        `handleLocalPacket` in class `SessionManager`

    - #### handleLogin

          public void handleLogin​(BareJID userId,
                                  XMPPResourceConnection conn)

      Specified by:
        `handleLogin` in interface `SessionManagerHandler`
      Overrides:
        `handleLogin` in class `SessionManager`

    - #### handleLogout

          public void handleLogout​(BareJID userId,
                                   XMPPResourceConnection conn)

      Specified by:
        `handleLogout` in interface `SessionManagerHandler`
      Overrides:
        `handleLogout` in class `SessionManager`

    - #### handleResourceBind

          public void handleResourceBind​(XMPPResourceConnection conn)

      Specified by:
        `handleResourceBind` in interface `SessionManagerHandler`
      Overrides:
        `handleResourceBind` in class `SessionManager`

    - #### checkSingleUserConnectionsLimit

          protected void checkSingleUserConnectionsLimit​(XMPPResourceConnection conn)

      Overrides:
        `checkSingleUserConnectionsLimit` in class `SessionManager`

    - #### 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 `SessionManager`
      Parameters:
        `binds` - A mapping of key/value pairs, all of whose keys are Strings.

    - #### onNodeConnected

          public void onNodeConnected​(JID jid)

      Overrides:
        `onNodeConnected` in class `BasicComponent`

    - #### onNodeDisconnected

          public void onNodeDisconnected​(JID jid)

      Overrides:
        `onNodeDisconnected` in class `BasicComponent`

    - #### 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 `SessionManager`
      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 `SessionManager`
      Returns:
        preferable number of threads set for this component.

    - #### processPacket

          public void processPacket​(Packet packet)

      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.
      This is a standard component method for processing packets. The method takes care of cases where the packet cannot be processed locally, in such a case it is forwarded to another node.
      Overrides:
        `processPacket` in class `SessionManager`
      Parameters:
        `packet` - to be processed

    - #### processPacket

          public void processPacket​(Packet packet,
                                    XMPPResourceConnection conn)

      Specified by:
        `processPacket` in interface `SessionManagerClusteredIfc`
      Overrides:
        `processPacket` in class `SessionManager`

    - #### processPresenceUpdate

          public void processPresenceUpdate​(XMPPSession session,
                                            Element packet)

      Specified by:
        `processPresenceUpdate` in interface `SessionManagerClusteredIfc`
      Overrides:
        `processPresenceUpdate` in class `SessionManager`

    - #### getComponentInfo

          public ComponentInfo getComponentInfo()

      Description copied from interface: `ServerComponent`
      Allows to obtain various informations about components
      Specified by:
        `getComponentInfo` in interface `ServerComponent`
      Overrides:
        `getComponentInfo` in class `BasicComponent`
      Returns:
        information about particular component

    - #### getConnectionIdsForJid

          public JID[] getConnectionIdsForJid​(BareJID jid)

      Retrieve all connection IDs (CIDs) for the given user.
      If the installation knows about user's JID, that he is connected to the system, then this method returns all user's connection IDs. As an optimization we can forward packets to all user's connections directly from a single node.
      Specified by:
        `getConnectionIdsForJid` in interface `OnlineJidsReporter`
      Overrides:
        `getConnectionIdsForJid` in class `SessionManager`
      Parameters:
        `jid` - a user's JID for whom we query information.
      Returns:
        a list of all user's connection IDs.

    - #### getDiscoDescription

          public java.lang.String getDiscoDescription()

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

    - #### 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 `SessionManager`
      Parameters:
        `list` - is a `StatistcsList` where all statistics are stored.

    - #### getStrategy

          public ClusteringStrategyIfc getStrategy()

      Returns active clustering strategy object.
      Returns:
        active clustering strategy object.

    - #### getXMPPResourceConnection

          public XMPPResourceConnection getXMPPResourceConnection​(Packet p)

      Specified by:
        `getXMPPResourceConnection` in interface `SessionManagerClusteredIfc`
      Overrides:
        `getXMPPResourceConnection` in class `SessionManager`

    - #### getXMPPResourceConnections

          public java.util.concurrent.ConcurrentHashMap<JID,​XMPPResourceConnection> getXMPPResourceConnections()

      Specified by:
        `getXMPPResourceConnections` in interface `SessionManagerClusteredIfc`

    - #### getXMPPSessions

          public java.util.concurrent.ConcurrentHashMap<BareJID,​XMPPSession> getXMPPSessions()

      Specified by:
        `getXMPPSessions` in interface `SessionManagerClusteredIfc`

    - #### 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`
      Overrides:
        `hasCompleteJidsInfo` in class `SessionManager`
      Returns:
        a true boolean value if the strategy has a complete information about all users connected to all cluster nodes.

    - #### hasXMPPResourceConnectionForConnectionJid

          public boolean hasXMPPResourceConnectionForConnectionJid​(JID connJid)

      Description copied from interface: `SessionManagerClusteredIfc`
      Method to check if there is XMPPResourceConnection instance for connection JID.
      Specified by:
        `hasXMPPResourceConnectionForConnectionJid` in interface `SessionManagerClusteredIfc`
      Returns:
        true - if there is XMPPResourceConnection for connection JID

    - #### setClusterController

          public void setClusterController​(ClusterControllerIfc cl_controller)

      Description copied from interface: `ClusteredComponentIfc`
      Set's the configures the cluster controller object for cluster communication and API.
      Specified by:
        `setClusterController` in interface `ClusteredComponentIfc`
      Overrides:
        `setClusterController` in class `BasicComponent`
      Parameters:
        `cl_controller` - cluster controller object used for cluster communication

    - #### fillRoutedUserSessionWithProcessorResultWriter

          @FillRoutedEvent
          protected boolean fillRoutedUserSessionWithProcessorResultWriter​(UserSessionEventWithProcessorResultWriter event)

    - #### fillRoutedUserSessionEvent

          @FillRoutedEvent
          protected boolean fillRoutedUserSessionEvent​(UserSessionEvent event)

    - #### routeUserSessionEvent

          @RouteEvent
          protected java.util.Collection<Subscription> routeUserSessionEvent​(UserSessionEvent event,
                                                                             java.util.Collection<Subscription> subscriptions)

    - #### closeSession

          protected void closeSession​(XMPPResourceConnection conn,
                                      boolean closeOnly)

      The method intercept user's disconnect event. On user disconnect the method takes a list of cluster nodes from the strategy and sends a notification to all those nodes about the event.
      Overrides:
        `closeSession` in class `SessionManager`
      Parameters:
        `conn` - `XMPPResourceConnection` to be closed
        `closeOnly` - whether to perform additional processing before closing
      See Also:
        `SessionManager.closeSession(tigase.xmpp.XMPPResourceConnection, boolean)`

    - #### xmppStreamMoved

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

      Overrides:
        `xmppStreamMoved` in class `SessionManager`