@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) public CreateResourceHistory persistCreateHistory(Subject user, int parentResourceId, int resourceTypeId, String createResourceName, PackageVersion packageVersion, Configuration deploymentTimeConfiguration) { // Load relationships Resource parentResource = entityManager.getReference(Resource.class, parentResourceId); ResourceType resourceType = entityManager.getReference(ResourceType.class, resourceTypeId); // Persist and establish relationships // TODO: Note, InstalledPackage is set to null because it doesn't really make sense. An InstalledPackage // represents a backing package relationship between a Resource and a PackageVersion, not its parent. // I think it should probably be removed from the history entity. -jshaughn 9/1/09. CreateResourceHistory history = new CreateResourceHistory(parentResource, resourceType, user.getName(), (InstalledPackage) null); history.setCreatedResourceName(createResourceName); history.setConfiguration(deploymentTimeConfiguration); history.setStatus(CreateResourceStatus.IN_PROGRESS); entityManager.persist(history); parentResource.addCreateChildResourceHistory(history); // Caller will need this parentResource.getAgent(); return history; }
long duration = request.getDuration(); LOG.debug("Timing out request after duration: " + duration + " Request: " + request); request.setErrorMessage("Request with duration " + duration + " exceeded the timeout threshold of " + REQUEST_TIMEOUT); request.setStatus(CreateResourceStatus.TIMED_OUT);
private CreateResourceHistory findMatchingCreateResourceHistory(Integer parentId, String resourceKey) { Query query = PersistenceUtility.createQueryWithOrderBy(entityManager, CreateResourceHistory.QUERY_FIND_BY_CHILD_RESOURCE_KEY, new PageControl(0, 1, new OrderingField("mtime", DESC))); query.setParameter("parentResourceId", parentId); query.setParameter("newResourceKey", resourceKey); Iterator iterator = query.getResultList().iterator(); if (iterator.hasNext()) { CreateResourceHistory next = (CreateResourceHistory) iterator.next(); if (next.getStatus() == SUCCESS) { return next; } } return null; }
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) public CreateResourceHistory persistCreateHistory(Subject user, int parentResourceId, int resourceTypeId, String createResourceName, Configuration configuration) { // Load relationships Resource parentResource = entityManager.getReference(Resource.class, parentResourceId); ResourceType resourceType = entityManager.getReference(ResourceType.class, resourceTypeId); // CreateResourceHistory.configuration is one-to-one, so make sure to clone the config, zeroing out all id's. Configuration configurationClone = (configuration != null) ? configuration.deepCopy(false) : null; // Persist and establish relationships CreateResourceHistory history = new CreateResourceHistory(parentResource, resourceType, user.getName(), configurationClone); history.setCreatedResourceName(createResourceName); history.setStatus(CreateResourceStatus.IN_PROGRESS); entityManager.persist(history); parentResource.addCreateChildResourceHistory(history); // Caller will need this parentResource.getAgent(); return history; }
CreateResourceStatus status = history.getStatus(); ResourceWithType rwt = findCreatedResource(history.getParentResource().getId(),history.getCreatedResourceName(),uriInfo); if (rwt!=null) { builder = Response.ok(); StringValue errorMessage = new StringValue(status + ": " + history.getErrorMessage()); builder.entity(errorMessage);
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) public void completeCreateResource(CreateResourceResponse response) { if (LOG.isDebugEnabled()) { LOG.debug("Received call to complete create resource: " + response); } // Load the persisted history entry CreateResourceHistory history = entityManager.find(CreateResourceHistory.class, response.getRequestId()); // There is some inconsistency if we're completing a request that was not in the database if (history == null) { LOG.error("Attempting to complete a request that was not found in the database: " + response.getRequestId()); return; } // Update the history entry history.setNewResourceKey(response.getResourceKey()); history.setErrorMessage(response.getErrorMessage()); history.setStatus(response.getStatus()); // The configuration may now have error messages in it, so merge with the persisted one if (response.getResourceConfiguration() != null) { entityManager.merge(response.getResourceConfiguration()); } }
/** * Calling this method with a non-<code>null</code> error message implies that the request's status is * {@link CreateResourceStatus#FAILURE}. The inverse is <i>not</i> true - that is, if you set the error message to * <code>null</code>, the status is left as-is; it will not assume that a <code>null</code> error message means the * status is successful. * * @param errorMessage description of the error */ public void setErrorMessage(String errorMessage) { this.errorMessage = errorMessage; if (errorMessage != null) { setStatus(CreateResourceStatus.FAILURE); } }
CreateResourceRequest request = new CreateResourceRequest(persistedHistory.getId(), parentResourceId, resourceName, resourceType.getName(), resourceType.getPlugin(), pluginConfiguration, resourceConfiguration, timeout); CreateResourceResponse response = new CreateResourceResponse(persistedHistory.getId(), null, null, CreateResourceStatus.FAILURE, errorMessage, resourceConfiguration); resourceFactoryManager.completeCreateResource(response);
resource.getResourceKey()); if (matchingHistory != null) { String userSuppliedResourceName = matchingHistory.getCreatedResourceName(); if (!isBlank(userSuppliedResourceName) && !userSuppliedResourceName.equals(resource.getName())) { resource.setName(userSuppliedResourceName);
packageName, null,null,deployConfig,resourceBits); CreateResourceStatus status = history.getStatus(); ResourceWithType rwt = findCreatedResource(history.getParentResource().getId(),history.getCreatedResourceName(),uriInfo); if (rwt!=null) { builder = Response.ok(); URI uri = uriBuilder.build(history.getId()); builder = Response.status(302); builder.entity("Creation is running - please check back later"); builder.entity(new StringValue(history.getErrorMessage()));
CreateResourceRequest request = new CreateResourceRequest(persistedHistory.getId(), parentResource.getId(), newResourceName, newResourceType.getName(), newResourceType.getPlugin(), pluginConfiguration, packageDetails, timeout); CreateResourceResponse response = new CreateResourceResponse(persistedHistory.getId(), null, null, CreateResourceStatus.FAILURE, errorMessage, null); resourceFactoryManager.completeCreateResource(response); CreateResourceResponse response = new CreateResourceResponse(persistedHistory.getId(), null, null, CreateResourceStatus.FAILURE, errorMessage, null); resourceFactoryManager.completeCreateResource(response);
defaultRc, null); CreateResourceStatus status = history.getStatus(); ResourceWithType rwt = findCreatedResource(history.getParentResource().getId(),history.getCreatedResourceName(),uriInfo); if (rwt!=null) { builder = Response.ok(); URI uri = uriBuilder.build(history.getId()); builder = Response.status(302); builder.entity("Creation is running - please check back later"); builder.entity(new StringValue(history.getErrorMessage()));