org.jgroups.stack

## Class Configurator

- java.lang.Object
- - org.jgroups.stack.Configurator

    public class Configurator
    extends java.lang.Object

The task if this class is to setup and configure the protocol stack. A string describing the desired setup, which is both the layering and the configuration of each layer, is given to the configurator which creates and configures the protocol stack and returns a reference to the top layer (Protocol).

Future functionality will include the capability to dynamically modify the layering of the protocol stack and the properties of each layer.

Author:
  Bela Ban, Richard Achmatowicz

### Nested Class Summary

Nested Classes
`static class` `Configurator.InetAddressInfo`

### Field Summary

Fields
`protected static Log` `log`

### Constructor Summary

Constructors
Constructor and Description
`Configurator()`
`Configurator(ProtocolStack protocolStack)`

### Method Summary

Methods
`static Protocol` `connectProtocols(java.util.List<Protocol> protocol_list)` Creates a protocol stack by iterating through the protocol list and connecting adjacent layers.
`static java.util.Map<java.lang.String,java.util.Map<java.lang.String,Configurator.InetAddressInfo>>` `createInetAddressMap(java.util.List<ProtocolConfiguration> protocol_configs, java.util.List<Protocol> protocols)`
`protected static Protocol` `createLayer(ProtocolStack stack, ProtocolConfiguration config)`
`static Protocol` `createProtocol(java.lang.String prot_spec, ProtocolStack stack)` Creates a new protocol given the protocol specification.

`static StackType`

`determineIpVersionFromAddresses(java.util.Collection<java.net.InetAddress> addrs)`
This method takes a set of InetAddresses, represented by an inetAddressmap, and: - if the resulting set is non-empty, goes through to see if all InetAddress-related user settings have a consistent IP version: v4 or v6, and throws an exception if not - if the resulting set is empty, sets the default IP version based on available stacks and if a dual stack, stack preferences - sets the IP version to be used in the JGroups session

`static void` `ensureValidBindAddresses(java.util.List<Protocol> protocols)` Makes sure that all fields annotated with @LocalAddress is (1) an InetAddress and (2) a valid address on any local network interface
`static java.util.Collection<java.net.InetAddress>` `getAddresses(java.util.Map<java.lang.String,java.util.Map<java.lang.String,Configurator.InetAddressInfo>> inetAddressMap)` Returns all inet addresses found
`static java.lang.Object` `getField(java.lang.reflect.Field field, java.lang.Object target)`
`static java.util.List<java.net.InetAddress>` `getInetAddresses(java.util.List<Protocol> protocols)`
`static java.lang.Object` `getValueFromProtocol(Protocol protocol, java.lang.reflect.Field field)`
`static java.lang.Object` `getValueFromProtocol(Protocol protocol, java.lang.String field_name)`
`static boolean` `isSetPropertyMethod(java.lang.reflect.Method method)`
`static java.util.List<ProtocolConfiguration>` `parseConfigurations(java.lang.String configuration)` Return a number of ProtocolConfigurations in a vector
`static java.lang.String` `printConfigurations(java.util.Collection<ProtocolConfiguration> configs)`
`static void` `removeDeprecatedProperties(java.lang.Object obj, java.util.Map<java.lang.String,java.lang.String> props)`
`static void` `resolveAndAssignField(java.lang.Object obj, java.lang.reflect.Field field, java.util.Map<java.lang.String,java.lang.String> props)`
`static void` `resolveAndAssignFields(java.lang.Object obj, java.util.Map<java.lang.String,java.lang.String> props)`
`static void` `resolveAndInvokePropertyMethod(java.lang.Object obj, java.lang.reflect.Method method, java.util.Map<java.lang.String,java.lang.String> props)`
`static void` `resolveAndInvokePropertyMethods(java.lang.Object obj, java.util.Map<java.lang.String,java.lang.String> props)`
`static void` `sanityCheck(java.util.List<Protocol> protocols)` Throws an exception if sanity check fails.
`static void` `setDefaultValues(java.util.List<Protocol> protocols)`
`static void` `setDefaultValues(java.util.List<Protocol> protocols, StackType ip_version)`
`static void` `setDefaultValues(java.util.List<ProtocolConfiguration> protocol_configs, java.util.List<Protocol> protocols, StackType ip_version)`
`static void` `setField(java.lang.reflect.Field field, java.lang.Object target, java.lang.Object value)`
`Protocol` `setupProtocolStack(java.util.List<ProtocolConfiguration> config)`
`Protocol` `setupProtocolStack(ProtocolStack copySource)`

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

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

