1 46 51 package org.mr.core.protocol; 52 53 54 55 import java.io.IOException ; 56 import java.nio.ByteBuffer ; 57 58 import org.mr.core.util.byteable.ByteBufferFactory; 59 import org.mr.core.util.byteable.Byteable; 60 import org.mr.core.util.byteable.IncomingByteBufferPool; 61 62 63 71 public class PayloadContainer { 72 73 74 private Byteable payloadObject = null; 76 private ByteBuffer payloadBuffer = null; 78 private ByteBuffer toReleaseBuffer = null; 79 80 public PayloadContainer(Byteable payload){ 81 payloadObject = payload; 82 } 83 84 protected PayloadContainer(ByteBuffer buffer){ 85 this.payloadBuffer = buffer.slice(); 86 this.toReleaseBuffer = buffer; 87 } 88 89 92 public final synchronized Byteable getPayloadObject() throws IOException { 93 if (this.payloadObject == null && this.payloadBuffer != null) { 98 this.payloadObject = 99 MessageTransformer.byteableFormBuffer(this.payloadBuffer); 100 IncomingByteBufferPool.getInstance().release(this.toReleaseBuffer); 101 } 102 return payloadObject; 103 } 104 105 108 public final synchronized ByteBuffer getSerializedPayload() throws IOException { 109 if (payloadObject == null && payloadBuffer != null) { 115 return payloadBuffer; 116 } else { 117 if(toReleaseBuffer ==null){ 118 if(payloadObject != null){ 119 synchronized(payloadObject){ 120 this.toReleaseBuffer = MessageTransformer.byteableToBuffer(payloadObject, MessageTransformer.messageBodyBufferPool); 121 } 122 }else{ 123 this.toReleaseBuffer = MessageTransformer.byteableToBuffer(payloadObject, MessageTransformer.messageBodyBufferPool); 124 } 125 } 126 127 128 return toReleaseBuffer; 129 } 131 } 132 133 143 private int releaseCount = 0; 144 public synchronized final void release() { 145 releaseCount++; 146 ByteBufferFactory pool = null; 147 148 if (this.payloadObject != null) { 149 pool = MessageTransformer.messageBodyBufferPool; 150 } else { 151 pool = IncomingByteBufferPool.getInstance(); 152 } 153 154 if (this.toReleaseBuffer != null) { 155 pool.release(this.toReleaseBuffer); 156 toReleaseBuffer = null; 158 } 159 160 } 161 162 public String toString(){ 163 StringBuffer buff = new StringBuffer (); 164 buff.append("{payload object = "); 165 buff.append(payloadObject); 166 buff.append("}"); 169 return buff.toString(); 170 } 171 172 173 174 175 } 176 | Popular Tags |