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