# Interface RelationSupportMBean

All Superinterfaces:
  `Relation`

All Known Implementing Classes:
  `RelationSupport`

public interface RelationSupportMBean extends Relation
A RelationSupport object is used internally by the Relation Service to represent simple relations (only roles, no properties or methods), with an unlimited number of roles, of any relation type. As internal representation, it is not exposed to the user.

RelationSupport class conforms to the design patterns of standard MBean. So the user can decide to instantiate a RelationSupport object himself as a MBean (as it follows the MBean design patterns), to register it in the MBean Server, and then to add it in the Relation Service.

The user can also, when creating his own MBean relation class, have it extending RelationSupport, to retrieve the implementations of required interfaces (see below).

It is also possible to have in a user relation MBean class a member being a RelationSupport object, and to implement the required interfaces by delegating all to this member.

RelationSupport implements the Relation interface (to be handled by the Relation Service).

Since:
  1.5

- ## Method Summary

  Modifier and Type
  Method
  Description
  `Boolean`
  `isInRelationService()`
  Returns an internal flag specifying if the object is still handled by the Relation Service.
  `void`
  `setRelationServiceManagementFlag(Boolean flag)`
  Specifies whether this relation is handled by the Relation Service.

  ### Methods declared in interface Relation

  `getAllRoles, getReferencedMBeans, getRelationId, getRelationServiceName, getRelationTypeName, getRole, getRoleCardinality, getRoles, handleMBeanUnregistration, retrieveAllRoles, setRole, setRoles`
  Modifier and Type
  Method
  Description
  `RoleResult`
  `getAllRoles()`
  Returns all roles present in the relation.
  `Map<ObjectName, List<String>>`
  `getReferencedMBeans()`
  Retrieves MBeans referenced in the various roles of the relation.
  `String`
  `getRelationId()`
  Returns relation identifier (used to uniquely identify the relation inside the Relation Service).
  `ObjectName`
  `getRelationServiceName()`
  Returns ObjectName of the Relation Service handling the relation.
  `String`
  `getRelationTypeName()`
  Returns name of associated relation type.
  `List<ObjectName>`
  `getRole(String roleName)`
  Retrieves role value for given role name.
  `Integer`
  `getRoleCardinality(String roleName)`
  Returns the number of MBeans currently referenced in the given role.
  `RoleResult`
  `getRoles(String[] roleNameArray)`
  Retrieves values of roles with given names.
  `void`
  `handleMBeanUnregistration(ObjectName objectName, String roleName)`
  Callback used by the Relation Service when a MBean referenced in a role is unregistered.
  `RoleList`
  `retrieveAllRoles()`
  Returns all roles in the relation without checking read mode.
  `void`
  `setRole(Role role)`
  Sets the given role.
  `RoleResult`
  `setRoles(RoleList roleList)`
  Sets the given roles.

- ## Method Details

  - ### isInRelationService

    Boolean isInRelationService()
    Returns an internal flag specifying if the object is still handled by the Relation Service.
    Returns:
      a Boolean equal to `Boolean.TRUE` if the object is still handled by the Relation Service and `Boolean.FALSE` otherwise.

  - ### setRelationServiceManagementFlag

    void setRelationServiceManagementFlag(Boolean flag) throws IllegalArgumentException

    Specifies whether this relation is handled by the Relation Service.

    BEWARE, this method has to be exposed as the Relation Service will access the relation through its management interface. It is RECOMMENDED NOT to use this method. Using it does not affect the registration of the relation object in the Relation Service, but will provide wrong information about it!

    Parameters:
      `flag` - whether the relation is handled by the Relation Service.
    Throws:
      `IllegalArgumentException` - if null parameter