00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 package org.objectweb.proactive.ext.scilab.test;
00032
00033 import java.io.File;
00034 import java.util.HashMap;
00035 import java.util.Vector;
00036
00037 import javasci.SciData;
00038 import javasci.SciDoubleMatrix;
00039
00040 import org.objectweb.proactive.ProActive;
00041 import org.objectweb.proactive.core.ProActiveException;
00042 import org.objectweb.proactive.core.node.Node;
00043 import org.objectweb.proactive.core.util.wrapper.BooleanWrapper;
00044 import org.objectweb.proactive.ext.scilab.SciDeployEngine;
00045 import org.objectweb.proactive.ext.scilab.SciEngine;
00046 import org.objectweb.proactive.ext.scilab.SciResult;
00047 import org.objectweb.proactive.ext.scilab.SciTask;
00048 import org.objectweb.proactive.filetransfer.FileTransfer;
00049 import org.objectweb.proactive.filetransfer.FileVector;
00050
00051
00052 public class SciTestLibrary {
00053 private HashMap mapEngine;
00054
00055 public SciTestLibrary(String nameVN, String pathDescriptor,
00056 String[] arrayEngine, String localSource, String remoteDest)
00057 throws ProActiveException {
00058
00059
00060 mapEngine = SciDeployEngine.deploy(nameVN, pathDescriptor, arrayEngine);
00061
00062
00063 Vector<BooleanWrapper> listStateEngine = new Vector<BooleanWrapper>();
00064 for(int i=0; i<mapEngine.size(); i++){
00065 listStateEngine.add(((SciEngine) mapEngine.get(arrayEngine[i])).activate());
00066 }
00067
00068 ProActive.waitForAll(listStateEngine);
00069
00070 Object[] arrayKey = mapEngine.keySet().toArray();
00071 try{
00072 FileVector fv;
00073 for(int i=0; i<arrayKey.length; i++){
00074 Node node = SciDeployEngine.getEngineNode((String)arrayKey[i]);
00075 System.out.println("Sending file to:"+node.getNodeInformation().getURL());
00076 fv=FileTransfer.pushFile(node, new File(localSource), new File(remoteDest));
00077 fv.waitForAll();
00078 }
00079 }catch(Exception e){
00080 System.out.println("Printing exception");
00081 e.printStackTrace();
00082 }
00083
00084
00085
00086 SciTask sciTaskEnv;
00087 SciEngine sciEngine;
00088 for(int i=0; i<arrayKey.length; i++){
00089 sciTaskEnv = new SciTask("sciEnv" + arrayKey[i]);
00090 sciTaskEnv.setJob("exec('" + remoteDest + "');");
00091 sciEngine = (SciEngine) this.mapEngine.get(arrayKey[i]);
00092 sciEngine.execute(sciTaskEnv);
00093 }
00094
00095
00096 SciTask sciTaskCallFun;
00097 SciResult sciResult;
00098 SciData dataIn;
00099 SciData dataOut;
00100 for(int i=0; i<arrayKey.length; i++){
00101 sciTaskCallFun = new SciTask("sciCallFun" + arrayKey[i]);
00102 dataIn = new SciDoubleMatrix("x", 1, 1, new double[]{i});
00103 dataOut = new SciData("z");
00104 sciTaskCallFun.addDataIn(dataIn);
00105 sciTaskCallFun.addDataOut(dataOut);
00106 sciTaskCallFun.setJob(dataOut.getName() + "= mult(" + dataIn.getName() + "," + dataIn.getName() + ");");
00107 sciEngine = (SciEngine) this.mapEngine.get(arrayKey[i]);
00108 sciResult = sciEngine.execute(sciTaskCallFun);
00109 System.out.println(sciResult.get(dataOut.getName()));
00110 }
00111
00112 for(int i=0; i<arrayKey.length; i++){
00113 sciEngine = (SciEngine) this.mapEngine.get(arrayKey[i]);
00114 try{
00115 sciEngine.exit();
00116 }catch(RuntimeException e ){
00117 }
00118 }
00119 System.exit(0);
00120 }
00121
00122 public static void main(String[] args) throws ProActiveException {
00123 if (args.length != 5) {
00124 System.out.println("Invalid number of parameter : " + args.length);
00125 return;
00126 }
00127
00128 int nbEngine = Integer.parseInt(args[2]);
00129 String[] arrayId = new String[nbEngine];
00130
00131 for (int i = 0; i < nbEngine; i++) {
00132 arrayId[i] = "Scilab" + i;
00133 }
00134
00135 new SciTestLibrary(args[0], args[1], arrayId, args[3], args[4]);
00136 }
00137 }