Package tigase.cluster

## Class ClusterController

- java.lang.Object
- - tigase.server.BasicComponent
  - - tigase.server.AbstractComponentRegistrator<ClusteredComponentIfc>
    - - tigase.cluster.ClusterController

- All Implemented Interfaces:
    `ClusterControllerIfc`, `ClusteredComponentIfc`, `Configurable`, `XMPPService`, `ConfigurationChangedAware`, `Initializable`, `ComponentRegistrator`, `ServerComponent`, `VHostListener`

      @Bean(name="cluster-contr",
            parent=Kernel.class,
            active=true,
            exportable=true)
      @ConfigType({DefaultMode,SessionManagerMode,ConnectionManagersMode,ComponentMode})
      @ClusterModeRequired(active=true)
      public class ClusterController
      extends AbstractComponentRegistrator<ClusteredComponentIfc>
      implements Configurable, ClusterControllerIfc

  Describe class ClusterController here.
  Created: Mon Jun 9 20:03:28 2008
  Author:
    Artur Hefczyc

- - ### Nested Class Summary

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

      `BasicComponent.ServerInfoVHostItemExtension`

  - ### Field Summary

    Fields
    Modifier and Type | Field | Description
    --- | --- | ---
    `static java.lang.String` | `MY_DOMAIN_NAME_PROP_KEY` |
    `static java.lang.String` | `MY_DOMAIN_NAME_PROP_VAL` |

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

      `components`

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

      `DELIVER_CLUSTER_PACKET_CMD`

    - ### 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.disco.XMPPService

      `CMD_FEATURES, DEF_FEATURES, INFO_XMLNS, ITEMS_XMLNS`

  - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `ClusterController()` |

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `void` | `componentAdded​(ClusteredComponentIfc component)` | Method provides a callback mechanism signaling that a new component implementing special interface has been added to the internal `components` collection.
    `void` | `componentRemoved​(ClusteredComponentIfc component)` | Method provides a callback mechanism signaling that a component implementing special interface has been removed from the internal `components` collection.
    `java.lang.String` | `getDiscoCategoryType()` | Method returns component category type used for service discovery responses.
    `java.lang.String` | `getDiscoDescription()` | Method returns description used for service discovery responses.
    `void` | `handleClusterPacket​(Element packet)` | Method handles cluster packet received from cluster connection.
    `boolean` | `isCorrectType​(ServerComponent component)` | Method checks whether the component provides as method parameter is correct type that is implements special interface or extends special class.
    `void` | `nodeConnected​(java.lang.String node)` | Method is called on cluster node connection event.
    `void` | `nodeDisconnected​(java.lang.String node)` | Method is called on cluster node disconnection event.
    `void` | `processPacket​(Packet packet, java.util.Queue<Packet> results)` | `processPacket` is a blocking processing method implemented by all components.
    `void` | `removeCommandListener​(CommandListener listener)` |
    `void` | `sendToNodes​(java.lang.String command, java.util.Map<java.lang.String,​java.lang.String> data, java.util.Queue<Element> packets, JID fromNode, java.util.Set<JID> visitedNodes, JID... toNodes)` | Method which sends command to desired nodes
    `void` | `sendToNodes​(java.lang.String command, java.util.Map<java.lang.String,​java.lang.String> data, Element packet, JID fromNode, java.util.Set<JID> visitedNodes, JID... toNodes)` | Method which sends command to desired nodes
    `void` | `sendToNodes​(java.lang.String command, java.util.Map<java.lang.String,​java.lang.String> data, JID fromNode, java.util.Set<JID> visitedNodes, JID... toNodes)` | Method which sends command to desired nodes
    `void` | `sendToNodes​(java.lang.String command, java.util.Map<java.lang.String,​java.lang.String> data, JID fromNode, JID... toNodes)` | Method which sends command to desired nodes
    `void` | `sendToNodes​(java.lang.String command, java.util.Queue<Element> packets, JID fromNode, java.util.Set<JID> visitedNodes, JID... toNodes)` | Method which sends command to desired nodes
    `void` | `sendToNodes​(java.lang.String command, Element packet, JID fromNode, java.util.Set<JID> visitedNodes, JID... toNodes)` | Method which sends command to desired nodes
    `void` | `sendToNodes​(java.lang.String command, JID fromNode, JID... toNodes)` | Method which sends command to desired nodes
    `void` | `setCommandListener​(CommandListener listener)` |
    `void` | `setName​(java.lang.String name)` | Method used to assign component name (localpart of the component)

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

      `addComponent, deleteComponent, getComponent, newPacketId, release`

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

      `addComponentDomain, beanConfigurationChanged, canCallCommand, canCallCommand, checkCommandAcl, checkCommandAcl, createScriptEngineManager, everyHour, everyMinute, everySecond, getComponentId, getComponentInfo, getDefaults, getDefHostName, getDefVHostItem, getDiscoCategory, getDiscoExtensionsForm, getDiscoFeatures, getDiscoFeatures, getDiscoInfo, getDiscoItems, getName, getNodesConnected, getNodesConnectedWithLocal, getScriptCommands, getScriptItems, getServiceEntity, getServiceEntityCaps, getStatistics, getVHostItem, handlesLocalDomains, handlesNameSubdomains, handlesNonLocalDomains, initBindings, initializationCompleted, initialize, isAdmin, isInitializationComplete, isLocalDomain, isLocalDomainOrComponent, isNonAdminCommands, isSubdomain, isTrusted, isTrusted, onNodeConnected, onNodeDisconnected, processScriptCommand, reloadScripts, removeComponentDomain, removeServiceDiscoveryItem, setAdmins, setClusterController, setCommandsACL, setCompId, 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.conf.Configurable

      `getDefaults, setProperties`

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

      `getComponentId, getComponentInfo, getName, initializationCompleted, isInitializationComplete, release`

- - ### Field Detail

    - #### MY_DOMAIN_NAME_PROP_KEY

          public static final java.lang.String MY_DOMAIN_NAME_PROP_KEY

      See Also:
        Constant Field Values

    - #### MY_DOMAIN_NAME_PROP_VAL

          public static final java.lang.String MY_DOMAIN_NAME_PROP_VAL

      See Also:
        Constant Field Values

  - ### Constructor Detail

    - #### ClusterController

          public ClusterController()

  - ### Method Detail

    - #### componentAdded

          public void componentAdded​(ClusteredComponentIfc component)

      Description copied from class: `AbstractComponentRegistrator`
      Method provides a callback mechanism signaling that a new component implementing special interface has been added to the internal `components` collection.
      Specified by:
        `componentAdded` in class `AbstractComponentRegistrator<ClusteredComponentIfc>`
      Parameters:
        `component` - is a reference to the component just added to the collection.

    - #### componentRemoved

          public void componentRemoved​(ClusteredComponentIfc component)

      Description copied from class: `AbstractComponentRegistrator`
      Method provides a callback mechanism signaling that a component implementing special interface has been removed from the internal `components` collection.
      Specified by:
        `componentRemoved` in class `AbstractComponentRegistrator<ClusteredComponentIfc>`
      Parameters:
        `component` - is a reference to the component removed from the collection.

    - #### handleClusterPacket

          public void handleClusterPacket​(Element packet)

      Description copied from interface: `ClusterControllerIfc`
      Method handles cluster packet received from cluster connection.
      Specified by:
        `handleClusterPacket` in interface `ClusterControllerIfc`
      Parameters:
        `packet` - which should be handled

    - #### nodeConnected

          public void nodeConnected​(java.lang.String node)

      Description copied from interface: `ClusteredComponentIfc`
      Method is called on cluster node connection event. This is a notification to the component that a new cluster node has connected.
      Specified by:
        `nodeConnected` in interface `ClusterControllerIfc`
      Specified by:
        `nodeConnected` in interface `ClusteredComponentIfc`
      Overrides:
        `nodeConnected` in class `BasicComponent`
      Parameters:
        `node` - is a hostname of a cluster node generating the event.

    - #### nodeDisconnected

          public void nodeDisconnected​(java.lang.String node)

      Description copied from interface: `ClusteredComponentIfc`
      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 `ClusterControllerIfc`
      Specified by:
        `nodeDisconnected` in interface `ClusteredComponentIfc`
      Overrides:
        `nodeDisconnected` in class `BasicComponent`
      Parameters:
        `node` - is a hostname of a cluster node generating the event.

    - #### processPacket

          public void processPacket​(Packet packet,
                                    java.util.Queue<Packet> results)

      Description copied from interface: `ServerComponent`
      `processPacket` is a blocking processing method implemented by all components. This method processes packet and returns results instantly without waiting for any resources.
      Specified by:
        `processPacket` in interface `ServerComponent`
      Overrides:
        `processPacket` in class `BasicComponent`
      Parameters:
        `packet` - a `Packet` value

    - #### removeCommandListener

          public void removeCommandListener​(CommandListener listener)

      Specified by:
        `removeCommandListener` in interface `ClusterControllerIfc`

    - #### sendToNodes

          public void sendToNodes​(java.lang.String command,
                                  java.util.Map<java.lang.String,​java.lang.String> data,
                                  java.util.Queue<Element> packets,
                                  JID fromNode,
                                  java.util.Set<JID> visitedNodes,
                                  JID... toNodes)

      Description copied from interface: `ClusterControllerIfc`
      Method which sends command to desired nodes
      Specified by:
        `sendToNodes` in interface `ClusterControllerIfc`
      Parameters:
        `command` - ID string of the command
        `data` - additional data to be included in the packet
        `packets` - collection of elements to be send to desired nodes
        `fromNode` - address of the source node
        `visitedNodes` - list of all already visited nodes
        `toNodes` - list of nodes to which packet should be sent

    - #### sendToNodes

          public void sendToNodes​(java.lang.String command,
                                  java.util.Queue<Element> packets,
                                  JID fromNode,
                                  java.util.Set<JID> visitedNodes,
                                  JID... toNodes)

      Description copied from interface: `ClusterControllerIfc`
      Method which sends command to desired nodes
      Specified by:
        `sendToNodes` in interface `ClusterControllerIfc`
      Parameters:
        `command` - ID string of the command
        `packets` - collection of elements to be send to desired nodes
        `fromNode` - address of the source node
        `visitedNodes` - list of all already visited nodes
        `toNodes` - list of nodes to which packet should be sent

    - #### sendToNodes

          public void sendToNodes​(java.lang.String command,
                                  java.util.Map<java.lang.String,​java.lang.String> data,
                                  JID fromNode,
                                  java.util.Set<JID> visitedNodes,
                                  JID... toNodes)

      Description copied from interface: `ClusterControllerIfc`
      Method which sends command to desired nodes
      Specified by:
        `sendToNodes` in interface `ClusterControllerIfc`
      Parameters:
        `command` - ID string of the command
        `data` - additional data to be included in the packet
        `fromNode` - address of the source node
        `visitedNodes` - list of all already visited nodes
        `toNodes` - list of nodes to which packet should be sent

    - #### sendToNodes

          public void sendToNodes​(java.lang.String command,
                                  java.util.Map<java.lang.String,​java.lang.String> data,
                                  JID fromNode,
                                  JID... toNodes)

      Description copied from interface: `ClusterControllerIfc`
      Method which sends command to desired nodes
      Specified by:
        `sendToNodes` in interface `ClusterControllerIfc`
      Parameters:
        `command` - ID string of the command
        `data` - additional data to be included in the packet
        `fromNode` - address of the source node
        `toNodes` - list of nodes to which packet should be sent

    - #### sendToNodes

          public void sendToNodes​(java.lang.String command,
                                  JID fromNode,
                                  JID... toNodes)

      Description copied from interface: `ClusterControllerIfc`
      Method which sends command to desired nodes
      Specified by:
        `sendToNodes` in interface `ClusterControllerIfc`
      Parameters:
        `command` - ID string of the command
        `fromNode` - address of the source node
        `toNodes` - list of nodes to which packet should be sent

    - #### sendToNodes

          public void sendToNodes​(java.lang.String command,
                                  Element packet,
                                  JID fromNode,
                                  java.util.Set<JID> visitedNodes,
                                  JID... toNodes)

      Description copied from interface: `ClusterControllerIfc`
      Method which sends command to desired nodes
      Specified by:
        `sendToNodes` in interface `ClusterControllerIfc`
      Parameters:
        `command` - ID string of the command
        `packet` - collection of elements to be send to desired nodes
        `fromNode` - address of the source node
        `visitedNodes` - list of all already visited nodes
        `toNodes` - list of nodes to which packet should be sent

    - #### sendToNodes

          public void sendToNodes​(java.lang.String command,
                                  java.util.Map<java.lang.String,​java.lang.String> data,
                                  Element packet,
                                  JID fromNode,
                                  java.util.Set<JID> visitedNodes,
                                  JID... toNodes)

      Description copied from interface: `ClusterControllerIfc`
      Method which sends command to desired nodes
      Specified by:
        `sendToNodes` in interface `ClusterControllerIfc`
      Parameters:
        `command` - ID string of the command
        `data` - additional data to be included in the packet
        `packet` - element to be send to desired nodes
        `fromNode` - address of the source node
        `visitedNodes` - list of all already visited nodes
        `toNodes` - list of nodes to which packet should be sent

    - #### getDiscoCategoryType

          public java.lang.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 java.lang.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

    - #### isCorrectType

          public boolean isCorrectType​(ServerComponent component)

      Description copied from class: `AbstractComponentRegistrator`
      Method checks whether the component provides as method parameter is correct type that is implements special interface or extends special class. Result of the method determines whether the component can be added to the internal `components` collection.
      Specified by:
        `isCorrectType` in class `AbstractComponentRegistrator<ClusteredComponentIfc>`
      Parameters:
        `component` - is a reference to the component being checked.
      Returns:
        a `boolean` value of `true` if the component is of a correct type and `false` otherwise.

    - #### setCommandListener

          public void setCommandListener​(CommandListener listener)

      Specified by:
        `setCommandListener` in interface `ClusterControllerIfc`

    - #### setName

          public void setName​(java.lang.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 `BasicComponent`
      Parameters:
        `name` - to be assigned