1.0.7 • Published 2 years ago
allex_servicecontainerservice v1.0.7
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
subservicesmap 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
acquireSinkmethod on theserviceUser (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
subservicesaccording to theinstancenamefield of the property hash provided to thespawnmethod of theserviceUser. You can change this behavior by overriding the _instanceNameFromRecord method of theserviceUser.