Class SessionManager

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

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

  • Constructor Details

    • SessionManager

      public SessionManager()
  • Method Details

    • addOutPacket

      public boolean addOutPacket(Packet packet)
      Overrides:
      addOutPacket in class AbstractMessageReceiver
    • addPlugin

      Throws:
      ClassNotFoundException
      InstantiationException
      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(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(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 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 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 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(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 List<Element> getDiscoItems(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 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(String domain, boolean includeComponents)
      Specified by:
      isLocalDomain in interface SessionManagerHandler
    • setName

      public void setName(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(ConcurrentSkipListSet<XMPPImplIfc> allPlugins)
    • setSmThreadsPool

      public void setSmThreadsPool(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 Map<String,XMPPProcessorIfc> getProcessors()
    • getPreProcessors

      public Map<String,XMPPPreprocessorIfc> getPreProcessors()
    • getPostProcessors

      public Map<String,XMPPPostprocessorIfc> getPostProcessors()
    • getOutFilters

      public Map<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
    • 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
    • handleDomainChange

      public void handleDomainChange(String domain, XMPPResourceConnection conn)
      Specified by:
      handleDomainChange in interface SessionManagerHandler
    • addOutPackets

      protected void addOutPackets(Packet packet, XMPPResourceConnection conn, Queue<Packet> results)
    • addTrusted

      protected boolean addTrusted(JID jid)
    • closeConnection

      protected void closeConnection(XMPPResourceConnection connection, JID connectionId, String userId, boolean closeOnly)
    • closeSession

      protected void closeSession(XMPPResourceConnection conn, boolean closeOnly)
    • createUserSession

      protected XMPPResourceConnection createUserSession(JID conn_id, 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, String domain, BareJID user_id, String resource, 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, String sendResponse)
    • getMaxQueueSize

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