01: package org.objectweb.celtix.bus.ws.rm;
02:
03: import java.io.IOException;
04: import java.util.ArrayList;
05: import java.util.Collection;
06: import java.util.logging.Level;
07: import java.util.logging.Logger;
08:
09: import org.objectweb.celtix.bus.configuration.wsrm.SequenceTerminationPolicyType;
10: import org.objectweb.celtix.buslifecycle.BusLifeCycleListener;
11: import org.objectweb.celtix.common.i18n.Message;
12: import org.objectweb.celtix.common.logging.LogUtils;
13:
14: public class RMBusLifeCycleListener implements BusLifeCycleListener {
15:
16: private static final Logger LOG = LogUtils
17: .getL7dLogger(RMBusLifeCycleListener.class);
18:
19: private RMSource source;
20:
21: protected RMBusLifeCycleListener(RMSource s) {
22: source = s;
23: }
24:
25: public void initComplete() {
26: }
27:
28: public void postShutdown() {
29: }
30:
31: public void preShutdown() {
32: terminateSequences();
33: }
34:
35: private void terminateSequences() {
36:
37: SequenceTerminationPolicyType st = source
38: .getSequenceTerminationPolicy();
39: if (!st.isTerminateOnShutdown()) {
40: LOG.fine("No need to terminate sequences on shutdown");
41: return;
42: }
43:
44: Collection<SourceSequence> seqs = source
45: .getAllUnacknowledgedSequences();
46:
47: LOG.fine("Trying to terminate " + seqs.size() + " sequences");
48:
49: Collection<SourceSequence> closedSeqs = new ArrayList<SourceSequence>();
50:
51: for (SourceSequence seq : seqs) {
52: if (seq.isLastMessage()) {
53: closedSeqs.add(seq);
54: } else {
55: try {
56: source.getHandler().getProxy().lastMessage(seq);
57: } catch (IOException ex) {
58: Message msg = new Message("LAST_MESSAGE_SEND_EXC",
59: LOG, seq);
60: LOG.log(Level.WARNING, msg.toString(), ex);
61: }
62: }
63: }
64:
65: if (closedSeqs.size() > 0) {
66: try {
67: source.getHandler().getProxy().requestAcknowledgment(
68: seqs);
69: } catch (IOException ex) {
70: Message msg = new Message("ACK_REQUESTED_SEND_EXC", LOG);
71: LOG.log(Level.WARNING, msg.toString(), ex);
72: }
73: }
74: }
75:
76: }
|