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.LinkedList ; 35 import java.util.ListIterator ; 36 37 38 class LogFileEntryInsert extends LogFileEntry 39 { 40 private JmsMessage [] msgs; 41 42 43 47 LogFileEntryInsert() 48 { 49 this(null); 50 } 51 52 LogFileEntryInsert(JmsMessage [] msgs) 53 { 54 this.msgs = msgs; 55 } 56 57 61 62 boolean writeAndProcess(LinkedList mainQueue, 63 LinkedList pendingDelete, 64 HashSet persistentDelete, 65 DataOutput out) throws IOException 66 { 67 try { 68 logger.entry("writeAndProcess"); 69 70 int num_per = PersistentQueue.getNumPersistent(msgs); 71 if (num_per == 0) { 72 restore(mainQueue, pendingDelete, persistentDelete); 73 return false; 74 } 75 out.writeInt(INSERT); 76 out.writeInt(num_per); 77 78 for (int i = 0; i < msgs.length; i++) { 79 JmsMessage message = msgs[i]; 80 if (PersistentQueue.isMessagePersistent(message)) { 81 if (logger.isDebugEnabled()) { 82 logger.debug("Writing Message to Log:"+message); 83 } 84 MessageEncoder.encode(message, out); 85 } 86 } 87 88 restore(mainQueue, pendingDelete, persistentDelete); 89 return true; 90 } 91 finally { 92 logger.exit("write"); 93 } 94 } 95 96 97 void read(DataInput in) throws IOException , EOFException 98 { 99 try { 100 logger.entry("read"); 101 JmsMessage [] temp = new JmsMessage[in.readInt()]; 102 103 for (int i = 0; i < temp.length; i++) { 104 temp[i] = MessageEncoder.decode(in); 105 if (logger.isDebugEnabled()) { 106 logger.debug("Reading Message:"+temp[i]); 107 } 108 } 109 msgs = temp; 110 } 111 finally { 112 logger.exit("read"); 113 } 114 } 115 116 void restore(LinkedList mainQueue, 117 LinkedList pendingDelete, 118 HashSet persistentDelete) 119 { 120 for (int i = 0; i < msgs.length; i++) { 121 mainQueue.addLast(msgs[i]); 122 } 123 } 124 125 126 private static Logger logger = 128 LoggerFactory.getLogger(LogFileEntryInsert.class, Resources.getBundle()); 129 } 131 | Popular Tags |