01: package org.jgroups;
02:
03: import java.io.OutputStream;
04:
05: /**
06: *
07: * Represents an event returned by <code>channel.receive()</code>, as a result
08: * of another channel instance requesting a state from this channel. Other channel
09: * has to invoke <code>channel.getState()</code> indicating intent of state
10: * retrieval.
11: *
12: * <p>
13: *
14: * Allows applications using a channel in a pull mode to receive
15: * <code>StreamingGetStateEvent</code> event and thus provide state to requsting
16: * channel instance. Channels have to be configured with
17: * <code>STREAMING_STATE_TRANSFER</code> protocol rather than the default
18: * <code>STATE_TRANSFER</code> protocol in order to receive this event
19: *
20: * <p>
21: *
22: * The following code demonstrates how to pull events from a channel, processing
23: * <code>StreamingGetStateEvent</code> and sending hypothetical state through
24: * <code>OutputStream</code> reference.
25: *
26: * <blockquote><pre>
27: * Object obj=channel.receive(0);
28: * if(obj instanceof StreamingGetStateEvent) {
29: * StreamingGetStateEvent evt=(StreamingGetStateEvent)obj;
30: * OutputStream oos = null;
31: * try {
32: * oos = new ObjectOutputStream(evt.getArg());
33: * oos.writeObject(state);
34: * oos.flush();
35: * } catch (Exception e) {}
36: * finally
37: * {
38: * try {
39: * oos.close();
40: * } catch (IOException e) {
41: * System.err.println(e);
42: * }
43: * }
44: * }
45: * </pre></blockquote>
46: *
47: *
48: * @author Vladimir Blagojevic
49: * @see org.jgroups.JChannel#getState(Address, long)
50: * @see org.jgroups.StreamingMessageListener#getState(OutputStream)
51: * @since 2.4
52: *
53: */
54:
55: public class StreamingGetStateEvent {
56:
57: OutputStream os;
58: String state_id;
59:
60: public StreamingGetStateEvent(OutputStream os, String state_id) {
61: super ();
62: this .os = os;
63: this .state_id = state_id;
64: }
65:
66: /**
67: * Returns OutputStream used for writing of a state.
68: *
69: * @return the OutputStream
70: */
71: public OutputStream getArg() {
72: return os;
73: }
74:
75: /**
76: * Returns id of the partial state if partial state was requested.
77: * If full state transfer was requested this method will return null.
78: *
79: * @see JChannel#getState(Address, long)
80: * @see JChannel#getState(Address, String, long)
81: * @return partial state id
82: */
83: public String getStateId() {
84: return state_id;
85: }
86:
87: }
|