com.phoenix_int.aserver
Class PHXRunShare

java.lang.Object
  extended by com.phoenix_int.aserver.PHXRunShare
All Implemented Interfaces:
IPHXMonitorable, com.phoenix_int.aserver.trace.IPHXTraceGenerator
Direct Known Subclasses:
PHXRunShareContext

public class PHXRunShare
extends java.lang.Object
implements IPHXMonitorable, com.phoenix_int.aserver.trace.IPHXTraceGenerator

This class handles runshare capabilities for any component which needs it. It can create temp directorys, deal w/ auto-copy and auto-delete of important files, return errors and block until it is safe to run. It also handles providing monitors for stdout and stderr as well as for monitoring started processes.

This class can only handle one single process running at a time. If you need to run multiple processes, use multiple instances of this class. You can use this same object over and over by calling lock() and unlock() multiple times.


Nested Class Summary
 class PHXRunShare.RunInfo
          Data structure used to hold info about a currently running command
 
Field Summary
static int DEL_AUTO
           
static int DEL_FALSE
           
static int DEL_TRUE
           
static int MODE_ERROR
           
static int MODE_NONE
           
static int MODE_SHARE
           
static int MODE_WAIT
           
 
Constructor Summary
PHXRunShare(java.lang.String baseDir, java.lang.String wrapperID)
           
 
Method Summary
 void addFileToCopy(java.lang.String file)
           
 void addRunDirChangedListener(com.phoenix_int.aserver.IPHXRunDirChangedListener rdl)
          Adds a listener which will receive events when the run directory is changed.
 void addTraceListener(com.phoenix_int.aserver.trace.IPHXTraceListener listener)
          Adds a listener to trace events
 void cleanTempDir()
          cleans up the temporary run directory if one has been created.
 void finalize()
           
 boolean getAutoChangeDir()
          Gets the "AutoChangeDir" flag
 int getAutoDelete()
          Gets the auto-delete mode
 java.lang.String getBaseDirectory()
          Gets the base dir which was passed in to the constructor.
 java.util.Map getDictionary()
           
 java.lang.String getDirectory()
          Returns the current directory being used by the runshare system.
 boolean getIgnoreErrors()
          Gets the "IgnoreErrors" flag
 int getMode()
          Gets the runshare mode
 java.lang.Object getMonitor(java.lang.String m)
          Returns any available monitors by name.
 java.lang.String getShell()
          Gets the shell used to execute commands.
 java.lang.String getWrapperID()
          Returns the wrapper ID being used for locking.
 void halt()
          halts any running process
 java.lang.String[] listMonitorableFiles()
          Lists available "monitors".
 PHXProcessInfo[] listProcesses()
          Lists any running processes
 void lock()
          Causes the run-share mode to be implemented.
 void removeRunDirChangedListener(com.phoenix_int.aserver.IPHXRunDirChangedListener rdl)
          Removes a listener for run directory changed events.
 void removeTraceListener(com.phoenix_int.aserver.trace.IPHXTraceListener listener)
          Removes a listener from trace events
 int run(java.lang.String cmd)
          Runs a command.
 int run(java.lang.String cmd, boolean ignoreErrors, boolean autoChangeDir, java.lang.String shell)
          Runs a command.
 int run(java.lang.String cmd, boolean ignoreErrors, java.lang.String autoChangeDir, java.lang.String shell)
          Runs a command.
 void setAutoChangeDir(boolean flag)
          Sets the "AutoChangeDir" flag.
 void setAutoDelete(int autoDelete)
          Sets the auto-delete mode for runshare mode MODE_SHARE.
 PHXRunShare setDictionary(java.util.Map dict)
           
 void setDirectTransfer(boolean flag)
          Set whehter or not this runShare is involved in direct transfer of files
 void setFilesToCopy(java.lang.String files)
          Sets the files which need to be copied when runshare mode is MODE_SHARE.
 void setIgnoreErrors(boolean flag)
          Sets the "IgnoreErrors" flag.
 void setMode(int mode)
          Sets the runshare mode.
 void setRunReplacer(com.phoenix_int.aserver.util.PHXRunReplacer replacer)
          Sets the run replacer object which is used to transform $VAR type specifications before running commands
 void setShell(java.lang.String shell)
          Sets the shell used to execute commands.
 void unlock()
          Unlocks the runshare mechanisms.
 
