tigase.cluster
Class SessionManagerClustered

java.lang.Object
  extended by tigase.server.BasicComponent
      extended by tigase.server.AbstractMessageReceiver
          extended by tigase.server.xmppsession.SessionManager
              extended by 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: 2996 $
Author:
Artur Hefczyc

Field Summary
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, 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, 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, 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
SessionManagerClustered()
           
 
Method Summary
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, addTrusted, closeConnection, createUserSession, delTrusted, fastAddOutPacket, getDiscoCategoryType, getDiscoDescription, getDiscoFeatures, getDiscoInfo, getMaxQueueSize, getResourceConnection, getSession, getXMPPResourceConnection, getXMPPResourceConnection, handleLogin, handleLogout, handlesLocalDomains, isBrokenPacket, isLocalDomain, isTrusted, isTrusted, loginUserSession, processAdminsOrDomains, processCommand, processPacket, registerNewSession, sendToAdmins, setName, skipPrivacy
 
Methods inherited from class tigase.server.AbstractMessageReceiver
addOutPacketNB, addOutPackets, addOutPacketWithTimeout, addPacket, addPacketNB, addPackets, addRegexRouting, addTimerTask, addTimerTask, clearRegexRoutings, everyHour, everyMinute, everySecond, getRegexRoutings, hashCodeForPacket, isInRegexRoutings, newPacketId, processingThreads, processOutPacket, processPacket, release, removeRegexRouting, setMaxQueueSize, setParent, start, stop
 
Methods inherited from class tigase.server.BasicComponent
addComponentDomain, canCallCommand, checkCommandAcl, getComponentId, getDefHostName, getDiscoCategory, getDiscoFeatures, getDiscoInfo, getDiscoItems, getDiscoItems, getName, getScriptItems, getVHostItem, handlesNameSubdomains, handlesNonLocalDomains, initializationCompleted, isAdmin, isLocalDomain, isLocalDomainOrComponent, 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, 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 © 2012 Tigase. All Rights Reserved.