package com.dgrid.helpers.impl; import java.io.IOException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import com.dgrid.errors.SQSException; import com.dgrid.errors.TransportException; import com.dgrid.gen.InvalidApiKey; import com.dgrid.helpers.AWSConstants; import com.dgrid.helpers.SQSHelper; import com.dgrid.service.DGridClient; import com.xerox.amazonws.sqs2.Message; import com.xerox.amazonws.sqs2.MessageQueue; import com.xerox.amazonws.sqs2.SQSUtils; public class SQSHelperImpl implements SQSHelper { private Log log = LogFactory.getLog(getClass()); private DGridClient gridClient; public void setGridClient(DGridClient gridClient) { this.gridClient = gridClient; } public int getQueueSize(String queue) throws TransportException, IOException, SQSException, InvalidApiKey { log.trace("getQueueSize()"); try { MessageQueue msgQueue = doGetMessageQueue(queue); return msgQueue.getApproximateNumberOfMessages(); } catch (com.xerox.amazonws.sqs2.SQSException e) { log.error("SQSException in getQueueSize()", e); throw new SQSException(e); } } public String send(String queue, String message) throws TransportException, IOException, SQSException, InvalidApiKey { log.trace("send()"); try { MessageQueue msgQueue = doGetMessageQueue(queue); String msgId = msgQueue.sendMessage(message); return msgId; } catch (com.xerox.amazonws.sqs2.SQSException e) { log.error("SQSException in getQueueSize()", e); throw new SQSException(e); } } public Message receive(String queue) throws TransportException, IOException, SQSException, InvalidApiKey { log.trace("receive()"); try { MessageQueue msgQueue = doGetMessageQueue(queue); Message msg = msgQueue.receiveMessage(); return msg; } catch (com.xerox.amazonws.sqs2.SQSException e) { log.error("SQSException in getQueueSize()", e); throw new SQSException(e); } } public void delete(String queue, Message message) throws TransportException, IOException, SQSException, InvalidApiKey { log.trace("delete()"); try { MessageQueue msgQueue = doGetMessageQueue(queue); msgQueue.deleteMessage(message); } catch (com.xerox.amazonws.sqs2.SQSException e) { log.error("SQSException in getQueueSize()", e); throw new SQSException(e); } } public void deleteMessageQueue(String queue) throws TransportException, IOException, SQSException, InvalidApiKey { log.trace("deleteMessageQueue()"); try { MessageQueue msgQueue = doGetMessageQueue(queue); msgQueue.deleteQueue(); } catch (com.xerox.amazonws.sqs2.SQSException e) { log.error("SQSException in getQueueSize()", e); throw new SQSException(e); } } public MessageQueue getMessageQueue(String queue) throws TransportException, IOException, SQSException, InvalidApiKey { log.trace("getMessageQueue()"); try { return doGetMessageQueue(queue); } catch (com.xerox.amazonws.sqs2.SQSException e) { log.error("SQSException in getMessageQueue()", e); throw new SQSException(e); } } private MessageQueue doGetMessageQueue(String queue) throws TransportException, InvalidApiKey, com.xerox.amazonws.sqs2.SQSException { log.trace("doGetMessageQueue()"); String awsAccessKey = gridClient.getSetting( AWSConstants.AWS_ACCESS_KEY_SETTING, ""); String awsSecretKey = gridClient.getSetting( AWSConstants.AWS_SECRET_KEY_SETTING, ""); MessageQueue msgQueue = SQSUtils.connectToQueue(queue, awsAccessKey, awsSecretKey); return msgQueue; } }