commons-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Konrad Windszus (JIRA)" <j...@apache.org>
Subject [jira] Issue Comment Edited: (EXEC-42) Tutorial should include example for asynchronous handling
Date Fri, 04 Jun 2010 21:21:03 GMT

    [ https://issues.apache.org/jira/browse/EXEC-42?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12875757#action_12875757
] 

Konrad Windszus edited comment on EXEC-42 at 6/4/10 5:19 PM:
-------------------------------------------------------------

Thanks for the update, some suggestions:

1. Fix the javadoc in the DefaultExecuteResultHandler.hasResult. The return value is true,
if the process was finished, not the other way round.
2. Add a link to the javadoc of java.lang.Process (http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Process.html)
which explains, why writes to stdout and stderr might be blocking, if you don't use the PumpStreamHandler,
altough this is mentioned in the tutorial section, the link might be helpful for a more in
depth information.
3. Add code for checking if process still running and also an example how to destroy the process
if necessary
{code}
while (!resultHandler.hasResult()) {
	Thread.sleep(SLEEP_TIME_MS);
	if (interruptProcess) {
		watchdog.destroyProcess();
	}
}
exitCode = resultHandler.getExitValue();
{code}
SLEEP_TIME_MS is a constant which specifies the wait interval in milliseconds between the
checks. In this example interruptProcess is a boolean variable, which might be set to interrupt
the process. It would be helpful if you could add these lines in the tutorial example.
4. Add a hint in javadoc of Executor.execute that an exception is also thrown when the process
has an invalid exit code (which is not allowed via Executor.setExitValue(s)).
5. Add a hint in javadoc in the ExecuteWatchdog, that it might be attached to the process
after the DefaultExecutor.execute has returned. Also add that hint to all asynchronous Executor.execute
methods.

      was (Author: kwin):
    Thanks for the update, some suggestions:

1. Fix the javadoc in the DefaultExecuteResultHandler.hasResult. The return value is true,
if the process was finished, not the other way round.
2. Add a link to the javadoc of java.lang.Process which explains, why writes to stdout and
stderr might be blocking, if you don't use the PumpStreamHandler, altough this is mentioned
in the tutorial section, the link might be helpful for a more in depth information.
3. Add code for checking if process still running and also an example how to destroy the process
if necessary
{code}
while (!resultHandler.hasResult()) {
	Thread.sleep(SLEEP_TIME_MS);
	if (interruptProcess) {
		watchdog.destroyProcess();
	}
}
exitCode = resultHandler.getExitValue();
{code}
SLEEP_TIME_MS is a constant which specifies the wait interval in milliseconds between the
checks. In this example interruptProcess is a boolean variable, which might be set to interrupt
the process. It would be helpful if you could add these lines in the tutorial example.
4. Add a hint in javadoc of Executor.execute that an exception is also thrown when the process
has an invalid exit code (which is not allowed via Executor.setExitValue(s)).
5. Add a hint in javadoc in the ExecuteWatchdog, that it might be attached to the process
after the DefaultExecutor.execute has returned. Also add that hint to all asynchronous Executor.execute
methods.
  
> Tutorial should include example for asynchronous handling
> ---------------------------------------------------------
>
>                 Key: EXEC-42
>                 URL: https://issues.apache.org/jira/browse/EXEC-42
>             Project: Commons Exec
>          Issue Type: Improvement
>    Affects Versions: 1.0, 1.0.1
>            Reporter: Konrad Windszus
>            Assignee: Siegfried Goeschl
>             Fix For: 1.1
>
>
> I had some difficulties figuring out, how to asynchronously start a process. You should
include an example for this on the tutorial page. Especially interesting is the following:
> - How to start it (explain ExecuteResultHandler and that the callbacks are called from
another thread, so these should be implemented thread-safe)
> - How to know if it is still running (not possible via watchdog, but has to be implemented
for oneself using the ExecuteResultHandler, again watch out for thread safety)
> - How to force to terminate a process (using the watchdog)
> - Add a hint about StreamHandler and that you should always use a PumpStreamHandler (otherwise
this could lead to deadlocks, see http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html?).
> - Add an explanation of exit values, since an exit value which is not in the list of
the DefaultExecutor, leads automatically to an exception, which is not clear from the javadocs.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message