private static final String STR_CFG_FILE_EXT = ".config";
private static final String STR_CLS_FILE_EXT = ".class";
private static final String STR_JAR_FILE_EXT = ".jar";
+ private static final String STR_SHELL_FILE_EXT = ".sh";
private static final String STR_SO_FILE_EXT = ".so";
private static final String STR_ZIP_FILE_EXT = ".zip";
private static final String STR_TCP_PROTOCOL = "tcp";
private static final String STR_SSH = "ssh";
private static final String STR_SCP = "scp";
private static final String STR_IOTSLAVE_CPP = "./IoTSlave.o";
+ private static final String STR_SHELL_HEADER = "#!/bin/sh";
+ private static final String STR_JAVA_PATH = "/usr/bin/java";
private static int INT_SIZE = 4; // send length in the size of integer (4 bytes)
mapClassNameToCrim = new HashMap<String,Object>();
}
+ /**
+ * getPrintWriter() gets a new PrintWriter for a new object
+ *
+ * @param strObjectName String object name
+ * @return PrintWriter
+ */
+ private PrintWriter getPrintWriter(String strObjectName) {
+
+ FileWriter fw = null;
+ try {
+ fw = new FileWriter(strObjectName);
+ } catch (IOException ex) {
+ ex.printStackTrace();
+ }
+ PrintWriter printWriter = new PrintWriter(new BufferedWriter(fw));
+ return printWriter;
+ }
+
/**
* A method to initialize constants from config file
*
*
* @return String
*/
- private String getCmdJavaDriverIoTSlave(String strIoTMasterHostAdd, String strIoTSlaveObjectHostAdd, String strObjName) {
+ /*private String getCmdJavaDriverIoTSlave(String strIoTMasterHostAdd, String strIoTSlaveObjectHostAdd, String strObjName) {
return STR_SSH + " " + STR_USERNAME + strIoTSlaveObjectHostAdd + " cd " + STR_RUNTIME_DIR + " sudo java " +
STR_CLS_PATH + " " + STR_RMI_PATH + " " + STR_RMI_HOSTNAME +
strIoTSlaveObjectHostAdd + " " + STR_IOT_SLAVE_CLS + " " + strIoTMasterHostAdd + " " +
commHan.getComPort(strObjName) + " " + commHan.getRMIRegPort(strObjName) + " " +
commHan.getRMIStubPort(strObjName) + " >& " + STR_LOG_FILE_PATH + strObjName + ".log &";
+ }*/
+ private String getCmdJavaDriverIoTSlave(String strIoTMasterHostAdd, String strIoTSlaveObjectHostAdd, String strObjName) {
+
+ // Create an Shell executable
+ String strJavaCommand = STR_SHELL_HEADER + "\nexec " + STR_JAVA_PATH + " " + STR_CLS_PATH + " " + STR_RMI_PATH + " " +
+ STR_RMI_HOSTNAME + strIoTSlaveObjectHostAdd + " " + STR_IOT_SLAVE_CLS + " " + strIoTMasterHostAdd + " " +
+ commHan.getComPort(strObjName) + " " + commHan.getRMIRegPort(strObjName) + " " +
+ commHan.getRMIStubPort(strObjName) + " > " + STR_LOG_FILE_PATH + strObjName + ".log &";
+ String shellFile = "./" + strObjName + STR_SHELL_FILE_EXT;
+ createWrapperShellScript(strJavaCommand, shellFile);
+ // Send the file to the compute node
+ String strCmdSend = "scp " + shellFile + " " + STR_USERNAME + strIoTSlaveObjectHostAdd + ":" + STR_RUNTIME_DIR;
+ runCommand(strCmdSend);
+ System.out.println("IoTMaster: Sending shell file: " + strCmdSend);
+ return STR_SSH + " " + STR_USERNAME + strIoTSlaveObjectHostAdd + " cd " + STR_RUNTIME_DIR + " " + shellFile;
}
}
+ /**
+ * createWrapperShellScript() gets a wrapper shell script
+ *
+ * @param strCommand String command
+ * @param strObjectName String object name
+ * @return PrintWriter
+ */
+ private void createWrapperShellScript(String strCommand, String strFileName) {
+
+ PrintWriter printWriter = getPrintWriter(strFileName);
+ printWriter.println(strCommand);
+ printWriter.close();
+ runCommand("chmod 755 " + strFileName);
+ }
+
+
/**
* A private method to create an object on a specific machine
*
*
* @return String
*/
- private String getCmdJavaIoTSlave(String strObjControllerName) {
+ /*private String getCmdJavaIoTSlave(String strObjControllerName) {
return STR_SSH + " " + STR_USERNAME + strIoTSlaveControllerHostAdd + " cd " +
STR_RUNTIME_DIR + " sudo java " + STR_JVM_INIT_HEAP_SIZE + " " +
commHan.getRMIRegPort(strObjControllerName) + " " +
commHan.getRMIStubPort(strObjControllerName) + " >& " +
STR_LOG_FILE_PATH + strObjControllerName + ".log &";
+ }*/
+ private String getCmdJavaIoTSlave(String strObjControllerName) {
+
+ // Create an Shell executable
+ String strJavaCommand = STR_SHELL_HEADER + "\nexec " + STR_JAVA_PATH + " " + STR_JVM_INIT_HEAP_SIZE + " " +
+ STR_JVM_MAX_HEAP_SIZE + " " + STR_CLS_PATH + " " + STR_RMI_PATH + " " + STR_IOT_SLAVE_CLS + " " +
+ strIoTMasterHostAdd + " " + commHan.getComPort(strObjControllerName) + " " +
+ commHan.getRMIRegPort(strObjControllerName) + " " + commHan.getRMIStubPort(strObjControllerName) +
+ " > " + STR_LOG_FILE_PATH + strObjControllerName + ".log &";
+ String shellFile = "./" + strObjControllerName + STR_SHELL_FILE_EXT;
+ createWrapperShellScript(strJavaCommand, shellFile);
+ // Send the file to the compute node
+ String strCmdSend = "scp " + shellFile + " " + STR_USERNAME + strIoTSlaveControllerHostAdd + ":" + STR_RUNTIME_DIR;
+ runCommand(strCmdSend);
+ System.out.println("IoTMaster: Sending main controller shell file: " + strCmdSend);
+ return STR_SSH + " " + STR_USERNAME + strIoTSlaveControllerHostAdd + " cd " + STR_RUNTIME_DIR + " " + shellFile;
}