1 20 package com.presumo.jms.persistence; 21 22 import com.presumo.jms.message.JmsMessage; 23 import com.presumo.jms.message.MessageEncoder; 24 import com.presumo.jms.resources.Resources; 25 import com.presumo.util.log.Logger; 26 import com.presumo.util.log.LoggerFactory; 27 28 import java.io.DataInput ; 29 import java.io.DataOutput ; 30 import java.io.EOFException ; 31 import java.io.IOException ; 32 33 import java.util.HashSet ; 34 import java.util.Iterator ; 35 import java.util.LinkedList ; 36 import java.util.ListIterator ; 37 38 41 class LogFileEntryGetNext extends LogFileEntry 42 { 43 private int num_entries; 44 45 46 LogFileEntryGetNext() 50 { 51 this(0); 52 } 53 54 55 LogFileEntryGetNext(int num_entries) 56 { 57 this.num_entries = num_entries; 58 } 59 60 61 65 boolean writeAndProcess(LinkedList mainQueue, 66 LinkedList pendingDelete, 67 HashSet persistentDelete, 68 DataOutput out) throws IOException 69 { 70 try { 71 logger.entry("write"); 72 int num_to_move = 0; 73 int num_persistent = 0; 74 Iterator it = mainQueue.iterator(); 75 76 for (int i = 0; i < num_entries && it.hasNext(); i++) { 77 num_to_move++; 78 JmsMessage msg = (JmsMessage)it.next(); 79 if (PersistentQueue.isMessagePersistent(msg)) { 80 num_persistent++; 81 } 82 } 83 84 if (num_persistent == 0) { 85 process(mainQueue, pendingDelete, persistentDelete, num_to_move); 86 return false; 87 } 88 out.writeInt(GET_NEXT); 89 out.writeInt(num_persistent); 90 process(mainQueue, pendingDelete, persistentDelete, num_to_move); 91 return true; 92 } 93 finally { 94 logger.exit("write"); 95 } 96 } 97 98 99 void read(DataInput in) throws IOException , EOFException 100 { 101 try { 102 logger.entry("read"); 103 num_entries = in.readInt(); 104 } 105 finally { 106 logger.exit("read"); 107 } 108 } 109 110 111 private void process(LinkedList mainQueue, 112 LinkedList pendingDelete, 113 HashSet persistentDelete, 114 int num) 115 { 116 for (int i = 0; i < num; i++) { 117 JmsMessage msg = (JmsMessage) mainQueue.removeFirst(); 118 if (PersistentQueue.isMessagePersistent(msg)) { 119 persistentDelete.add(msg.getJMSMessageID()); 120 pendingDelete.addLast(msg); 122 } 123 124 } 125 } 126 127 128 void restore(LinkedList mainQueue, 129 LinkedList pendingDelete, 130 HashSet persistentDelete) 131 { 132 process(mainQueue,pendingDelete,persistentDelete,num_entries); 133 } 134 135 136 private static Logger logger = 138 LoggerFactory.getLogger(LogFileEntryGetNext.class, Resources.getBundle()); 139 } 141 | Popular Tags |