Connection.java revision 608:7e06bf1dcb09
1/*
2 * Copyright (c) 2001, 2003, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.  Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26package com.sun.corba.se.pept.transport;
27
28import java.io.IOException;
29
30import com.sun.corba.se.pept.encoding.InputObject;
31import com.sun.corba.se.pept.encoding.OutputObject;
32import com.sun.corba.se.pept.protocol.MessageMediator;
33import com.sun.corba.se.pept.transport.EventHandler;
34
35
36/**
37 * <p><code>Connection</code> represents a <em>transport</em> in the
38 * PEPt architecture.</p>
39 *
40 * @author Harold Carr
41*/
42public interface Connection
43{
44    /**
45     * Used to determine if the <code>Connection</code> should register
46     * with the
47     * {@link com.sun.corba.se.pept.transport.TransportManager
48     * TransportManager}
49     * {@link com.sun.corba.se.pept.transport.Selector Selector}
50     * to handle read events.
51     *
52     * For example, an HTTP transport would not register since the requesting
53     * thread would just block on read when waiting for the reply.
54     *
55     * @return <code>true</code> if it should be registered.
56     */
57    public boolean shouldRegisterReadEvent();
58
59    /**
60     * Used to determine if the <code>Connection</code> should register
61     * with the
62     * {@link com.sun.corba.se.pept.transport.TransportManager
63     * TransportManager}
64     * {@link com.sun.corba.se.pept.transport.Selector Selector}
65     * to handle read events.
66     *
67     * For example, an HTTP transport would not register since the requesting
68     * thread would just block on read when waiting for the reply.
69     *
70     * @return <code>true</code> if it should be registered.
71     */
72    public boolean shouldRegisterServerReadEvent(); // REVISIT - why special?
73
74    /**
75     * Called to read incoming messages.
76     *
77     * @return <code>true</code> if the thread calling read can be released.
78     */
79    public boolean read();
80
81    /**
82     * Close the <code>Connection</code>.
83     *
84     */
85    public void close();
86
87    // REVISIT: replace next two with PlugInFactory (implemented by ContactInfo
88    // and Acceptor).
89
90    /**
91     * Get the
92     * {@link com.sun.corba.se.pept.transport.Acceptor Acceptor}
93     * that created this <code>Connection</code>.
94     *
95     * @return
96     * {@link com.sun.corba.se.pept.transport.Acceptor Acceptor}
97     */
98    public Acceptor getAcceptor();
99
100    /**
101     * Get the
102     * {@link com.sun.corba.se.pept.transport.ContactInfo ContactInfo}
103     * that created this <code>Connection</code>.
104     *
105     * @return
106     * {@link com.sun.corba.se.pept.transport.ContactInfo ContactInfo}
107     */
108    public ContactInfo getContactInfo();
109
110    /**
111     * Get the
112     * {@link com.sun.corba.se.pept.transport.EventHandler EventHandler}
113     * associated with this <code>Acceptor</code>.
114     *
115     * @return
116     * {@link com.sun.corba.se.pept.transport.EventHandler EventHandler}
117     */
118    public EventHandler getEventHandler();
119
120    /**
121     * Indicates whether a
122     * {@link com.sun.corba.se.pept.transport.ContactInfo ContactInfo}
123     * or a
124     * {@link com.sun.corba.se.pept.transport.Acceptor Acceptor}
125     * created the
126     * <code>Connection</code>.
127     *
128     * @return <code>true</code> if <code>Connection</code> an
129     * {@link com.sun.corba.se.pept.transport.Acceptor Acceptor}
130     * created the <code>Connection</code>.
131     */
132    public boolean isServer();
133
134    /**
135     * Indicates if the <code>Connection</code> is in the process of
136     * sending or receiving a message.
137     *
138     * @return <code>true</code> if the <code>Connection</code> is busy.
139     */
140    public boolean isBusy();
141
142    /**
143     * Timestamps are used for connection management, in particular, for
144     * reclaiming idle <code>Connection</code>s.
145     *
146     * @return the "time" the <code>Connection</code> was last used.
147     */
148    public long getTimeStamp();
149
150    /**
151     * Timestamps are used for connection management, in particular, for
152     * reclaiming idle <code>Connection</code>s.
153     *
154     * @param time - the "time" the <code>Connection</code> was last used.
155     */
156    public void setTimeStamp(long time);
157
158    /**
159     * The "state" of the <code>Connection</code>.
160     *
161     * param state
162     */
163    public void setState(String state);
164
165    /**
166     * Grab a write lock on the <code>Connection</code>.
167     *
168     * If another thread already has a write lock then the calling
169     * thread will block until the lock is released.  The calling
170     * thread must call
171     * {@link #writeUnlock}
172     * when it is done.
173     */
174    public void writeLock();
175
176    /**
177     * Release a write lock on the <code>Connection</code>.
178     */
179    public void writeUnlock();
180
181    /*
182     * Send the data encoded in
183     * {@link com.sun.corba.se.pept.encoding.OutputObject OutputObject}
184     * on the <code>Connection</code>.
185     *
186     * @param outputObject
187     */
188    public void sendWithoutLock(OutputObject outputObject);
189
190    /**
191     * Register an invocation's
192     * {@link com.sun.corba.se.pept.protocol.MessageMediator MessageMediator}
193     * with the <code>Connection</code>.
194     *
195     * This is useful in protocols which support fragmentation.
196     *
197     * @param messageMediator
198     */
199    public void registerWaiter(MessageMediator messageMediator);
200
201    /**
202     * If a message expect's a response then this method is called.
203     *
204     * This method might block on a read (e.g., HTTP), put the calling
205     * thread to sleep while another thread read's the response (e.g., GIOP),
206     * or it may use the calling thread to perform the server-side work
207     * (e.g., Solaris Doors).
208     *
209     * @param messageMediator
210     */
211    public InputObject waitForResponse(MessageMediator messageMediator);
212
213    /**
214     * Unregister an invocation's
215     * {@link com.sun.corba.se.pept.protocol.MessageMediator MessageMediator}
216     * with the <code>Connection</code>.
217     *
218     * @param messageMediator
219     */
220    public void unregisterWaiter(MessageMediator messageMediator);
221
222    public void setConnectionCache(ConnectionCache connectionCache);
223
224    public ConnectionCache getConnectionCache();
225}
226
227// End of file.
228