### Field Detail

#### log

    protected static final Log log

### Constructor Detail

#### Configurator

    public Configurator()

#### Configurator

    public Configurator(ProtocolStack protocolStack)

### Method Detail

#### setupProtocolStack

    public Protocol setupProtocolStack(java.util.List<ProtocolConfiguration> config)
                                throws java.lang.Exception

Throws:
  `java.lang.Exception`

#### setupProtocolStack

    public Protocol setupProtocolStack(ProtocolStack copySource)
                                throws java.lang.Exception

Throws:
  `java.lang.Exception`

#### setDefaultValues

    public static void setDefaultValues(java.util.List<Protocol> protocols)
                                 throws java.lang.Exception

Throws:
  `java.lang.Exception`

#### createProtocol

    public static Protocol createProtocol(java.lang.String prot_spec,
                          ProtocolStack stack)
                                   throws java.lang.Exception

Creates a new protocol given the protocol specification. Initializes the properties and starts the up and down handler threads.

Parameters:
  `prot_spec` - The specification of the protocol. Same convention as for specifying a protocol stack. An exception will be thrown if the class cannot be created. Example:

      "VERIFY_SUSPECT(timeout=1500)"

  Note that no colons (:) have to be specified
  `stack` - The protocol stack
Returns:
  Protocol The newly created protocol
Throws:
  `java.lang.Exception` - Will be thrown when the new protocol cannot be created

#### connectProtocols

    public static Protocol connectProtocols(java.util.List<Protocol> protocol_list)

Creates a protocol stack by iterating through the protocol list and connecting adjacent layers. The list starts with the topmost layer and has the bottommost layer at the tail.

Parameters:
  `protocol_list` - List of Protocol elements (from top to bottom)
Returns:
  Protocol stack

#### parseConfigurations

    public static java.util.List<ProtocolConfiguration> parseConfigurations(java.lang.String configuration)
                                                                     throws java.lang.Exception

Return a number of ProtocolConfigurations in a vector

Parameters:
  `configuration` - protocol-stack configuration string
Returns:
  List of ProtocolConfigurations
Throws:
  `java.lang.Exception`

#### printConfigurations

    public static java.lang.String printConfigurations(java.util.Collection<ProtocolConfiguration> configs)

#### createLayer

    protected static Protocol createLayer(ProtocolStack stack,
                       ProtocolConfiguration config)
                                   throws java.lang.Exception

Throws:
  `java.lang.Exception`

#### sanityCheck

    public static void sanityCheck(java.util.List<Protocol> protocols)
                            throws java.lang.Exception

Throws an exception if sanity check fails. Possible sanity check is uniqueness of all protocol names

Throws:
  `java.lang.Exception`

#### getAddresses

    public static java.util.Collection<java.net.InetAddress> getAddresses(java.util.Map<java.lang.String,java.util.Map<java.lang.String,Configurator.InetAddressInfo>> inetAddressMap)
                                                                   throws java.lang.Exception

Returns all inet addresses found

Throws:
  `java.lang.Exception`

#### determineIpVersionFromAddresses

    public static StackType determineIpVersionFromAddresses(java.util.Collection<java.net.InetAddress> addrs)
                                                     throws java.lang.Exception

