/* * Copyright (c) 2001, 2003, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ 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; /** * <p><code>Connection</code> represents a <em>transport</em> in the * PEPt architecture.</p> * * @author Harold Carr */ public interface Connection { /** * Used to determine if the <code>Connection</code> 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 <code>true</code> if it should be registered. */ public boolean shouldRegisterReadEvent(); /** * Used to determine if the <code>Connection</code> 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 <code>true</code> if it should be registered. */ public boolean shouldRegisterServerReadEvent(); // REVISIT - why special? /** * Called to read incoming messages. * * @return <code>true</code> if the thread calling read can be released. */ public boolean read(); /** * Close the <code>Connection</code>. * */ 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 <code>Connection</code>. * * @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 <code>Connection</code>. * * @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 <code>Acceptor</code>. * * @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 * <code>Connection</code>. * * @return <code>true</code> if <code>Connection</code> an * {@link com.sun.corba.se.pept.transport.Acceptor Acceptor} * created the <code>Connection</code>. */ public boolean isServer(); /** * Indicates if the <code>Connection</code> is in the process of * sending or receiving a message. * * @return <code>true</code> if the <code>Connection</code> is busy. */ public boolean isBusy(); /** * Timestamps are used for connection management, in particular, for * reclaiming idle <code>Connection</code>s. * * @return the "time" the <code>Connection</code> was last used. */ public long getTimeStamp(); /** * Timestamps are used for connection management, in particular, for * reclaiming idle <code>Connection</code>s. * * @param time - the "time" the <code>Connection</code> was last used. */ public void setTimeStamp(long time); /** * The "state" of the <code>Connection</code>. * * param state */ public void setState(String state); /** * Grab a write lock on the <code>Connection</code>. * * 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 <code>Connection</code>. */ public void writeUnlock(); /* * Send the data encoded in * {@link com.sun.corba.se.pept.encoding.OutputObject OutputObject} * on the <code>Connection</code>. * * @param outputObject */ public void sendWithoutLock(OutputObject outputObject); /** * Register an invocation's * {@link com.sun.corba.se.pept.protocol.MessageMediator MessageMediator} * with the <code>Connection</code>. * * 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 <code>Connection</code>. * * @param messageMediator */ public void unregisterWaiter(MessageMediator messageMediator); public void setConnectionCache(ConnectionCache connectionCache); public ConnectionCache getConnectionCache(); } // End of file.