You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@taverna.apache.org by st...@apache.org on 2015/02/17 12:29:47 UTC

[43/50] [abbrv] incubator-taverna-server git commit: Updated the server to use the new interaction service capabilities.

Updated the server to use the new interaction service capabilities.

Project: http://git-wip-us.apache.org/repos/asf/incubator-taverna-server/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-taverna-server/commit/92c8fb05
Tree: http://git-wip-us.apache.org/repos/asf/incubator-taverna-server/tree/92c8fb05
Diff: http://git-wip-us.apache.org/repos/asf/incubator-taverna-server/diff/92c8fb05

Branch: refs/heads/master
Commit: 92c8fb057d11d60decce8917239326ac00561c27
Parents: bc262f6
Author: Donal Fellows <do...@manchester.ac.uk>
Authored: Mon Aug 18 11:28:46 2014 +0100
Committer: Donal Fellows <do...@manchester.ac.uk>
Committed: Mon Aug 18 14:05:29 2014 +0100

----------------------------------------------------------------------
 .../localworker/remote/RemoteSingleRun.java     |  6 ++-
 .../interaction/InteractionFeedSupport.java     | 42 ++++++++++++++++++++
 .../localworker/AbstractRemoteRunFactory.java   | 13 +++++-
 .../main/replacementscripts/executeworkflow.sh  |  3 ++
 .../server/localworker/impl/LocalWorker.java    |  4 +-
 .../server/localworker/impl/WorkerCore.java     | 22 ++++++++++
 6 files changed, 86 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-taverna-server/blob/92c8fb05/server-runinterface/src/main/java/org/taverna/server/localworker/remote/RemoteSingleRun.java
----------------------------------------------------------------------
diff --git a/server-runinterface/src/main/java/org/taverna/server/localworker/remote/RemoteSingleRun.java b/server-runinterface/src/main/java/org/taverna/server/localworker/remote/RemoteSingleRun.java
index 19c2bcd..fa68b81 100644
--- a/server-runinterface/src/main/java/org/taverna/server/localworker/remote/RemoteSingleRun.java
+++ b/server-runinterface/src/main/java/org/taverna/server/localworker/remote/RemoteSingleRun.java
@@ -221,11 +221,15 @@ public interface RemoteSingleRun extends Remote {
 	 *            The location used for pushing web pages to support the feed.
 	 *            If <tt>null</tt>, a default from the factory will be used
 	 *            instead.
+	 * @param publishUrlBase
+	 *            Where to <i>actually</i> publish to, if this needs to be
+	 *            different from the location presented in the published HTML
+	 *            and Feed entries. Necessary in complex network scenarios.
 	 * @throws RemoteException
 	 *             If anything goes wrong with the communication.
 	 */
 	void setInteractionServiceDetails(@Nonnull URL interactionFeed,
-			@Nonnull URL webdavPath) throws RemoteException;
+			@Nonnull URL webdavPath, @Nullable URL publishUrlBase) throws RemoteException;
 
 	/**
 	 * A do-nothing method, used to check the general reachability of the

http://git-wip-us.apache.org/repos/asf/incubator-taverna-server/blob/92c8fb05/server-webapp/src/main/java/org/taverna/server/master/interaction/InteractionFeedSupport.java
----------------------------------------------------------------------
diff --git a/server-webapp/src/main/java/org/taverna/server/master/interaction/InteractionFeedSupport.java b/server-webapp/src/main/java/org/taverna/server/master/interaction/InteractionFeedSupport.java
index 3a9808b..99e1d99 100644
--- a/server-webapp/src/main/java/org/taverna/server/master/interaction/InteractionFeedSupport.java
+++ b/server-webapp/src/main/java/org/taverna/server/master/interaction/InteractionFeedSupport.java
@@ -5,18 +5,31 @@
  */
 package org.taverna.server.master.interaction;
 
+import static java.lang.management.ManagementFactory.getPlatformMBeanServer;
 import static java.util.Collections.reverse;
+import static javax.management.Query.attr;
+import static javax.management.Query.match;
+import static javax.management.Query.value;
+import static org.apache.commons.logging.LogFactory.getLog;
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.net.MalformedURLException;
 import java.net.URI;
+import java.net.URL;
 import java.util.ArrayList;
 import java.util.Date;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.concurrent.atomic.AtomicInteger;
 
+import javax.annotation.Nullable;
+import javax.annotation.PostConstruct;
+import javax.management.MBeanServer;
+import javax.management.ObjectName;
+
 import org.apache.abdera.Abdera;
 import org.apache.abdera.factory.Factory;
 import org.apache.abdera.i18n.iri.IRI;
