예제 #1
0
파일: Page.java 프로젝트: nebnagrom/hornetq
  public synchronized void write(final PagedMessage message) throws Exception {
    if (!file.isOpen()) {

      return;
    }

    ByteBuffer buffer = fileFactory.newBuffer(message.getEncodeSize() + Page.SIZE_RECORD);

    HornetQBuffer wrap = HornetQBuffers.wrappedBuffer(buffer);
    wrap.clear();

    wrap.writeByte(Page.START_BYTE);
    wrap.writeInt(0);
    int startIndex = wrap.writerIndex();
    message.encode(wrap);
    int endIndex = wrap.writerIndex();
    wrap.setInt(1, endIndex - startIndex); // The encoded length
    wrap.writeByte(Page.END_BYTE);

    buffer.rewind();

    file.writeDirect(buffer, false);

    if (pageCache != null) {
      pageCache.addLiveMessage(message);
    }

    numberOfMessages.incrementAndGet();
    size.addAndGet(buffer.limit());

    storageManager.pageWrite(message, pageId);
  }
예제 #2
0
파일: Page.java 프로젝트: nebnagrom/hornetq
 public synchronized void close() throws Exception {
   if (storageManager != null) {
     storageManager.pageClosed(storeName, pageId);
   }
   if (pageCache != null) {
     pageCache.close();
     // leave it to the soft cache to decide when to release it now
     pageCache = null;
   }
   file.close();
 }