You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by la...@apache.org on 2012/02/24 22:51:17 UTC
svn commit: r1293443 - in /incubator/airavata/trunk/modules/commons: ./
registry-service/ registry-service/src/ registry-service/src/main/
registry-service/src/main/java/ registry-service/src/main/java/org/
registry-service/src/main/java/org/apache/ re...
Author: lahiru
Date: Fri Feb 24 21:51:16 2012
New Revision: 1293443
URL: http://svn.apache.org/viewvc?rev=1293443&view=rev
Log:
adding new service to system, by exposing registry api methods as a service.
Added:
incubator/airavata/trunk/modules/commons/registry-service/
incubator/airavata/trunk/modules/commons/registry-service/pom.xml
incubator/airavata/trunk/modules/commons/registry-service/src/
incubator/airavata/trunk/modules/commons/registry-service/src/main/
incubator/airavata/trunk/modules/commons/registry-service/src/main/java/
incubator/airavata/trunk/modules/commons/registry-service/src/main/java/org/
incubator/airavata/trunk/modules/commons/registry-service/src/main/java/org/apache/
incubator/airavata/trunk/modules/commons/registry-service/src/main/java/org/apache/airavata/
incubator/airavata/trunk/modules/commons/registry-service/src/main/java/org/apache/airavata/registry/
incubator/airavata/trunk/modules/commons/registry-service/src/main/java/org/apache/airavata/registry/service/
incubator/airavata/trunk/modules/commons/registry-service/src/main/java/org/apache/airavata/registry/service/RegistryService.java
incubator/airavata/trunk/modules/commons/registry-service/src/main/resources/
incubator/airavata/trunk/modules/commons/registry-service/src/main/resources/services.xml
incubator/airavata/trunk/modules/commons/registry-service/src/test/
incubator/airavata/trunk/modules/commons/registry-service/src/test/java/
incubator/airavata/trunk/modules/commons/registry-service/src/test/java/org/
incubator/airavata/trunk/modules/commons/registry-service/src/test/java/org/apache/
incubator/airavata/trunk/modules/commons/registry-service/src/test/java/org/apache/airavata/
incubator/airavata/trunk/modules/commons/registry-service/src/test/java/org/apache/airavata/regsitry/
incubator/airavata/trunk/modules/commons/registry-service/src/test/java/org/apache/airavata/regsitry/service/
incubator/airavata/trunk/modules/commons/registry-service/src/test/resources/
Modified:
incubator/airavata/trunk/modules/commons/pom.xml
Modified: incubator/airavata/trunk/modules/commons/pom.xml
URL: http://svn.apache.org/viewvc/incubator/airavata/trunk/modules/commons/pom.xml?rev=1293443&r1=1293442&r2=1293443&view=diff
==============================================================================
--- incubator/airavata/trunk/modules/commons/pom.xml (original)
+++ incubator/airavata/trunk/modules/commons/pom.xml Fri Feb 24 21:51:16 2012
@@ -33,6 +33,7 @@
<module>gfac-schema</module>
<module>utils</module>
<module>common-registry-api</module>
+ <module>registry-service</module>
<module>registry-api</module>
<module>workflow-execution-context</module>
</modules>
Added: incubator/airavata/trunk/modules/commons/registry-service/pom.xml
URL: http://svn.apache.org/viewvc/incubator/airavata/trunk/modules/commons/registry-service/pom.xml?rev=1293443&view=auto
==============================================================================
--- incubator/airavata/trunk/modules/commons/registry-service/pom.xml (added)
+++ incubator/airavata/trunk/modules/commons/registry-service/pom.xml Fri Feb 24 21:51:16 2012
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--Licensed to the Apache Software Foundation (ASF) under one or more contributor
+ license agreements. See the NOTICE file distributed with this work for additional
+ information regarding copyright ownership. The ASF licenses this file to
+ you under the Apache License, Version 2.0 (theà "License"); you may not use
+ this file except in compliance with the License. You may obtain a copy of
+ the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required
+ by applicable law or agreed to in writing, software distributed under the
+ License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+ OF ANY ~ KIND, either express or implied. See the License for the specific
+ language governing permissions and limitations under the License. -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+ <parent>
+ <groupId>org.apache.airavata</groupId>
+ <artifactId>commons</artifactId>
+ <version>0.3-incubating-SNAPSHOT</version>
+ <relativePath>../pom.xml</relativePath>
+ </parent>
+
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.airavata</groupId>
+ <artifactId>registry-service</artifactId>
+ <packaging>jar</packaging>
+ <name>Airavata Registry Web Service</name>
+ <url>http://incubator.apache.org/airavata/</url>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.airavata</groupId>
+ <artifactId>registry-api</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.airavata</groupId>
+ <artifactId>common-registry-api</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.axis2</groupId>
+ <artifactId>axis2-kernel</artifactId>
+ <version>${axis2.version}</version>
+ <scope>compile</scope>
+ </dependency>
+ <!-- Logging -->
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-api</artifactId>
+ </dependency>
+
+ <!-- Testing -->
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-simple</artifactId>
+ <scope>test</scope>
+ </dependency>
+
+ </dependencies>
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <version>1.3</version>
+ <executions>
+ <execution>
+ <id>restore-persistence</id>
+ <phase>prepare-package</phase>
+ <configuration>
+ <tasks>
+ <copy file="${project.build.outputDirectory}/services.xml" tofile="${project.build.outputDirectory}/META-INF/services.xml"/>
+ </tasks>
+ </configuration>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
Added: incubator/airavata/trunk/modules/commons/registry-service/src/main/java/org/apache/airavata/registry/service/RegistryService.java
URL: http://svn.apache.org/viewvc/incubator/airavata/trunk/modules/commons/registry-service/src/main/java/org/apache/airavata/registry/service/RegistryService.java?rev=1293443&view=auto
==============================================================================
--- incubator/airavata/trunk/modules/commons/registry-service/src/main/java/org/apache/airavata/registry/service/RegistryService.java (added)
+++ incubator/airavata/trunk/modules/commons/registry-service/src/main/java/org/apache/airavata/registry/service/RegistryService.java Fri Feb 24 21:51:16 2012
@@ -0,0 +1,338 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+*/
+package org.apache.airavata.registry.service;
+
+import org.apache.airavata.common.registry.api.exception.RegistryException;
+import org.apache.airavata.common.registry.api.impl.JCRRegistry;
+import org.apache.airavata.common.utils.XMLUtil;
+import org.apache.airavata.commons.gfac.type.ApplicationDeploymentDescription;
+import org.apache.airavata.commons.gfac.type.HostDescription;
+import org.apache.airavata.commons.gfac.type.ServiceDescription;
+import org.apache.airavata.registry.api.AiravataRegistry;
+import org.apache.airavata.registry.api.WorkflowExecution;
+import org.apache.airavata.registry.api.WorkflowExecutionStatus;
+import org.apache.airavata.registry.api.impl.AiravataJCRRegistry;
+import org.apache.airavata.registry.api.workflow.WorkflowIOData;
+import org.apache.airavata.registry.api.workflow.WorkflowServiceIOData;
+import org.apache.axis2.context.ConfigurationContext;
+import org.apache.axis2.description.AxisService;
+import org.apache.axis2.engine.ServiceLifeCycle;
+import org.apache.xmlbeans.XmlException;
+import org.xmlpull.infoset.XmlElement;
+
+import javax.jcr.Node;
+import javax.jcr.RepositoryException;
+import javax.xml.namespace.QName;
+import java.io.IOException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.util.*;
+
+public class RegistryService implements ServiceLifeCycle{
+ public static final String JCR_PASSWORD = "jcr.password";
+ public static final String JCR_USERNAME = "jcr.username";
+ public static final String JRC_URL = "jcr.url";
+ public static final String JCR_CLASS = "jcr.class";
+ public static final String HOST_SPLITTER = "*%host^!";
+ public static final String APP_SPLITTER = "*%app^!";
+ AiravataRegistry registry;
+ @Override
+ public void startUp(ConfigurationContext configurationContext, AxisService axisService) {
+ //To change body of implemented methods use File | Settings | File Templates.
+ URL url = this.getClass().getClassLoader().getResource("jcr.properties");
+ Properties properties = new Properties();
+ try {
+ properties.load(url.openStream());
+ configurationContext.setProperty(JCR_PASSWORD, properties.get(JCR_PASSWORD));
+ configurationContext.setProperty(JCR_USERNAME, properties.get(JCR_USERNAME));
+ String jcrUserName = (String)properties.get(JCR_PASSWORD);
+ String jcrPassword = (String) properties.get(JCR_USERNAME);
+ String jcrURL = (String) properties.get(JRC_URL);
+ String className = (String)properties.get(JCR_CLASS);
+ registry = new AiravataJCRRegistry(new URI(jcrURL),className,jcrUserName,jcrPassword,new HashMap<String,String>());
+ } catch (IOException e) {
+ e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
+ } catch (RepositoryException e) {
+ e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
+ } catch (URISyntaxException e) {
+ e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
+ }
+ }
+
+ @Override
+ public void shutDown(ConfigurationContext configurationContext, AxisService axisService) {
+ //To change body of implemented methods use File | Settings | File Templates.
+ ((JCRRegistry)registry).closeConnection();
+ }
+
+ public boolean saveWorkflowExecutionServiceInput(WorkflowServiceIOData data)throws RegistryException{
+ return registry.saveWorkflowExecutionServiceInput(data);
+ }
+
+ public boolean saveWorkflowExecutionServiceOutput(WorkflowServiceIOData workflowOutputData) throws RegistryException{
+ return registry.saveWorkflowExecutionServiceOutput(workflowOutputData);
+ }
+
+ public List<WorkflowServiceIOData> searchWorkflowExecutionServiceInput(String experimentIdRegEx, String workflowNameRegEx,
+ String nodeNameRegEx) throws RegistryException{
+ return registry.searchWorkflowExecutionServiceInput(experimentIdRegEx,workflowNameRegEx,nodeNameRegEx);
+ }
+
+ public List<WorkflowServiceIOData> searchWorkflowExecutionServiceOutput(String experimentIdRegEx, String workflowNameRegEx, String nodeNameRegEx)throws RegistryException{
+ return registry.searchWorkflowExecutionServiceOutput(experimentIdRegEx,workflowNameRegEx,nodeNameRegEx);
+ }
+
+ public boolean saveWorkflowExecutionStatus(String experimentId,WorkflowExecutionStatus status)throws RegistryException{
+ return registry.saveWorkflowExecutionStatus(experimentId,status);
+ }
+
+ public WorkflowExecutionStatus getWorkflowExecutionStatus(String experimentId)throws RegistryException{
+ return registry.getWorkflowExecutionStatus(experimentId);
+ }
+
+ public boolean saveWorkflowExecutionOutput(String experimentId,String outputNodeName,String output) throws RegistryException{
+ return registry.saveWorkflowExecutionOutput(experimentId,outputNodeName,output);
+ }
+
+
+ public boolean saveWorkflowExecutionOutput(String experimentId, WorkflowIOData data) throws RegistryException{
+ return registry.saveWorkflowExecutionOutput(experimentId,data);
+ }
+
+
+ public WorkflowIOData getWorkflowExecutionOutput(String experimentId,String outputNodeName) throws RegistryException{
+ return registry.getWorkflowExecutionOutput(experimentId,outputNodeName);
+ }
+
+
+ public List<WorkflowIOData> getWorkflowExecutionOutput(String experimentId) throws RegistryException{
+ return registry.getWorkflowExecutionOutput(experimentId);
+ }
+
+
+ public String[] getWorkflowExecutionOutputNames(String exeperimentId) throws RegistryException{
+ return registry.getWorkflowExecutionOutputNames(exeperimentId);
+ }
+
+
+ public boolean saveWorkflowExecutionUser(String experimentId, String user) throws RegistryException{
+ return registry.saveWorkflowExecutionUser(experimentId,user);
+ }
+
+
+ public String getWorkflowExecutionUser(String experimentId) throws RegistryException{
+ return registry.getWorkflowExecutionUser(experimentId);
+ }
+
+
+ public WorkflowExecution getWorkflowExecution(String experimentId) throws RegistryException{
+ return registry.getWorkflowExecution(experimentId);
+ }
+
+
+ public List<String> getWorkflowExecutionIdByUser(String user) throws RegistryException{
+ return registry.getWorkflowExecutionIdByUser(user);
+ }
+
+
+ public List<WorkflowExecution> getWorkflowExecutionByUser(String user) throws RegistryException{
+ return registry.getWorkflowExecutionByUser(user);
+ }
+
+
+ public List<WorkflowExecution> getWorkflowExecutionByUserLimited(String user, int pageSize, int pageNo) throws RegistryException{
+ return registry.getWorkflowExecutionByUser(user,pageSize,pageNo);
+ }
+
+
+ public String getWorkflowExecutionMetadata(String experimentId) throws RegistryException{
+ return registry.getWorkflowExecutionMetadata(experimentId);
+ }
+
+ /* Document related methods */
+
+ public boolean saveWorkflowExecutionMetadata(String experimentId, String metadata) throws RegistryException{
+ return registry.saveWorkflowExecutionMetadata(experimentId,metadata);
+ }
+
+ public String getServiceDescription(String serviceId) throws RegistryException{
+ ServiceDescription serviceDescription = registry.getServiceDescription(serviceId);
+ return serviceDescription.toXML();
+ }
+
+ public String getDeploymentDescription(String serviceId, String hostId)
+ throws RegistryException{
+ ApplicationDeploymentDescription deploymentDescription = registry.getDeploymentDescription(serviceId, hostId);
+ return deploymentDescription.toXML();
+ }
+
+ public String getHostDescription(String hostId) throws RegistryException{
+ HostDescription hostDescription = registry.getHostDescription(hostId);
+ return hostDescription.toXML();
+ }
+
+ public String saveHostDescription(HostDescription host)throws RegistryException{
+ return registry.saveHostDescription(host);
+ }
+
+ public String saveServiceDescription(ServiceDescription service)throws RegistryException{
+ return registry.saveServiceDescription(service);
+ }
+
+ public String saveDeploymentDescription(String serviceId, String hostId, String app)throws RegistryException{
+ try {
+ return registry.saveDeploymentDescription(serviceId, hostId, ApplicationDeploymentDescription.fromXML(app));
+ } catch (XmlException e) {
+ throw new RegistryException("Error saving ApplicationDescription Creation/Saving" , e); //To change body of catch statement use File | Settings | File Templates.
+ }
+ }
+ public boolean deployServiceOnHost(String serviceName, String hostName)throws RegistryException{
+ return registry.deployServiceOnHost(serviceName,hostName);
+ }
+
+ public List<String> searchHostDescription(String name) throws RegistryException{
+ List<HostDescription> hostDescriptions = registry.searchHostDescription(name);
+ List<String> hostStringList = new ArrayList<String>();
+ for(HostDescription hostDescription:hostDescriptions){
+ hostStringList.add(hostDescription.toXML());
+ }
+ return hostStringList;
+ }
+
+
+ public List<String> searchDeploymentDescriptionWithSerivceHost(String serviceName, String hostName)
+ throws RegistryException{
+ List<ApplicationDeploymentDescription> applicationDeploymentDescriptions = registry.searchDeploymentDescription(serviceName, hostName);
+ List<String> hostStringList = new ArrayList<String>();
+ for(ApplicationDeploymentDescription hostDescription:applicationDeploymentDescriptions){
+ hostStringList.add(hostDescription.toXML());
+ }
+ return hostStringList;
+ }
+
+ public List<String> searchDeploymentDescriptionWithService(String serviceName)
+ throws RegistryException{
+ List<String> list = new ArrayList<String>();
+ Map<HostDescription, List<ApplicationDeploymentDescription>> hostDescriptionListMap = registry.searchDeploymentDescription(serviceName);
+ for(HostDescription host:hostDescriptionListMap.keySet()){
+ StringBuffer eachLine = new StringBuffer(host.toXML() + HOST_SPLITTER);
+ List<ApplicationDeploymentDescription> applicationDeploymentDescriptions = hostDescriptionListMap.get(host);
+ for(ApplicationDeploymentDescription description:applicationDeploymentDescriptions){
+ eachLine.append(description.toXML());
+ eachLine.append(APP_SPLITTER);
+ }
+ list.add(eachLine.toString());
+ }
+ return list;
+ }
+
+ public List<String> searchDeploymentDescriptionWithServiceHostApp(String serviceName, String hostName,
+ String applicationName) throws RegistryException{
+ List<ApplicationDeploymentDescription> applicationDeploymentDescriptions = registry.searchDeploymentDescription(serviceName, hostName, applicationName);
+ List<String> hostStringList = new ArrayList<String>();
+ for(ApplicationDeploymentDescription hostDescription:applicationDeploymentDescriptions){
+ hostStringList.add(hostDescription.toXML());
+ }
+ return hostStringList;
+ }
+
+ public List<String> searchDeploymentDescription() throws RegistryException{
+ List<String> list = new ArrayList<String>();
+ Map<ApplicationDeploymentDescription,String> hostDescriptionListMap = registry.searchDeploymentDescription();
+ for(ApplicationDeploymentDescription host:hostDescriptionListMap.keySet()){
+ StringBuffer eachLine = new StringBuffer(host.toXML() + APP_SPLITTER);
+ eachLine.append(hostDescriptionListMap.get(host));
+ list.add(eachLine.toString());
+ }
+ return list;
+ }
+
+ public boolean saveGFacDescriptor(String gfacURL)throws RegistryException{
+ return registry.saveGFacDescriptor(gfacURL);
+ }
+
+ public boolean deleteGFacDescriptor(String gfacURL) throws RegistryException{
+ return registry.deleteGFacDescriptor(gfacURL);
+ }
+
+ public List<String> getGFacDescriptorList() throws RegistryException{
+ return registry.getGFacDescriptorList();
+ }
+
+ public boolean saveWorkflow(QName ResourceID, String workflowName, String resourceDesc, String workflowAsaString,
+ String owner, boolean isMakePublic) throws RegistryException{
+ return registry.saveWorkflow(ResourceID, workflowName,resourceDesc, workflowAsaString,
+ owner, isMakePublic);
+ }
+
+ public boolean deleteWorkflow(QName resourceID, String userName) throws RegistryException{
+ return registry.deleteWorkflow(resourceID,userName);
+ }
+
+ public void deleteServiceDescription(String serviceId) throws RegistryException{
+ registry.deleteServiceDescription(serviceId);
+ }
+
+ public void deleteDeploymentDescription(String serviceName, String hostName, String applicationName)
+ throws RegistryException{
+ registry.deleteDeploymentDescription(serviceName,hostName,applicationName);
+ }
+
+ public void deleteHostDescription(String hostId) throws RegistryException{
+ registry.deleteHostDescription(hostId);
+ }
+
+ public List<String> getWorkflows(String userName) throws RegistryException{
+ Map<QName, Node> workflows = registry.getWorkflows(userName);
+ List<String> list = new ArrayList<String>();
+ XmlElement xwf = null;
+ for(QName name:workflows.keySet()){
+ StringBuffer eachLine = new StringBuffer("");
+ eachLine.append(name.getPrefix());
+ eachLine.append(",");
+ eachLine.append(name.getLocalPart());
+ eachLine.append(",");
+ eachLine.append(name.getNamespaceURI());
+ Node workflow = workflows.get(name);
+ try {
+ xwf = XMLUtil.stringToXmlElement(workflow.getProperty("workflow").getString());
+ } catch (RepositoryException e) {
+ throw new RegistryException("Error while parsing workflow Content",e); //To change body of catch statement use File | Settings | File Templates.
+ }
+ eachLine.append(XMLUtil.xmlElementToString(xwf));
+ list.add(eachLine.toString());
+ }
+ return list;
+ }
+
+ public String getWorkflow(QName templateID, String userName) throws RegistryException{
+ Node workflow = registry.getWorkflow(templateID, userName);
+ XmlElement xwf = null;
+ try {
+ xwf = XMLUtil.stringToXmlElement(workflow.getProperty("workflow").getString());
+ } catch (RepositoryException e) {
+ throw new RegistryException("Error while parsing workflow Content",e); //To change body of catch statement use File | Settings | File Templates.
+ }
+ return XMLUtil.xmlElementToString(xwf);
+ }
+
+}
\ No newline at end of file
Added: incubator/airavata/trunk/modules/commons/registry-service/src/main/resources/services.xml
URL: http://svn.apache.org/viewvc/incubator/airavata/trunk/modules/commons/registry-service/src/main/resources/services.xml?rev=1293443&view=auto
==============================================================================
--- incubator/airavata/trunk/modules/commons/registry-service/src/main/resources/services.xml (added)
+++ incubator/airavata/trunk/modules/commons/registry-service/src/main/resources/services.xml Fri Feb 24 21:51:16 2012
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--Licensed to the Apache Software Foundation (ASF) under one or more contributor
+ license agreements. See the NOTICE file distributed with this work for additional
+ information regarding copyright ownership. The ASF licenses this file to
+ you under the Apache License, Version 2.0 (theà "License"); you may not use
+ this file except in compliance with the License. You may obtain a copy of
+ the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required
+ by applicable law or agreed to in writing, software distributed under the
+ License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+ OF ANY ~ KIND, either express or implied. See the License for the specific
+ language governing permissions and limitations under the License. -->
+
+
+<!-- This file was auto-generated from WSDL -->
+<!-- by the Apache Axis2 version: 1.4 Built on : Apr 26, 2008 (06:24:30 EDT) -->
+<serviceGroup>
+ <service name="RegistryService" class="org.apache.airavata.registry.service.RegistryService">
+ <operation name="saveWorkflowExecutionServiceInput"></operation>
+ <operation name="saveWorkflowExecutionServiceOutput"></operation>
+ <operation name="searchWorkflowExecutionServiceInput"></operation>
+ <operation name="searchWorkflowExecutionServiceOutput"></operation>
+ <operation name="saveWorkflowExecutionStatus"></operation>
+ <operation name="getWorkflowExecutionStatus"></operation>
+ <operation name="saveWorkflowExecutionOutput"></operation>
+ <operation name="getWorkflowExecutionOutput"></operation>
+ <operation name="getWorkflowExecutionOutputNames"></operation>
+ <operation name="saveWorkflowExecutionUser"></operation>
+ <operation name="getWorkflowExecutionUser"></operation>
+ <operation name="getWorkflowExecution"></operation>
+ <operation name="getWorkflowExecutionIdByUser"></operation>
+ <operation name="getWorkflowExecutionByUser"></operation>
+ <operation name="getWorkflowExecutionByUserLimited"></operation>
+ <operation name="getWorkflowExecutionMetadata"></operation>
+ <operation name="saveWorkflowExecutionMetadata"></operation>
+ <operation name="saveWorkflowExecutionMetadata"></operation>
+ <operation name="getServiceDescription"></operation>
+ <operation name="getDeploymentDescription"></operation>
+ <operation name="getHostDescription"></operation>
+ <operation name="saveHostDescription"></operation>
+ <operation name="saveServiceDescription"></operation>
+ <operation name="saveDeploymentDescription"></operation>
+ <operation name="deployServiceOnHost"></operation>
+ <operation name="searchHostDescription"></operation>
+ <operation name="searchDeploymentDescriptionWithSerivceHost"></operation>
+ <operation name="searchDeploymentDescriptionWithService"></operation>
+ <operation name="searchDeploymentDescriptionWithServiceHostApp"></operation>
+ <operation name="searchDeploymentDescription"></operation>
+ <operation name="saveGFacDescriptor"></operation>
+ <operation name="deleteGFacDescriptor"></operation>
+ <operation name="getGFacDescriptorList"></operation>
+ <operation name="saveWorkflow"></operation>
+ <operation name="deleteWorkflow"></operation>
+ <operation name="deleteServiceDescription"></operation>
+ <operation name="deleteDeploymentDescription"></operation>
+ <operation name="deleteHostDescription"></operation>
+ <operation name="getWorkflows"></operation>
+ <operation name="getWorkflow"></operation>
+ </service>
+</serviceGroup>