001 /* 002 * Copyright 2009 Red Hat, Inc. 003 * Red Hat licenses this file to you under the Apache License, version 004 * 2.0 (the "License"); you may not use this file except in compliance 005 * with the License. You may obtain a copy of the License at 006 * http://www.apache.org/licenses/LICENSE-2.0 007 * Unless required by applicable law or agreed to in writing, software 008 * distributed under the License is distributed on an "AS IS" BASIS, 009 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 010 * implied. See the License for the specific language governing 011 * permissions and limitations under the License. 012 */ 013 014 package org.hornetq.api.core.client; 015 016 import java.io.InputStream; 017 import java.io.OutputStream; 018 019 import org.hornetq.api.core.HornetQException; 020 import org.hornetq.api.core.Message; 021 022 /** 023 * 024 * A ClientMessage represents a message sent and/or received by HornetQ. 025 * 026 * @author <a href="mailto:tim.fox@jboss.com">Tim Fox</a> 027 * @author <a href="mailto:clebert.suconic@jboss.com">Clebert Suconic</a> 028 * 029 */ 030 public interface ClientMessage extends Message 031 { 032 /** 033 * Returns the number of times this message was delivered. 034 */ 035 int getDeliveryCount(); 036 037 /** 038 * Set the delivery count for this message. 039 * 040 * This method is not meant to be called by HornetQ clients. 041 * 042 * @param deliveryCount message delivery count 043 */ 044 void setDeliveryCount(int deliveryCount); 045 046 /** 047 * Acknowledge reception of this message. 048 * 049 * If the session responsible to acknowledge this message has {@code autoCommitAcks} 050 * set to {@code true}, the transaction will automatically commit the current transaction. 051 * Otherwise, this acknwoledgement will not be committed until the client commits the session transaction. 052 * 053 * @throws HornetQException if an error occured while acknowledging the message. 054 * 055 * @see ClientSession#isAutoCommitAcks() 056 */ 057 void acknowledge() throws HornetQException; 058 059 /** 060 * Return the size (in bytes) of this message's body 061 */ 062 int getBodySize(); 063 064 /** 065 * Sets the OutputStream that will receive the content of a message received in a non blocking way. 066 * <br> 067 * This method is used when consuming large messages 068 * 069 * @throws HornetQException 070 */ 071 void setOutputStream(OutputStream out) throws HornetQException; 072 073 /** 074 * Saves the content of the message to the OutputStream. 075 * It will block until the entire content is transfered to the OutputStream. 076 * <br> 077 * 078 * @throws HornetQException 079 */ 080 void saveToOutputStream(OutputStream out) throws HornetQException; 081 082 /** 083 * Wait the outputStream completion of the message. 084 * 085 * This method is used when consuming large messages 086 * 087 * @param timeMilliseconds - 0 means wait forever 088 * @return true if it reached the end 089 * @throws HornetQException 090 */ 091 boolean waitOutputStreamCompletion(long timeMilliseconds) throws HornetQException; 092 093 /** 094 * Sets the body's IntputStream. 095 * <br> 096 * This method is used when sending large messages 097 * 098 * @throws HornetQException 099 */ 100 void setBodyInputStream(InputStream bodyInputStream); 101 102 }