| Both sides previous revisionPrevious revisionNext revision | Previous revision |
| java_class_process [2013/04/29 08:32] – yann | java_class_process [2025/01/15 21:40] (current) – external edit 127.0.0.1 |
|---|
| ====== The Solution ====== | ====== The Solution ====== |
| |
| After much tinkering, we decided manage to get [[MoDeC]] to work by using the "new" class ProcessBuilder because "As of 1.5, ProcessBuilder.start() is the preferred way to create a Process." (according to [[http://docs.oracle.com/javase/7/docs/api/java/lang/Process.html|Oracle]] in a version of the Javadocs subsequent to 1.5). We modified essentially the code as follows: | After much tinkering, we managed to get [[MoDeC]] to work by using the "new" class ProcessBuilder because "As of 1.5, ProcessBuilder.start() is the preferred way to create a Process." (according to [[http://docs.oracle.com/javase/7/docs/api/java/lang/Process.html|Oracle]] in a version of the Javadocs subsequent to 1.5). We modified essentially the code as follows: |
| |
| <code> | <code> |
| </code> | </code> |
| |
| With these changes, the same input file and the same instrumented bytecodes would produced the same, expected traces in both Windows and MacOS computers! Soumaya and Venera could not continue their research work 8-). However, these changes were not satisfying because they did not explain why... | With these changes, the same input file and the same instrumented bytecodes would produce the same, expected traces in both Windows and MacOS computers! Soumaya and Venera could now continue their research works 8-). However, these changes were not satisfying because they did not explain why... |
| |
| So, after some more tinkering, it follows that it is not ProcessBuilder that saved the day but the implementations of the Runtime.exec() methods that have different behaviour on Windows and MacOS. The class Runtime provides several exec() methods to create new processes but two are of particular interest here: | So, after some more tinkering, it appeared that it is **not** ProcessBuilder that saved the day but the implementations of the Runtime.exec() methods that have different behaviour on Windows and MacOS. The class Runtime provides several exec() methods to create new processes but two are of particular interest here: |
| - Runtime.exec(String command, String[] envp, File dir): "Executes the specified string command in a separate process with the specified environment and working directory." | - Runtime.exec(String command, String[] envp, File dir): "Executes the specified string command in a separate process with the specified environment and working directory." |
| - Runtime.exec(String[] command, String[] envp, File dir): "Executes the specified command **and arguments** in a separate process with the specified environment and working directory." (bold added). | - Runtime.exec(String[] command, String[] envp, File dir): "Executes the specified command **and arguments** in a separate process with the specified environment and working directory." (bold added). |
| |
| In previous versions of [[MoDeC]], we use the first method, in the case of ArgoUML, which the following command: | In previous versions of [[MoDeC]], we used the first method, e.g., in the case of ArgoUML with the following command: |
| |
| <code> | <code> |
| String command = "java -classpath "/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/MoDeC Invoker/bin:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/pdf-transcoder.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/batik-anim.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/batik-bridge.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/batik-codec.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/batik-extension.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/batik-gui-util.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/batik-gvt.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/batik-script.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/batik-swing.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/batik-transcoder.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/batik-parser.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/batik-css.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/batik-svg-dom.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/batik-ext.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/commons-lang-2.4.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/bin:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/tools.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/xalan-2.6.0.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/xerces_2_5_0.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/xml-apis.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/xml-apis-ext.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/cfparse:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/bcel:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/batik-awt-util.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/batik-dom.jar:/Users/Neni/Documents/Research/2013-LabalingTraceSegm/eclipseWS/CPL/lib/batik-svggen.jar:/Users/Neni/Documents/Research/ |