tigase.cluster

## Class SessionManagerClustered

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

- All Implemented Interfaces:
    ClusteredComponentIfc, Configurable, XMPPService, MessageReceiver, ServerComponent, SessionManagerHandler, StatisticsContainer, OnlineJidsReporter, VHostListener

      public class SessionManagerClustered
      extends SessionManager
      implements ClusteredComponentIfc

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

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `static String` | `CLUSTER_STRATEGY_VAR`
    `static String` | `CONNECTION_ID` Field description
    `static String` | `MY_DOMAIN_NAME_PROP_KEY` Field description
    `static String` | `RESOURCE` Field description
    `static String` | `SM_ID` Field description
    `static String` | `STRATEGY_CLASS_PROP_KEY` Field description
    `static String` | `STRATEGY_CLASS_PROP_VAL` Field description
    `static String` | `STRATEGY_CLASS_PROPERTY` Field description
    `static int` | `SYNC_MAX_BATCH_SIZE` Field description
    `static String` | `USER_ID` Field description
    `static String` | `XMPP_SESSION_ID` Field description

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

      `ADMIN_COMMAND_NODE, connectionsByFrom`

    - ### 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, MINUTE, OUTGOING_FILTERS_PROP_KEY, OUTGOING_FILTERS_PROP_VAL, SCHEDULER_THREADS_PROP_KEY, SECOND`

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

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

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

      `ADMINS_PROP_KEY, AMP_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_EXT_COMP_NAME, DEF_HOSTNAME_PROP_KEY, DEF_MONITOR_NAME, DEF_S2S_NAME, DEF_SM_NAME, DEF_SRECV_NAME, DEF_SSEND_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, 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, SRECV_COMP_CLASS_NAME, SSEND_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, 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 and Description
    `SessionManagerClustered()`

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected void` | `closeSession(XMPPResourceConnection conn, boolean closeOnly)` The method intercept user's disconnect event.
    `boolean` | `containsJid(tigase.xmpp.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.
    `tigase.xmpp.JID[]` | `getConnectionIdsForJid(tigase.xmpp.BareJID jid)` If the installation knows about user's JID, that he is connected to the system, then this method returns all user's connection IDs.
    `protected ConnectionRecord` | `getConnectionRecord(tigase.xmpp.JID node, Map<String,String> data)` Method takes the data received from other cluster node and creates a ConnectionRecord with all essential connection information.
    `Map<String,Object>` | `getDefaults(Map<String,Object> params)` Loads the component's default configuration to the configuration management subsystem.
    `void` | `getStatistics(StatisticsList list)` Method generates and returns component's statistics.
    `ClusteringStrategyIfc` | `getStrategy()` Returns active clustering strategy object.
    `void` | `handlePresenceSet(XMPPResourceConnection conn)` Method intercepts presence set event generated by presence status received from a user connected to this node.
    `void` | `handleResourceBind(XMPPResourceConnection conn)` Method intercepts resource bind event generated for on user's connection.
    `boolean` | `hasCompleteJidsInfo()` Method checks whether the clustering strategy has a complete JIDs info.
    `void` | `initBindings(Bindings binds)` Method description
    `void` | `nodeConnected(String node)` The method is called on cluster node connection event.
    `void` | `nodeDisconnected(String node)` Method is called on cluster node disconnection event.
    `protected Map<String,String>` | `prepareConnectionParams(XMPPResourceConnection conn)` A utility method used to prepare a Map of data with user session data before it can be sent over to another cluster node.
    `int` | `processingInThreads()` Concurrency control method.
    `int` | `processingOutThreads()` Concurrency control method.
    `void` | `processPacket(Packet packet)` This is a standard component method for processing packets.
    `protected void` | `requestSync(tigase.xmpp.JID node)` Send synchronization request to a given cluster node.
    `protected boolean` | `sendToNextNode(tigase.xmpp.JID fromNode, Set<tigase.xmpp.JID> visitedNodes, Map<String,String> data, Packet packet)` Method attempts to send the packet to the next cluster node.
    `void` | `setClusterController(ClusterControllerIfc cl_controller)` Set's the configures the cluster controller object for cluster communication and API.
    `void` | `setProperties(Map<String,Object> props)` Standard component's configuration method.

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

      `addOutPacket, addOutPackets, addPlugin, addTrusted, closeConnection, createUserSession, delTrusted, fastAddOutPacket, getDiscoCategoryType, getDiscoDescription, getDiscoFeatures, getDiscoInfo, getMaxQueueSize, getResourceConnection, getSession, getXMPPResourceConnection, getXMPPResourceConnection, handleLocalPacket, handleLogin, handleLogout, handlesLocalDomains, isBrokenPacket, isLocalDomain, isTrusted, isTrusted, loginUserSession, processAdminsOrDomains, processCommand, processPacket, registerNewSession, removePlugin, sendToAdmins, setName, skipPrivacy`

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

      `addOutPacketNB, addOutPackets, addOutPacketWithTimeout, addPacket, addPacketNB, addPackets, addRegexRouting, addTimerTask, addTimerTask, addTimerTask, addTimerTask, clearRegexRoutings, everyHour, everyMinute, everySecond, getRegexRoutings, hashCodeForPacket, isInRegexRoutings, newPacketId, processingThreads, processOutPacket, processPacket, release, removeRegexRouting, schedulerThreads, setMaxQueueSize, setParent, start, stop`

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

      `addComponentDomain, canCallCommand, checkCommandAcl, getComponentId, getDefHostName, getDefVHostItem, getDiscoCategory, getDiscoFeatures, getDiscoInfo, getDiscoItems, getDiscoItems, getName, getScriptCommands, getScriptItems, getServiceEntity, getVHostItem, handlesNameSubdomains, handlesNonLocalDomains, initializationCompleted, isAdmin, isInitializationComplete, isLocalDomain, isLocalDomainOrComponent, isNonAdminCommands, isSubdomain, processScriptCommand, removeComponentDomain, removeServiceDiscoveryItem, setVHostManager, updateServiceDiscoveryItem, updateServiceDiscoveryItem, updateServiceDiscoveryItem`

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

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

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

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

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

      `getComponentId`

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

      `getDefHostName`

- - ### Field Detail

    - #### CLUSTER_STRATEGY_VAR

          public static final String CLUSTER_STRATEGY_VAR

      See Also:
        Constant Field Values

    - #### CONNECTION_ID

          public static final String CONNECTION_ID

      Field description
      See Also:
        Constant Field Values

    - #### MY_DOMAIN_NAME_PROP_KEY

          public static final String MY_DOMAIN_NAME_PROP_KEY

      Field description
      See Also:
        Constant Field Values

    - #### RESOURCE

          public static final String RESOURCE

      Field description
      See Also:
        Constant Field Values

    - #### SM_ID

          public static final String SM_ID

      Field description
      See Also:
        Constant Field Values

    - #### STRATEGY_CLASS_PROPERTY

          public static final String STRATEGY_CLASS_PROPERTY

      Field description
      See Also:
        Constant Field Values

    - #### STRATEGY_CLASS_PROP_KEY

          public static final String STRATEGY_CLASS_PROP_KEY

      Field description
      See Also:
        Constant Field Values

    - #### STRATEGY_CLASS_PROP_VAL

          public static final String STRATEGY_CLASS_PROP_VAL

      Field description
      See Also:
        Constant Field Values

    - #### SYNC_MAX_BATCH_SIZE

          public static final int SYNC_MAX_BATCH_SIZE

      Field description
      See Also:
        Constant Field Values

    - #### USER_ID

          public static final String USER_ID

      Field description
      See Also:
        Constant Field Values

    - #### XMPP_SESSION_ID

          public static final String XMPP_SESSION_ID

      Field description
      See Also:
        Constant Field Values

  - ### Constructor Detail

    - #### SessionManagerClustered

          public SessionManagerClustered()

  - ### Method Detail

    - #### containsJid

          public boolean containsJid(tigase.xmpp.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. 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.

    - #### getConnectionIdsForJid

          public tigase.xmpp.JID[] getConnectionIdsForJid(tigase.xmpp.BareJID jid)

      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.

    - #### getDefaults

          public Map<String,Object> getDefaults(Map<String,Object> params)

      Loads the component's default configuration to the configuration management subsystem.
      Specified by:
        `getDefaults` in interface `Configurable`
      Overrides:
        `getDefaults` in class `SessionManager`
      Parameters:
        `params` - is a Map with system-wide default settings found in init.properties file or similar location.
      Returns:
        a Map with all default component settings generated from the default parameters in init.properties file.

    - #### getStatistics

          public void getStatistics(StatisticsList list)

      Method generates and returns component's statistics.
      Specified by:
        `getStatistics` in interface `StatisticsContainer`
      Overrides:
        `getStatistics` in class `SessionManager`
      Parameters:
        `list` - is a collection with statistics to which this component can add own metrics.

    - #### getStrategy

          public ClusteringStrategyIfc getStrategy()

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

    - #### initBindings

          public void initBindings(Bindings binds)

      Description copied from class: `SessionManager`
      Method description
      Overrides:
        `initBindings` in class `SessionManager`

    - #### handlePresenceSet

          public void handlePresenceSet(XMPPResourceConnection conn)

      Method intercepts presence set event generated by presence status received from a user connected to this node. The presence is then broadcasted to all nodes given by the strategy.
      Specified by:
        `handlePresenceSet` in interface `SessionManagerHandler`
      Overrides:
        `handlePresenceSet` in class `SessionManager`
      Parameters:
        `conn` - a user's XMPPResourceConnection on which the event occurred.

    - #### handleResourceBind

          public void handleResourceBind(XMPPResourceConnection conn)

      Method intercepts resource bind event generated for on user's connection. This event means that the account authentication process has been successfully completed and now the information about the event can be distributed to all nodes given by the strategy.
      Specified by:
        `handleResourceBind` in interface `SessionManagerHandler`
      Overrides:
        `handleResourceBind` in class `SessionManager`
      Parameters:
        `conn` - a user's XMPPResourceConnection on which the event occurred.

    - #### hasCompleteJidsInfo

          public boolean hasCompleteJidsInfo()

      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.

    - #### nodeConnected

          public void nodeConnected(String node)

      The method is called on cluster node connection event. This is a notification to the component that a new node has connected to the system.
      Specified by:
        `nodeConnected` in interface `ClusteredComponentIfc`
      Parameters:
        `node` - is a hostname of a new cluster node connected to the system.

    - #### nodeDisconnected

          public void nodeDisconnected(String node)

      Method is called on cluster node disconnection event. This is a notification to the component that there was network connection lost to one of the cluster nodes.
      Specified by:
        `nodeDisconnected` in interface `ClusteredComponentIfc`
      Parameters:
        `node` - is a hostname of a cluster node generating the event.

    - #### prepareConnectionParams

          protected Map<String,String> prepareConnectionParams(XMPPResourceConnection conn)
                                                        throws NotAuthorizedException,
                                                               NoConnectionIdException

      A utility method used to prepare a Map of data with user session data before it can be sent over to another cluster node. This is supposed to contain all the user's session essential information which directly identify user's resource and network connection. This information allows to detect two different user's connection made for the same resource. This may happen if both connections are established to different nodes.
      Parameters:
        `conn` - is user's XMPPResourceConnection for which Map structure is prepare.
      Returns:
        a Map structure with all user's connection essential data.
      Throws:
        `NoConnectionIdException`
        `NotAuthorizedException`

    - #### processPacket

          public void processPacket(Packet packet)

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

    - #### sendToNextNode

          protected boolean sendToNextNode(tigase.xmpp.JID fromNode,
                               Set<tigase.xmpp.JID> visitedNodes,
                               Map<String,String> data,
                               Packet packet)

      Method attempts to send the packet to the next cluster node. Returns true on successful attempt and false on failure. The true result does not mean that the packet has been delivered though. Only that it was sent. The send attempt may fail if there is no more cluster nodes to send the packet or if the clustering strategy logic decided that the packet does not have to be sent.
      Parameters:
        `packet` - to be sent to a next cluster node
        `visitedNodes` - a list of nodes already visited by the packet.
      Returns:
        true if the packet was sent to next cluster node and false otherwise.

    - #### processingInThreads

          public int processingInThreads()

      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()

      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.

    - #### setClusterController

          public void setClusterController(ClusterControllerIfc cl_controller)

      Set's the configures the cluster controller object for cluster communication and API.
      Specified by:
        `setClusterController` in interface `ClusteredComponentIfc`
      Parameters:
        `cl_controller` -

    - #### setProperties

          public void setProperties(Map<String,Object> props)

      Standard component's configuration method.
      Specified by:
        `setProperties` in interface `Configurable`
      Overrides:
        `setProperties` in class `SessionManager`
      Parameters:
        `props` -

    - #### 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`
      See Also:
        `tigase.server.xmppsession.SessionManager#closeSession(tigase.xmpp. XMPPResourceConnection, boolean)`

    - #### getConnectionRecord

          protected ConnectionRecord getConnectionRecord(tigase.xmpp.JID node,
                                             Map<String,String> data)

      Method takes the data received from other cluster node and creates a ConnectionRecord with all essential connection information. This might be used later to identify user's XMPPResourceConnection or use the clustering strategy API.
      Parameters:
        `node` -
        `data` -
      Returns:

    - #### requestSync

          protected void requestSync(tigase.xmpp.JID node)

      Send synchronization request to a given cluster node. In a response the remote node should return a list of JIDs for online users on this node.
      Parameters:
        `node` - is a JID of the target cluster node.

Copyright © 2013 Tigase. All rights reserved.