Methods inherited from class java.lang.Object
clone, equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

MODE_NONE

public static final int MODE_NONE
See Also:
Constant Field Values

MODE_ERROR

public static final int MODE_ERROR
See Also:
Constant Field Values

MODE_WAIT

public static final int MODE_WAIT
See Also:
Constant Field Values

MODE_SHARE

public static final int MODE_SHARE
See Also:
Constant Field Values

DEL_AUTO

public static final int DEL_AUTO
See Also:
Constant Field Values

DEL_FALSE

public static final int DEL_FALSE
See Also:
Constant Field Values

DEL_TRUE

public static final int DEL_TRUE
See Also:
Constant Field Values
Constructor Detail

PHXRunShare

public PHXRunShare(java.lang.String baseDir,
                   java.lang.String wrapperID)
Parameters:
baseDir - The directory on disk where the files associated w/ this component are located.
wrapperID - A unique ID which identifies this component. This is used to synchronize runshare access across multiple instances of the same component. Typically the full path on disk to the component's main file is used for this ID.
Method Detail

finalize

public void finalize()
Overrides:
finalize in class java.lang.Object

getWrapperID

public java.lang.String getWrapperID()
Returns the wrapper ID being used for locking. This ID should be the full path to the main file on disk for the associated wrapper.


setDictionary

public PHXRunShare setDictionary(java.util.Map dict)

getDictionary

public java.util.Map getDictionary()

setRunReplacer

public void setRunReplacer(com.phoenix_int.aserver.util.PHXRunReplacer replacer)
Sets the run replacer object which is used to transform $VAR type specifications before running commands


addRunDirChangedListener

public void addRunDirChangedListener(com.phoenix_int.aserver.IPHXRunDirChangedListener rdl)
Adds a listener which will receive events when the run directory is changed.


removeRunDirChangedListener

public void removeRunDirChangedListener(com.phoenix_int.aserver.IPHXRunDirChangedListener rdl)
Removes a listener for run directory changed events.


getBaseDirectory

public java.lang.String getBaseDirectory()
Gets the base dir which was passed in to the constructor.


getDirectory

public java.lang.String getDirectory()
Returns the current directory being used by the runshare system. This may be the base directory, or it may be a temp directory created underneath there to implement run sharing.


lock

public void lock()
          throws java.io.IOException
Causes the run-share mode to be implemented. This creates sub-dirs, waits or errors as appropriate.

Once in "locked" mode, calling lock() again has no effect.

Throws:
java.io.IOException

unlock

public void unlock()
Unlocks the runshare mechanisms. This will unblock other components which are waiting for us to finish.

Calling unlock() when not in "locked" mode has no effect.


setDirectTransfer

public void setDirectTransfer(boolean flag)
Set whehter or not this runShare is involved in direct transfer of files

Parameters:
flag - boolean flag

cleanTempDir

public void cleanTempDir()
                  throws java.io.IOException
cleans up the temporary run directory if one has been created. In general, wrappers and end users should not use this function unless you have manually created your own runshare object. Doing so will prevent proper delayed transfer of direct file transfer (DFT) files.

Throws:
java.io.IOException

setMode

public void setMode(int mode)
Sets the runshare mode.


getMode

public int getMode()
Gets the runshare mode


addFileToCopy

public void addFileToCopy(java.lang.String file)

setFilesToCopy

public void setFilesToCopy(java.lang.String files)
Sets the files which need to be copied when runshare mode is MODE_SHARE.


setAutoDelete

public void setAutoDelete(int autoDelete)
Sets the auto-delete mode for runshare mode MODE_SHARE. If DEL_TRUE, the created sub-dir is always deleted. If DEL_FALSE, it is never deleted. If DEL_AUTO, it is only deleted when no errors occur during the run. Deletion occurs when the component is ended or when the component is run again.


getAutoDelete

public int getAutoDelete()
Gets the auto-delete mode


setIgnoreErrors

public void setIgnoreErrors(boolean flag)
Sets the "IgnoreErrors" flag. By default this code will throw an exception if the spawned process returns a non-zero errorlevel. Occasionally a program will return an errorlevel even if it succeeds. This option allows you to igore the errorlevel.

Parameters:
flag - true to ignore errors

