Just a nice feature of ooRexx which might not get really noticed, however at 
times may proof to be
*quite* helpful, hence sharing it here.

In ooRexx whenever one outputs to stdout, stderr or inputs from stdin, then the 
monitors .output,
.error and .input are used. By default these monitors forward to .stdout, 
.stderr, and .stdin
respectively. Having a monitor object allows one to exchange the destination 
object at runtime from
within ooRexx, which might sound "exotic" at first. However, there are problems 
that can be solved
extremely elegantly, knowing this infrastructure and behaviour of ooRexx.

A case in question: currently, there is a student who has taken on the task to 
create a proof of
concept of making ooRexx scripts available to programs, embedded in HTML texts 
in a platform
independent manner (maybe a possible presentation for the 2015 International 
Rexx Symposium). The
problem here is that any ooRexx output and input using standard files does not 
really yield visible
outputs in the case of stdout and stderr, so testing and developing has been 
incredibly hard on the
student.

Once he told me about not seeing debug output from ooRexx scripts while 
invoking them via JavaScript
and the Java-Plugin, however the Java debug output would be shown in the Java 
console, I suggested
to change the ooRexx standard files at runtime from within ooRexx to redirect 
to Java's standard
files (i.e. System.out, System.err, System.in) and gave him a quick hack.

By redirecting ooRexx' .output, .error and .input to Java's standard streams 
the output of his
ooRexx programs all of a sudden became visible in the Java console, easying 
debugging tremendeously
for him.

As I foresee a future need for this redirection to Java streams I added a 
routine
BSF.redirectTo([Java|ooRexx]) and implemented ooRexx classes that subclass the 
ooRexx inputStream
and outputStream classes, forwarding the ooRexx standard input and standard 
outputs from/to the
appropriate Java standard streams (will be part of BSF.CLS in the next version 
of BSF4ooRexx). All
the ooRexx-programs themselves remain unchanged, except for the very first one 
that needs to call
BSF.redirectTo() once to carry out the redirection to the Java standard streams.

So, if you ever deploy ooRexx scripts from environments where ooRexx 
input/output to/from standard
files is not possible for whatever reason, just use this technique to redirect 
the ooRexx streams to
the hosting environments ones. If you want to know what methods your 
replacement stream classes need
to implement, just lookup the classes BSF.inputStream and BSF.printStream in 
BSF.CLS in the current
beta of BSF4ooRexx.

---rony

P.S.: In ooRexx 4.2 there got two new standard ooRexx streams added that are 
named .debugInput and
.traceOutput. BSF.redirectTo() also takes care to redirect these streams in 
case they are defined in
.local.



------------------------------------------------------------------------------
Open source business process management suite built on Java and Eclipse
Turn processes into business applications with Bonita BPM Community Edition
Quickly connect people, data, and systems into organized workflows
Winner of BOSSIE, CODIE, OW2 and Gartner awards
http://p.sf.net/sfu/Bonitasoft
_______________________________________________
Oorexx-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/oorexx-devel

Reply via email to