NUVEM-14 patch. Dulini's initial queue service implementation.
git-svn-id: https://svn.apache.org/repos/asf/incubator/nuvem/trunk@1361932 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/nuvem-amazon/pom.xml b/nuvem-amazon/pom.xml
index 8345338..d4e664c 100644
--- a/nuvem-amazon/pom.xml
+++ b/nuvem-amazon/pom.xml
@@ -57,7 +57,8 @@
<inherited>true</inherited>
<configuration>
<excludes>
- <exclude>**/AmazonDataServiceImplTestCase.java</exclude>
+ <exclude>**/AmazonDataServiceImplTestCase.java</exclude>
+ <exclude>**/AmazonMessageQueueServiceImplTestCase.java</exclude>
</excludes>
</configuration>
</plugin>
diff --git a/nuvem-amazon/src/main/java/org/apache/nuvem/cloud/messageQueueService/impl/AmazonMessageQueueServiceImpl.java b/nuvem-amazon/src/main/java/org/apache/nuvem/cloud/messageQueueService/impl/AmazonMessageQueueServiceImpl.java
new file mode 100644
index 0000000..3272983
--- /dev/null
+++ b/nuvem-amazon/src/main/java/org/apache/nuvem/cloud/messageQueueService/impl/AmazonMessageQueueServiceImpl.java
@@ -0,0 +1,238 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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 org.apache.nuvem.cloud.messageQueueService.impl;
+
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Iterator;
+import java.util.ArrayList;
+
+import org.apache.nuvem.cloud.messageQueueService.MessageQueueService;
+import org.apache.nuvem.cloud.messageQueueService.QueueMessage;
+import org.apache.nuvem.cloud.messageQueueService.QueueMessageHandle;
+import org.apache.nuvem.cloud.messageQueueService.MessageQueueServiceException;
+
+import com.amazonaws.auth.AWSCredentials;
+import com.amazonaws.auth.PropertiesCredentials;
+import com.amazonaws.AmazonClientException;
+import com.amazonaws.AmazonServiceException;
+import com.amazonaws.auth.PropertiesCredentials;
+
+import com.amazonaws.services.sqs.AmazonSQS;
+import com.amazonaws.services.sqs.AmazonSQSClient;
+import com.amazonaws.services.sqs.model.DeleteMessageRequest;
+import com.amazonaws.services.sqs.model.Message;
+import com.amazonaws.services.sqs.model.ReceiveMessageRequest;
+import com.amazonaws.services.sqs.model.SendMessageRequest;
+import com.amazonaws.services.sqs.model.SendMessageResult;
+import com.amazonaws.services.sqs.model.GetQueueUrlRequest;
+import com.amazonaws.services.sqs.model.GetQueueUrlResult;
+
+/**
+ *The AmazonMessageQueueServiceImpl class
+ */
+public class AmazonMessageQueueServiceImpl implements MessageQueueService {
+
+ public static final String AMAZON_CREDENTIALS_CONFIG_FILE_NAME = "AwsCredentials.properties";
+ public static final String AMAZON_ACCESS_KEY = "accessKey";
+ public static final String AMAZON_SECRET_KEY = "secretKey";
+ public static final String AMAZON_QUEUE_CONFIG_FILE_NAME = "queue.properties";
+ public static final String AMAZON_QUEUE_NAME = "QueueName";
+ public static final String AMAZON_DEFAULT_QUEUE_NAME = "MyQueue";
+
+ private AmazonSQS sqsClient;
+ private String queueURL;
+ private String queueName;
+
+ /**
+ * Instantiates a new AmazonMessageQueueServiceImpl
+ */
+ public AmazonMessageQueueServiceImpl() {
+ try {
+ this.sqsClient = new AmazonSQSClient(new PropertiesCredentials(
+ AmazonMessageQueueServiceImpl.class.
+ getResourceAsStream(AMAZON_CREDENTIALS_CONFIG_FILE_NAME)));
+
+ this.queueName = AMAZON_DEFAULT_QUEUE_NAME;
+ setQueueURl(queueName);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * Instantiates a new AmazonMessageQueueServiceImpl
+ *
+ * @param accessKey The Amazon access key
+ * @param secretKey The Amazon secret key
+ */
+ public AmazonMessageQueueServiceImpl(final String accessKey, final String secretKey) {
+ try{
+ AWSCredentials amazonCredentials = new AWSCredentials() {
+ @Override
+ public String getAWSAccessKeyId() {
+ return accessKey;
+ }
+
+ @Override
+ public String getAWSSecretKey() {
+ return secretKey;
+ }
+ };
+
+ sqsClient = new AmazonSQSClient(amazonCredentials);
+ this.queueName = AMAZON_DEFAULT_QUEUE_NAME;
+ setQueueURl(queueName);
+ }catch(Exception e){
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * Instantiates a new AmazonMessageQueueServiceImpl
+ *
+ * @param configAmazonCredentials Amazon credential configuration
+ */
+ public AmazonMessageQueueServiceImpl(final Map configAmazonCredentials) {
+ try{
+ AWSCredentials amazonCredentials = new AWSCredentials() {
+ @Override
+ public String getAWSAccessKeyId() {
+ return (String) configAmazonCredentials.get(AMAZON_ACCESS_KEY);
+ }
+
+ @Override
+ public String getAWSSecretKey() {
+ return (String) configAmazonCredentials.get(AMAZON_SECRET_KEY);
+ }
+ };
+
+ sqsClient = new AmazonSQSClient(amazonCredentials);
+ this.queueName = AMAZON_DEFAULT_QUEUE_NAME;
+ setQueueURl(queueName);
+ }catch(Exception e){
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * Instantiates a new AmazonMessageQueueServiceImpl
+ *
+ * @param sqsClient The AmazonSQS client
+ */
+ public AmazonMessageQueueServiceImpl(AmazonSQSClient sqsClient) {
+ try{
+ this.sqsClient = sqsClient;
+ this.queueName = AMAZON_DEFAULT_QUEUE_NAME;
+ setQueueURl(queueName);
+ }catch(Exception e){
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * Sets the queueURL using queueName
+ *
+ * @param queueName the queue name
+ */
+ private void setQueueURl(String queueName) throws IOException {
+ GetQueueUrlRequest getQueueUrlRequest = new GetQueueUrlRequest(queueName);
+ GetQueueUrlResult getQueueUrlResult= sqsClient.getQueueUrl(getQueueUrlRequest);
+ this.queueURL = getQueueUrlResult.getQueueUrl();
+ }
+
+ /**
+ * Gets the queue name from property file
+ */
+ private String getQueueName() throws IOException {
+ Properties queueProperties = new Properties();
+ queueProperties.load(AmazonMessageQueueServiceImpl.class.
+ getResourceAsStream(AMAZON_QUEUE_CONFIG_FILE_NAME));
+ return queueProperties.getProperty(AMAZON_QUEUE_NAME);
+ }
+
+ /**
+ * Sends the message
+ *
+ * @param queueMessage the queue message
+ * @return the queue message handle
+ * @throws MessageQueueServiceException
+ */
+ @Override
+ public QueueMessageHandle sendMessage(QueueMessage queueMessage) throws MessageQueueServiceException {
+ try{
+ SendMessageRequest sendMessageRequest = new SendMessageRequest(queueURL, queueMessage.getMessageBody());
+ SendMessageResult sendMessageResult = sqsClient.sendMessage(sendMessageRequest);
+ QueueMessageHandle queueMessageHandle = new QueueMessageHandle();
+ queueMessageHandle.setId(sendMessageResult.getMessageId());
+ queueMessageHandle.setMessageBody(queueMessage.getMessageBody());
+ return queueMessageHandle;
+ }catch(Exception e){
+ throw new MessageQueueServiceException(e);
+ }
+ }
+
+ /**
+ * Receive Messages
+ *
+ * @param numMessages number of messages to receive
+ * @return list of queue messages
+ * @throws MessageQueueServiceException
+ */
+ @Override
+ public List<QueueMessage> receiveMessage(int numMessages) throws MessageQueueServiceException{
+ try{
+ ReceiveMessageRequest receiveMessageRequest = new ReceiveMessageRequest(this.queueURL);
+ receiveMessageRequest.setMaxNumberOfMessages(numMessages);
+ List<Message> messages = sqsClient.receiveMessage(receiveMessageRequest).getMessages();
+ List<QueueMessage> queueMessages = new ArrayList<QueueMessage>(messages.size());
+ Iterator messageIterator = messages.iterator();
+ Message message;
+ while(messageIterator.hasNext()){
+ message = (Message)messageIterator.next();
+ queueMessages.add(new QueueMessage(message.getReceiptHandle(), message.getBody()));
+ }
+ return queueMessages;
+ }catch(Exception e){
+ throw new MessageQueueServiceException(e);
+ }
+ }
+
+ /**
+ * Deletes the message
+ *
+ * @param queueMessage the message to delete
+ * @return true, if deleting message is successful
+ * @throws MessageQueueServiceException
+ */
+ @Override
+ public boolean deleteMessage(QueueMessage queueMessage) throws MessageQueueServiceException{
+ try{
+ String messageRecieptHandle = queueMessage.getId();
+ sqsClient.deleteMessage(new DeleteMessageRequest(this.queueURL, messageRecieptHandle));
+ return true;
+ }catch(Exception e){
+ throw new MessageQueueServiceException(e);
+ }
+ }
+}
diff --git a/nuvem-amazon/src/test/java/org/apache/nuvem/cloud/messageQueueService/impl/AmazonMessageQueueServiceClient.java b/nuvem-amazon/src/test/java/org/apache/nuvem/cloud/messageQueueService/impl/AmazonMessageQueueServiceClient.java
new file mode 100644
index 0000000..b640e6b
--- /dev/null
+++ b/nuvem-amazon/src/test/java/org/apache/nuvem/cloud/messageQueueService/impl/AmazonMessageQueueServiceClient.java
@@ -0,0 +1,29 @@
+
+package org.apache.nuvem.cloud.messageQueueService.impl;
+
+import com.amazonaws.AmazonWebServiceClient;
+import com.amazonaws.auth.AWSCredentials;
+import com.amazonaws.services.sqs.AmazonSQSClient;
+
+public class AmazonMessageQueueServiceClient {
+
+ public static AmazonWebServiceClient getAmazonSQSClient(final String accessKey, final String secretKey) {
+
+ if(accessKey == null || secretKey == null){
+ return new MockAmazonSQSClient();
+ }
+
+ AWSCredentials awsCredentials = new AWSCredentials() {
+ @Override
+ public String getAWSAccessKeyId() {
+ return accessKey;
+ }
+ @Override
+ public String getAWSSecretKey() {
+ return secretKey;
+ }
+ };
+
+ return new AmazonSQSClient(awsCredentials);
+ }
+}
\ No newline at end of file
diff --git a/nuvem-amazon/src/test/java/org/apache/nuvem/cloud/messageQueueService/impl/AmazonMessageQueueServiceImplTestCase.java b/nuvem-amazon/src/test/java/org/apache/nuvem/cloud/messageQueueService/impl/AmazonMessageQueueServiceImplTestCase.java
new file mode 100644
index 0000000..fae4acf
--- /dev/null
+++ b/nuvem-amazon/src/test/java/org/apache/nuvem/cloud/messageQueueService/impl/AmazonMessageQueueServiceImplTestCase.java
@@ -0,0 +1,149 @@
+
+package org.apache.nuvem.cloud.messageQueueService.impl;
+
+import static org.junit.Assert.*;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.util.List;
+import java.util.Properties;
+import java.net.URL;
+
+import org.apache.nuvem.cloud.messageQueueService.MessageQueueService;
+import org.apache.nuvem.cloud.messageQueueService.QueueMessage;
+import org.apache.nuvem.cloud.messageQueueService.QueueMessageHandle;
+import org.apache.nuvem.cloud.messageQueueService.MessageQueueServiceException;
+
+import com.amazonaws.services.sqs.AmazonSQS;
+import com.amazonaws.services.sqs.AmazonSQSClient;
+import com.amazonaws.services.sqs.model.DeleteMessageRequest;
+import com.amazonaws.services.sqs.model.Message;
+import com.amazonaws.services.sqs.model.ReceiveMessageRequest;
+import com.amazonaws.services.sqs.model.ReceiveMessageResult;
+import com.amazonaws.services.sqs.model.SendMessageRequest;
+import com.amazonaws.services.sqs.model.SendMessageResult;
+import com.amazonaws.services.sqs.model.GetQueueUrlRequest;
+import com.amazonaws.services.sqs.model.GetQueueUrlResult;
+import com.amazonaws.services.sqs.model.QueueDoesNotExistException;
+import com.amazonaws.services.sqs.model.InvalidMessageContentsException;
+import com.amazonaws.services.sqs.model.OverLimitException;
+import com.amazonaws.services.sqs.model.ReceiptHandleIsInvalidException;
+import com.amazonaws.services.sqs.model.InvalidIdFormatException;
+
+public class AmazonMessageQueueServiceImplTestCase {
+
+ private MessageQueueService messageQueueService;
+
+ @Before
+ public void setUp() throws Exception {
+ AmazonSQSClient sqsClient = getSQSClient();
+ messageQueueService = new AmazonMessageQueueServiceImpl(sqsClient);
+ }
+
+ private AmazonSQSClient getSQSClient() {
+ try {
+ Properties awsCredentialsProperties = new Properties();
+ URL url = ClassLoader.getSystemResource("test.properties");
+ awsCredentialsProperties.load(url.openStream());
+ final String accessKey = awsCredentialsProperties.getProperty("accessKey");
+ final String secretKey = awsCredentialsProperties.getProperty("secretKey");
+
+ return (AmazonSQSClient) AmazonMessageQueueServiceClient.getAmazonSQSClient(accessKey,secretKey);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
+
+ @After
+ public void tearDown() throws Exception {
+ messageQueueService = null;
+ }
+
+ @Test
+ public void testSendMessage() throws MessageQueueServiceException {
+ QueueMessage qMessage = new QueueMessage();
+ qMessage.setId("1");
+ qMessage.setMessageBody("Message");
+
+ assertNotNull(qMessage);
+
+ QueueMessageHandle qMessageHandle = new QueueMessageHandle();
+ qMessageHandle = messageQueueService.sendMessage(qMessage);
+
+ assertNotNull(qMessageHandle);
+ assertEquals("Message", qMessageHandle.getMessageBody());
+ }
+
+ @Test
+ public void testReceiveMessage() throws MessageQueueServiceException {
+
+ AmazonSQSClient amazonSQSClient = getSQSClient();
+ GetQueueUrlRequest getQueueUrlRequest = new GetQueueUrlRequest("MyQueue");
+ GetQueueUrlResult getQueueUrlResult= amazonSQSClient.getQueueUrl(getQueueUrlRequest);
+ String queueURL = getQueueUrlResult.getQueueUrl();
+
+ assertNotNull(getQueueUrlRequest);
+ assertNotNull(getQueueUrlResult);
+ assertNotNull(queueURL);
+
+ SendMessageRequest sendMessageRequest1 = new SendMessageRequest(
+ queueURL, "Message 01");
+ SendMessageResult sendMessageResult1 = amazonSQSClient.sendMessage(sendMessageRequest1);
+ SendMessageRequest sendMessageRequest2 = new SendMessageRequest(
+ queueURL, "Message 02");
+ SendMessageResult sendMessageResult2 = amazonSQSClient.sendMessage(sendMessageRequest2);
+
+ assertNotNull(sendMessageRequest1);
+ assertNotNull(sendMessageResult1);
+ assertNotNull(sendMessageRequest2);
+ assertNotNull(sendMessageResult2);
+
+ int numberOfMessages = 3;
+
+ List<QueueMessage> qMessages = messageQueueService.receiveMessage(numberOfMessages);
+
+ System.out.println(numberOfMessages);
+ assertNotNull(qMessages);
+ assertEquals(3, qMessages.size());
+ assertNotNull(qMessages.get(qMessages.size()-1));
+ }
+
+ @Test
+ public void testDeleteMessage() throws MessageQueueServiceException {
+
+ AmazonSQSClient amazonSQSClient = getSQSClient();
+ GetQueueUrlRequest getQueueUrlRequest = new GetQueueUrlRequest("MyQueue");
+ GetQueueUrlResult getQueueUrlResult= amazonSQSClient.getQueueUrl(getQueueUrlRequest);
+ String queueURL = getQueueUrlResult.getQueueUrl();
+
+ assertNotNull(getQueueUrlRequest);
+ assertNotNull(getQueueUrlResult);
+ assertNotNull(queueURL);
+
+ ReceiveMessageRequest receiveMessageRequest = new ReceiveMessageRequest(queueURL);
+ List<Message> messages = amazonSQSClient.receiveMessage(receiveMessageRequest).getMessages();
+
+ assertNotNull(receiveMessageRequest);
+ assertNotNull(messages);
+
+ Message message = messages.get(0);
+
+ assertNotNull(message);
+
+ QueueMessage qMessage = new QueueMessage(message.getReceiptHandle(), message.getBody());
+
+ assertNotNull(qMessage);
+
+ boolean deleteResult = messageQueueService.deleteMessage(qMessage);
+
+ assertNotNull(deleteResult);
+
+ assertEquals(true, deleteResult);
+
+ }
+
+}
diff --git a/nuvem-amazon/src/test/java/org/apache/nuvem/cloud/messageQueueService/impl/MockAmazonSQSClient.java b/nuvem-amazon/src/test/java/org/apache/nuvem/cloud/messageQueueService/impl/MockAmazonSQSClient.java
new file mode 100644
index 0000000..23b9572
--- /dev/null
+++ b/nuvem-amazon/src/test/java/org/apache/nuvem/cloud/messageQueueService/impl/MockAmazonSQSClient.java
@@ -0,0 +1,158 @@
+
+package org.apache.nuvem.cloud.messageQueueService.impl;
+
+import com.amazonaws.AmazonWebServiceRequest;
+import com.amazonaws.AmazonWebServiceClient;
+import com.amazonaws.AmazonClientException;
+import com.amazonaws.AmazonServiceException;
+import com.amazonaws.ResponseMetadata;
+import com.amazonaws.auth.PropertiesCredentials;
+import com.amazonaws.services.sqs.AmazonSQS;
+import com.amazonaws.services.sqs.AmazonSQSClient;
+import com.amazonaws.services.sqs.model.CreateQueueRequest;
+import com.amazonaws.services.sqs.model.CreateQueueResult;
+import com.amazonaws.services.sqs.model.DeleteMessageRequest;
+import com.amazonaws.services.sqs.model.Message;
+import com.amazonaws.services.sqs.model.ReceiveMessageRequest;
+import com.amazonaws.services.sqs.model.ReceiveMessageResult;
+import com.amazonaws.services.sqs.model.SendMessageRequest;
+import com.amazonaws.services.sqs.model.SendMessageResult;
+import com.amazonaws.services.sqs.model.GetQueueUrlRequest;
+import com.amazonaws.services.sqs.model.GetQueueUrlResult;
+import com.amazonaws.services.sqs.model.ListQueuesResult;
+import com.amazonaws.services.sqs.model.AddPermissionRequest;
+import com.amazonaws.services.sqs.model.DeleteMessageBatchResult;
+import com.amazonaws.services.sqs.model.DeleteMessageBatchRequest;
+import com.amazonaws.services.sqs.model.ListQueuesResult;
+import com.amazonaws.services.sqs.model.ListQueuesRequest;
+import com.amazonaws.services.sqs.model.DeleteQueueRequest;
+import com.amazonaws.services.sqs.model.SetQueueAttributesRequest;
+import com.amazonaws.services.sqs.model.ChangeMessageVisibilityBatchResult;
+import com.amazonaws.services.sqs.model.ChangeMessageVisibilityBatchRequest;
+import com.amazonaws.services.sqs.model.ChangeMessageVisibilityRequest;
+import com.amazonaws.services.sqs.model.RemovePermissionRequest;
+import com.amazonaws.services.sqs.model.SendMessageBatchResult;
+import com.amazonaws.services.sqs.model.SendMessageBatchRequest;
+import com.amazonaws.services.sqs.model.GetQueueAttributesResult;
+import com.amazonaws.services.sqs.model.GetQueueAttributesRequest;
+import com.amazonaws.services.sqs.model.QueueDoesNotExistException;
+import com.amazonaws.services.sqs.model.InvalidMessageContentsException;
+import com.amazonaws.services.sqs.model.OverLimitException;
+import com.amazonaws.services.sqs.model.ReceiptHandleIsInvalidException;
+import com.amazonaws.services.sqs.model.InvalidIdFormatException;
+
+public class MockAmazonSQSClient extends AmazonWebServiceClient implements AmazonSQS {
+
+ public MockAmazonSQSClient() {
+ super(null);
+ }
+
+ @Override
+ public GetQueueUrlResult getQueueUrl(GetQueueUrlRequest getQueueUrlRequest)
+ throws QueueDoesNotExistException, AmazonServiceException, AmazonClientException {
+ return (null);
+ }
+
+ @Override
+ public SendMessageResult sendMessage(SendMessageRequest sendMessageRequest)
+ throws InvalidMessageContentsException, AmazonServiceException, AmazonClientException {
+ return (null);
+ }
+
+ @Override
+ public ReceiveMessageResult receiveMessage(ReceiveMessageRequest receiveMessageRequest)
+ throws OverLimitException, AmazonServiceException, AmazonClientException {
+ return (null);
+ }
+
+ @Override
+ public void deleteMessage(DeleteMessageRequest deleteMessageRequest)
+ throws ReceiptHandleIsInvalidException, InvalidIdFormatException, AmazonServiceException, AmazonClientException {
+ }
+
+ @Override
+ public ResponseMetadata getCachedResponseMetadata(AmazonWebServiceRequest request) {
+ return (null);
+ }
+
+ @Override
+ public ListQueuesResult listQueues() throws AmazonServiceException, AmazonClientException {
+ return (null);
+ }
+
+ @Override
+ public void addPermission(AddPermissionRequest addPermissionRequest)
+ throws AmazonServiceException, AmazonClientException {
+ }
+
+ @Override
+ public CreateQueueResult createQueue(CreateQueueRequest createQueueRequest)
+ throws AmazonServiceException, AmazonClientException {
+ return (null);
+ }
+
+ @Override
+ public DeleteMessageBatchResult deleteMessageBatch(DeleteMessageBatchRequest deleteMessageBatchRequest)
+ throws AmazonServiceException, AmazonClientException {
+ return (null);
+ }
+
+ @Override
+ public ListQueuesResult listQueues(ListQueuesRequest listQueuesRequest)
+ throws AmazonServiceException, AmazonClientException {
+ return (null);
+ }
+
+ @Override
+ public void deleteQueue(DeleteQueueRequest deleteQueueRequest)
+ throws AmazonServiceException, AmazonClientException {
+
+ }
+
+ @Override
+ public void setEndpoint(String endpoint) throws IllegalArgumentException {
+
+ }
+
+ @Override
+ public void setQueueAttributes(SetQueueAttributesRequest setQueueAttributesRequest)
+ throws AmazonServiceException, AmazonClientException {
+
+ }
+
+ @Override
+ public ChangeMessageVisibilityBatchResult changeMessageVisibilityBatch(ChangeMessageVisibilityBatchRequest changeMessageVisibilityBatchRequest)
+ throws AmazonServiceException, AmazonClientException {
+ return (null);
+ }
+
+ @Override
+ public void changeMessageVisibility(ChangeMessageVisibilityRequest changeMessageVisibilityRequest)
+ throws AmazonServiceException, AmazonClientException {
+
+ }
+
+ @Override
+ public void removePermission(RemovePermissionRequest removePermissionRequest)
+ throws AmazonServiceException, AmazonClientException {
+
+ }
+
+ @Override
+ public GetQueueAttributesResult getQueueAttributes(GetQueueAttributesRequest getQueueAttributesRequest)
+ throws AmazonServiceException, AmazonClientException {
+ return (null);
+ }
+
+ @Override
+ public SendMessageBatchResult sendMessageBatch(SendMessageBatchRequest sendMessageBatchRequest)
+ throws AmazonServiceException, AmazonClientException {
+ return (null);
+ }
+
+ @Override
+ public void shutdown() {
+
+ }
+
+}
\ No newline at end of file
diff --git a/nuvem-api/src/main/java/org/apache/nuvem/cloud/messageQueueService/MessageQueueService.java b/nuvem-api/src/main/java/org/apache/nuvem/cloud/messageQueueService/MessageQueueService.java
new file mode 100644
index 0000000..0011e9a
--- /dev/null
+++ b/nuvem-api/src/main/java/org/apache/nuvem/cloud/messageQueueService/MessageQueueService.java
@@ -0,0 +1,62 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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 org.apache.nuvem.cloud.messageQueueService;
+
+import java.util.List;
+import org.oasisopen.sca.annotation.Remotable;
+
+/**
+ * The Interface MessageQueueService defines services provide by Nuvem Message Queue
+ * Component and also acts as the abraction layer for cloud platform specific
+ * message queueing services. QueueMessage holds attribute values of a message sent to a message
+ * queue.
+ */
+
+@Remotable
+public interface MessageQueueService {
+
+ /**
+ * Send message
+ *
+ * @param queueMessage the message
+ * @return QueueMessageHandle
+ * @throws MessageQueueServiceException the message queue service exception
+ */
+ public QueueMessageHandle sendMessage(QueueMessage queueMessage) throws MessageQueueServiceException;
+
+ /**
+ * Receives messages
+ *
+ * @param numMessages number of messages to receive
+ * @return list of messages
+ * @throws MessageQueueServiceException the message queue service exception
+ */
+ public List<QueueMessage> receiveMessage(int numMessages) throws MessageQueueServiceException;
+
+ /**
+ * Deletes the message
+ *
+ * @param queueMessage the message
+ * @return true, if message deleted sucessfully
+ * @throws MessageQueueServiceException the message queue service exception
+ */
+ public boolean deleteMessage(QueueMessage queueMessage) throws MessageQueueServiceException;
+
+}
diff --git a/nuvem-api/src/main/java/org/apache/nuvem/cloud/messageQueueService/MessageQueueServiceException.java b/nuvem-api/src/main/java/org/apache/nuvem/cloud/messageQueueService/MessageQueueServiceException.java
new file mode 100644
index 0000000..7022656
--- /dev/null
+++ b/nuvem-api/src/main/java/org/apache/nuvem/cloud/messageQueueService/MessageQueueServiceException.java
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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 org.apache.nuvem.cloud.messageQueueService;
+
+/**
+ *The MessageQueueServiceException class
+ */
+public class MessageQueueServiceException extends Exception{
+
+ /**
+ * Instantiates a new message queue service exception.
+ */
+ public MessageQueueServiceException(){
+
+ }
+
+ /**
+ * Instantiates a new message queue service exception.
+ */
+ public MessageQueueServiceException(Throwable cause){
+ super(cause);
+ }
+
+}
diff --git a/nuvem-api/src/main/java/org/apache/nuvem/cloud/messageQueueService/QueueMessage.java b/nuvem-api/src/main/java/org/apache/nuvem/cloud/messageQueueService/QueueMessage.java
new file mode 100644
index 0000000..6ee653b
--- /dev/null
+++ b/nuvem-api/src/main/java/org/apache/nuvem/cloud/messageQueueService/QueueMessage.java
@@ -0,0 +1,96 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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 org.apache.nuvem.cloud.messageQueueService;
+
+/**
+ * The QueueMessage class
+ */
+public class QueueMessage {
+
+ /** The id */
+ private String id;
+
+ /** The message body */
+ private String messageBody;
+
+ /**
+ * Instantiates a new QueueMessage
+ */
+ public QueueMessage (){
+
+ }
+
+ /**
+ * Instantiates a new QueueMessage
+ *
+ * @param id the id
+ * @param messageBody the message body
+ */
+ public QueueMessage (String id, String messageBody){
+ this.messageBody = messageBody;
+ this.id = id;
+ }
+
+ /**
+ * Instantiates a new QueueMessage
+ *
+ * @param messageBody the message body
+ */
+ public QueueMessage (String messageBody) {
+ this.messageBody = messageBody;
+ }
+
+ /**
+ * Gets the Id
+ *
+ * @return the id
+ */
+ public String getId(){
+ return id;
+ }
+
+ /**
+ * Sets the Id
+ *
+ * @param id the id
+ */
+ public void setId(String id){
+ this.id = id;
+ }
+
+ /**
+ * Gets the message body
+ *
+ * @return the messages body
+ */
+ public String getMessageBody(){
+ return messageBody;
+ }
+
+ /**
+ * Sets the message body
+ *
+ * @param messageBody the message body
+ */
+ public void setMessageBody(String messageBody){
+ this.messageBody = messageBody;
+ }
+
+}
diff --git a/nuvem-api/src/main/java/org/apache/nuvem/cloud/messageQueueService/QueueMessageHandle.java b/nuvem-api/src/main/java/org/apache/nuvem/cloud/messageQueueService/QueueMessageHandle.java
new file mode 100644
index 0000000..610762d
--- /dev/null
+++ b/nuvem-api/src/main/java/org/apache/nuvem/cloud/messageQueueService/QueueMessageHandle.java
@@ -0,0 +1,75 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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 org.apache.nuvem.cloud.messageQueueService;
+
+/**
+ *The QueueMessageHandle class
+ */
+public class QueueMessageHandle {
+
+ /** The id */
+ private String id;
+
+ /** The message body */
+ private String messageBody;
+
+ /**
+ * Instantiates a new QueueMessagHandle
+ */
+ public QueueMessageHandle(){
+
+ }
+
+ /**
+ * Gets the Id
+ *
+ * @return the id
+ */
+ public String getId(){
+ return this.id;
+ }
+
+ /**
+ * Sets the Id
+ *
+ * @param id the id
+ */
+ public void setId(String id){
+ this.id = id;
+ }
+
+ /**
+ * Gets the message body
+ *
+ * @return the messages body
+ */
+ public String getMessageBody(){
+ return this.messageBody;
+ }
+
+ /**
+ * Sets the message body
+ *
+ * @param messageBody the message body
+ */
+ public void setMessageBody(String messageBody){
+ this.messageBody = messageBody;
+ }
+}