Loading enterprise-module/pom.xml +1 −1 Original line number Diff line number Diff line Loading @@ -83,7 +83,7 @@ <dependency> <groupId>com.inteligr8.alfresco</groupId> <artifactId>cxf-jaxrs-platform-module</artifactId> <version>1.3.1-acs-v23.3</version> <version>1.3.2-acs-v23.3</version> <type>amp</type> </dependency> Loading enterprise-module/src/main/java/com/inteligr8/alfresco/asie/enterprise/rest/AbstractUnregisterNodeWebScript.java +1 −1 Original line number Diff line number Diff line Loading @@ -91,7 +91,7 @@ public abstract class AbstractUnregisterNodeWebScript<T extends NodeParameterSet if (status == null) { this.logger.warn("Registered host/core status could not be retrieved: {}:{}/solr/{}", nodeHostname, nodePort, core); } else { CoreMetadata coreMetadata = status.getStatus().getCores().get(core); CoreMetadata coreMetadata = status.getCores().getByCore(core); if (coreMetadata == null || coreMetadata.getName() == null) { this.logger.warn("Registered core does not actually exist on the node host; could be a DNS issue: {}:{}/solr/{}", nodeHostname, nodePort, core); } else { Loading shared/pom.xml +7 −2 Original line number Diff line number Diff line Loading @@ -36,15 +36,20 @@ <dependency> <groupId>com.inteligr8.alfresco</groupId> <artifactId>asie-api</artifactId> <version>1.0-SNAPSHOT-asie2</version> <version>1.1-SNAPSHOT-asie2</version> </dependency> <dependency> <groupId>com.inteligr8</groupId> <artifactId>common-rest-client</artifactId> <version>3.0.1-cxf</version> <version>3.0.3-cxf</version> </dependency> <!-- Needed by this module, but provided by ACS --> <dependency> <groupId>org.alfresco</groupId> <artifactId>alfresco-data-model</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>org.alfresco</groupId> <artifactId>alfresco-repository</artifactId> Loading shared/src/main/java/com/inteligr8/alfresco/asie/rest/AbstractAcsNodeActionWebScript.java 0 → 100644 +119 −0 Original line number Diff line number Diff line package com.inteligr8.alfresco.asie.rest; import java.io.IOException; import java.util.Collections; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; import org.alfresco.model.ContentModel; import org.alfresco.service.cmr.repository.InvalidNodeRefException; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeService; import org.alfresco.service.cmr.repository.StoreRef; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.extensions.webscripts.WebScriptException; import org.springframework.extensions.webscripts.WebScriptRequest; import org.springframework.extensions.webscripts.WebScriptResponse; import org.springframework.http.HttpStatus; import com.inteligr8.alfresco.asie.model.ShardInstance; import com.inteligr8.alfresco.asie.spi.ActionCallback; public abstract class AbstractAcsNodeActionWebScript extends AbstractAsieWebScript { private final Logger logger = LoggerFactory.getLogger(this.getClass()); @Autowired private NodeService nodeService; @Override public void executeAuthorized(WebScriptRequest request, WebScriptResponse response) throws IOException { String nodeId = request.getServiceMatch().getTemplateVars().get("nodeId"); NodeRef nodeRef = new NodeRef(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, nodeId); long nodeDbId = this.findNodeDbId(nodeRef); this.logger.trace("Found node database ID: {}: {}", nodeId, nodeDbId); try { Map<String, Object> responseMap = new HashMap<>(); responseMap.put("nodeDbId", nodeDbId); ActionCallback callback = new ActionCallback() { @Override public void success(ShardInstance instance) { @SuppressWarnings("unchecked") List<String> instances = (List<String>) responseMap.get("success"); if (instances == null) responseMap.put("success", instances = new LinkedList<>()); instances.add(instance.getSpec()); } @Override public void scheduled(ShardInstance instance) { @SuppressWarnings("unchecked") List<String> instances = (List<String>) responseMap.get("scheduled"); if (instances == null) responseMap.put("scheduled", instances = new LinkedList<>()); instances.add(instance.getSpec()); } @Override public void error(ShardInstance instance, String message) { @SuppressWarnings("unchecked") Map<String, Object> instances = (Map<String, Object>) responseMap.get("error"); if (instances == null) responseMap.put("error", instances = new HashMap<>()); instances.put(instance.getSpec(), Collections.singletonMap("message", message)); } @Override public void unknownResult(ShardInstance instance) { @SuppressWarnings("unchecked") List<String> instances = (List<String>) responseMap.get("unknown"); if (instances == null) responseMap.put("unknown", instances = new LinkedList<>()); instances.add(instance.getSpec()); } }; this.executeAction(nodeDbId, callback, 10L, TimeUnit.SECONDS, 30L, TimeUnit.SECONDS); if (responseMap.containsKey("error")) { response.setStatus(HttpStatus.INTERNAL_SERVER_ERROR.value()); } else if (responseMap.containsKey("scheduled")) { response.setStatus(HttpStatus.ACCEPTED.value()); } else { response.setStatus(HttpStatus.OK.value()); } response.setContentType("application/json"); this.getObjectMapper().writeValue(response.getWriter(), responseMap); } catch (UnsupportedOperationException uoe) { throw new WebScriptException(HttpStatus.NOT_IMPLEMENTED.value(), uoe.getMessage(), uoe); } catch (InterruptedException ie) { throw new WebScriptException(HttpStatus.SERVICE_UNAVAILABLE.value(), "The execution was interrupted", ie); } catch (TimeoutException te) { throw new WebScriptException(HttpStatus.INTERNAL_SERVER_ERROR.value(), "The execution may continue, but timed-out waiting", te); } } protected abstract void executeAction( long nodeDbId, ActionCallback callback, long fullQueueTimeout, TimeUnit fullQueueUnit, long execTimeout, TimeUnit execUnit) throws TimeoutException, InterruptedException; private long findNodeDbId(NodeRef nodeRef) { try { return (Long) this.nodeService.getProperty(nodeRef, ContentModel.PROP_NODE_DBID); } catch (InvalidNodeRefException inre) { throw new WebScriptException(HttpStatus.NOT_FOUND.value(), "The node does not exist"); } } } shared/src/main/java/com/inteligr8/alfresco/asie/rest/AbstractActionWebScript.java 0 → 100644 +102 −0 Original line number Diff line number Diff line package com.inteligr8.alfresco.asie.rest; import java.io.IOException; import java.util.Collections; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; import org.alfresco.model.ContentModel; import org.alfresco.service.cmr.repository.InvalidNodeRefException; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeService; import org.alfresco.service.cmr.repository.StoreRef; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.extensions.webscripts.WebScriptException; import org.springframework.extensions.webscripts.WebScriptRequest; import org.springframework.extensions.webscripts.WebScriptResponse; import org.springframework.http.HttpStatus; import com.inteligr8.alfresco.asie.model.ShardInstance; import com.inteligr8.alfresco.asie.spi.ActionCallback; public abstract class AbstractActionWebScript extends AbstractAsieWebScript { private final Logger logger = LoggerFactory.getLogger(this.getClass()); @Override public void executeAuthorized(WebScriptRequest request, WebScriptResponse response) throws IOException { try { Map<String, Object> responseMap = new HashMap<>(); ActionCallback callback = new ActionCallback() { @Override public void success(ShardInstance instance) { @SuppressWarnings("unchecked") List<String> instances = (List<String>) responseMap.get("success"); if (instances == null) responseMap.put("success", instances = new LinkedList<>()); instances.add(instance.getSpec()); } @Override public void scheduled(ShardInstance instance) { @SuppressWarnings("unchecked") List<String> instances = (List<String>) responseMap.get("scheduled"); if (instances == null) responseMap.put("scheduled", instances = new LinkedList<>()); instances.add(instance.getSpec()); } @Override public void error(ShardInstance instance, String message) { @SuppressWarnings("unchecked") Map<String, Object> instances = (Map<String, Object>) responseMap.get("error"); if (instances == null) responseMap.put("error", instances = new HashMap<>()); instances.put(instance.getSpec(), Collections.singletonMap("message", message)); } @Override public void unknownResult(ShardInstance instance) { @SuppressWarnings("unchecked") List<String> instances = (List<String>) responseMap.get("unknown"); if (instances == null) responseMap.put("unknown", instances = new LinkedList<>()); instances.add(instance.getSpec()); } }; this.executeAction(callback, 10L, TimeUnit.SECONDS, 30L, TimeUnit.SECONDS); if (responseMap.containsKey("error")) { response.setStatus(HttpStatus.INTERNAL_SERVER_ERROR.value()); } else if (responseMap.containsKey("scheduled")) { response.setStatus(HttpStatus.ACCEPTED.value()); } else { response.setStatus(HttpStatus.OK.value()); } response.setContentType("application/json"); this.getObjectMapper().writeValue(response.getWriter(), responseMap); } catch (UnsupportedOperationException uoe) { throw new WebScriptException(HttpStatus.NOT_IMPLEMENTED.value(), uoe.getMessage(), uoe); } catch (InterruptedException ie) { throw new WebScriptException(HttpStatus.SERVICE_UNAVAILABLE.value(), "The execution was interrupted", ie); } catch (TimeoutException te) { throw new WebScriptException(HttpStatus.INTERNAL_SERVER_ERROR.value(), "The execution may continue, but timed-out waiting", te); } } protected abstract void executeAction( ActionCallback callback, long fullQueueTimeout, TimeUnit fullQueueUnit, long execTimeout, TimeUnit execUnit) throws TimeoutException, InterruptedException; } Loading
enterprise-module/pom.xml +1 −1 Original line number Diff line number Diff line Loading @@ -83,7 +83,7 @@ <dependency> <groupId>com.inteligr8.alfresco</groupId> <artifactId>cxf-jaxrs-platform-module</artifactId> <version>1.3.1-acs-v23.3</version> <version>1.3.2-acs-v23.3</version> <type>amp</type> </dependency> Loading
enterprise-module/src/main/java/com/inteligr8/alfresco/asie/enterprise/rest/AbstractUnregisterNodeWebScript.java +1 −1 Original line number Diff line number Diff line Loading @@ -91,7 +91,7 @@ public abstract class AbstractUnregisterNodeWebScript<T extends NodeParameterSet if (status == null) { this.logger.warn("Registered host/core status could not be retrieved: {}:{}/solr/{}", nodeHostname, nodePort, core); } else { CoreMetadata coreMetadata = status.getStatus().getCores().get(core); CoreMetadata coreMetadata = status.getCores().getByCore(core); if (coreMetadata == null || coreMetadata.getName() == null) { this.logger.warn("Registered core does not actually exist on the node host; could be a DNS issue: {}:{}/solr/{}", nodeHostname, nodePort, core); } else { Loading
shared/pom.xml +7 −2 Original line number Diff line number Diff line Loading @@ -36,15 +36,20 @@ <dependency> <groupId>com.inteligr8.alfresco</groupId> <artifactId>asie-api</artifactId> <version>1.0-SNAPSHOT-asie2</version> <version>1.1-SNAPSHOT-asie2</version> </dependency> <dependency> <groupId>com.inteligr8</groupId> <artifactId>common-rest-client</artifactId> <version>3.0.1-cxf</version> <version>3.0.3-cxf</version> </dependency> <!-- Needed by this module, but provided by ACS --> <dependency> <groupId>org.alfresco</groupId> <artifactId>alfresco-data-model</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>org.alfresco</groupId> <artifactId>alfresco-repository</artifactId> Loading
shared/src/main/java/com/inteligr8/alfresco/asie/rest/AbstractAcsNodeActionWebScript.java 0 → 100644 +119 −0 Original line number Diff line number Diff line package com.inteligr8.alfresco.asie.rest; import java.io.IOException; import java.util.Collections; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; import org.alfresco.model.ContentModel; import org.alfresco.service.cmr.repository.InvalidNodeRefException; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeService; import org.alfresco.service.cmr.repository.StoreRef; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.extensions.webscripts.WebScriptException; import org.springframework.extensions.webscripts.WebScriptRequest; import org.springframework.extensions.webscripts.WebScriptResponse; import org.springframework.http.HttpStatus; import com.inteligr8.alfresco.asie.model.ShardInstance; import com.inteligr8.alfresco.asie.spi.ActionCallback; public abstract class AbstractAcsNodeActionWebScript extends AbstractAsieWebScript { private final Logger logger = LoggerFactory.getLogger(this.getClass()); @Autowired private NodeService nodeService; @Override public void executeAuthorized(WebScriptRequest request, WebScriptResponse response) throws IOException { String nodeId = request.getServiceMatch().getTemplateVars().get("nodeId"); NodeRef nodeRef = new NodeRef(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, nodeId); long nodeDbId = this.findNodeDbId(nodeRef); this.logger.trace("Found node database ID: {}: {}", nodeId, nodeDbId); try { Map<String, Object> responseMap = new HashMap<>(); responseMap.put("nodeDbId", nodeDbId); ActionCallback callback = new ActionCallback() { @Override public void success(ShardInstance instance) { @SuppressWarnings("unchecked") List<String> instances = (List<String>) responseMap.get("success"); if (instances == null) responseMap.put("success", instances = new LinkedList<>()); instances.add(instance.getSpec()); } @Override public void scheduled(ShardInstance instance) { @SuppressWarnings("unchecked") List<String> instances = (List<String>) responseMap.get("scheduled"); if (instances == null) responseMap.put("scheduled", instances = new LinkedList<>()); instances.add(instance.getSpec()); } @Override public void error(ShardInstance instance, String message) { @SuppressWarnings("unchecked") Map<String, Object> instances = (Map<String, Object>) responseMap.get("error"); if (instances == null) responseMap.put("error", instances = new HashMap<>()); instances.put(instance.getSpec(), Collections.singletonMap("message", message)); } @Override public void unknownResult(ShardInstance instance) { @SuppressWarnings("unchecked") List<String> instances = (List<String>) responseMap.get("unknown"); if (instances == null) responseMap.put("unknown", instances = new LinkedList<>()); instances.add(instance.getSpec()); } }; this.executeAction(nodeDbId, callback, 10L, TimeUnit.SECONDS, 30L, TimeUnit.SECONDS); if (responseMap.containsKey("error")) { response.setStatus(HttpStatus.INTERNAL_SERVER_ERROR.value()); } else if (responseMap.containsKey("scheduled")) { response.setStatus(HttpStatus.ACCEPTED.value()); } else { response.setStatus(HttpStatus.OK.value()); } response.setContentType("application/json"); this.getObjectMapper().writeValue(response.getWriter(), responseMap); } catch (UnsupportedOperationException uoe) { throw new WebScriptException(HttpStatus.NOT_IMPLEMENTED.value(), uoe.getMessage(), uoe); } catch (InterruptedException ie) { throw new WebScriptException(HttpStatus.SERVICE_UNAVAILABLE.value(), "The execution was interrupted", ie); } catch (TimeoutException te) { throw new WebScriptException(HttpStatus.INTERNAL_SERVER_ERROR.value(), "The execution may continue, but timed-out waiting", te); } } protected abstract void executeAction( long nodeDbId, ActionCallback callback, long fullQueueTimeout, TimeUnit fullQueueUnit, long execTimeout, TimeUnit execUnit) throws TimeoutException, InterruptedException; private long findNodeDbId(NodeRef nodeRef) { try { return (Long) this.nodeService.getProperty(nodeRef, ContentModel.PROP_NODE_DBID); } catch (InvalidNodeRefException inre) { throw new WebScriptException(HttpStatus.NOT_FOUND.value(), "The node does not exist"); } } }
shared/src/main/java/com/inteligr8/alfresco/asie/rest/AbstractActionWebScript.java 0 → 100644 +102 −0 Original line number Diff line number Diff line package com.inteligr8.alfresco.asie.rest; import java.io.IOException; import java.util.Collections; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; import org.alfresco.model.ContentModel; import org.alfresco.service.cmr.repository.InvalidNodeRefException; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeService; import org.alfresco.service.cmr.repository.StoreRef; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.extensions.webscripts.WebScriptException; import org.springframework.extensions.webscripts.WebScriptRequest; import org.springframework.extensions.webscripts.WebScriptResponse; import org.springframework.http.HttpStatus; import com.inteligr8.alfresco.asie.model.ShardInstance; import com.inteligr8.alfresco.asie.spi.ActionCallback; public abstract class AbstractActionWebScript extends AbstractAsieWebScript { private final Logger logger = LoggerFactory.getLogger(this.getClass()); @Override public void executeAuthorized(WebScriptRequest request, WebScriptResponse response) throws IOException { try { Map<String, Object> responseMap = new HashMap<>(); ActionCallback callback = new ActionCallback() { @Override public void success(ShardInstance instance) { @SuppressWarnings("unchecked") List<String> instances = (List<String>) responseMap.get("success"); if (instances == null) responseMap.put("success", instances = new LinkedList<>()); instances.add(instance.getSpec()); } @Override public void scheduled(ShardInstance instance) { @SuppressWarnings("unchecked") List<String> instances = (List<String>) responseMap.get("scheduled"); if (instances == null) responseMap.put("scheduled", instances = new LinkedList<>()); instances.add(instance.getSpec()); } @Override public void error(ShardInstance instance, String message) { @SuppressWarnings("unchecked") Map<String, Object> instances = (Map<String, Object>) responseMap.get("error"); if (instances == null) responseMap.put("error", instances = new HashMap<>()); instances.put(instance.getSpec(), Collections.singletonMap("message", message)); } @Override public void unknownResult(ShardInstance instance) { @SuppressWarnings("unchecked") List<String> instances = (List<String>) responseMap.get("unknown"); if (instances == null) responseMap.put("unknown", instances = new LinkedList<>()); instances.add(instance.getSpec()); } }; this.executeAction(callback, 10L, TimeUnit.SECONDS, 30L, TimeUnit.SECONDS); if (responseMap.containsKey("error")) { response.setStatus(HttpStatus.INTERNAL_SERVER_ERROR.value()); } else if (responseMap.containsKey("scheduled")) { response.setStatus(HttpStatus.ACCEPTED.value()); } else { response.setStatus(HttpStatus.OK.value()); } response.setContentType("application/json"); this.getObjectMapper().writeValue(response.getWriter(), responseMap); } catch (UnsupportedOperationException uoe) { throw new WebScriptException(HttpStatus.NOT_IMPLEMENTED.value(), uoe.getMessage(), uoe); } catch (InterruptedException ie) { throw new WebScriptException(HttpStatus.SERVICE_UNAVAILABLE.value(), "The execution was interrupted", ie); } catch (TimeoutException te) { throw new WebScriptException(HttpStatus.INTERNAL_SERVER_ERROR.value(), "The execution may continue, but timed-out waiting", te); } } protected abstract void executeAction( ActionCallback callback, long fullQueueTimeout, TimeUnit fullQueueUnit, long execTimeout, TimeUnit execUnit) throws TimeoutException, InterruptedException; }