...
- Major version backward compatibility : can 9.0.0 ACM-runtime has to be backward compatible with 8.0.0? How many versions? can ACM-runtime 9.0.0 has to be backward compatible with ACM-runtime 7.0.0?
- Minor version backward compatibility: as example, any 8.x.0 ACM-runtime has to be backward compatible with all ACM-runtime 8.y.0 versions.
- Decouple between ACM-runtime and intermediary library: ACM-runtime 8.x.0 version has to be backward compatible with all intermediary library 8.y.0 versions.
- Participant java code backward compatibility: intermediary library 9.0.0 version has to be java code backward compatible with participant 8.0.0 version.is not recommended.
What impacts backward compatibility?
...
Code Block | ||||
---|---|---|---|---|
| ||||
/** * Wrapper of AutomationCompositionElementListener. * Valid since Montreal7.1.1 release. */ public abstract class AcElementListenerV1 implements AutomationCompositionElementListener { protected final ParticipantIntermediaryApi intermediaryApi; protected AcElementListenerV1(ParticipantIntermediaryApi intermediaryApi) { this.intermediaryApi = intermediaryApi; } @Override public void deploy(CompositionElementDto compositionElement, InstanceElementDto instanceElement) throws PfModelException { var element = new AcElementDeploy(); element.setId(instanceElement.elementId()); element.setDefinition(compositionElement.elementDefinitionId()); element.setToscaServiceTemplateFragment(instanceElement.toscaServiceTemplateFragment()); element.setProperties(instanceElement.inProperties()); Map<String, Object> properties = new HashMap<>(instanceElement.inProperties()); properties.putAll(compositionElement.inProperties()); deploy(instanceElement.instanceId(), element, properties); } public abstract void deploy(UUID instanceId, AcElementDeploy element, Map<String, Object> properties) throws PfModelException; @Override public void undeploy(CompositionElementDto compositionElement, InstanceElementDto instanceElement) throws PfModelException { undeploy(instanceElement.instanceId(), instanceElement.elementId()); } public abstract void undeploy(UUID instanceId, UUID elementId) throws PfModelException; @Override public void lock(CompositionElementDto compositionElement, InstanceElementDto instanceElement) throws PfModelException { lock(instanceElement.instanceId(), instanceElement.elementId()); } public abstract void lock(UUID instanceId, UUID elementId) throws PfModelException; @Override public void unlock(CompositionElementDto compositionElement, InstanceElementDto instanceElement) throws PfModelException { unlock(instanceElement.instanceId(), instanceElement.elementId()); } public abstract void unlock(UUID instanceId, UUID elementId) throws PfModelException; @Override public void delete(CompositionElementDto compositionElement, InstanceElementDto instanceElement) throws PfModelException { delete(instanceElement.instanceId(), instanceElement.elementId()); } public abstract void delete(UUID instanceId, UUID elementId) throws PfModelException; @Override public void update(CompositionElementDto compositionElement, InstanceElementDto instanceElement, InstanceElementDto instanceElementUpdated) throws PfModelException { var element = new AcElementDeploy(); element.setId(instanceElementUpdated.elementId()); element.setDefinition(compositionElement.elementDefinitionId()); element.setProperties(instanceElementUpdated.inProperties()); update(instanceElementUpdated.instanceId(), element, element.getProperties()); } public abstract void update(UUID instanceId, AcElementDeploy element, Map<String, Object> properties) throws PfModelException; private List<AutomationCompositionElementDefinition> createAcElementDefinitionList(CompositionDto composition) { List<AutomationCompositionElementDefinition> elementDefinitionList = new ArrayList<>(); for (var entry : composition.inPropertiesMap().entrySet()) { elementDefinitionList.add(createAcElementDefinition(entry.getKey(), entry.getValue(), composition.outPropertiesMap().get(entry.getKey()))); } return elementDefinitionList; } private AutomationCompositionElementDefinition createAcElementDefinition( ToscaConceptIdentifier toscaConceptIdentifier, Map<String, Object> property, Map<String, Object> outProperties) { var acElementDefinition = new AutomationCompositionElementDefinition(); acElementDefinition.setAcElementDefinitionId(toscaConceptIdentifier); var toscaNodeTemplate = new ToscaNodeTemplate(); toscaNodeTemplate.setProperties(property); acElementDefinition.setAutomationCompositionElementToscaNodeTemplate(toscaNodeTemplate); acElementDefinition.setOutProperties(outProperties); return acElementDefinition; } @Override public void prime(CompositionDto composition) throws PfModelException { prime(composition.compositionId(), createAcElementDefinitionList(composition)); } public abstract void prime(UUID compositionId, List<AutomationCompositionElementDefinition> elementDefinitionList) throws PfModelException; @Override public void deprime(CompositionDto composition) throws PfModelException { deprime(composition.compositionId()); } public abstract void deprime(UUID compositionId) throws PfModelException; @Override public void handleRestartComposition(CompositionDto composition, AcTypeState state) throws PfModelException { handleRestartComposition(composition.compositionId(), createAcElementDefinitionList(composition), state); } public abstract void handleRestartComposition(UUID compositionId, List<AutomationCompositionElementDefinition> elementDefinitionList, AcTypeState state) throws PfModelException; @Override public void handleRestartInstance(CompositionElementDto compositionElement, InstanceElementDto instanceElement, DeployState deployState, LockState lockState) throws PfModelException { var element = new AcElementDeploy(); element.setId(instanceElement.elementId()); element.setDefinition(compositionElement.elementDefinitionId()); element.setProperties(instanceElement.inProperties()); Map<String, Object> properties = new HashMap<>(instanceElement.inProperties()); properties.putAll(compositionElement.inProperties()); handleRestartInstance(instanceElement.instanceId(), element, properties, deployState, lockState); } public abstract void handleRestartInstance(UUID instanceId, AcElementDeploy element, Map<String, Object> properties, DeployState deployState, LockState lockState) throws PfModelException; @Override public void migrate(CompositionElementDto compositionElement, CompositionElementDto compositionElementTarget, InstanceElementDto instanceElement, InstanceElementDto instanceElementMigrate) throws PfModelException { var element = new AcElementDeploy(); element.setId(instanceElement.elementId()); element.setDefinition(compositionElement.elementDefinitionId()); element.setProperties(instanceElement.inProperties()); migrate(instanceElementMigrate.instanceId(), element, compositionElementTarget.compositionId(), element.getProperties()); } public abstract void migrate(UUID instanceId, AcElementDeploy element, UUID compositionTargetId, Map<String, Object> properties) throws PfModelException; @Override public void migratePrecheck(CompositionElementDto compositionElement, CompositionElementDto compositionElementTarget, InstanceElementDto instanceElement, InstanceElementDto instanceElementMigrate) throws PfModelException { intermediaryApi.updateAutomationCompositionElementState(instanceElementMigrate.instanceId(), instanceElementMigrate.elementId(), DeployState.DEPLOYED, null, StateChangeResult.NO_ERROR, "Migrate precheck not supported"); } } |
...
Code Block | ||||
---|---|---|---|---|
| ||||
/** * Wrapper of AutomationCompositionElementListener. * Valid since New Delhi7.1.2 release. */ public abstract class AcElementListenerV2 implements AutomationCompositionElementListener { private final ParticipantIntermediaryApi intermediaryApi; protected AcElementListenerV2(ParticipantIntermediaryApi intermediaryApi) { this.intermediaryApi = intermediaryApi; } } |
...