/* * @(#)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.

* * @author Harold Carr */ public interface Connection { /** * 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 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 Connections. * * @return the "time" the Connection was last used. */ public long getTimeStamp(); /** * Timestamps are used for connection management, in particular, for * reclaiming idle Connections. * * @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.