use of com.openmeap.model.event.MapPayloadEvent in project OpenMEAP by OpenMEAP.
the class ServiceManagementServlet method service.
@Override
public void service(HttpServletRequest request, HttpServletResponse response) throws IOException {
Result result = null;
PrintWriter os = new PrintWriter(response.getOutputStream());
logger.debug("Request uri: {}", request.getRequestURI());
logger.debug("Request url: {}", request.getRequestURL());
logger.debug("Query string: {}", request.getQueryString());
if (logger.isDebugEnabled()) {
logger.debug("Parameter map: {}", ParameterMapUtils.toString(request.getParameterMap()));
}
String action = request.getParameter(UrlParamConstants.ACTION);
if (action == null) {
action = "";
}
if (!authenticates(request)) {
logger.error("Request failed to authenticate ", request);
result = new Result(Result.Status.FAILURE, "Authentication failed");
sendResult(response, os, result);
return;
}
if (action.equals(ModelEntityEventAction.MODEL_REFRESH.getActionName())) {
logger.trace("Processing refresh");
result = refresh(request, response);
sendResult(response, os, result);
return;
} else if (action.equals(ClusterNodeRequest.HEALTH_CHECK)) {
logger.trace("Cluster node health check");
result = healthCheck(request, response);
sendResult(response, os, result);
return;
}
GlobalSettings settings = modelManager.getGlobalSettings();
ClusterNode clusterNode = modelManager.getClusterNode();
if (clusterNode == null) {
throw new RuntimeException("openmeap-services-web needs to be configured as a cluster node in the settings of the admin interface.");
}
Map<Method, String> validationErrors = clusterNode.validate();
if (validationErrors != null) {
throw new RuntimeException(new InvalidPropertiesException(clusterNode, validationErrors));
}
if (request.getParameter("clearPersistenceContext") != null && context instanceof AbstractApplicationContext) {
logger.trace("Clearing persistence context");
clearPersistenceContext();
} else if (action.equals(ModelEntityEventAction.ARCHIVE_UPLOAD.getActionName())) {
logger.trace("Processing archive upload - max file size: {}, storage path prefix: {}", settings.getMaxFileUploadSize(), clusterNode.getFileSystemStoragePathPrefix());
archiveUploadHandler.setFileSystemStoragePathPrefix(clusterNode.getFileSystemStoragePathPrefix());
Map<Object, Object> paramMap = ServletUtils.cloneParameterMap(settings.getMaxFileUploadSize(), clusterNode.getFileSystemStoragePathPrefix(), request);
result = handleArchiveEvent(archiveUploadHandler, new MapPayloadEvent(paramMap), paramMap);
} else if (action.equals(ModelEntityEventAction.ARCHIVE_DELETE.getActionName())) {
logger.trace("Processing archive delete - max file size: {}, storage path prefix: {}", settings.getMaxFileUploadSize(), clusterNode.getFileSystemStoragePathPrefix());
archiveDeleteHandler.setFileSystemStoragePathPrefix(clusterNode.getFileSystemStoragePathPrefix());
Map<Object, Object> paramMap = ServletUtils.cloneParameterMap(settings.getMaxFileUploadSize(), clusterNode.getFileSystemStoragePathPrefix(), request);
result = handleArchiveEvent(archiveDeleteHandler, new MapPayloadEvent(paramMap), paramMap);
}
sendResult(response, os, result);
}
use of com.openmeap.model.event.MapPayloadEvent in project OpenMEAP by OpenMEAP.
the class DeploymentDeleteNotifier method onAfterOperation.
@Override
public <E extends Event<Deployment>> void onAfterOperation(E event, List<ProcessingEvent> events) throws EventNotificationException {
//public <E extends Event<Deployment>> void onInCommitBeforeCommit(E event, List<ProcessingEvent> events) throws EventNotificationException {
Deployment deployment2Delete = (Deployment) event.getPayload();
ApplicationArchive archive = deployment2Delete.getApplicationArchive();
// if there are any other deployments with this hash,
// then we cannot yet delete it's archive yet at all.
List<Deployment> deployments = archiveDeleteHandler.getModelManager().getModelService().findDeploymentsByApplicationArchive(archive);
if (deployments.size() != 0) {
return;
} else {
int deplCount = archiveDeleteHandler.getModelManager().getModelService().countDeploymentsByHashAndHashAlg(archive.getHash(), archive.getHashAlgorithm());
if (deplCount == 0) {
// use the archive delete notifier to cleanup to cluster nodes
archiveDeleteNotifier.notify(new ModelEntityEvent(ModelServiceOperation.DELETE, archive), events);
}
}
// if there are any application versions with this archive,
// then we cannot delete it's archive.
List<ApplicationVersion> versions = archiveDeleteHandler.getModelManager().getModelService().findVersionsByApplicationArchive(archive);
if (versions.size() != 0) {
return;
}
// OK TO DELETE THIS APPLICATION'S COPY OF THE ARCHIVE,
// but possibly not the archive file...as it may be in use by another app
// use the archive delete handler to cleanup localhost
Map<String, Object> map = new HashMap<String, Object>();
map.put("archive", archive);
try {
int archivesWithHashAndAlg = archiveDeleteHandler.getModelManager().getModelService().countApplicationArchivesByHashAndHashAlg(archive.getHash(), archive.getHashAlgorithm());
if (archivesWithHashAndAlg == 1) {
// use the delete handler to cleanup the admin servers copy
GlobalSettings settings = archiveDeleteHandler.getModelManager().getGlobalSettings();
archiveDeleteHandler.setFileSystemStoragePathPrefix(settings.getTemporaryStoragePath());
archiveDeleteHandler.handle(new MapPayloadEvent(map));
}
archiveDeleteHandler.getModelManager().delete(archive, events);
} catch (EventHandlingException e) {
throw new ClusterNotificationException("An event handling exception occured", e);
}
}
Aggregations