Readme.txt 
----------

The "Juicer" is a simple application for stressing a Remote Method
Invocation (RMI) implementation.  It also serves as a good test of
multithreading, synchronization, and networking in java.  The Juicer
tests the following:

1.  A server invoking calls on an applet's remote object.  These
methods then return references to new remote objects.

2.  Parallel execution of deep recursive calls passing large amounts of
data and remote references.

3.  Passing arrays of objects to Remote Methods.


--------------------------------------------------------
Running the juicer Client as an application (Batch Mode)
--------------------------------------------------------

To run the juicer as an application, the following must be done...

1.  Do the following...

-On Solaris
    chmod +x run.sh
    run.sh <path to JAVAHOME(where the JDK is installed)>

(e.g. run.sh /files/JDK1.2/build/solaris)

-On Win95
    run.bat <path to JAVAHOME(where the JDK is installed)>

(e.g.  run.sh /home/kgrucci/jdk1.1fcs)

	If you don't have permission to write to the current directory,
then copy the contents of this directory to a work directory (e.g.
/tmp/juicer).  Then, cd to the work directory and do step 1.
Alternatively, on Solaris, you can create a scratch directory, cd to
it, and run run.sh from there, and the classfiles and temporaries will
be written into the current directory.  For example:

juicer% mkdir deadfrog; cd deadfrog
deadfrog% ../run.sh $JAVA_HOME

	These batch files will take care of everything.  The client and
server will run on the local host.  The juicer will run through one
iteration of recursive calls and then will report Success(0) or
Failure(1).  If an exception is thrown at any time, the errors will be
printed to the file, jlog.txt, in the current directory.


---------------------------------
Running the juicer under JavaTest
---------------------------------

If running under Solaris, JavaTest tool will automatically pick up
the `jtrun.sh' script, which runs `run.sh'.  Due to a wart in
java.awt.Applet, this needs to set the DISPLAY (the environment having
been cleansed by JavaTest) in order to run; jtrun.sh attempts to divine
$HOME and $XAUTHORITY, and sets $DISPLAY to ":0".

This should probably be done using pure Java, but the problems with
initialising DISPLAY and HOME need solving first.


------------------------------------------------- 
Running the juicer Client as an applet (GUI Mode) 
-------------------------------------------------

Startup 
-------

To run the juicer as an applet, you must do the following...

1.  Execute the following line on the server:

    java AppleUserImpl

2.  On the client execute:

    appletviewer index.html
    
    (index.html is the web page that references the applet.)

3.  Set the options on the user interface and press the "start"
button.  (See the option descriptions below.)

Any exceptions will be printed to the file, jlog.txt, in the current
directory.

Feedback is displayed in a text area on the applet and through the
standard output and error streams on the server.


Options
-------

The following options are available in configuring the juicer when run
in applet (GUI) mode...

1.  The "Number of Threads" that are specified will determine the
number of threads that will run in parallel on the server.

2.  The message array is the array of random integers that is passed in
recursive remote method calls.  The size of the message array can be
set to either...

	-a random integer (mod) (a value the user enters).  This allows a 
	random range of sizes to be used, i.e.  if a user enters 5, then 
	an array of size 0-4 will be created.

	-an exact integer value

3.  The recursion level determines how deep the recursive calls go before they
all return.  It can be set to either...

	-a random integer (mod) (a value the user enters).  This allows a 
	random range of levels to be used, i.e.  if a user enters 5, then a 
	level of 0-4 will be used.

	-an exact integer value

4.  The amount of iterations that occur within each Thread.  This can
be set to an exact integer value or to run forever.

5.  The juicer can be stopped by pressing the "Stop" button.  When this
button is pressed, each Server Thread will finish its current iteration
and then exit.

6.  The juicer output display has a limit as to how much text it can
hold.  The "Clear" button will clear the display and allow for new
output to be displayed.