getIgnoreErrors

public boolean getIgnoreErrors()
Gets the "IgnoreErrors" flag

Returns:
the "IgnoreErrors" flag

setAutoChangeDir

public void setAutoChangeDir(boolean flag)
Sets the "AutoChangeDir" flag. This flag indicates whether to change the current working directory to the run directory (see getDirectory) before running the code. Changing directories occasionally causes problems with other command line programs. True by default.

Parameters:
flag - false to not change folders.

getAutoChangeDir

public boolean getAutoChangeDir()
Gets the "AutoChangeDir" flag

Returns:
the "AutoChangeDir" flag

setShell

public void setShell(java.lang.String shell)
Sets the shell used to execute commands. This only applies to UNIX hosts. By default "sh" is used.

Parameters:
shell - The shell used to invoke the run command

getShell

public java.lang.String getShell()
Gets the shell used to execute commands.

Returns:
the command shell

run

public int run(java.lang.String cmd)
        throws java.lang.Exception
Runs a command. Command may be relative to the run directory, see getDirectory().

This function will not return until the sub-process has finished. It will collect stdout and stderr and provide progress monitors.

Parameters:
cmd - The command to run.
Returns:
the cmd exit status
Throws:
java.lang.Exception

run

public int run(java.lang.String cmd,
               boolean ignoreErrors,
               boolean autoChangeDir,
               java.lang.String shell)
        throws java.lang.Exception
Runs a command. Command may be relative to the run directory, see getDirectory().

This function will not return until the sub-process has finished. It will collect stdout and stderr and provide progress monitors.

Parameters:
cmd - The command to run.
ignoreErrors - By default this code will throw an exception if the spawned process returns a non-zero errorlevel. Occasionally a program will return an errorlevel even if it succeeds. This option allows you to igore the errorlevel.
autoChangeDir - Whether to change the current working directory to the run directory (see getDirectory) before running the code. True by default.
shell - On UNIX you can specify which shell to use to launch the program. By default "sh" is used.
Returns:
the cmd exit status
Throws:
java.lang.Exception

run

public int run(java.lang.String cmd,
               boolean ignoreErrors,
               java.lang.String autoChangeDir,
               java.lang.String shell)
        throws java.lang.Exception
Runs a command. Command may be relative to the run directory, see getDirectory().

This function will not return until the sub-process has finished. It will collect stdout and stderr and provide progress monitors.

Parameters:
cmd - The command to run.
ignoreErrors - By default this code will throw an exception if the spawned process returns a non-zero errorlevel. Occasionally a program will return an errorlevel even if it succeeds. This option allows you to igore the errorlevel.
autoChangeDir - If non-empty, the directory will be changed to this before running the program.
shell - On UNIX you can specify which shell to use to launch the program. By default "sh" is used.
Returns:
the cmd exit status
Throws:
java.lang.Exception

halt

public void halt()
halts any running process


listProcesses

public PHXProcessInfo[] listProcesses()
                               throws java.io.IOException
Lists any running processes

Specified by:
listProcesses in interface IPHXMonitorable
Throws:
java.io.IOException - If there was a problem reading information about running processes

listMonitorableFiles

public java.lang.String[] listMonitorableFiles()
                                        throws java.io.IOException
Lists available "monitors". This will be "stdout" and "stderr".

Specified by:
listMonitorableFiles in interface IPHXMonitorable
Throws:
java.io.IOException

getMonitor

public java.lang.Object getMonitor(java.lang.String m)
                            throws PHXNoSuchObjectException
Returns any available monitors by name.

Specified by:
getMonitor in interface IPHXMonitorable
Returns:
either a PHXRawFile or a PHXMonitorableStream object
Throws:
PHXNoSuchObjectException

addTraceListener

public void addTraceListener(com.phoenix_int.aserver.trace.IPHXTraceListener listener)
Adds a listener to trace events

Specified by:
addTraceListener in interface com.phoenix_int.aserver.trace.IPHXTraceGenerator
Parameters:
listener - the listener

removeTraceListener

public void removeTraceListener(com.phoenix_int.aserver.trace.IPHXTraceListener listener)
Removes a listener from trace events

Specified by:
removeTraceListener in interface com.phoenix_int.aserver.trace.IPHXTraceGenerator
Parameters:
listener - the listener