import java.lang.reflect.Method;
import java.net.MalformedURLException;
import java.net.Proxy;
+import java.net.URI;
+import java.net.URISyntaxException;
import java.net.URL;
import java.net.URLClassLoader;
import java.net.URLConnection;
+import java.net.URLDecoder;
import java.net.URLEncoder;
import java.nio.channels.FileChannel;
import java.nio.channels.FileLock;
}
// see if a percentage of physical memory, or max heap size options exist
- String jvmmempc = config.getString("jvmmempc", null);
- String jvmmemmax = config.getString("jvmmemmax", null);
+ jvmmempc = config.getString("jvmmempc", null);
+ jvmmemmax = config.getString("jvmmemmax", null);
// app_id prefixed setting overrides
if (appPrefix.length() > 0) {
jvmmempc = config.getString(appPrefix + "jvmmempc", jvmmempc);
jvmmemmax = config.getString(appPrefix + "jvmmemmax", jvmmemmax);
}
- long maxMemLong = -1;
- maxMemLong = MemorySetting.getMemorySetting(jvmmemmax, jvmmempc);
- if (maxMemLong > 0)
- {
- String[] maxMemHeapArg = new String[]{"-Xmx"+Long.toString(maxMemLong)};
- // remove other max heap size arg
- ARG: for (int i = 0; i < _jvmargs.size(); i++) {
- if (_jvmargs.get(i) instanceof java.lang.String && _jvmargs.get(i).startsWith("-Xmx")) {
- _jvmargs.remove(i);
- break ARG;
- }
- }
- addAll(maxMemHeapArg, _jvmargs);
- }
// get the set of optimum JVM arguments
_optimumJvmArgs = config.getMultiValue("optimum_jvmarg");
}
}
+ // test for jalview/s URL
+ if (_appargs.size() > 0) {
+ String uri = _appargs.get(0);
+ try {
+ log.info("TRYING TO PARSE URL '"+uri+"'");
+ URI jalviewUri = new URI(uri);
+ if (jalviewUri.getScheme().equals("jalview") || jalviewUri.getScheme().equals("jalviews")) {
+ boolean https = jalviewUri.getScheme().equals("jalviews");
+ String host = jalviewUri.getHost();
+ int port = jalviewUri.getPort();
+ String file = jalviewUri.getPath();
+ String ref = jalviewUri.getFragment();
+ String query = jalviewUri.getQuery();
+
+ _appargs.clear();
+ _appargs.add("-open");
+ if (host != null && host.length() > 0) {
+ URL newUrl = new URL(
+ (https?"https":"http")
+ + "://"
+ + host
+ + (port > -1? String.valueOf(port) : "")
+ + jalviewUri.getRawPath()
+ + (query != null && query.length() > 0 ? "?" + jalviewUri.getRawQuery() : "")
+ );
+ _appargs.add(newUrl.toString());
+ } else {
+ _appargs.add(file);
+ }
+
+ if (ref != null && ref.length() > 0) {
+ String[] refArgs = ref.split("&");
+ for (String refArg : refArgs) {
+ if (refArg.startsWith("jvmmempc=")) {
+ jvmmempc = refArg.substring(9);
+ continue;
+ }
+ if (refArg.startsWith("jvmmemmax=")) {
+ jvmmemmax = refArg.substring(10);
+ continue;
+ }
+ _appargs.add(URLDecoder.decode(refArg, "UTF-8"));
+ }
+ }
+
+ }
+ } catch (URISyntaxException e) {
+ log.error("Malformed jalview URI", uri);
+ }
+ }
+
+ for (String argString: _appargs) {
+ if (argString.startsWith("-jvmmempc=")) {
+ jvmmempc = argString.substring(10);
+ continue;
+ }
+ if (argString.startsWith("-jvmmemmax=")) {
+ jvmmemmax = argString.substring(11);
+ continue;
+ }
+ }
+
+ // add the memory setting from jvmmempc and jvmmemmax
+ long maxMemLong = -1;
+ maxMemLong = MemorySetting.getMemorySetting(jvmmemmax, jvmmempc);
+ if (maxMemLong > 0)
+ {
+ String[] maxMemHeapArg = new String[]{"-Xmx"+Long.toString(maxMemLong)};
+ // remove other max heap size arg
+ ARG: for (int i = 0; i < _jvmargs.size(); i++) {
+ if (_jvmargs.get(i) instanceof java.lang.String && _jvmargs.get(i).startsWith("-Xmx")) {
+ _jvmargs.remove(i);
+ break ARG;
+ }
+ }
+ addAll(maxMemHeapArg, _jvmargs);
+ }
+
// add the JVM arguments
for (String string : _jvmargs) {
args.add(processArg(string));
for (String string : _appargs) {
args.add(processArg(string));
}
-
+
String[] envp = createEnvironment();
String[] sargs = args.toArray(new String[args.size()]);
log.info("Running " + StringUtil.join(sargs, "\n "));
private Config _initialisedConfig = null;
public static String i4jVersion = null;
+ private String jvmmempc = null;
+ private String jvmmemmax = null;
}