/* * Created on Oct 21, 2003 by mschilli */ package alma.acs.commandcenter.engine; import java.util.Properties; import alma.acs.commandcenter.util.MiscUtils; import alma.acs.util.ACSPorts; import alma.acs.util.AcsLocations; import alma.entity.xmlbinding.acscommandcentertools.Tool; /** * @author mschilli */ public class ExecuteManager { protected RunModel runModel; public ExecuteManager(RunModel runModel) { this.runModel = runModel; } String[] localJavaManagerLocation; // // ======================================================================================== // public String startLocalJavaPexpect = "Manager Application initialized"; public String stopLocalJavaPexpect = "Destroyed."; //"remaining timer tasks"; /** * @return an array {manager_host, manager_port} */ public String[] startLocalJava(NativeCommand.Listener listener) { /* * Notes on how to set the manager's port: * 1) command line parameter does not exist * 2) property "OAPort" (with capital 'P', not "OAport") must be set */ // --- set Properties Properties props = new DefaultProperties(); // cdb String cdbHost = runModel.getManagerLocalJavaAgainstCDBHost(); String cdbPort = runModel.getManagerLocalJavaAgainstCDBPort(); props.setProperty("DAL.defaultReference", AcsLocations.convertToCdbLocation(cdbHost, cdbPort)); // oa-port needed for the manager itself so it knows where it should run String mgrPort = runModel.getManagerLocalJavaPort(); props.setProperty("OAPort", mgrPort); // msc(2004-04): prevents jManager from calling System.exit() props.setProperty("ACS.noExit", "true"); /* msc 2009-03: commented out all abeans-related stuff from Acs 8.0.1 on // manager-ref needed for "abeans" acs client (starts together with the manager) String mgrHost = ACSPorts.getIP(); props.setProperty("ACS.manager", AcsLocations.convertToManagerLocation(mgrHost, mgrPort)); // msc(2005-07): we need a reference to the manager object so we can invoke // its shutdown() method without going through ACS. Therefore, we can not simply // invoke com.cosylab.acs.maci.manager.app.Manager.main(). We duplicate here what // the manager's main() method would do props.setProperty("Manager.recovery", "false"); props.setProperty(abeans.framework.FrameworkLayer.PROPERTY_DISABLE_SHUTDOWN_HOOK, "true"); */ // msc(2005-07): we want the abeans framework to use the following tmp-dir // (the abeans framework would create the dir if it doesn't exist, but we need // to do this ourselves since we're responsible for also removing the directory afterwards) String acsInstance = runModel.getScriptBase(); props.setProperty("ACS.tmp", props.getProperty("ACS.data")+"/tmp/ACS_INSTANCE."+acsInstance); // run in same vm Executor.localInProc(props, startLocalJavaPexpect, listener, new Executor.RunMain() { public void runMain() { localManager = new com.cosylab.acs.maci.manager.app.Manager(); } }); this.localJavaManagerLocation = new String[] { ACSPorts.getIP(), mgrPort}; return localJavaManagerLocation; } /** our manager object */ private com.cosylab.acs.maci.manager.app.Manager localManager = null; public void stopLocalJava() { NativeCommand.Listener listener = null; Properties props = new Properties(); Executor.localInProc(props, stopLocalJavaPexpect, listener, new Executor.RunMain() { public void runMain() { if (localManager != null) { boolean sigInt = false; localManager.shutdown(sigInt); } } }); } // // ======================================================================================== // /** * @return an array {manager_host, manager_port} */ public String[] startLocalScript(NativeCommand.Listener listener) throws Throwable { Tool t = ToolManager.getBuiltinTool("Manager_startLocalScript"); String command = ToolManager.generateCommand(t, runModel); Executor.localOutProc(command, true, t.getMaxStartupSeconds() * 1000, t.getExpectedOutput(), listener); // since we can't find out where the manager runs effectively // (by e.g. parsing its output), we make our best guess.. String acsBasePort = runModel.getScriptBase(); ACSPorts ports = ACSPorts.globalInstance(MiscUtils .parseInt(acsBasePort)); return new String[] { ports.giveIP(), ports.giveManagerPort()}; } public void stopLocalScript(NativeCommand.Listener listener) throws Throwable { Tool t = ToolManager.getBuiltinTool("Manager_stopLocalScript"); String command = ToolManager.generateCommand(t, runModel); Executor.localOutProc(command, true, t.getMaxStartupSeconds() * 1000, t.getExpectedOutput(), listener); } // // ======================================================================================== // public boolean startRemote(boolean nativeSSH, NativeCommand.Listener listener) throws Throwable { String host = runModel.getRemoteHost(); String username = runModel.getRemoteAccount(); String password = runModel.getRemotePassword(); Tool t = ToolManager.getBuiltinTool("Manager_startRemote"); String command = ToolManager.generateCommand(t, runModel); return Executor.remote(nativeSSH, username, password, command, t.getExpectedOutput(), listener, host); } public void stopRemote(boolean nativeSSH, NativeCommand.Listener listener) throws Throwable { String host = runModel.getRemoteHost(); String username = runModel.getRemoteAccount(); String password = runModel.getRemotePassword(); Tool t = ToolManager.getBuiltinTool("Manager_stopRemote"); String command = ToolManager.generateCommand(t, runModel); Executor.remote(nativeSSH, username, password, command, t.getExpectedOutput(), listener, host); } } // // // // // // // //