private ResourceEntity findPredecessor(List<ResourceEntity> predecessorCandidates, ResourceEntity successorResource, PredecessorResult predecessorResult) { ResourceEntity predecessorResource = dependencyResolverService.getResourceEntityForRelease(predecessorCandidates, successorResource.getRelease()); if (predecessorResource == null) { predecessorResult.addMessage(new PredecessorResultMessage(MessageSeverity.WARNING, "no suitable release for predecessor application " + (predecessorCandidates.isEmpty() ? "" : predecessorCandidates.get(0).getName()) + " found")); log.warning("No suitable predecessor release found "); } else { log.info("Best matching predecessor release is " + predecessorResource.getRelease().getName()); } return predecessorResource; }
private void predecessorSuccessfullyReplacedResult(ResourceEntity successorResource, String predecessorName, PredecessorResult predecessorResult) { predecessorResult.setProcessingState(ProcessingState.OK); // only if really successful if (predecessorResult.getMessages().isEmpty()) { predecessorResult.addMessage(new PredecessorResultMessage(MessageSeverity.INFO, "Predecessor application " + predecessorName + " successfully replaced by " + successorResource.getName())); } }
private boolean copyPredecessorApplicationToSuccessor(ResourceEntity successorResource, ForeignableOwner actingOwner, PredecessorResult predecessorResult, ResourceEntity predecessorResource) { // copy application try { copyService.copyFromPredecessorToSuccessorResource(predecessorResource, successorResource, actingOwner); } catch (ForeignableOwnerViolationException e) { log.warning(e.getMessage()); predecessorResult.addMessage(new PredecessorResultMessage(MessageSeverity.ERROR, e.getMessage())); return false; } catch (AMWException e) { log.warning(e.getMessage()); predecessorResult.setProcessingState(ProcessingState.OK); predecessorResult.addMessage(new PredecessorResultMessage(MessageSeverity.WARNING, e.getMessage())); return false; } return true; }
private void removeAsRelationsInAllFutureReleases(PredecessorResult predecessorResult, List<ResourceEntity> allFutureAsReleases, ResourceEntity predecessorResource) { List<ConsumedResourceRelationEntity> asToRemoveRelations = new ArrayList<>(); for (ResourceEntity futureReleaseAppServer : allFutureAsReleases) { for (ConsumedResourceRelationEntity asToAppRelationInFutureAsRelease : futureReleaseAppServer.getConsumedMasterRelations()) { // compare by Name because we need to remove all predecessor Releases if (predecessorResource.getName().equals(asToAppRelationInFutureAsRelease.getSlaveResource().getName())) { asToRemoveRelations.add(asToAppRelationInFutureAsRelease); } } } for (ConsumedResourceRelationEntity asToAppRelationInFutureAsRelease : asToRemoveRelations) { try { relationImportService.deleteConsumedPortRelations(Collections.singletonList(asToAppRelationInFutureAsRelease)); } catch (ElementAlreadyExistsException | ResourceNotFoundException e) { log.log(Level.WARNING, "Error Could not add Successor to future AS", e); predecessorResult.addMessage(new PredecessorResultMessage(MessageSeverity.ERROR, "Error while adding successor resource to sucessor as release: " + e.getMessage())); } } }
private PredecessorResult handleAsForSuccessorResourceRelease(ResourceEntity successorResource, ResourceGroupEntity asPredecessorGroup) { PredecessorResult predecessorResult = new PredecessorResult(); try { if (getOrCreateAsInSuccessorRelease(asPredecessorGroup, successorResource) == null) { log.warning("No Applicationerver could be created or found for successor release"); throw new AMWException("No Applicationerver could be created or found for successor release"); } } catch (ForeignableOwnerViolationException e) { log.log(Level.WARNING, "Error while creating As in Successor Release", e); predecessorResult.setProcessingState(ProcessingState.FAILED); predecessorResult.addMessage(new PredecessorResultMessage(MessageSeverity.ERROR, "Error while creating As in Successor Release: " + e.getMessage())); } catch (AMWException e) { log.log(Level.WARNING, "Error while creating As in Successor Release", e); predecessorResult.setProcessingState(ProcessingState.FAILED); predecessorResult.addMessage(new PredecessorResultMessage(MessageSeverity.WARNING, "Error while creating As in Successor Release: " + e.getMessage())); } return predecessorResult; }
private void addSuccessorToAllFutureReleases(PredecessorResult predecessorResult, List<ResourceEntity> allFutureReleases, ResourceEntity successorResource) { for (ResourceEntity resourceEntity : allFutureReleases) { try { resourceRelationService.addRelationByGroup(resourceEntity.getId(), successorResource.getResourceGroup().getId(), false, null, null, ForeignableOwner.getSystemOwner()); } catch (ElementAlreadyExistsException | ResourceNotFoundException e) { log.log(Level.WARNING, "Error Could not add Successor to future AS", e); predecessorResult.addMessage(new PredecessorResultMessage(MessageSeverity.ERROR, "Error while adding successor resource to sucessor as release: " + e.getMessage())); } } }
private boolean copyPpisFromPredecessorToSuccessor(ResourceEntity successorResource, ForeignableOwner actingOwner, PredecessorResult predecessorResult, ResourceEntity predecessorResource) { // copy PPIs for (ProvidedResourceRelationEntity providedResourceRelationEntity : successorResource.getProvidedMasterRelations()) { if (predecessorResource != null && resourceLocator.hasResourceProvidableSoftlinkType(providedResourceRelationEntity.getSlaveResource())) { ResourceEntity successorPpi = providedResourceRelationEntity.getSlaveResource(); try { final ResourceEntity predecessorPpi = getPredecessorForCpiOrPpi(successorPpi, predecessorResource.getProvidedMasterRelations()); if (predecessorPpi != null) { try { copyService.copyFromPredecessorToSuccessorResource(predecessorPpi, successorPpi, actingOwner); } catch (ForeignableOwnerViolationException e) { log.warning(e.getMessage()); predecessorResult.addMessage(new PredecessorResultMessage(MessageSeverity.ERROR, e.getMessage())); return false; } catch (AMWException e) { log.warning(e.getMessage()); predecessorResult.setProcessingState(ProcessingState.OK); predecessorResult.addMessage(new PredecessorResultMessage(MessageSeverity.WARNING, e.getMessage())); return false; } } } catch (AMWRuntimeException e) { predecessorResult.setProcessingState(ProcessingState.OK); predecessorResult.addMessage(new PredecessorResultMessage(MessageSeverity.WARNING, e.getMessage())); return false; } } } return true; }
private boolean copyCpisFromPredecessorToSuccessor(ResourceEntity successorResource, ForeignableOwner actingOwner, PredecessorResult predecessorResult, ResourceEntity predecessorResource) { // copy CPIs for (ConsumedResourceRelationEntity consumedResourceRelationEntity : successorResource.getConsumedMasterRelations()) { if (predecessorResource != null && resourceLocator.hasResourceConsumableSoftlinkType(consumedResourceRelationEntity.getSlaveResource())) { ResourceEntity successorCpi = consumedResourceRelationEntity.getSlaveResource(); try { final ResourceEntity predecessorCpi = getPredecessorForCpiOrPpi(successorCpi, predecessorResource.getConsumedMasterRelations()); if (predecessorCpi != null) { try { copyService.copyFromPredecessorToSuccessorResource(predecessorCpi, successorCpi, actingOwner); } catch (ForeignableOwnerViolationException e) { log.warning(e.getMessage()); predecessorResult.addMessage(new PredecessorResultMessage(MessageSeverity.ERROR, e.getMessage())); return false; } catch (AMWException e) { log.warning(e.getMessage()); predecessorResult.setProcessingState(ProcessingState.OK); predecessorResult.addMessage(new PredecessorResultMessage(MessageSeverity.WARNING, e.getMessage())); return false; } } } catch (AMWRuntimeException e) { predecessorResult.setProcessingState(ProcessingState.OK); predecessorResult.addMessage(new PredecessorResultMessage(MessageSeverity.WARNING, e.getMessage())); return false; } } } return true; }
private PredecessorResult doHandlePredecessor(ResourceEntity successorResource, String predecessorName, ForeignableOwner actingOwner) { PredecessorResult predecessorResult = new PredecessorResult(successorResource.getName(), ProcessingState.FAILED); List<ResourceEntity> predecessorCandidates = getPredecessorCandidates(predecessorName); if (!predecessorCandidates.isEmpty()) { ResourceEntity predecessorResource = findPredecessor(predecessorCandidates, successorResource, predecessorResult); if (copyPredecessorApplicationToSuccessor(successorResource, actingOwner, predecessorResult, predecessorResource) && copyCpisFromPredecessorToSuccessor(successorResource, actingOwner, predecessorResult, predecessorResource) && copyPpisFromPredecessorToSuccessor(successorResource, actingOwner, predecessorResult, predecessorResource) && handleApplicationServerRelations(successorResource, predecessorResult, predecessorResource)) { predecessorSuccessfullyReplacedResult(successorResource, predecessorName, predecessorResult); } } else { // do "nothing" log.warning("Predecessor application " + predecessorName + " not found"); predecessorResult.setProcessingState(ProcessingState.OK); predecessorResult.addMessage(new PredecessorResultMessage(MessageSeverity.WARNING, "Predecessor application " + predecessorName + " not found")); } return predecessorResult; }
private PredecessorResult handleApplicationServerRelations(ResourceEntity predecessorResource, ResourceEntity successorResource) { PredecessorResult predecessorResult = new PredecessorResult(); ResourceGroupEntity asPredecessorGroup = getPredecessorApplicationServer(predecessorResource); if (asPredecessorGroup != null) { predecessorResult = handleAsForSuccessorResourceRelease(successorResource, asPredecessorGroup); List<ResourceEntity> allReleasesFutureRelease = dependencyResolverService.getAllFutureReleases(asPredecessorGroup.getResources(), successorResource.getRelease()); // add successor To all future Releases of the asInSuccessorRelease (including asInSuccessorRelease) addSuccessorToAllFutureReleases(predecessorResult, allReleasesFutureRelease, successorResource); // remove predecessor AS Master Relations where now the Successor is attached removeAsRelationsInAllFutureReleases(predecessorResult, allReleasesFutureRelease, predecessorResource); } else { predecessorResult.addMessage(new PredecessorResultMessage(MessageSeverity.WARNING, "Predecessor application " + (predecessorResource != null ? predecessorResource.getName() : "") + " has no Application Server relation, therefore the Application Server Handling was not performed.")); } return predecessorResult; }