1 package org.codehaus.xfire.transport;
2
3 import java.util.HashMap;
4 import java.util.Iterator;
5 import java.util.List;
6 import java.util.Map;
7
8 import org.codehaus.xfire.handler.AbstractHandlerSupport;
9 import org.codehaus.xfire.util.UID;
10
11 /***
12 * @author <a href="mailto:dan@envoisolutions.com">Dan Diephouse</a>
13 * @since Dec 21, 2004
14 */
15 public abstract class AbstractTransport
16 extends AbstractHandlerSupport
17 implements Transport
18 {
19 private List inHandlers;
20 private List outHandlers;
21 private List faultHandlers;
22
23 private Map
24
25 /***
26 * Disposes all the existing channels.
27 */
28 public void dispose()
29 {
30 for (Iterator itr = channels.values().iterator(); itr.hasNext();)
31 {
32 Channel channel = (Channel) itr.next();
33 channel.close();
34 }
35 }
36
37 public Channel createChannel() throws Exception
38 {
39 return createChannel(getUriPrefix() + UID.generate());
40 }
41
42 public Channel createChannel(String uri) throws Exception
43 {
44 Channel c = (Channel) channels.get(uri);
45
46 if (c == null)
47 {
48 c = createNewChannel(uri);
49
50 channels.put(c.getUri(), c);
51
52 c.open();
53 }
54
55 return c;
56 }
57
58 protected Map getChannelMap()
59 {
60 return channels;
61 }
62
63 protected abstract Channel createNewChannel(String uri);
64 protected abstract String getUriPrefix();
65 }