Hi folks,

looking at the code before falling asleep ....

Regarding the exit code handling we have two driving forces

1) determine a success/failure depending on the operating system (DefaultExecutor.isFailure())

2) overwrite the OS-specific semantic (DefaultExecutor.isSuccess()) - I have applications always returning '1' and worked with other applications that return bit fields to indicate success/warning/errors. The problem with DefaultExecutor is being too helpful - the default behavior is to throw an exception so the client usually never see the failure code.

Looking at the implementation

a) As sebb pointed out the success/failure detection is a little bit odd under VMS compared to other OS therefore a 'isFailure()' method should go into the CommandLauncher interface with a special implementation in VmsCommandLauncher. The DefaultExecutor holds a reference to a CommandLauncher so it can delegate the check to the CommandLauncher instance. This would remove this obfuscated 'instanceof' hack (asking for OS.isFamilyOpenVms() is pretty much the same as 'if (launher instanceOf VmsCommandLauncher)')

b) Having a isSucess() and isFailure() method is confusing - there should be only one method name for checking the same one thing whereas I lean towards isFailure() since this is probably there more common check in application code.

c) Therefore I wold expose a 'boolean Executor.isFailure(int exitValue)' to be implemented in DefaultExecutor which would also handle user-specific overwriting of exit code checking

In short without technobabble (see http://www.pathcom.com/~boby/babble.htm)

+) expose a CommandLauncher.isFailure(int) and implement it in the implementation classes such as VmsCommandLaunher
+) expose a Executor.isFailure(int) to be implemented in DefaultExecutor
+) fix the regression tests

Any opinions out there

Siegfried Goeschl


Matt Benson wrote:
--- sebb <[EMAIL PROTECTED]> wrote:

On 17/04/2008, Matt Benson <[EMAIL PROTECTED]>
wrote:
 --- Siegfried Goeschl <[EMAIL PROTECTED]> wrote:

 > Hi sebb,
 >
 > thanks for your input and I'm sorry for my late
 > response - I will look
 > at the stuff during the weekend
 >
 > Siegfried Goeschl
 >
 > sebb wrote:
 > > VMS testing has revealed that the
 > DefaultExecutorTest class assumes
 > > that 0 = success, and 1 = failure.
 > >
 > > This is not the case for all OSes - VMS
regards
 > odd numbers as
 > > successful and even ones as failures.
 > >
 > > So I think the test needs to use a more
versatile
 > means of checking statuses.
 > >
 > > There is a method in DefaultExecutor
 > >    public static boolean isFailure(final int
 > exitValue)
 > > However, it is static, so cannot be added to
the
 > Executor interface.
 > >
 > > Any objections if I make it non-static and
add it
 > to the interface?
 > > This will allow the test suite to correctly
check
 > for success/failure.
 > >
 > > I suspect the private boolean isSuccess(final
int
 > exitValue) method
 > > may need updating for VMS. And I don't
understand
 > why it returns true
 > > if there is no exitValues array - perhaps it
 > should return !
 > > isFailure(exitValue) ? Or throw an error of
some
 > kind?


If the test case exists simply to test
 DefaultExecutor, why not explicitly refer to
 DefaultExecutor.isFailure()?
Yes, that's also possible.

 Or move the static
 method into an abstract BaseExecutor superclass
that
 hypothetical other Executor implementations could
use
 for the same purpose, and refer to the method
there?

Likewise.

However, I think any Executor implementation is
going to need to
provide an isFailure() - or perhaps better an
isSuccess() - method for
callers to be able to check if the execute has
succeeded or not.

Okay, so compromise = add isSuccess() to the interface
and implement in an abstract base class that
encapsulates the VMS exception to the common 0 ->
success rule?  :)

-Matt

 -Matt


 > >
 > >
 >

---------------------------------------------------------------------
 > > To unsubscribe, e-mail:
 > [EMAIL PROTECTED]
 > > For additional commands, e-mail:
 > [EMAIL PROTECTED]
 > >
 > >
 > >
 > >
 >
 >

---------------------------------------------------------------------
 > To unsubscribe, e-mail:
 > [EMAIL PROTECTED]
 > For additional commands, e-mail:
 > [EMAIL PROTECTED]
 >
 >




____________________________________________________________________________________
 Be a better friend, newshound, and
know-it-all with Yahoo! Mobile. Try it now.
http://mobile.yahoo.com/;_ylt=Ahu06i62sR8HDtDypao8Wcj9tAcJ

---------------------------------------------------------------------
 To unsubscribe, e-mail:
[EMAIL PROTECTED]
 For additional commands, e-mail:
[EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail:
[EMAIL PROTECTED]
For additional commands, e-mail:
[EMAIL PROTECTED]





      
____________________________________________________________________________________
Be a better friend, newshound, and know-it-all with Yahoo! Mobile. Try it now. http://mobile.yahoo.com/;_ylt=Ahu06i62sR8HDtDypao8Wcj9tAcJ

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]




---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to