MultiComponent FGC Phase 1 (archived) - quality-manager/onboarding GitHub Wiki
This describes the first effort at multicomponent FGC that was developed prior to 2016.
The wiki page Jing created at that time is here: RQMFineGrainComponent
Completed Work
Using aggregate-configuration for the from the web UI
In the original PLE work we had only a single notion of configuration, and that is automatically passed to the server in the oslc_config.context
parameter by the JAF wrapper that is used for Managed REST service calls. The JAF code on the server side uses that to set the configuration in the TeamServiceContext.
We made the design choice to have the web UI work with the component of the artifact, not with the specific subconfiguration for the artifact.
Creating a new item
When creating a new item, it is required by the repository code that the subconfiguration be specified in the TeamServiceContext
. There are methods in QualityManagerConfigurationExecutionService
such as public <E> E runWithActiveConfigurationAndSubcomponent(Callable<E> block, IConfiguration configuration, UUID subcomponentUUID)
that set the TeamServiceContext
with the "aggregate configuration" and the "subconfiguration". The subconfiguration in the TeamServiceContext is used only when creating a new item, not for queries.
Note that the web UI tends to pass in the configuration (the aggregate specified in the oslc_config.context
parameter) and the componentUUID for an artifact to be created. The server code resolves the component within the current aggregate configuration to the subconfiguration that matches the component, and sets that subconfiguration in the TeamServiceContext.
Updating an existing item
The repository services will not use the subconfiguration in the TeamServiceContext; a new state will always go in the same subconfiguration as the prior.
Note that the repository service will make use of the subconfiguration from the TeamServiceContext when a new item is created that is part of an artifact. The repository service does not understand what items make up a QM artifact. So for example, if we are updating a test script by adding a new step, there is no magic by which the repository knows that the step belongs to the script. The QM server code must ensure that the subconfiguration is properly set in the TeamServiceContext for this to work properly.
Auditable Link creation
If the source of the audible link is a configuration aware item, the audible link needs to be part of the same subconfiguration.
Broken Link management
We made a first pass at hardening our queries and calls to fetchItem so that service calls do not just fail with an NPE.
Returning ComponentDTO where relevant
Most of our queries return information about artifacts in a DTO. We augmented most of these for the to return a componentDTO. We made the choice to have the web UI client use the aggregate configuration and the component not the subconfiguration.
Reportable REST API
- The component is returned as an attribute for relevant artifacts.
<ns2:component href="https://localhost:9443/jazz/service/com.ibm.rqm.integration.service.IIntegrationService/resources/Quality+Manager/component/_on9mYN6zEeeIme00aA9q4Q"/>
- You can get a feed of components, streams, and baselines.
- For components, it returns the subcomponents and the aggregate components
- For streams does not return the aggregate streams (query scopes)
Passing in ComponentUUID as a parameter in most create scenarios
There is no automatic passing in of the "writeable subconfiguration" in the wrapper code. The QM code resolves the componentUUID to the subconfiguration, and sets the TeamServiceContext appropriately. For example, see QualityManagerConfigurationExecutionService.runWithActiveConfigurationAndSubcomponent()
.
What was not yet accomplished
- Integration with GC
- Migration capability
- UI to manage aggregate configurations
- Avoiding version skew
- Reportable REST support
- The component cannot be set when creating artifacts
- Broken reference management
- consistent UI
- ability to differentiate between no reference and broken reference
- ability to troubleshoot query scope to propose that a component is missing, or that the wrong configuration has been selected.