This method takes a set of InetAddresses, represented by an inetAddressmap, and: - if the resulting set is non-empty, goes through to see if all InetAddress-related user settings have a consistent IP version: v4 or v6, and throws an exception if not - if the resulting set is empty, sets the default IP version based on available stacks and if a dual stack, stack preferences - sets the IP version to be used in the JGroups session

Returns:
  StackType.IPv4 for IPv4, StackType.IPv6 for IPv6, StackType.Unknown if the version cannot be determined
Throws:
  `java.lang.Exception`

#### createInetAddressMap

    public static java.util.Map<java.lang.String,java.util.Map<java.lang.String,Configurator.InetAddressInfo>> createInetAddressMap(java.util.List<ProtocolConfiguration> protocol_configs,
                                                                                                                    java.util.List<Protocol> protocols)
                                                                                                                             throws java.lang.Exception

Throws:
  `java.lang.Exception`

#### getInetAddresses

    public static java.util.List<java.net.InetAddress> getInetAddresses(java.util.List<Protocol> protocols)
                                                                 throws java.lang.Exception

Throws:
  `java.lang.Exception`

#### setDefaultValues

    public static void setDefaultValues(java.util.List<ProtocolConfiguration> protocol_configs,
                        java.util.List<Protocol> protocols,
                        StackType ip_version)
                                 throws java.lang.Exception

Throws:
  `java.lang.Exception`

#### setDefaultValues

    public static void setDefaultValues(java.util.List<Protocol> protocols,
                        StackType ip_version)
                                 throws java.lang.Exception

Throws:
  `java.lang.Exception`

#### ensureValidBindAddresses

    public static void ensureValidBindAddresses(java.util.List<Protocol> protocols)
                                         throws java.lang.Exception

Makes sure that all fields annotated with @LocalAddress is (1) an InetAddress and (2) a valid address on any local network interface

Parameters:
  `protocols` -
Throws:
  `java.lang.Exception`

#### getValueFromProtocol

    public static java.lang.Object getValueFromProtocol(Protocol protocol,
                                        java.lang.reflect.Field field)
                                                 throws java.lang.IllegalAccessException

Throws:
  `java.lang.IllegalAccessException`

#### getValueFromProtocol

    public static java.lang.Object getValueFromProtocol(Protocol protocol,
                                        java.lang.String field_name)
                                                 throws java.lang.IllegalAccessException

Throws:
  `java.lang.IllegalAccessException`

#### resolveAndInvokePropertyMethods

    public static void resolveAndInvokePropertyMethods(java.lang.Object obj,
                                       java.util.Map<java.lang.String,java.lang.String> props)
                                                throws java.lang.Exception

Throws:
  `java.lang.Exception`

#### resolveAndInvokePropertyMethod

    public static void resolveAndInvokePropertyMethod(java.lang.Object obj,
                                      java.lang.reflect.Method method,
                                      java.util.Map<java.lang.String,java.lang.String> props)
                                               throws java.lang.Exception

Throws:
  `java.lang.Exception`

#### resolveAndAssignFields

    public static void resolveAndAssignFields(java.lang.Object obj,
                              java.util.Map<java.lang.String,java.lang.String> props)
                                       throws java.lang.Exception

Throws:
  `java.lang.Exception`

#### resolveAndAssignField

    public static void resolveAndAssignField(java.lang.Object obj,
                             java.lang.reflect.Field field,
                             java.util.Map<java.lang.String,java.lang.String> props)
                                      throws java.lang.Exception

Throws:
  `java.lang.Exception`

#### removeDeprecatedProperties

    public static void removeDeprecatedProperties(java.lang.Object obj,
                                  java.util.Map<java.lang.String,java.lang.String> props)
                                           throws java.lang.Exception

Throws:
  `java.lang.Exception`

#### isSetPropertyMethod

    public static boolean isSetPropertyMethod(java.lang.reflect.Method method)

#### setField

    public static void setField(java.lang.reflect.Field field,
                java.lang.Object target,
                java.lang.Object value)

#### getField

    public static java.lang.Object getField(java.lang.reflect.Field field,
                            java.lang.Object target)