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;