/* Invoke bds java program WARNING: It is assumed that bds.jar is in the same executable binary as 'bds' This is actually a nice hack used to distribute only one file. Since JAR files are actually ZIP files and ZIP files are indexed from the end of the file, you can append the JAR to the go binary (cat binary jar > new_binary) and you encapsulate both in the same file. Idea and implementation of this hack: Hernan Gonzalez */ func (be *BdsExec) Bds() int { // Create a taskLoggerFile (temp file based on pid number) prefix := "bds.pid." + strconv.Itoa(syscall.Getpid()) pidTmpFile, err := tmpfile.TempFile(prefix) if err != nil { log.Fatal(err) } be.taskLoggerFile = pidTmpFile defer os.Remove(be.taskLoggerFile) // Make sure the PID file is new if DEBUG { log.Printf("Info: taskLoggerFile '%s'\n", be.taskLoggerFile) } bdsLibDir := path.Dir(be.execName) + "/" + BDS_NATIVE_LIB_DIR // Append all arguments from command line be.cmdargs = []string{JAVA_CMD, JAVA_MEM, JAVA_NATIVE_LIB + bdsLibDir, "-cp", be.execName, JAVA_BDS_CLASS} be.cmdargs = append(be.cmdargs, "-pid") be.cmdargs = append(be.cmdargs, be.taskLoggerFile) for _, arg := range be.args[1:] { be.cmdargs = append(be.cmdargs, arg) } // Execute command be.command = JAVA_CMD exitCode := be.executeCommand() return exitCode }
/* Invoke BigDataScript java program WARNING: It is assumed that BigDataScript.jar is in the same executable binary as 'bds' This is actually a nice hack used to distribute only one file. Since JAR files are actually ZIP files and ZIP files are indexed from the end of the file, you can append the JAR to the go binary (cat binary jar > new_binary) and you encapsulate both in the same file. Idea and implementation of this hack: Hernan Gonzalez */ func (be *BdsExec) BigDataScript() int { // Create a taskLoggerFile (temp file based on pid number) prefix := "bds.pid." + strconv.Itoa(syscall.Getpid()) pidTmpFile, err := tmpfile.TempFile(prefix) if err != nil { log.Fatal(err) } be.taskLoggerFile = pidTmpFile defer os.Remove(be.taskLoggerFile) // Make sure the PID file is removed // Append all arguments from command line be.cmdargs = []string{"java", "-Xmx2G", "-cp", be.execName, "ca.mcgill.mcb.pcingola.bigDataScript.BigDataScript"} be.cmdargs = append(be.cmdargs, "-pid") be.cmdargs = append(be.cmdargs, be.taskLoggerFile) for _, arg := range be.args[1:] { be.cmdargs = append(be.cmdargs, arg) } // Execute command be.command = "java" exitCode := be.executeCommand() return exitCode }