FileDocCategorySizeDatePackage
BootstrapServerRequestDispatcher.javaAPI DocJava SE 5 API4311Fri Aug 26 14:54:30 BST 2005com.sun.corba.se.impl.protocol

BootstrapServerRequestDispatcher

public class BootstrapServerRequestDispatcher extends Object implements com.sun.corba.se.spi.protocol.CorbaServerRequestDispatcher
Class BootstrapServerRequestDispatcher handles the requests coming to the BootstrapServer. It implements Server so that it can be registered as a subcontract. It is passed a BootstrapServiceProperties object which contains the supported ids and their values for the bootstrap service. This Properties object is only read from, never written to, and is shared among all threads.

The BootstrapServerRequestDispatcher responds primarily to GIOP requests, but LocateRequests are also handled for graceful interoperability. The BootstrapServerRequestDispatcher handles one request at a time.

Fields Summary
private com.sun.corba.se.spi.orb.ORB
orb
com.sun.corba.se.impl.logging.ORBUtilSystemException
wrapper
private static final boolean
debug
Constructors Summary
public BootstrapServerRequestDispatcher(com.sun.corba.se.spi.orb.ORB orb)


       
    
	this.orb = orb;
	this.wrapper = ORBUtilSystemException.get( orb,
	    CORBALogDomains.RPC_PROTOCOL ) ;
    
Methods Summary
public voiddispatch(com.sun.corba.se.pept.protocol.MessageMediator messageMediator)
Dispatch is called by the ORB and will serve get(key) and list() invocations on the initial object key.

	CorbaMessageMediator request = (CorbaMessageMediator) messageMediator;
	CorbaMessageMediator response = null;

	try {
	    MarshalInputStream is = (MarshalInputStream) 
		request.getInputObject();
	    String method = request.getOperationName();
	    response = request.getProtocolHandler().createResponse(request, null);
	    MarshalOutputStream os = (MarshalOutputStream) 
		response.getOutputObject();

            if (method.equals("get")) {
                // Get the name of the requested service
                String serviceKey = is.read_string();

                // Look it up
		org.omg.CORBA.Object serviceObject = 
		    orb.getLocalResolver().resolve( serviceKey ) ;

                // Write reply value
                os.write_Object(serviceObject);
            } else if (method.equals("list")) {
		java.util.Set keys = orb.getLocalResolver().list() ;
		os.write_long( keys.size() ) ;
		Iterator iter = keys.iterator() ;
		while (iter.hasNext()) {
		    String obj = (String)iter.next() ;
		    os.write_string( obj ) ;
		}
	    } else {
		throw wrapper.illegalBootstrapOperation( method ) ;
            }

	} catch (org.omg.CORBA.SystemException ex) {
            // Marshal the exception thrown
	    response = request.getProtocolHandler().createSystemExceptionResponse(
		request, ex, null);
	} catch (java.lang.RuntimeException ex) {
            // Unknown exception
	    SystemException sysex = wrapper.bootstrapRuntimeException( ex ) ;
	    response = request.getProtocolHandler().createSystemExceptionResponse(
                 request, sysex, null ) ;
	} catch (java.lang.Exception ex) {
            // Unknown exception
	    SystemException sysex = wrapper.bootstrapException( ex ) ;
	    response = request.getProtocolHandler().createSystemExceptionResponse(
                 request, sysex, null ) ;
	}

	return;
    
public intgetId()
Not implemented

	throw wrapper.genericNoImpl() ;
    
public com.sun.corba.se.spi.ior.IORlocate(com.sun.corba.se.spi.ior.ObjectKey objectKey)
Locates the object mentioned in the locate requests, and returns object here iff the object is the initial object key. A SystemException thrown if the object key is not the initial object key.

	return null;