springs.classloader
Class ClassServer

java.lang.Object
  |
  +--springs.classloader.ClassServer
All Implemented Interfaces:
java.lang.Runnable
Direct Known Subclasses:
ClassFileServer

public abstract class ClassServer
extends java.lang.Object
implements java.lang.Runnable

ClassServer is an abstract class that provides the basic functionality of a mini-webserver, specialized to load class files only. A ClassServer must be extended and the concrete subclass should define the getBytes method which is responsible for retrieving the bytecodes for a class.

The ClassServer creates a thread that listens on a socket and accepts HTTP GET requests. The HTTP response contains the bytecodes for the class that requested in the GET header.

For loading remote classes, an RMI application can use a concrete subclass of this server in place of an HTTP server.

See Also:
ClassFileServer

Field Summary
private  int port
           
private  java.net.ServerSocket server
           
 
Constructor Summary
protected ClassServer(int port)
          Constructs a ClassServer that listens on port and obtains a class's bytecodes using the method getBytes.
 
Method Summary
abstract  byte[] getBytes(java.lang.String path)
          Returns an array of bytes containing the bytecodes for the class represented by the argument path.
private static java.lang.String getPath(java.io.DataInputStream in)
          Returns the path to the class file obtained from parsing the HTML header.
private  void newListener()
          Create a new thread to listen.
 void run()
          The "listen" thread that accepts a connection to the server, parses the header to obtain the class file name and sends back the bytecodes for the class (or error if the class is not found or the response was malformed).
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

server

private java.net.ServerSocket server

port

private int port
Constructor Detail

ClassServer

protected ClassServer(int port)
               throws java.io.IOException
Constructs a ClassServer that listens on port and obtains a class's bytecodes using the method getBytes.

Parameters:
port - the port number
Throws:
java.io.IOException - if the ClassServer could not listen on port.
Method Detail

getBytes

public abstract byte[] getBytes(java.lang.String path)
                         throws java.io.IOException,
                                java.lang.ClassNotFoundException
Returns an array of bytes containing the bytecodes for the class represented by the argument path. The path is a dot separated class name with the ".class" extension removed.

Returns:
the bytecodes for the class
Throws:
java.lang.ClassNotFoundException - if the class corresponding to path could not be loaded.
java.io.IOException - if error occurs reading the class

run

public void run()
The "listen" thread that accepts a connection to the server, parses the header to obtain the class file name and sends back the bytecodes for the class (or error if the class is not found or the response was malformed).

Specified by:
run in interface java.lang.Runnable

newListener

private void newListener()
Create a new thread to listen.


getPath

private static java.lang.String getPath(java.io.DataInputStream in)
                                 throws java.io.IOException
Returns the path to the class file obtained from parsing the HTML header.

java.io.IOException