@@ -97,6 +110,28 @@ public class InteractionFeedSupport {
 		this.uriBuilder = uriBuilder;
 	}
 
+	private final Map<String, URL> endPoints = new HashMap<>();
+
+	@PostConstruct
+	void determinePorts() {
+		try {
+			MBeanServer mbs = getPlatformMBeanServer();
+			for (ObjectName obj : mbs.queryNames(new ObjectName(
+					"*:type=Connector,*"),
+					match(attr("protocol"), value("HTTP/1.1")))) {
+				String scheme = mbs.getAttribute(obj, "scheme").toString();
+				String port = obj.getKeyProperty("port");
+				endPoints.put(scheme, new URL(scheme + "://localhost:" + port));
+			}
+			getLog(getClass()).info(
+					"installed feed port publication mapping for "
+							+ endPoints.keySet());
+		} catch (Exception e) {
+			getLog(getClass()).error(
+					"failure in determining local port mapping", e);
+		}
+	}
+	
 	/**
 	 * @param run
 	 *            The workflow run that defines which feed we are operating on.
@@ -106,6 +141,13 @@ public class InteractionFeedSupport {
 		return uriBuilder.getRunUriBuilder(run).path(FEED_URL_DIR).build();
 	}
 
+	@Nullable
+	public URL getLocalFeedBase(URI feedURI) {
+		if (feedURI == null)
+			return null;
+		return endPoints.get(feedURI.getScheme());
+	}
+
 	/**
 	 * @param run
 	 *            The workflow run that defines which feed we are operating on.

http://git-wip-us.apache.org/repos/asf/incubator-taverna-server/blob/92c8fb05/server-webapp/src/main/java/org/taverna/server/master/localworker/AbstractRemoteRunFactory.java
----------------------------------------------------------------------
diff --git a/server-webapp/src/main/java/org/taverna/server/master/localworker/AbstractRemoteRunFactory.java b/server-webapp/src/main/java/org/taverna/server/master/localworker/AbstractRemoteRunFactory.java
index 4394b4b..248baa6 100644
--- a/server-webapp/src/main/java/org/taverna/server/master/localworker/AbstractRemoteRunFactory.java
+++ b/server-webapp/src/main/java/org/taverna/server/master/localworker/AbstractRemoteRunFactory.java
@@ -17,6 +17,7 @@ import static org.taverna.server.master.rest.TavernaServerRunREST.PathNames.DIR;
 
 import java.io.IOException;
 import java.io.ObjectInputStream;
+import java.net.URI;
 import java.net.URL;
 import java.rmi.MarshalledObject;
 import java.rmi.RMISecurityManager;
@@ -29,6 +30,8 @@ import java.util.Date;
 import java.util.List;
 import java.util.UUID;
 
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
 import javax.annotation.Resource;
 import javax.xml.bind.JAXBException;
 
@@ -335,10 +338,16 @@ public abstract class AbstractRemoteRunFactory extends RunFactoryConfiguration
 					state.getDefaultLifetime(), runDB, id,
 					state.getGenerateProvenance(), this);
 			run.setSecurityContext(securityFactory.create(run, creator));
-			URL feedUrl = interactionFeedSupport.getFeedURI(run).toURL();
+			@Nonnull
+			URI feed = interactionFeedSupport.getFeedURI(run);
+			@Nonnull
+			URL feedUrl = feed.toURL();
+			@Nonnull
 			URL webdavUrl = baseurifactory.getRunUriBuilder(run)
 					.path(DIR + "/interactions").build().toURL();
-			rsr.setInteractionServiceDetails(feedUrl, webdavUrl);
+			@Nullable
+			URL pub = interactionFeedSupport.getLocalFeedBase(feed);
+			rsr.setInteractionServiceDetails(feedUrl, webdavUrl, pub);
 			return run;
 		} catch (NoCreateException e) {
 			log.warn("failed to build run instance", e);

http://git-wip-us.apache.org/repos/asf/incubator-taverna-server/blob/92c8fb05/server-webapp/src/main/replacementscripts/executeworkflow.sh
----------------------------------------------------------------------
diff --git a/server-webapp/src/main/replacementscripts/executeworkflow.sh b/server-webapp/src/main/replacementscripts/executeworkflow.sh
index f78bc46..8885cb1 100644
--- a/server-webapp/src/main/replacementscripts/executeworkflow.sh
+++ b/server-webapp/src/main/replacementscripts/executeworkflow.sh
@@ -54,6 +54,9 @@ if test x != "x$INTERACTION_HOST"; then
     INTERACTION_PROPS="$INTERACTION_PROPS -Dtaverna.interaction.port=$INTERACTION_PORT"
     INTERACTION_PROPS="$INTERACTION_PROPS -Dtaverna.interaction.webdav_path=$INTERACTION_WEBDAV"
     INTERACTION_PROPS="$INTERACTION_PROPS -Dtaverna.interaction.feed_path=$INTERACTION_FEED"
+    if test x != "x$INTERACTION_PUBLISH"; then
+    	INTERACTION_PROPS="$INTERACTION_PROPS -Dtaverna.interaction.publishAddressOverride=$INTERACTION_PUBLISH"
+    fi
 fi
 
 MainClass=net.sf.taverna.t2.commandline.CommandLineLauncher

http://git-wip-us.apache.org/repos/asf/incubator-taverna-server/blob/92c8fb05/server-worker/src/main/java/org/taverna/server/localworker/impl/LocalWorker.java
----------------------------------------------------------------------
diff --git a/server-worker/src/main/java/org/taverna/server/localworker/impl/LocalWorker.java b/server-worker/src/main/java/org/taverna/server/localworker/impl/LocalWorker.java
index bdd9fd1..29755c5 100644
--- a/server-worker/src/main/java/org/taverna/server/localworker/impl/LocalWorker.java
+++ b/server-worker/src/main/java/org/taverna/server/localworker/impl/LocalWorker.java
@@ -166,6 +166,7 @@ public class LocalWorker extends UnicastRemoteObject implements RemoteSingleRun
 	List<String> runtimeSettings = new ArrayList<>();
 	URL interactionFeedURL;
 	URL webdavURL;
+	URL publishURL;//FIXME
 	private boolean doProvenance = true;
 
 	// ----------------------- METHODS -----------------------
@@ -755,9 +756,10 @@ public class LocalWorker extends UnicastRemoteObject implements RemoteSingleRun
 	}
 
 	@Override
-	public void setInteractionServiceDetails(URL feed, URL webdav) {
+	public void setInteractionServiceDetails(URL feed, URL webdav, URL publish) {
 		interactionFeedURL = feed;
 		webdavURL = webdav;
+		publishURL = publish;
 	}
 
 	@Override

http://git-wip-us.apache.org/repos/asf/incubator-taverna-server/blob/92c8fb05/server-worker/src/main/java/org/taverna/server/localworker/impl/WorkerCore.java
----------------------------------------------------------------------
diff --git a/server-worker/src/main/java/org/taverna/server/localworker/impl/WorkerCore.java b/server-worker/src/main/java/org/taverna/server/localworker/impl/WorkerCore.java
index 9c96859..c91fdcc 100644
--- a/server-worker/src/main/java/org/taverna/server/localworker/impl/WorkerCore.java
+++ b/server-worker/src/main/java/org/taverna/server/localworker/impl/WorkerCore.java
@@ -53,6 +53,8 @@ import java.io.PrintWriter;
 import java.io.StringWriter;
 import java.io.UnsupportedEncodingException;
 import java.io.Writer;
+import java.net.URI;
+import java.net.URISyntaxException;
 import java.net.URL;
 import java.rmi.RemoteException;
 import java.rmi.server.UnicastRemoteObject;
@@ -439,6 +441,9 @@ public class WorkerCore extends UnicastRemoteObject implements Worker,
 			env.put("INTERACTION_WEBDAV",
 					local.webdavURL != null ? local.webdavURL.getPath()
 							: interactionWebdavPath);
+			String pub = makeInterPublish(local.publishURL);
+			if (pub != null && !pub.isEmpty())
+				env.put("INTERACTION_PUBLISH", pub);
 		}
 		return pb;
 	}
@@ -461,6 +466,23 @@ public class WorkerCore extends UnicastRemoteObject implements Worker,
 	}
 
 	@Nullable
+	private static String makeInterPublish(@Nullable URL url)
+			throws IOException {
+		if (url == null)
+			return null;
+		try {
+			URI uri = url.toURI();
+			int port = uri.getPort();
+			if (port == -1)
+				return uri.getScheme() + "://" + uri.getHost();
+			else
+				return uri.getScheme() + "://" + uri.getHost() + ":" + port;
+		} catch (URISyntaxException e) {
+			throw new IOException("problem constructing publication url", e);
+		}
+	}
+
+	@Nullable
 	private static String makeInterPath(@Nullable URL url) {
 		if (url == null)
 			return interactionFeedPath;