tigase.cluster

## Class VirtualComponent

- java.lang.Object
- - tigase.cluster.VirtualComponent

- All Implemented Interfaces:
    Configurable, XMPPService, DisableDisco, ServerComponent, VHostListener

      public class VirtualComponent
      extends Object
      implements ServerComponent, XMPPService, Configurable, DisableDisco, VHostListener

  The purpose of this component implementation is to forward packets to a target real component implementation in the cluster installation. Let's say you have a cluster installation with full Tigase server installed on each node and you also want to use a component which doesn't have clustered implementation yet. In such case you deploy the component on one of the cluster nodes and put the virtual component on all other nodes. With proper configuration they pretend to be the component returning a correct service disco information and forward all packets for this component to a cluster node with real component running. This is a very lightweight implementation which doesn't use much resources either memory or CPU. It can work well for any kind of a component: MUC, PubSub, transport either native Tigase components or third-party components connected via XEP-0114 - external protocol component. Basic configuration parameters are actually the same as for a real component. You set a real component name as a name for the virtual component and a vritual component class name to load. Let's say we want to deploy MUC component this way. The MUC component is visible as `muc.domain.our` in our installation. Thus the name of the component is: `muc`:

       --comp-name-1=muc
       --comp-class-1=tigase.cluster.VirtualComponent

  This is pretty much all you need to load a virtual component. A few other options are needed to point to correct destination addresses for forwarded packets and to set correct service discovery parameters:

       muc/redirect-to=muc@cluster-node-with-real-muc.domain.our
       muc/disco-name=Multi User Chat
       muc/disco-node=
       muc/disco-type=text
       muc/disco-category=conference
       muc/disco-features=http://jabber.org/protocol/muc
       muc/fixed-domain=example.com

  Above options set all possible parameters to setup virtual MUC component. Created: Dec 13, 2008 7:44:35 PM
  Version:
    $Rev$
  Author:
    Artur Hefczyc

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `static String` | `DISCO_CATEGORY_PROP_KEY` Parameter to set service discovery item category name for the virtual component.
    `static String` | `DISCO_CATEGORY_PROP_VAL` Field description
    `static String` | `DISCO_FEATURES_PROP_KEY` Comma separated list of features for the service discovery item represented by this virtual component.
    `static String` | `DISCO_FEATURES_PROP_VAL` Field description
    `static String` | `DISCO_NAME_PROP_KEY` Parameter to set service discovery item name for the virtual component instance.
    `static String` | `DISCO_NAME_PROP_VAL` Field description
    `static String` | `DISCO_NODE_PROP_KEY` Parameter to set service discovery node name.
    `static String` | `DISCO_NODE_PROP_VAL` Field description
    `static String` | `DISCO_TYPE_PROP_KEY` Parameter to set service discovery item type for the virtual component.
    `static String` | `DISCO_TYPE_PROP_VAL` A default value for service discovery item type, which is 'text'
    `static String` | `FIXED_DOMAIN_PROP_KEY` If set, then it is used as the component domain name part.
    `static String` | `REDIRECT_TO_PROP_KEY` Virtual component parameter setting packet redirect destination address.
    `protected VHostManagerIfc` | `vHostManager` Field description

    - ### Fields inherited from interface tigase.disco.XMPPService

      `CMD_FEATURES, DEF_FEATURES, INFO_XMLNS, ITEMS_XMLNS`

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

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `VirtualComponent()`

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `tigase.xmpp.JID` | `getComponentId()` Method description
    `ComponentInfo` | `getComponentInfo()` Allows to obtain various informations about components
    `Map<String,Object>` | `getDefaults(Map<String,Object> params)` Method description
    `List<tigase.xml.Element>` | `getDiscoFeatures(tigase.xmpp.JID from)` Method description
    `tigase.xml.Element` | `getDiscoInfo(String node, tigase.xmpp.JID jid, tigase.xmpp.JID from)` Method description
    `List<tigase.xml.Element>` | `getDiscoItems(String node, tigase.xmpp.JID jid, tigase.xmpp.JID from)` Method description
    `String` | `getName()` Method description
    `boolean` | `handlesLocalDomains()` Method description
    `boolean` | `handlesNameSubdomains()` Method description
    `boolean` | `handlesNonLocalDomains()` Method description
    `void` | `initializationCompleted()` Method description
    `boolean` | `isInitializationComplete()` Method description
    `void` | `processPacket(Packet packet, Queue<Packet> results)` Method description
    `void` | `release()` Method description
    `void` | `setName(String name)` Method description
    `void` | `setProperties(Map<String,Object> properties)` Method description
    `void` | `setVHostManager(VHostManagerIfc manager)` Method description

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

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

