01 package timer;
02
03 import java.util.Date;
04 import com.bea.control.TimerControl;
05
06 /**
07 * <p>This web service is used by the AdvancedTimer sample. It a mock
08 * version of a legacy system that lacks the ability to call you back when its
09 * operation is complete. To get around this limitation, AdvancedTimer has to
10 * "poll" this service to determine when it's complete.</p>
11 *
12 * <p>This service has only a single operation that it can perform. To start this
13 * operation running, call <b>start</b>. Once <b>start</b> has been called, you can call
14 * <b>isDone</b> to determine if the operation has completed.</p>
15 *
16 * <p>We implement this operation by using a timer. The timer will fire between
17 * 10 and 20 seconds after the operation is started. Once the timer goes off,
18 * we will report the operation as completed.</p>
19 *
20 * @common:target-namespace namespace="http://workshop.bea.com/LegacySystem"
21 */
22 public class LegacySystem implements com.bea.jws.WebService
23 {
24 /**
25 * <p>This variable stores whether the operation has completed yet.
26 * It is made persistent by the presence of a "<b>@common:conversation start</b>" tag.</p>
27 */
28 private boolean complete;
29
30 /**
31 * @jc:timer
32 * @common:control
33 */
34 private com.bea.control.TimerControl timer;
35
36 /**
37 * <p>Starts a new instance of the operation running. This operation will
38 * complete in between 10 and 15 seconds.</p>
39 *
40 * @throws Exception As thrown by TimerControl.start or TimerControl.setTimeoutIn.
41 *
42 * @common:operation
43 * @jws:conversation phase="start"
44 */
45 public void start() throws Exception
46 {
47 int delay = 10 + (int)(11.0 * Math.random());
48
49 // This will set the timeout to occur in between 10 and 20 seconds.
50 timer.setTimeout((long)delay);
51
52 // This will tell the timer to call us back in the amount of time that
53 // we set above. Don't forget this part!
54 timer.start();
55
56 // We will not complete until the timer calls us back.
57 complete = false;
58 }
59
60 /**
61 * <p>Call this to determine if the operation has completed.</p>
62 *
63 * @returns Whether the operation has completed when called.
64 *
65 * @common:operation
66 * @jws:conversation phase="continue"
67 */
68 public boolean isDone()
69 {
70 return complete;
71 }
72
73 /** <p>When the timer calls us back, we have completed the operation.</p> */
74 private void timer_onTimeout(long time)
75 {
76 complete = true;
77 }
78
79 /**
80 * @common:operation
81 * @jws:conversation phase="finish"
82 */
83 public void finish()
84 {
85 }
86
87 }
|