ServiceContainerService
This is a specialization of DataService
How it works
The service
User has a spawn
method.
Once you acquire a Sink to a service
User, issue sink.call('spawn',...)
in order to spawn a new sub-Service on the ServiceContainerService instance.
You need to specialize
ServiceContainerService is an abstract service. It provides no means to actually spawn a sub-Service.
However, it has all the methods to handle a sink to a newly instantiated sub-Service:
- the new sink will be put in the
subservices
map of the ServiceContainerService instance - a new record describing the new sub-Service will be created in the ServiceContainerService data
- the record that describes the sub-Service will be updated whenever the sub-Service instance changes its state (provided that the state field is related to the Record of the ServiceContainerService)
Therefore, one should follow the dataStream (the 'd'
Channel on the acquired Sink to ServiceContainerService) in order to obtain information on all contained sub-Services
How to specialize
- Inherit from
allex_dataservice
- Define a storagedescriptor in
storagedescriptor.js
(especially the structure of the describing Record for data) - Write the
acquireSink
method on theservice
User (inusers/serviceusercreator.js
), because it will be called, but there is no generic implementation in ServiceContainerService.
Further tweaks
- All sub-Services will be mapped in the
subservices
according to theinstancename
field of the property hash provided to thespawn
method of theservice
User. You can change this behavior by overriding the _instanceNameFromRecord method of theservice
User.