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
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
Modifier and TypeFieldDescriptionstatic final String
static final String
static final String
static final String
static final String
static final int
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
-
Method Summary
Modifier and TypeMethodDescriptionprotected void
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
Utility method executed precisely every hour.void
Utility method executed precisely every minute.void
Utility method executed precisely every second.boolean
fastAddOutPacket
(Packet packet) protected boolean
protected boolean
Allows to obtain various informations about componentsJID[]
Retrieve all connection IDs (CIDs) for the given user.Method returns description used for service discovery responses.void
getStatistics
(StatisticsList list) Method returns component statistics.Returns active clustering strategy object.void
handleLocalPacket
(Packet packet, XMPPResourceConnection conn) void
handleLogin
(BareJID userId, XMPPResourceConnection conn) void
handleLogout
(BareJID userId, XMPPResourceConnection conn) void
boolean
Method checks whether the clustering strategy has a complete JIDs info.boolean
Method to check if there is XMPPResourceConnection instance for connection JID.void
initBindings
(Bindings binds) Initialize a mapping of key/value pairs which can be used in scripts loaded by the servervoid
onNodeConnected
(JID jid) void
onNodeDisconnected
(JID jid) int
Concurrency control method.int
Concurrency control method.void
processPacket
(Packet packet) This is the mainPacket
processing method.void
processPacket
(Packet packet, XMPPResourceConnection conn) void
processPresenceUpdate
(XMPPSession session, Element packet) protected Collection<Subscription>
routeUserSessionEvent
(UserSessionEvent event, 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, String sendReponse) 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 Details
-
CLUSTER_STRATEGY_VAR
- See Also:
-
MY_DOMAIN_NAME_PROP_KEY
- See Also:
-
STRATEGY_CLASS_PROP_KEY
- See Also:
-
STRATEGY_CLASS_PROP_VAL
- See Also:
-
STRATEGY_CLASS_PROPERTY
- See Also:
-
SYNC_MAX_BATCH_SIZE
public static final int SYNC_MAX_BATCH_SIZE- See Also:
-
-
Constructor Details
-
SessionManagerClustered
public SessionManagerClustered()
-
-
Method Details
-
containsJid
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 interfaceOnlineJidsReporter
- Overrides:
containsJid
in classSessionManager
- 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 classSessionManager
-
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 classSessionManager
-
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 classSessionManager
-
fastAddOutPacket
- Specified by:
fastAddOutPacket
in interfaceSessionManagerClusteredIfc
- Overrides:
fastAddOutPacket
in classSessionManager
-
handleLocalPacket
- Overrides:
handleLocalPacket
in classSessionManager
-
handleLogin
- Specified by:
handleLogin
in interfaceSessionManagerHandler
- Overrides:
handleLogin
in classSessionManager
-
handleLogout
- Specified by:
handleLogout
in interfaceSessionManagerHandler
- Overrides:
handleLogout
in classSessionManager
-
handleResourceBind
- Specified by:
handleResourceBind
in interfaceSessionManagerHandler
- Overrides:
handleResourceBind
in classSessionManager
-
checkSingleUserConnectionsLimit
- Overrides:
checkSingleUserConnectionsLimit
in classSessionManager
-
initBindings
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 classSessionManager
- Parameters:
binds
- A mapping of key/value pairs, all of whose keys are Strings.
-
onNodeConnected
- Overrides:
onNodeConnected
in classBasicComponent
-
onNodeDisconnected
- Overrides:
onNodeDisconnected
in classBasicComponent
-
processingInThreads
public int processingInThreads()Description copied from class:AbstractMessageReceiver
Concurrency control method. Returns preferable number of threads set for this component.- Overrides:
processingInThreads
in classSessionManager
- 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 classSessionManager
- Returns:
- preferable number of threads set for this component.
-
processPacket
This is the mainPacket
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, thePacket
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 thePacket
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 usingaddOutPacket(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 classSessionManager
- Parameters:
packet
- to be processed
-
processPacket
- Specified by:
processPacket
in interfaceSessionManagerClusteredIfc
- Overrides:
processPacket
in classSessionManager
-
processPresenceUpdate
- Specified by:
processPresenceUpdate
in interfaceSessionManagerClusteredIfc
- Overrides:
processPresenceUpdate
in classSessionManager
-
getComponentInfo
Description copied from interface:ServerComponent
Allows to obtain various informations about components- Specified by:
getComponentInfo
in interfaceServerComponent
- Overrides:
getComponentInfo
in classBasicComponent
- Returns:
- information about particular component
-
getConnectionIdsForJid
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 interfaceOnlineJidsReporter
- Overrides:
getConnectionIdsForJid
in classSessionManager
- Parameters:
jid
- a user's JID for whom we query information.- Returns:
- a list of all user's connection IDs.
-
getDiscoDescription
Description copied from class:BasicComponent
Method returns description used for service discovery responses.- Overrides:
getDiscoDescription
in classSessionManager
- Returns:
- description of a component
-
getStatistics
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 haveLevel.FINEST
assigned and must be put inside the level guard to prevent generating them by the system monitor. The system monitor does not collectFINEST
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 interfaceStatisticsContainerIfc
- Overrides:
getStatistics
in classSessionManager
- Parameters:
list
- is aStatistcsList
where all statistics are stored.
-
getStrategy
Returns active clustering strategy object.- Returns:
- active clustering strategy object.
-
getXMPPResourceConnection
- Specified by:
getXMPPResourceConnection
in interfaceSessionManagerClusteredIfc
- Overrides:
getXMPPResourceConnection
in classSessionManager
-
getXMPPResourceConnections
- Specified by:
getXMPPResourceConnections
in interfaceSessionManagerClusteredIfc
-
getXMPPSessions
- Specified by:
getXMPPSessions
in interfaceSessionManagerClusteredIfc
-
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 interfaceOnlineJidsReporter
- Overrides:
hasCompleteJidsInfo
in classSessionManager
- Returns:
- a true boolean value if the strategy has a complete information about all users connected to all cluster nodes.
-
hasXMPPResourceConnectionForConnectionJid
Description copied from interface:SessionManagerClusteredIfc
Method to check if there is XMPPResourceConnection instance for connection JID.- Specified by:
hasXMPPResourceConnectionForConnectionJid
in interfaceSessionManagerClusteredIfc
- Returns:
- true - if there is XMPPResourceConnection for connection JID
-
setClusterController
Description copied from interface:ClusteredComponentIfc
Set's the configures the cluster controller object for cluster communication and API.- Specified by:
setClusterController
in interfaceClusteredComponentIfc
- Overrides:
setClusterController
in classBasicComponent
- Parameters:
cl_controller
- cluster controller object used for cluster communication
-
fillRoutedUserSessionWithProcessorResultWriter
@FillRoutedEvent protected boolean fillRoutedUserSessionWithProcessorResultWriter(UserSessionEventWithProcessorResultWriter event) -
fillRoutedUserSessionEvent
-
routeUserSessionEvent
@RouteEvent protected Collection<Subscription> routeUserSessionEvent(UserSessionEvent event, Collection<Subscription> subscriptions) -
closeSession
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 classSessionManager
- Parameters:
conn
-XMPPResourceConnection
to be closedcloseOnly
- whether to perform additional processing before closing- See Also:
-
xmppStreamMoved
protected void xmppStreamMoved(XMPPResourceConnection conn, JID oldConnId, JID newConnId, String sendReponse) - Overrides:
xmppStreamMoved
in classSessionManager
-