FULL PRODUCT VERSION :
java version "1.6.0_13"
Java(TM) SE Runtime Environment (build 1.6.0_13-b03)
Java HotSpot(TM) Client VM (build 11.3-b02, mixed mode)
ADDITIONAL OS VERSION INFORMATION :
Microsoft Windows XP [Version 5.1.2600]
A DESCRIPTION OF THE PROBLEM :
The ProcessBuilder cannot run java.exe with -D arguments. Runtime.exec() works with the exact same command. The same command works from the DOS command line.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
See the code below.
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
Tomcat would stop (or start)
ACTUAL -
Get Exceptions about not being able to find a file or a class.
ERROR MESSAGES/STACK TRACES THAT OCCUR :
java.io.IOException: Cannot run program "C:\bin\Java\jdk1.6.0_13\jre\bin\java.exe -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.util.logging.config.file="C:\dean\bin\apache-tomcat-5.5.27\conf\logging.properties" -Djava.endorsed.dirs="C:\dean\bin\apache-tomcat-5.5.27\common\endorsed" -Dcatalina.base="C:\dean\bin\apache-tomcat-5.5.27" -Dcatalina.home="C:\dean\bin\apache-tomcat-5.5.27" -Djava.io.tmpdir="C:\dean\bin\apache-tomcat-5.5.27\temp" -classpath "C:\bin\Java\jdk1.6.0_13\jre\lib\tools.jar;C:\dean\bin\apache-tomcat-5.5.27\bin\bootstrap.jar" org.apache.catalina.startup.Bootstrap": CreateProcess error=2, The system cannot find the file specified
at java.lang.ProcessBuilder.start(ProcessBuilder.java:459)
at TomcatUtil.stopTomcatProcessBuilder(TomcatUtil.java:147)
at TomcatUtil.main(TomcatUtil.java:199)
Caused by: java.io.IOException: CreateProcess error=2, The system cannot find the file specified
at java.lang.ProcessImpl.create(Native Method)
at java.lang.ProcessImpl.<init>(ProcessImpl.java:81)
at java.lang.ProcessImpl.start(ProcessImpl.java:30)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:452)
... 2 more
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
public class TomcatUtil {
public static String CATALINA_HOME = "CATALINA_HOME";
public static String JAVA_HOME = "JAVA_HOME";
String pathSeparator = System.getProperty("path.separator");
String fileSeparator = System.getProperty("file.separator");
String javaHome = System.getProperty("java.home");
String catalinaHome = System.getenv(CATALINA_HOME);
private String getJavaExe() {
// String javaExe = javaHome + fileSeparator + "bin" + fileSeparator + "java.exe";
// return javaExe;
return javaHome + fileSeparator + "bin" + fileSeparator + "java.exe";
}
private String getTomcatEnvVarsAndClasspath() {
StringBuilder sb = new StringBuilder();
sb.append(" -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager");
sb.append(" -Djava.util.logging.config.file=\"" + catalinaHome + fileSeparator + "conf" + fileSeparator + "logging.properties\"");
sb.append(" -Djava.endorsed.dirs=\"" + catalinaHome + fileSeparator + "common" + fileSeparator + "endorsed\"");
sb.append(" -Dcatalina.base=\"" + catalinaHome + "\"");
sb.append(" -Dcatalina.home=\"" + catalinaHome + "\"");
sb.append(" -Djava.io.tmpdir=\"" + catalinaHome + fileSeparator + "temp\"");
sb.append(" -classpath \"" + javaHome + fileSeparator + "lib" + fileSeparator + "tools.jar" + pathSeparator + catalinaHome + fileSeparator + "bin" + fileSeparator + "bootstrap.jar\"");
return sb.toString();
}
private List<String> getTomcatEnvVarsAndClasspathAsList() {
ArrayList<String> al = new ArrayList<String>();
al.add(getJavaExe());
al.add(" -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager");
al.add(" -Djava.util.logging.config.file=\"" + catalinaHome + fileSeparator + "conf" + fileSeparator + "logging.properties\"");
al.add(" -Djava.endorsed.dirs=\"" + catalinaHome + fileSeparator + "common" + fileSeparator + "endorsed\"");
al.add(" -Dcatalina.base=\"" + catalinaHome + "\"");
al.add(" -Dcatalina.home=\"" + catalinaHome + "\"");
al.add(" -Djava.io.tmpdir=\"" + catalinaHome + fileSeparator + "temp\"");
al.add(" -classpath \"" + javaHome + fileSeparator + "lib" + fileSeparator + "tools.jar" + pathSeparator + catalinaHome + fileSeparator + "bin" + fileSeparator + "bootstrap.jar\"");
return al;
}
private List<String> getTomcatEnvVarsAndClasspathAsList2() {
ArrayList<String> al = new ArrayList<String>();
al.add(getJavaExe());
al.add(
" -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager" +
" -Djava.util.logging.config.file=\"" + catalinaHome + fileSeparator + "conf" + fileSeparator + "logging.properties\"" +
" -Djava.endorsed.dirs=\"" + catalinaHome + fileSeparator + "common" + fileSeparator + "endorsed\"" +
" -Dcatalina.base=\"" + catalinaHome + "\"" +
" -Dcatalina.home=\"" + catalinaHome + "\"" +
" -Djava.io.tmpdir=\"" + catalinaHome + fileSeparator + "temp\"" +
" -classpath \"" + javaHome + fileSeparator + "lib" + fileSeparator + "tools.jar" + pathSeparator + catalinaHome + fileSeparator + "bin" + fileSeparator + "bootstrap.jar\"" +
" org.apache.catalina.startup.Bootstrap stop");
return al;
}
private List<String> getTomcatEnvVarsAndClasspathAsList3() {
ArrayList<String> al = new ArrayList<String>();
al.add(getJavaExe() +
" -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager" +
" -Djava.util.logging.config.file=\"" + catalinaHome + fileSeparator + "conf" + fileSeparator + "logging.properties\"" +
" -Djava.endorsed.dirs=\"" + catalinaHome + fileSeparator + "common" + fileSeparator + "endorsed\"" +
" -Dcatalina.base=\"" + catalinaHome + "\"" +
" -Dcatalina.home=\"" + catalinaHome + "\"" +
" -Djava.io.tmpdir=\"" + catalinaHome + fileSeparator + "temp\"");
al.add(
" -classpath \"" + javaHome + fileSeparator + "lib" + fileSeparator + "tools.jar" + pathSeparator + catalinaHome + fileSeparator + "bin" + fileSeparator + "bootstrap.jar\"" +
" org.apache.catalina.startup.Bootstrap stop");
return al;
}
private List<String> getTomcatEnvVarsAndClasspathAsList4() {
ArrayList<String> al = new ArrayList<String>();
al.add(getJavaExe() +
" -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager" +
" -Djava.util.logging.config.file=\"" + catalinaHome + fileSeparator + "conf" + fileSeparator + "logging.properties\"" +
" -Djava.endorsed.dirs=\"" + catalinaHome + fileSeparator + "common" + fileSeparator + "endorsed\"" +
" -Dcatalina.base=\"" + catalinaHome + "\"" +
" -Dcatalina.home=\"" + catalinaHome + "\"" +
" -Djava.io.tmpdir=\"" + catalinaHome + fileSeparator + "temp\"" +
" -classpath \"" + javaHome + fileSeparator + "lib" + fileSeparator + "tools.jar" + pathSeparator + catalinaHome + fileSeparator + "bin" + fileSeparator + "bootstrap.jar\"");
al.add(" org.apache.catalina.startup.Bootstrap stop");
return al;
}
private List<String> getTomcatEnvVarsAndClasspathAsList5() {
ArrayList<String> al = new ArrayList<String>();
al.add(getJavaExe() +
" -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager" +
" -Djava.util.logging.config.file=\"" + catalinaHome + fileSeparator + "conf" + fileSeparator + "logging.properties\"" +
" -Djava.endorsed.dirs=\"" + catalinaHome + fileSeparator + "common" + fileSeparator + "endorsed\"" +
" -Dcatalina.base=\"" + catalinaHome + "\"" +
" -Dcatalina.home=\"" + catalinaHome + "\"" +
" -Djava.io.tmpdir=\"" + catalinaHome + fileSeparator + "temp\"" +
" -classpath \"" + javaHome + fileSeparator + "lib" + fileSeparator + "tools.jar" + pathSeparator + catalinaHome + fileSeparator + "bin" + fileSeparator + "bootstrap.jar\"" +
" org.apache.catalina.startup.Bootstrap");
al.add(" stop");
return al;
}
private void stopTomcat() {
System.out.println("Stopping Tomcat");
String javaExe = getJavaExe();
String tomcatString = getTomcatEnvVarsAndClasspath();
tomcatString += " org.apache.catalina.startup.Bootstrap stop";
System.out.println(javaExe + tomcatString);
try {
Runtime.getRuntime().exec(javaExe + tomcatString);
System.out.println("Tomcat stopped with Runtime.exec().");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private void stopTomcatProcessBuilder() {
System.out.println("Stopping Tomcat");
// List<String> al = getTomcatEnvVarsAndClasspathAsList();
// al.add("org.apache.catalina.startup.Bootstrap stop");
// List<String> al = getTomcatEnvVarsAndClasspathAsList2();
// List<String> al = getTomcatEnvVarsAndClasspathAsList3();
// List<String> al = getTomcatEnvVarsAndClasspathAsList4();
List<String> al = getTomcatEnvVarsAndClasspathAsList5();
System.out.println(al);
ProcessBuilder pb = new ProcessBuilder(al);
System.out.println(pb.environment());
pb.redirectErrorStream(true);
Process p;
try {
p = pb.start();
System.out.println("Process started.");
BufferedReader br = new BufferedReader ( new InputStreamReader (p.getInputStream()) ) ;
String line;
while ((line = br.readLine())!= null )
System.out.println ( line ) ;
System.out.println("Tomcat stopped with ProcessBuilder.");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private void startTomcat(boolean debug) {
System.out.println("Starting Tomcat");
String javaExe = getJavaExe();
String tomcatString = getTomcatEnvVarsAndClasspath();
if (debug)
tomcatString += " -Xdebug -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n";
tomcatString += " org.apache.catalina.startup.Bootstrap start";
System.out.println(javaExe + tomcatString);
try {
// ProcessBuilder pb = new ProcessBuilder(javaExe, sb.toString());
// Process p = pb.start();
// System.out.println("Process " + p + " started.");
Runtime.getRuntime().exec(javaExe + tomcatString);
System.out.println("Tomcat started with Runtime.exec().");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) {
TomcatUtil tu = new TomcatUtil();
tu.startTomcat(true);
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
tu.stopTomcatProcessBuilder();
// tu.stopTomcat();
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
tu.startTomcat(true);
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// tu.stopTomcatProcessBuilder();
tu.stopTomcat();
}
}
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
Runtime.exec() works properly.
java version "1.6.0_13"
Java(TM) SE Runtime Environment (build 1.6.0_13-b03)
Java HotSpot(TM) Client VM (build 11.3-b02, mixed mode)
ADDITIONAL OS VERSION INFORMATION :
Microsoft Windows XP [Version 5.1.2600]
A DESCRIPTION OF THE PROBLEM :
The ProcessBuilder cannot run java.exe with -D arguments. Runtime.exec() works with the exact same command. The same command works from the DOS command line.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
See the code below.
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
Tomcat would stop (or start)
ACTUAL -
Get Exceptions about not being able to find a file or a class.
ERROR MESSAGES/STACK TRACES THAT OCCUR :
java.io.IOException: Cannot run program "C:\bin\Java\jdk1.6.0_13\jre\bin\java.exe -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.util.logging.config.file="C:\dean\bin\apache-tomcat-5.5.27\conf\logging.properties" -Djava.endorsed.dirs="C:\dean\bin\apache-tomcat-5.5.27\common\endorsed" -Dcatalina.base="C:\dean\bin\apache-tomcat-5.5.27" -Dcatalina.home="C:\dean\bin\apache-tomcat-5.5.27" -Djava.io.tmpdir="C:\dean\bin\apache-tomcat-5.5.27\temp" -classpath "C:\bin\Java\jdk1.6.0_13\jre\lib\tools.jar;C:\dean\bin\apache-tomcat-5.5.27\bin\bootstrap.jar" org.apache.catalina.startup.Bootstrap": CreateProcess error=2, The system cannot find the file specified
at java.lang.ProcessBuilder.start(ProcessBuilder.java:459)
at TomcatUtil.stopTomcatProcessBuilder(TomcatUtil.java:147)
at TomcatUtil.main(TomcatUtil.java:199)
Caused by: java.io.IOException: CreateProcess error=2, The system cannot find the file specified
at java.lang.ProcessImpl.create(Native Method)
at java.lang.ProcessImpl.<init>(ProcessImpl.java:81)
at java.lang.ProcessImpl.start(ProcessImpl.java:30)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:452)
... 2 more
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
public class TomcatUtil {
public static String CATALINA_HOME = "CATALINA_HOME";
public static String JAVA_HOME = "JAVA_HOME";
String pathSeparator = System.getProperty("path.separator");
String fileSeparator = System.getProperty("file.separator");
String javaHome = System.getProperty("java.home");
String catalinaHome = System.getenv(CATALINA_HOME);
private String getJavaExe() {
// String javaExe = javaHome + fileSeparator + "bin" + fileSeparator + "java.exe";
// return javaExe;
return javaHome + fileSeparator + "bin" + fileSeparator + "java.exe";
}
private String getTomcatEnvVarsAndClasspath() {
StringBuilder sb = new StringBuilder();
sb.append(" -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager");
sb.append(" -Djava.util.logging.config.file=\"" + catalinaHome + fileSeparator + "conf" + fileSeparator + "logging.properties\"");
sb.append(" -Djava.endorsed.dirs=\"" + catalinaHome + fileSeparator + "common" + fileSeparator + "endorsed\"");
sb.append(" -Dcatalina.base=\"" + catalinaHome + "\"");
sb.append(" -Dcatalina.home=\"" + catalinaHome + "\"");
sb.append(" -Djava.io.tmpdir=\"" + catalinaHome + fileSeparator + "temp\"");
sb.append(" -classpath \"" + javaHome + fileSeparator + "lib" + fileSeparator + "tools.jar" + pathSeparator + catalinaHome + fileSeparator + "bin" + fileSeparator + "bootstrap.jar\"");
return sb.toString();
}
private List<String> getTomcatEnvVarsAndClasspathAsList() {
ArrayList<String> al = new ArrayList<String>();
al.add(getJavaExe());
al.add(" -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager");
al.add(" -Djava.util.logging.config.file=\"" + catalinaHome + fileSeparator + "conf" + fileSeparator + "logging.properties\"");
al.add(" -Djava.endorsed.dirs=\"" + catalinaHome + fileSeparator + "common" + fileSeparator + "endorsed\"");
al.add(" -Dcatalina.base=\"" + catalinaHome + "\"");
al.add(" -Dcatalina.home=\"" + catalinaHome + "\"");
al.add(" -Djava.io.tmpdir=\"" + catalinaHome + fileSeparator + "temp\"");
al.add(" -classpath \"" + javaHome + fileSeparator + "lib" + fileSeparator + "tools.jar" + pathSeparator + catalinaHome + fileSeparator + "bin" + fileSeparator + "bootstrap.jar\"");
return al;
}
private List<String> getTomcatEnvVarsAndClasspathAsList2() {
ArrayList<String> al = new ArrayList<String>();
al.add(getJavaExe());
al.add(
" -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager" +
" -Djava.util.logging.config.file=\"" + catalinaHome + fileSeparator + "conf" + fileSeparator + "logging.properties\"" +
" -Djava.endorsed.dirs=\"" + catalinaHome + fileSeparator + "common" + fileSeparator + "endorsed\"" +
" -Dcatalina.base=\"" + catalinaHome + "\"" +
" -Dcatalina.home=\"" + catalinaHome + "\"" +
" -Djava.io.tmpdir=\"" + catalinaHome + fileSeparator + "temp\"" +
" -classpath \"" + javaHome + fileSeparator + "lib" + fileSeparator + "tools.jar" + pathSeparator + catalinaHome + fileSeparator + "bin" + fileSeparator + "bootstrap.jar\"" +
" org.apache.catalina.startup.Bootstrap stop");
return al;
}
private List<String> getTomcatEnvVarsAndClasspathAsList3() {
ArrayList<String> al = new ArrayList<String>();
al.add(getJavaExe() +
" -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager" +
" -Djava.util.logging.config.file=\"" + catalinaHome + fileSeparator + "conf" + fileSeparator + "logging.properties\"" +
" -Djava.endorsed.dirs=\"" + catalinaHome + fileSeparator + "common" + fileSeparator + "endorsed\"" +
" -Dcatalina.base=\"" + catalinaHome + "\"" +
" -Dcatalina.home=\"" + catalinaHome + "\"" +
" -Djava.io.tmpdir=\"" + catalinaHome + fileSeparator + "temp\"");
al.add(
" -classpath \"" + javaHome + fileSeparator + "lib" + fileSeparator + "tools.jar" + pathSeparator + catalinaHome + fileSeparator + "bin" + fileSeparator + "bootstrap.jar\"" +
" org.apache.catalina.startup.Bootstrap stop");
return al;
}
private List<String> getTomcatEnvVarsAndClasspathAsList4() {
ArrayList<String> al = new ArrayList<String>();
al.add(getJavaExe() +
" -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager" +
" -Djava.util.logging.config.file=\"" + catalinaHome + fileSeparator + "conf" + fileSeparator + "logging.properties\"" +
" -Djava.endorsed.dirs=\"" + catalinaHome + fileSeparator + "common" + fileSeparator + "endorsed\"" +
" -Dcatalina.base=\"" + catalinaHome + "\"" +
" -Dcatalina.home=\"" + catalinaHome + "\"" +
" -Djava.io.tmpdir=\"" + catalinaHome + fileSeparator + "temp\"" +
" -classpath \"" + javaHome + fileSeparator + "lib" + fileSeparator + "tools.jar" + pathSeparator + catalinaHome + fileSeparator + "bin" + fileSeparator + "bootstrap.jar\"");
al.add(" org.apache.catalina.startup.Bootstrap stop");
return al;
}
private List<String> getTomcatEnvVarsAndClasspathAsList5() {
ArrayList<String> al = new ArrayList<String>();
al.add(getJavaExe() +
" -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager" +
" -Djava.util.logging.config.file=\"" + catalinaHome + fileSeparator + "conf" + fileSeparator + "logging.properties\"" +
" -Djava.endorsed.dirs=\"" + catalinaHome + fileSeparator + "common" + fileSeparator + "endorsed\"" +
" -Dcatalina.base=\"" + catalinaHome + "\"" +
" -Dcatalina.home=\"" + catalinaHome + "\"" +
" -Djava.io.tmpdir=\"" + catalinaHome + fileSeparator + "temp\"" +
" -classpath \"" + javaHome + fileSeparator + "lib" + fileSeparator + "tools.jar" + pathSeparator + catalinaHome + fileSeparator + "bin" + fileSeparator + "bootstrap.jar\"" +
" org.apache.catalina.startup.Bootstrap");
al.add(" stop");
return al;
}
private void stopTomcat() {
System.out.println("Stopping Tomcat");
String javaExe = getJavaExe();
String tomcatString = getTomcatEnvVarsAndClasspath();
tomcatString += " org.apache.catalina.startup.Bootstrap stop";
System.out.println(javaExe + tomcatString);
try {
Runtime.getRuntime().exec(javaExe + tomcatString);
System.out.println("Tomcat stopped with Runtime.exec().");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private void stopTomcatProcessBuilder() {
System.out.println("Stopping Tomcat");
// List<String> al = getTomcatEnvVarsAndClasspathAsList();
// al.add("org.apache.catalina.startup.Bootstrap stop");
// List<String> al = getTomcatEnvVarsAndClasspathAsList2();
// List<String> al = getTomcatEnvVarsAndClasspathAsList3();
// List<String> al = getTomcatEnvVarsAndClasspathAsList4();
List<String> al = getTomcatEnvVarsAndClasspathAsList5();
System.out.println(al);
ProcessBuilder pb = new ProcessBuilder(al);
System.out.println(pb.environment());
pb.redirectErrorStream(true);
Process p;
try {
p = pb.start();
System.out.println("Process started.");
BufferedReader br = new BufferedReader ( new InputStreamReader (p.getInputStream()) ) ;
String line;
while ((line = br.readLine())!= null )
System.out.println ( line ) ;
System.out.println("Tomcat stopped with ProcessBuilder.");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private void startTomcat(boolean debug) {
System.out.println("Starting Tomcat");
String javaExe = getJavaExe();
String tomcatString = getTomcatEnvVarsAndClasspath();
if (debug)
tomcatString += " -Xdebug -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n";
tomcatString += " org.apache.catalina.startup.Bootstrap start";
System.out.println(javaExe + tomcatString);
try {
// ProcessBuilder pb = new ProcessBuilder(javaExe, sb.toString());
// Process p = pb.start();
// System.out.println("Process " + p + " started.");
Runtime.getRuntime().exec(javaExe + tomcatString);
System.out.println("Tomcat started with Runtime.exec().");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) {
TomcatUtil tu = new TomcatUtil();
tu.startTomcat(true);
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
tu.stopTomcatProcessBuilder();
// tu.stopTomcat();
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
tu.startTomcat(true);
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// tu.stopTomcatProcessBuilder();
tu.stopTomcat();
}
}
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
Runtime.exec() works properly.