/* * Copyright 2003,2004 Colin Crist * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ package hermes.providers.file; import hermes.HermesException; import java.io.IOException; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import javax.jms.Destination; import javax.jms.JMSException; import javax.jms.Message; import javax.jms.Queue; import javax.jms.QueueSender; import org.apache.log4j.Logger; /** * An XML file provider. * * @author colincrist@hermesjms.com * @version $Id: FileMessageProducer.java,v 1.2 2004/05/08 15:15:48 colincrist * Exp $ */ public class FileMessageProducer implements QueueSender, Commitable { private static final Logger log = Logger.getLogger(FileMessageProducer.class); private FileSession session; private FileQueue queue; private Collection messages = new ArrayList(); public FileMessageProducer(FileSession session, FileQueue queue) throws JMSException { this.session = session; this.queue = queue; } /* * (non-Javadoc) * * @see javax.jms.MessageProducer#close() */ public void close() throws JMSException { } /* * (non-Javadoc) * * @see javax.jms.MessageProducer#getDeliveryMode() */ public int getDeliveryMode() throws JMSException { return 1; } /* * (non-Javadoc) * * @see javax.jms.MessageProducer#getDisableMessageID() */ public boolean getDisableMessageID() throws JMSException { return false; } /* * (non-Javadoc) * * @see javax.jms.MessageProducer#getDisableMessageTimestamp() */ public boolean getDisableMessageTimestamp() throws JMSException { return false; } /* * (non-Javadoc) * * @see javax.jms.MessageProducer#getPriority() */ public int getPriority() throws JMSException { return 1; } /* * (non-Javadoc) * * @see javax.jms.MessageProducer#getTimeToLive() */ public long getTimeToLive() throws JMSException { return 0; } /* * (non-Javadoc) * * @see javax.jms.MessageProducer#setDeliveryMode(int) */ public void setDeliveryMode(int arg0) throws JMSException { // NOP } /* * (non-Javadoc) * * @see javax.jms.MessageProducer#setDisableMessageID(boolean) */ public void setDisableMessageID(boolean arg0) throws JMSException { // NOP } /* * (non-Javadoc) * * @see javax.jms.MessageProducer#setDisableMessageTimestamp(boolean) */ public void setDisableMessageTimestamp(boolean arg0) throws JMSException { // NOP } /* * (non-Javadoc) * * @see javax.jms.MessageProducer#setPriority(int) */ public void setPriority(int arg0) throws JMSException { // NOP } /* * (non-Javadoc) * * @see javax.jms.MessageProducer#setTimeToLive(long) */ public void setTimeToLive(long arg0) throws JMSException { // NOP } /* * (non-Javadoc) * * @see hermes.Commitable#commit() */ public void commit() throws JMSException { if (messages.size() > 0) { try { if (queue == null) { for (Iterator iter = messages.iterator() ; iter.hasNext() ;) { Message m = (Message) iter.next() ; if (m.getJMSDestination() != null) { if (m.getJMSDestination() instanceof FileQueue) { FileQueue queue = (FileQueue) m.getJMSDestination() ; Collection messages = new ArrayList() ; messages.add(m) ; queue.addMessages(session, messages) ; } else { throw new HermesException("destination is not a FileQueue") ; } } else { throw new HermesException("message has no destination") ; } } } else { queue.addMessages(session, messages); } } catch (IOException e) { throw new HermesException(e); } } } /* * (non-Javadoc) * * @see hermes.Commitable#rollback() */ public void rollback() throws JMSException { messages.clear(); } /* * (non-Javadoc) * * @see javax.jms.QueueSender#getQueue() */ public Queue getQueue() throws JMSException { return queue; } /* * (non-Javadoc) * * @see javax.jms.QueueSender#send(javax.jms.Message, int, int, long) */ public void send(Message arg0, int arg1, int arg2, long arg3) throws JMSException { messages.add(arg0); if (!session.getTransacted()) { commit(); } } /* * (non-Javadoc) * * @see javax.jms.QueueSender#send(javax.jms.Message) */ public void send(Message arg0) throws JMSException { messages.add(arg0); if (!session.getTransacted()) { commit(); } } /* * (non-Javadoc) * * @see javax.jms.QueueSender#send(javax.jms.Queue, javax.jms.Message, int, * int, long) */ public void send(Queue arg0, Message arg1, int arg2, int arg3, long arg4) throws JMSException { arg1.setJMSDestination(arg0) ; messages.add(arg1); if (!session.getTransacted()) { commit(); } } /* * (non-Javadoc) * * @see javax.jms.QueueSender#send(javax.jms.Queue, javax.jms.Message) */ public void send(Queue arg0, Message arg1) throws JMSException { arg1.setJMSDestination(arg0) ; messages.add(arg1); if (!session.getTransacted()) { commit(); } } /* * (non-Javadoc) * * @see javax.jms.MessageProducer#getDestination() */ public Destination getDestination() throws JMSException { return queue ; } /* * (non-Javadoc) * * @see javax.jms.MessageProducer#send(javax.jms.Destination, * javax.jms.Message, int, int, long) */ public void send(Destination arg0, Message arg1, int arg2, int arg3, long arg4) throws JMSException { arg1.setJMSDestination(arg0) ; messages.add(arg1); if (!session.getTransacted()) { commit(); } } /* * (non-Javadoc) * * @see javax.jms.MessageProducer#send(javax.jms.Destination, * javax.jms.Message) */ public void send(Destination arg0, Message arg1) throws JMSException { arg1.setJMSDestination(arg0) ; messages.add(arg1); if (!session.getTransacted()) { commit(); } } }