/* * @(#)Connection.java 1.21 03/12/19 * * Copyright 2004 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */ package com.sun.corba.se.pept.transport; import java.io.IOException; import com.sun.corba.se.pept.encoding.InputObject; import com.sun.corba.se.pept.encoding.OutputObject; import com.sun.corba.se.pept.protocol.MessageMediator; import com.sun.corba.se.pept.transport.EventHandler; /** *
Connection
represents a transport in the
* PEPt architecture.
Connection
should register
* with the
* {@link com.sun.corba.se.pept.transport.TransportManager
* TransportManager}
* {@link com.sun.corba.se.pept.transport.Selector Selector}
* to handle read events.
*
* For example, an HTTP transport would not register since the requesting
* thread would just block on read when waiting for the reply.
*
* @return true
if it should be registered.
*/
public boolean shouldRegisterReadEvent();
/**
* Used to determine if the Connection
should register
* with the
* {@link com.sun.corba.se.pept.transport.TransportManager
* TransportManager}
* {@link com.sun.corba.se.pept.transport.Selector Selector}
* to handle read events.
*
* For example, an HTTP transport would not register since the requesting
* thread would just block on read when waiting for the reply.
*
* @return true
if it should be registered.
*/
public boolean shouldRegisterServerReadEvent(); // REVISIT - why special?
/**
* Called to read incoming messages.
*
* @return true
if the thread calling read can be released.
*/
public boolean read();
/**
* Close the Connection
.
*
*/
public void close();
// REVISIT: replace next two with PlugInFactory (implemented by ContactInfo
// and Acceptor).
/**
* Get the
* {@link com.sun.corba.se.pept.transport.Acceptor Acceptor}
* that created this Connection
.
*
* @return
* {@link com.sun.corba.se.pept.transport.Acceptor Acceptor}
*/
public Acceptor getAcceptor();
/**
* Get the
* {@link com.sun.corba.se.pept.transport.ContactInfo ContactInfo}
* that created this Connection
.
*
* @return
* {@link com.sun.corba.se.pept.transport.ContactInfo ContactInfo}
*/
public ContactInfo getContactInfo();
/**
* Get the
* {@link com.sun.corba.se.pept.transport.EventHandler EventHandler}
* associated with this Acceptor
.
*
* @return
* {@link com.sun.corba.se.pept.transport.EventHandler EventHandler}
*/
public EventHandler getEventHandler();
/**
* Indicates whether a
* {@link com.sun.corba.se.pept.transport.ContactInfo ContactInfo}
* or a
* {@link com.sun.corba.se.pept.transport.Acceptor Acceptor}
* created the
* Connection
.
*
* @return true
if Connection
an
* {@link com.sun.corba.se.pept.transport.Acceptor Acceptor}
* created the Connection
.
*/
public boolean isServer();
/**
* Indicates if the Connection
is in the process of
* sending or receiving a message.
*
* @return true
if the Connection
is busy.
*/
public boolean isBusy();
/**
* Timestamps are used for connection management, in particular, for
* reclaiming idle Connection
s.
*
* @return the "time" the Connection
was last used.
*/
public long getTimeStamp();
/**
* Timestamps are used for connection management, in particular, for
* reclaiming idle Connection
s.
*
* @param time - the "time" the Connection
was last used.
*/
public void setTimeStamp(long time);
/**
* The "state" of the Connection
.
*
* param state
*/
public void setState(String state);
/**
* Grab a write lock on the Connection
.
*
* If another thread already has a write lock then the calling
* thread will block until the lock is released. The calling
* thread must call
* {@link #writeUnlock}
* when it is done.
*/
public void writeLock();
/**
* Release a write lock on the Connection
.
*/
public void writeUnlock();
/*
* Send the data encoded in
* {@link com.sun.corba.se.pept.encoding.OutputObject OutputObject}
* on the Connection
.
*
* @param outputObject
*/
public void sendWithoutLock(OutputObject outputObject);
/**
* Register an invocation's
* {@link com.sun.corba.se.pept.protocol.MessageMediator MessageMediator}
* with the Connection
.
*
* This is useful in protocols which support fragmentation.
*
* @param messageMediator
*/
public void registerWaiter(MessageMediator messageMediator);
/**
* If a message expect's a response then this method is called.
*
* This method might block on a read (e.g., HTTP), put the calling
* thread to sleep while another thread read's the response (e.g., GIOP),
* or it may use the calling thread to perform the server-side work
* (e.g., Solaris Doors).
*
* @param messageMediator
*/
public InputObject waitForResponse(MessageMediator messageMediator);
/**
* Unregister an invocation's
* {@link com.sun.corba.se.pept.protocol.MessageMediator MessageMediator}
* with the Connection
.
*
* @param messageMediator
*/
public void unregisterWaiter(MessageMediator messageMediator);
public void setConnectionCache(ConnectionCache connectionCache);
public ConnectionCache getConnectionCache();
}
// End of file.