DUE TO SPAM, SIGN-UP IS DISABLED. Goto Selfserve wiki signup and request an account.
...
From this diagram, you can actually see the FOUR major components you need to create in order to have your element managed by the REST CMS: a controller, a configuration manager, a configuration validator and a configuration realizer.
Configuration Controller
In order to add a rest end point, we will need a controller entry point to handle the request. You can see RegionManagementController as an example. Here is a few things you need to pay attention to:
...
Now that you have the configuration object ready, you will need to create a ConfigurationManager that tells the framework how this object is to be managed by the configuration service. If your configuration object is part of the cache xml, your configuration manager should extend CacheConfigurationManager. If your object affects other parts outside cache.xml, like jar deployment or runtime properties, you will need to extend its parent class ConfiguratioonManager.
CacheConfigurationManager
Configuration Validator
Configuration Realizer
...
For now, after you created a configuration manager, you will need to manually add it to the map of managers in LocatorClusterManagementService.
Note the configuration managers are run on the locators.
CacheConfigurationManager
To extend this class, you will need to implement a few methods, basically to tell the framework how your element will be added/deleted/updated/found in the CacheConfig (an object represent the cache.xml). You can see examples in RegionConfigManager. In there you find yourself in need of a ConfigurationConverter.
ConfigurationConverter
ConfigurationConverter specifies how you convert between your configuration object and the xml representation of it.
As we mentioned before, we don't use jaxb generated object as our configuration object but create our own configuration object. Since CacheConfig uses these jaxb-generated objects inside (because they are all auto-generated by the jaxb service), we will need a way to convert our configuration object to/from these xml objects. Hence, in order to implement the CacheConfigurationManager, we will need a converter first. You can also the usage and the implementation of a converter in RegionConfigManager.
ConfigurationManager
If your configuration is not part of the cache.xml, but something else, like deployment or runtime properties, you will need to implement this interface instead.
Configuration Validator
Configuration Validator is called when CMS receives the configuration for operations like create or delete. You can use this to validate if the attributes set on the configuration is valid or not.
For now, after you created a configuration validator, you will need to manually add it to the map of validators in LocatorClusterManagementService.
Note the configuration validators are run on the locators.
Configuration Realizer
Configuration Realizer controls how the entity represented by this configuration is created/deleted/updated on the servers. For example, after we have this region configuration, how we actually create it on the servers. See RegionConfigRealizer.java for example.
For now, after you created a configuration realizer, you will need to manually add it to the map of validators in CacheRealizationFunction
Note the configuration realizers are run on the servers.
Add A New Long Running Operation to be started by REST CMS
You can also start a long running operation through CMS REST call. Currently, we have restore redundancy and rebalance operations. If you want to add another long running operation to be started asynchronously and have the user check back for status through the rest end point, you will need to add these: a controller and a performer.
Operation controller
This handles the REST request and response. See RebalanceOperationController for example. The same list of things to pay attention to in configuration controller also applies here as well.
When you want to call into the configuration service's API to start the operation, you find yourself in need to of two object: ClusterManagementOperation and OperationResult
ClusterManagementOperation
This object defines the operation you want to run on the cluster. See RebalanceOperation for example. This object needs to be typed with the result object explained below.
OperationResult
This object holds the information you want to return to the user about the operation result when this operation finishes. See RebalanceResult for example.
Operation Performer
Now that you've created the operation and result object, you can now implement a performer that would take this operation object and return the result. Your performer needs to implement the OperationPerformer interface. See RebalanceOperationPerformer for example.
For now, after you created the performer, you will need to manually register it in the operation manager.
Note the performer is run on the locators, and if you need to invoke operations on the servers, you will need to have all that logic in your own performers.