- - ### Field Detail

    - #### DISCO_CATEGORY_PROP_KEY

          public static final String DISCO_CATEGORY_PROP_KEY

      Parameter to set service discovery item category name for the virtual component. Please refer to service discovery documentation for a correct category or check what is returned by your real component instance.
      See Also:
        Constant Field Values

    - #### DISCO_CATEGORY_PROP_VAL

          public static final String DISCO_CATEGORY_PROP_VAL

      Field description
      See Also:
        Constant Field Values

    - #### DISCO_FEATURES_PROP_KEY

          public static final String DISCO_FEATURES_PROP_KEY

      Comma separated list of features for the service discovery item represented by this virtual component. Please check with the real component to obtain a correct list of features.
      See Also:
        Constant Field Values

    - #### DISCO_FEATURES_PROP_VAL

          public static final String DISCO_FEATURES_PROP_VAL

      Field description
      See Also:
        Constant Field Values

    - #### DISCO_NAME_PROP_KEY

          public static final String DISCO_NAME_PROP_KEY

      Parameter to set service discovery item name for the virtual component instance. You should refer to service discovery documentation for a proper name for your component.
      See Also:
        Constant Field Values

    - #### DISCO_NAME_PROP_VAL

          public static final String DISCO_NAME_PROP_VAL

      Field description
      See Also:
        Constant Field Values

    - #### DISCO_NODE_PROP_KEY

          public static final String DISCO_NODE_PROP_KEY

      Parameter to set service discovery node name. In most cases you should leave it empty unless you really know what you are doing.
      See Also:
        Constant Field Values

    - #### DISCO_NODE_PROP_VAL

          public static final String DISCO_NODE_PROP_VAL

      Field description
      See Also:
        Constant Field Values

    - #### DISCO_TYPE_PROP_KEY

          public static final String DISCO_TYPE_PROP_KEY

      Parameter to set service discovery item type for the virtual component. You should refer to a service discovery documentation for a correct type for your component. Or, alternatively you can have a look what returns your real component.
      See Also:
        Constant Field Values

    - #### DISCO_TYPE_PROP_VAL

          public static final String DISCO_TYPE_PROP_VAL

      A default value for service discovery item type, which is 'text'
      See Also:
        Constant Field Values

    - #### FIXED_DOMAIN_PROP_KEY

          public static final String FIXED_DOMAIN_PROP_KEY

      If set, then it is used as the component domain name part. This domains is displayed on the service discovery information, instead of virtual host based on the user's query.
      See Also:
        Constant Field Values

    - #### REDIRECT_TO_PROP_KEY

          public static final String REDIRECT_TO_PROP_KEY

      Virtual component parameter setting packet redirect destination address.
      See Also:
        Constant Field Values

    - #### vHostManager

          protected VHostManagerIfc vHostManager

      Field description

  - ### Constructor Detail

    - #### VirtualComponent

          public VirtualComponent()

  - ### Method Detail

    - #### handlesLocalDomains

          public boolean handlesLocalDomains()

      Method description
      Specified by:
        `handlesLocalDomains` in interface `VHostListener`
      Returns:
        'true' if the component accepts packets to local domains 'false' otherwise.

    - #### handlesNameSubdomains

          public boolean handlesNameSubdomains()

      Method description
      Specified by:
        `handlesNameSubdomains` in interface `VHostListener`
      Returns:
        'true' if the component accepts packets to 'name' subdomains 'false' otherwise.

    - #### handlesNonLocalDomains

          public boolean handlesNonLocalDomains()

      Method description
      Specified by:
        `handlesNonLocalDomains` in interface `VHostListener`
      Returns:
        'true' if the component accepts packets to non-local domains 'false' otherwise.

    - #### initializationCompleted

          public void initializationCompleted()

      Method description
      Specified by:
        `initializationCompleted` in interface `ServerComponent`

    - #### processPacket

          public void processPacket(Packet packet,
                           Queue<Packet> results)

      Method description
      Specified by:
        `processPacket` in interface `ServerComponent`
      Parameters:
        `packet` -
        `results` -

    - #### release

          public void release()

      Method description
      Specified by:
        `release` in interface `ServerComponent`

    - #### getComponentId

          public tigase.xmpp.JID getComponentId()

      Method description
      Specified by:
        `getComponentId` in interface `ServerComponent`

    - #### getComponentInfo

          public ComponentInfo getComponentInfo()

      Allows to obtain various informations about components
      Specified by:
        `getComponentInfo` in interface `ServerComponent`
      Returns:
        information about particular component

    - #### getDefaults

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

      Method description
      Specified by:
        `getDefaults` in interface `Configurable`
      Parameters:
        `params` -

    - #### getDiscoFeatures

          public List<tigase.xml.Element> getDiscoFeatures(tigase.xmpp.JID from)

      Method description
      Specified by:
        `getDiscoFeatures` in interface `XMPPService`
      Parameters:
        `from` -
      Returns:
        a list of elements with service discovery features.

    - #### getDiscoInfo

          public tigase.xml.Element getDiscoInfo(String node,
                                        tigase.xmpp.JID jid,
                                        tigase.xmpp.JID from)

      Method description
      Specified by:
        `getDiscoInfo` in interface `XMPPService`
      Parameters:
        `node` -
        `jid` -
        `from` -
      Returns:
        returns an XML Element with service discovery data.

    - #### getDiscoItems

          public List<tigase.xml.Element> getDiscoItems(String node,
                                               tigase.xmpp.JID jid,
                                               tigase.xmpp.JID from)

      Method description
      Specified by:
        `getDiscoItems` in interface `XMPPService`
      Parameters:
        `node` -
        `jid` -
        `from` -
      Returns:
        a list of service discovery items for this component or the component itself disco item for the top level request.

    - #### getName

          public String getName()

      Method description
      Specified by:
        `getName` in interface `ServerComponent`

    - #### isInitializationComplete

          public boolean isInitializationComplete()

      Method description
      Specified by:
        `isInitializationComplete` in interface `ServerComponent`
      Returns:
        `true` if initialization of the object has been completed `false` otherwise

    - #### setName

          public void setName(String name)

      Method description
      Specified by:
        `setName` in interface `ServerComponent`
      Parameters:
        `name` -

    - #### setProperties

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

      Method description
      Specified by:
        `setProperties` in interface `Configurable`
      Parameters:
        `properties` -

    - #### setVHostManager

          public void setVHostManager(VHostManagerIfc manager)

      Method description
      Specified by:
        `setVHostManager` in interface `VHostListener`
      Parameters:
        `manager` -

Copyright © 2013 Tigase. All rights reserved.