org.jscience.computing.distributed.server
Class SingleServerWrapper

java.lang.Object
  extended by org.jscience.computing.distributed.server.SingleServerWrapper
All Implemented Interfaces:
java.rmi.Remote, InteractiveTaskServer

public class SingleServerWrapper
extends java.lang.Object
implements InteractiveTaskServer

This wrapper simplifies the process of making your own server. It hides all the ugly RMI calls and allows you to concentrate on implementing the main ITServer methods. It takes an InteractiveTaskServer class through the command line, loads it, and does the necesary RMI binding.

SingleServerWrapper offers the possibility of forcing RMI traffic to go through a specified port. This is NOT the port of the RMI Registry which is at 1099 by default. RMI uses another port to handle connections with clients. This is the port which can be configured here. If ommited, the default Java behaviour is to pick a random port each time.

A SingleServerWrapper can be constructed through the command line passing the class name of the InteractiveTaskServer to load followed by the name by which it should be bound in the RMI Registry followed by Strings to be passed to the constructor of this class inside an ArrayList. A '-p' argument followed by an integer will define the handling port for RMI to use.

Alternately, a SingleServerWrapper Object can be created using the constructors directly and calling the bindServer method to bind it to the RMI Registry.


Field Summary
protected  java.lang.String bindingName
           
protected  InteractiveTaskServer inITS
           
protected  int trafficPort
           
 
Constructor Summary
SingleServerWrapper(InteractiveTaskServer inITS, java.lang.String bindingName)
          Creates a new instance of SingleServerWrapper
SingleServerWrapper(InteractiveTaskServer inITS, java.lang.String bindingName, int trafficPort)
          Creates a new instance of SingleServerWrapper
 
Method Summary
protected  void bindServer()
           
 java.lang.Object getID(java.lang.Object initialParameters)
          Called by clients the first time they connect.
 InteractiveTask getTask(java.lang.Object id)
          This will provide the client with the InteractiveTask it should run.
protected static void handleException(java.lang.Exception e)
           
 java.lang.Object interact(java.lang.Object ID, java.lang.Object clientTaskOutput)
          Called by clients when they wish to interact.
static void main(java.lang.String[] args)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

inITS

protected InteractiveTaskServer inITS

bindingName

protected java.lang.String bindingName

trafficPort

protected int trafficPort
Constructor Detail

SingleServerWrapper

public SingleServerWrapper(InteractiveTaskServer inITS,
                           java.lang.String bindingName)
                    throws java.rmi.RemoteException
Creates a new instance of SingleServerWrapper

Parameters:
inITS - InteractiveTaskServer object we wan't to bind using this wrapper.
bindingName - Name under which to bind this server into the RMI Registry.
Throws:
java.rmi.RemoteException

SingleServerWrapper

public SingleServerWrapper(InteractiveTaskServer inITS,
                           java.lang.String bindingName,
                           int trafficPort)
                    throws java.rmi.RemoteException
Creates a new instance of SingleServerWrapper

Parameters:
inITS - InteractiveTaskServer object we wan't to bind using this wrapper.
bindingName - Name under which to bind this server into the RMI Registry.
trafficPort - Port to use for all RMI traffic. This is different to the RMI Registry port which is 1099 by default.
Throws:
java.rmi.RemoteException
Method Detail

main

public static void main(java.lang.String[] args)
Parameters:
args - the command line arguments. The first argument should be the class name of your interactive task server class to be wrapping around. This class should either have a constructor with no arguments or in the case that extra command line arguments have been supplied, a constructor with a single paramater of type ArrayList which will include String objects representing the extra command line arguments. . The second argument should be the RMI binding name you wish to use, which is the name clients will refer to this server by. A '-p' argument followed by an integer will define the handling port for RMI to use.

handleException

protected static void handleException(java.lang.Exception e)

bindServer

protected void bindServer()
                   throws java.rmi.RemoteException,
                          java.net.MalformedURLException,
                          java.io.IOException
Throws:
java.rmi.RemoteException
java.net.MalformedURLException
java.io.IOException

getID

public java.lang.Object getID(java.lang.Object initialParameters)
                       throws java.rmi.RemoteException
Called by clients the first time they connect.

Specified by:
getID in interface InteractiveTaskServer
Parameters:
initialParameters - Initial parameters from client local configuration. The current client implementation, see InteractiveTaskClient, provides the ip address of the client and the command line paramaters used to launch the client. These are packaged in a Vector.
Returns:
The ID of this client will from now on used for interaction with the server.
Throws:
java.rmi.RemoteException - DOCUMENT ME!

getTask

public InteractiveTask getTask(java.lang.Object id)
                        throws java.rmi.RemoteException
This will provide the client with the InteractiveTask it should run.

Specified by:
getTask in interface InteractiveTaskServer
Parameters:
id - The ID provided by the getID method by which the client will always refer to itself.
Returns:
The task this client should run. This could be exactly the same as the one all other clients are running or tailored to this particular client.
Throws:
java.rmi.RemoteException - DOCUMENT ME!

interact

public java.lang.Object interact(java.lang.Object ID,
                                 java.lang.Object clientTaskOutput)
                          throws java.rmi.RemoteException
Called by clients when they wish to interact.

Specified by:
interact in interface InteractiveTaskServer
Parameters:
ID - the client's ID
clientTaskOutput - the outputs of the client obtained by task.get( null ) on the client task
Returns:
whatever should be sent into the client through task.set( )
Throws:
java.rmi.RemoteException - DOCUMENT ME!