From 087f784c41ffc199292b50491210b27651124246 Mon Sep 17 00:00:00 2001 From: Gonzalo Gallotti Date: Wed, 8 Jun 2022 11:34:39 -0300 Subject: [PATCH 01/23] Initial implementation QueueAPI --- .../main/java/com/genexus/ModelContext.java | 4 +- .../ServiceConfigurationException.java | 7 + .../services/ServiceSettingsReader.java | 91 ++++++ gxqueue/pom.xml | 27 ++ .../messaging/queue/AWSQueueConnection.java | 5 + .../com/genexus/messaging/queue/IQueue.java | 20 ++ .../messaging/queue/MessageQueueProvider.java | 4 + .../genexus/messaging/queue/QueueBase.java | 4 + .../messaging/queue/SimpleMessageQueue.java | 4 + .../exceptions/GeneralQueueException.java | 5 + .../queue/model/DeleteMessageResult.java | 4 + .../queue/model/MessageQueueOptions.java | 76 +++++ .../queue/model/SendMessageResult.java | 39 +++ .../queue/model/SimpleQueueMessage.java | 43 +++ gxqueueawssqs/pom.xml | 49 ++++ .../genexus/messaging/queue/aws/AWSQueue.java | 275 ++++++++++++++++++ .../messaging/queue/aws/TestAWSQueue.java | 17 ++ .../messaging/queue/aws/TestQueueBase.java | 124 ++++++++ pom.xml | 2 + 19 files changed, 799 insertions(+), 1 deletion(-) create mode 100644 common/src/main/java/com/genexus/services/ServiceConfigurationException.java create mode 100644 common/src/main/java/com/genexus/services/ServiceSettingsReader.java create mode 100644 gxqueue/pom.xml create mode 100644 gxqueue/src/main/java/com/genexus/messaging/queue/AWSQueueConnection.java create mode 100644 gxqueue/src/main/java/com/genexus/messaging/queue/IQueue.java create mode 100644 gxqueue/src/main/java/com/genexus/messaging/queue/MessageQueueProvider.java create mode 100644 gxqueue/src/main/java/com/genexus/messaging/queue/QueueBase.java create mode 100644 gxqueue/src/main/java/com/genexus/messaging/queue/SimpleMessageQueue.java create mode 100644 gxqueue/src/main/java/com/genexus/messaging/queue/exceptions/GeneralQueueException.java create mode 100644 gxqueue/src/main/java/com/genexus/messaging/queue/model/DeleteMessageResult.java create mode 100644 gxqueue/src/main/java/com/genexus/messaging/queue/model/MessageQueueOptions.java create mode 100644 gxqueue/src/main/java/com/genexus/messaging/queue/model/SendMessageResult.java create mode 100644 gxqueue/src/main/java/com/genexus/messaging/queue/model/SimpleQueueMessage.java create mode 100644 gxqueueawssqs/pom.xml create mode 100644 gxqueueawssqs/src/main/java/com/genexus/messaging/queue/aws/AWSQueue.java create mode 100644 gxqueueawssqs/src/test/java/com/genexus/messaging/queue/aws/TestAWSQueue.java create mode 100644 gxqueueawssqs/src/test/java/com/genexus/messaging/queue/aws/TestQueueBase.java diff --git a/common/src/main/java/com/genexus/ModelContext.java b/common/src/main/java/com/genexus/ModelContext.java index fe4a93846..4535e5364 100644 --- a/common/src/main/java/com/genexus/ModelContext.java +++ b/common/src/main/java/com/genexus/ModelContext.java @@ -43,7 +43,9 @@ public static ModelContext getModelContext() ModelContext context = (ModelContext)threadModelContext.get(); if(context == null) { - logger.error(new Date() + " - Cannot find ModelContext for thread " + Thread.currentThread() ); + if (logger.isDebugEnabled()) { + logger.debug(new Date() + " - Cannot find ModelContext for thread " + Thread.currentThread()); + } } return context; } diff --git a/common/src/main/java/com/genexus/services/ServiceConfigurationException.java b/common/src/main/java/com/genexus/services/ServiceConfigurationException.java new file mode 100644 index 000000000..b70298a7d --- /dev/null +++ b/common/src/main/java/com/genexus/services/ServiceConfigurationException.java @@ -0,0 +1,7 @@ +package com.genexus.services; + +public class ServiceConfigurationException extends Throwable { + public ServiceConfigurationException(String errorMessage) { + super(errorMessage); + } +} diff --git a/common/src/main/java/com/genexus/services/ServiceSettingsReader.java b/common/src/main/java/com/genexus/services/ServiceSettingsReader.java new file mode 100644 index 000000000..d7b62a78c --- /dev/null +++ b/common/src/main/java/com/genexus/services/ServiceSettingsReader.java @@ -0,0 +1,91 @@ +package com.genexus.services; + +import com.genexus.diagnostics.core.ILogger; +import com.genexus.diagnostics.core.LogManager; + +import com.genexus.util.Encryption; +import com.genexus.util.GXService; + + +public class ServiceSettingsReader { + private static ILogger logger = LogManager.getLogger(ServiceSettingsReader.class); + + private GXService service; + private String name; + private String serviceTypeName; + + public ServiceSettingsReader(String serviceType, String instanceName, GXService service) { + service = service; + name = instanceName; + serviceTypeName = serviceType; + } + + public String getEncryptedPropertyValue(String propertyName, String alternativePropertyName) throws ServiceConfigurationException { + String value = getEncryptedPropertyValue(propertyName, alternativePropertyName, null); + if (value == null) { + String errorMessage = String.format("Service configuration error - Property name %s must be defined", resolvePropertyName(propertyName)); + logger.fatal(errorMessage); + throw new ServiceConfigurationException(errorMessage); + } + return value; + } + + public String getEncryptedPropertyValue(String propertyName, String alternativePropertyName, String defaultValue) { + String encryptedOrUnEncryptedValue = getPropertyValue(propertyName, alternativePropertyName, defaultValue); + String decryptedValue = encryptedOrUnEncryptedValue; + if (encryptedOrUnEncryptedValue != null && encryptedOrUnEncryptedValue.length() > 0) { + try { + String decryptedTemp = Encryption.tryDecrypt64(encryptedOrUnEncryptedValue); + decryptedValue = (decryptedTemp != null) ? decryptedTemp : encryptedOrUnEncryptedValue; + } catch (Exception e) { + logger.warn("Could not decrypt property name: " + resolvePropertyName(propertyName)); + } + } + return decryptedValue; + } + + public String getPropertyValue(String propertyName, String alternativePropertyName) throws ServiceConfigurationException { + String value = getPropertyValue(propertyName, alternativePropertyName, null); + if (value == null) { + String errorMessage = String.format("Service configuration error - Property name %s must be defined", resolvePropertyName(propertyName)); + logger.fatal(errorMessage); + throw new ServiceConfigurationException(errorMessage); + } + return value; + } + + public String getPropertyValue(String propertyName, String alternativePropertyName, String defaultValue) { + String value = readFromEnvVars(propertyName, alternativePropertyName); + if (value != null) { + return value; + } + String resolvedPtyName = resolvePropertyName(propertyName); + if (service != null) { + value = this.service.getProperties().get(resolvedPtyName); + if (value == null || value.length() == 0) { + value = this.service.getProperties().get(alternativePropertyName); + } + } + return value != null ? value : defaultValue; + } + + private String readFromEnvVars(String propertyName, String alternativePropertyName) { + if (service != null && !service.getAllowOverrideWithEnvVarSettings()) { + return null; + } + + String value = System.getenv(resolvePropertyName(propertyName)); + if (value == null) { + value = System.getenv(alternativePropertyName); + } + return value; + } + + private String resolvePropertyName(String propertyName) { + return String.format("%s_%s_%s", serviceTypeName, name, propertyName); + } + + public String getName() { + return this.name; + } +} diff --git a/gxqueue/pom.xml b/gxqueue/pom.xml new file mode 100644 index 000000000..f3cead8f5 --- /dev/null +++ b/gxqueue/pom.xml @@ -0,0 +1,27 @@ + + + + parent + com.genexus + 2.6-SNAPSHOT + + 4.0.0 + + gxqueue + + + com.genexus + gxcommon + 2.6-SNAPSHOT + compile + + + + + 9 + 9 + + + \ No newline at end of file diff --git a/gxqueue/src/main/java/com/genexus/messaging/queue/AWSQueueConnection.java b/gxqueue/src/main/java/com/genexus/messaging/queue/AWSQueueConnection.java new file mode 100644 index 000000000..1e984faa5 --- /dev/null +++ b/gxqueue/src/main/java/com/genexus/messaging/queue/AWSQueueConnection.java @@ -0,0 +1,5 @@ +package com.genexus.messaging.queue; + +public class AWSQueueConnection { + private String queueUrl; +} diff --git a/gxqueue/src/main/java/com/genexus/messaging/queue/IQueue.java b/gxqueue/src/main/java/com/genexus/messaging/queue/IQueue.java new file mode 100644 index 000000000..a3c2fd2cd --- /dev/null +++ b/gxqueue/src/main/java/com/genexus/messaging/queue/IQueue.java @@ -0,0 +1,20 @@ +package com.genexus.messaging.queue; + +import com.genexus.messaging.queue.model.DeleteMessageResult; +import com.genexus.messaging.queue.model.MessageQueueOptions; +import com.genexus.messaging.queue.model.SendMessageResult; +import com.genexus.messaging.queue.model.SimpleQueueMessage; + +import java.util.List; + +public interface IQueue { + Integer getQueueLength(); + SendMessageResult sendMessage(SimpleQueueMessage simpleQueueMessage); + SendMessageResult sendMessage(SimpleQueueMessage simpleQueueMessage, MessageQueueOptions messageQueueOptions); + List sendMessages(List simpleQueueMessages, MessageQueueOptions messageQueueOptions); + List getMessages(MessageQueueOptions messageQueueOptions); + DeleteMessageResult deleteMessage(String messageHandleId); + + List deleteMessages(List messageHandleId, MessageQueueOptions messageQueueOptions); + boolean purge(); +} diff --git a/gxqueue/src/main/java/com/genexus/messaging/queue/MessageQueueProvider.java b/gxqueue/src/main/java/com/genexus/messaging/queue/MessageQueueProvider.java new file mode 100644 index 000000000..05e73e71b --- /dev/null +++ b/gxqueue/src/main/java/com/genexus/messaging/queue/MessageQueueProvider.java @@ -0,0 +1,4 @@ +package com.genexus.messaging.queue; + +public class MessageQueueProvider { +} diff --git a/gxqueue/src/main/java/com/genexus/messaging/queue/QueueBase.java b/gxqueue/src/main/java/com/genexus/messaging/queue/QueueBase.java new file mode 100644 index 000000000..c14bf3827 --- /dev/null +++ b/gxqueue/src/main/java/com/genexus/messaging/queue/QueueBase.java @@ -0,0 +1,4 @@ +package com.genexus.messaging.queue; + +public class QueueBase { +} diff --git a/gxqueue/src/main/java/com/genexus/messaging/queue/SimpleMessageQueue.java b/gxqueue/src/main/java/com/genexus/messaging/queue/SimpleMessageQueue.java new file mode 100644 index 000000000..b2a1e8e37 --- /dev/null +++ b/gxqueue/src/main/java/com/genexus/messaging/queue/SimpleMessageQueue.java @@ -0,0 +1,4 @@ +package com.genexus.messaging.queue; + +public class SimpleMessageQueue { +} diff --git a/gxqueue/src/main/java/com/genexus/messaging/queue/exceptions/GeneralQueueException.java b/gxqueue/src/main/java/com/genexus/messaging/queue/exceptions/GeneralQueueException.java new file mode 100644 index 000000000..9d564d4bb --- /dev/null +++ b/gxqueue/src/main/java/com/genexus/messaging/queue/exceptions/GeneralQueueException.java @@ -0,0 +1,5 @@ +package com.genexus.messaging.queue.exceptions; + +public class GeneralQueueException extends Throwable { + +} diff --git a/gxqueue/src/main/java/com/genexus/messaging/queue/model/DeleteMessageResult.java b/gxqueue/src/main/java/com/genexus/messaging/queue/model/DeleteMessageResult.java new file mode 100644 index 000000000..362e4f0e4 --- /dev/null +++ b/gxqueue/src/main/java/com/genexus/messaging/queue/model/DeleteMessageResult.java @@ -0,0 +1,4 @@ +package com.genexus.messaging.queue.model; + +public class DeleteMessageResult { +} diff --git a/gxqueue/src/main/java/com/genexus/messaging/queue/model/MessageQueueOptions.java b/gxqueue/src/main/java/com/genexus/messaging/queue/model/MessageQueueOptions.java new file mode 100644 index 000000000..e0b6788d9 --- /dev/null +++ b/gxqueue/src/main/java/com/genexus/messaging/queue/model/MessageQueueOptions.java @@ -0,0 +1,76 @@ +package com.genexus.messaging.queue.model; + +public class MessageQueueOptions { + private short maxNumberOfMessages; + private boolean deleteConsumedMessages; + private int waitTimeout; + private int visibilityTimeout; + private int timetoLive; + private int delaySeconds; + private String receiveRequestAttemptId = ""; + private boolean receiveMessageAttributes; + + public short getMaxNumberOfMessages() { + return maxNumberOfMessages; + } + + public void setMaxNumberOfMessages(short maxNumberOfMessages) { + this.maxNumberOfMessages = maxNumberOfMessages; + } + + public boolean isDeleteConsumedMessages() { + return deleteConsumedMessages; + } + + public void setDeleteConsumedMessages(boolean deleteConsumedMessages) { + this.deleteConsumedMessages = deleteConsumedMessages; + } + + public int getWaitTimeout() { + return waitTimeout; + } + + public void setWaitTimeout(int waitTimeout) { + this.waitTimeout = waitTimeout; + } + + public int getVisibilityTimeout() { + return visibilityTimeout; + } + + public void setVisibilityTimeout(int visibilityTimeout) { + this.visibilityTimeout = visibilityTimeout; + } + + public int getTimetoLive() { + return timetoLive; + } + + public void setTimetoLive(int timetoLive) { + this.timetoLive = timetoLive; + } + + public int getDelaySeconds() { + return delaySeconds; + } + + public void setDelaySeconds(int delaySeconds) { + this.delaySeconds = delaySeconds; + } + + public String getReceiveRequestAttemptId() { + return receiveRequestAttemptId; + } + + public void setReceiveRequestAttemptId(String receiveRequestAttemptId) { + this.receiveRequestAttemptId = receiveRequestAttemptId; + } + + public boolean isReceiveMessageAttributes() { + return receiveMessageAttributes; + } + + public void setReceiveMessageAttributes(boolean receiveMessageAttributes) { + this.receiveMessageAttributes = receiveMessageAttributes; + } +} diff --git a/gxqueue/src/main/java/com/genexus/messaging/queue/model/SendMessageResult.java b/gxqueue/src/main/java/com/genexus/messaging/queue/model/SendMessageResult.java new file mode 100644 index 000000000..6fefcc67d --- /dev/null +++ b/gxqueue/src/main/java/com/genexus/messaging/queue/model/SendMessageResult.java @@ -0,0 +1,39 @@ +package com.genexus.messaging.queue.model; + +import com.genexus.util.GXProperties; + +public class SendMessageResult { + public static int FAILED = 2; + public static int SENT = 1; + public static int PENDING = 0; + + private String messageId; + private String messageServerId; + private int messageSentStatus = PENDING; + + public String getMessageId() { + return messageId; + } + + public void setMessageId(String messageId) { + this.messageId = messageId; + } + + public String getMessageServerId() { + return messageServerId; + } + + public void setMessageServerId(String messageServerId) { + this.messageServerId = messageServerId; + } + + public int getMessageSentStatus() { + return messageSentStatus; + } + + public void setMessageSentStatus(int messageSentStatus) { + this.messageSentStatus = messageSentStatus; + } +} + + diff --git a/gxqueue/src/main/java/com/genexus/messaging/queue/model/SimpleQueueMessage.java b/gxqueue/src/main/java/com/genexus/messaging/queue/model/SimpleQueueMessage.java new file mode 100644 index 000000000..d1d84f75f --- /dev/null +++ b/gxqueue/src/main/java/com/genexus/messaging/queue/model/SimpleQueueMessage.java @@ -0,0 +1,43 @@ +package com.genexus.messaging.queue.model; + +import com.genexus.util.GXProperties; + +public class SimpleQueueMessage { + private String messageId; + private String messageBody; + private GXProperties messageAttributes = new GXProperties(); + private String messageHandleId; + + + public String getMessageId() { + return messageId; + } + + public void setMessageId(String messageId) { + this.messageId = messageId; + } + + public String getMessageBody() { + return messageBody; + } + + public void setMessageBody(String messageBody) { + this.messageBody = messageBody; + } + + public GXProperties getMessageAttributes() { + return messageAttributes; + } + + public void setMessageAttributes(GXProperties messageAttributes) { + this.messageAttributes = messageAttributes; + } + + public String getMessageHandleId() { + return messageHandleId; + } + + public void setMessageHandleId(String messageHandleId) { + this.messageHandleId = messageHandleId; + } +} diff --git a/gxqueueawssqs/pom.xml b/gxqueueawssqs/pom.xml new file mode 100644 index 000000000..969e15ffb --- /dev/null +++ b/gxqueueawssqs/pom.xml @@ -0,0 +1,49 @@ + + + + parent + com.genexus + 2.6-SNAPSHOT + + 4.0.0 + + gxqueueawssqs + + + ${project.groupId} + gxclassR + ${project.version} + + + ${project.groupId} + gxqueue + ${project.version} + compile + + + software.amazon.awssdk + sqs + 2.17.205 + + + ${project.groupId} + gxcommon + ${project.version} + compile + + + com.genexus + gxclassR + 2.6-SNAPSHOT + test + + + + + 9 + 9 + + + \ No newline at end of file diff --git a/gxqueueawssqs/src/main/java/com/genexus/messaging/queue/aws/AWSQueue.java b/gxqueueawssqs/src/main/java/com/genexus/messaging/queue/aws/AWSQueue.java new file mode 100644 index 000000000..68fbc1326 --- /dev/null +++ b/gxqueueawssqs/src/main/java/com/genexus/messaging/queue/aws/AWSQueue.java @@ -0,0 +1,275 @@ +package com.genexus.messaging.queue.aws; + +import com.genexus.messaging.queue.IQueue; +import com.genexus.messaging.queue.model.SimpleQueueMessage; +import com.genexus.messaging.queue.model.DeleteMessageResult; +import com.genexus.messaging.queue.model.MessageQueueOptions; +import com.genexus.messaging.queue.model.SendMessageResult; + +import com.genexus.services.ServiceConfigurationException; +import com.genexus.services.ServiceSettingsReader; +import com.genexus.util.GXProperties; +import com.genexus.util.GXProperty; +import com.genexus.util.GXService; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import software.amazon.awssdk.auth.credentials.AwsBasicCredentials; +import software.amazon.awssdk.auth.credentials.ProfileCredentialsProvider; +import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider; +import software.amazon.awssdk.regions.Region; +import software.amazon.awssdk.services.sqs.SqsClient; +import software.amazon.awssdk.services.sqs.model.*; + +import java.util.*; + +public class AWSQueue implements IQueue { + private static Logger logger = LogManager.getLogger(AWSQueue.class); + + public static String Name = "AWSSQS"; + + private SqsClient sqsClient; + + public static String ACCESS_KEY = "ACCESS_KEY"; + public static String SECRET_ACCESS_KEY = "SECRET_KEY"; + public static String REGION = "REGION"; + public static String QUEUE_URL = "QUEUE_URL"; + + private String accessKey; + private String secret; + private String awsRegion; + private String queueURL; + private boolean isFIFO; + + private static String MESSSAGE_GROUP_ID = "MessageGroupId"; + private static String MESSSAGE_DEDUPLICATION_ID = "MessageDeduplicationId"; + + public AWSQueue() throws ServiceConfigurationException { + initialize(new GXService()); + } + + public AWSQueue(GXService service) throws ServiceConfigurationException { + initialize(service); + } + + private void initialize(GXService providerService) throws ServiceConfigurationException { + ServiceSettingsReader serviceSettings = new ServiceSettingsReader("QUEUE", Name, providerService); + + queueURL = serviceSettings.getEncryptedPropertyValue(QUEUE_URL, ""); + accessKey = serviceSettings.getEncryptedPropertyValue(ACCESS_KEY, ""); + secret = serviceSettings.getEncryptedPropertyValue(SECRET_ACCESS_KEY, ""); + awsRegion = serviceSettings.getEncryptedPropertyValue(REGION, ""); + isFIFO = queueURL.endsWith(".fifo"); + + boolean bUseIAM = !serviceSettings.getPropertyValue("USE_IAM", "", "").isEmpty() || (accessKey.equals("") && secret.equals("")); + + if (bUseIAM) { + sqsClient = SqsClient.builder() + .region(Region.of(awsRegion)) + .credentialsProvider(ProfileCredentialsProvider.create()) + .build(); + } else { + AwsBasicCredentials awsCreds = AwsBasicCredentials.create( + accessKey, + secret); + sqsClient = SqsClient.builder() + .region(Region.of(awsRegion)) + .credentialsProvider(StaticCredentialsProvider.create(awsCreds)) + .build(); + } + } + + @Override + public Integer getQueueLength() { + String attName = "ApproximateNumberOfMessages"; + GetQueueAttributesRequest request = GetQueueAttributesRequest.builder() + .queueUrl(queueURL) + .attributeNamesWithStrings(attName) + .build(); + GetQueueAttributesResponse response = sqsClient.getQueueAttributes(request); + String queueLengthS = response.attributesAsStrings().getOrDefault(attName, "0"); + return Integer.parseInt(queueLengthS); + } + + @Override + public SendMessageResult sendMessage(SimpleQueueMessage simpleQueueMessage) { + return sendMessage(simpleQueueMessage, new MessageQueueOptions()); + } + + @Override + public SendMessageResult sendMessage(SimpleQueueMessage simpleQueueMessage, MessageQueueOptions messageQueueOptions) { + List result = sendMessagesImpl(Arrays.asList(simpleQueueMessage), messageQueueOptions); + return result.get(0); //should not fail + } + + @Override + public List sendMessages(List simpleQueueMessages, MessageQueueOptions messageQueueOptions) { + return sendMessagesImpl(simpleQueueMessages, messageQueueOptions); + } + + private List sendMessagesImpl(List simpleQueueMessages, MessageQueueOptions messageQueueOptions) { + List sendMessageResultList = new ArrayList<>(); + List entryList = new ArrayList<>(); + + for (SimpleQueueMessage msg : simpleQueueMessages) { + + Map msgProps = new HashMap<>(); + for (int i = 0; i < msg.getMessageAttributes().count(); i++) { + GXProperty prop = msg.getMessageAttributes().item(i); + MessageAttributeValue msgAtt = MessageAttributeValue.builder() + .stringValue(prop.getValue()) + .dataType("String") + .build(); + msgProps.put(prop.getKey(), msgAtt); + } + + SendMessageBatchRequestEntry.Builder entry = SendMessageBatchRequestEntry.builder() + .messageBody(msg.getMessageBody()) + .id(msg.getMessageId()) + .messageAttributes(msgProps); + + if (isFIFO) { + String msgDeduplicationId = msg.getMessageAttributes().get(MESSSAGE_DEDUPLICATION_ID); + String msgGroupId = msg.getMessageAttributes().get(MESSSAGE_GROUP_ID); + if (msgDeduplicationId != null) { + entry.messageDeduplicationId(msgDeduplicationId); + } + if (msgGroupId != null) { + entry.messageGroupId(msgGroupId); + } + } + if (messageQueueOptions.getDelaySeconds() > 0) { + entry.delaySeconds(messageQueueOptions.getDelaySeconds()); + } + entryList.add(entry.build()); + } + + SendMessageBatchResponse responseBatch = sqsClient.sendMessageBatch(SendMessageBatchRequest.builder() + .queueUrl(queueURL) + .entries(entryList) + .build()); + + for (SendMessageBatchResultEntry msg : responseBatch.successful()) { + sendMessageResultList.add(new SendMessageResult() {{ + setMessageId(msg.id()); + setMessageServerId(msg.messageId()); + setMessageSentStatus(SendMessageResult.SENT); + }}); + } + for (BatchResultErrorEntry msg : responseBatch.failed()) { + logger.error(String.format("SendMessage '%s' was rejected by AWS SQS server", msg.id())); + sendMessageResultList.add(new SendMessageResult() {{ + setMessageId(msg.id()); + setMessageSentStatus(SendMessageResult.FAILED); + }}); + } + + return sendMessageResultList; + } + + @Override + public List getMessages(MessageQueueOptions messageQueueOptions) { + List receivedSimpleQueueMessages = new ArrayList<>(); + + ReceiveMessageRequest.Builder receiveMessageRequest = ReceiveMessageRequest.builder().queueUrl(queueURL); + + if (messageQueueOptions.getMaxNumberOfMessages() > 0) { + receiveMessageRequest.maxNumberOfMessages((int) messageQueueOptions.getMaxNumberOfMessages()); + } + if (messageQueueOptions.getVisibilityTimeout() > 0) { + receiveMessageRequest.visibilityTimeout(messageQueueOptions.getVisibilityTimeout()); + } + if (messageQueueOptions.getWaitTimeout() > 0) { + receiveMessageRequest.waitTimeSeconds(messageQueueOptions.getWaitTimeout()); + } + if (messageQueueOptions.getReceiveRequestAttemptId().length() > 0) { + receiveMessageRequest.receiveRequestAttemptId(messageQueueOptions.getReceiveRequestAttemptId()); + } + if (messageQueueOptions.isReceiveMessageAttributes()) { + receiveMessageRequest.messageAttributeNames("All"); + } + + ReceiveMessageResponse receiveMessageResponse = sqsClient.receiveMessage(receiveMessageRequest.build()); + + if (receiveMessageResponse.hasMessages()) { + for (Message m : receiveMessageResponse.messages()) { + receivedSimpleQueueMessages.add(setupSimpleQueueMessage(m)); + } + } + return receivedSimpleQueueMessages; + } + + private SimpleQueueMessage setupSimpleQueueMessage(Message response) { + SimpleQueueMessage simpleQueueMessage = new SimpleQueueMessage() {{ + setMessageId(response.messageId()); + setMessageHandleId(response.receiptHandle()); + setMessageBody(response.body()); + }}; + GXProperties messageAtts = simpleQueueMessage.getMessageAttributes(); + + messageAtts.add("MD5OfMessageAttributes", response.md5OfMessageAttributes()); + messageAtts.add("MD5OfBody", response.md5OfBody()); + + for (Map.Entry entry : response.attributesAsStrings().entrySet()) { + messageAtts.add(entry.getKey(), entry.getValue()); + } + + return simpleQueueMessage; + } + + @Override + public DeleteMessageResult deleteMessage(String messageHandleId) { + return null; + } + + @Override + public List deleteMessages(List messageHandleId, MessageQueueOptions messageQueueOptions) { + return null; + } + + @Override + public boolean purge() { + PurgeQueueRequest purgeQueueRequest = PurgeQueueRequest.builder().queueUrl(queueURL).build(); + try { + sqsClient.purgeQueue(purgeQueueRequest); + return true; + } catch (PurgeQueueInProgressException e) { + logger.info("Failed to purge queue because a purge queue operation is in progress", e); + } + return false; + } +} + + +/* + @Override + public SendMessageResult sendMessage(SimpleQueueMessage simpleQueueMessage) { + Map msgProps = new HashMap<>(); + for (int i = 0; i < simpleQueueMessage.getMessageAttributes().count(); i++) { + GXProperty prop = simpleQueueMessage.getMessageAttributes().item(i); + MessageAttributeValue msgAtt = MessageAttributeValue.builder() + .stringValue(prop.getValue()) + .dataType("String") + .build(); + + msgProps.put(prop.getKey(), msgAtt); + } + + SendMessageRequest.Builder sendMessageRequestBuilder = SendMessageRequest.builder() + .queueUrl(queueURL) + .messageBody(simpleQueueMessage.getMessageBody()) + .messageAttributes(msgProps); + + if (isFIFO) { + sendMessageRequestBuilder.messageDeduplicationId(simpleQueueMessage.getMessageId()); + } + + SendMessageResponse sqsMessageResponse = sqsClient.sendMessage(sendMessageRequestBuilder.build()); + + SendMessageResult result = new SendMessageResult() {{ + setMessageId(simpleQueueMessage.getMessageId()); + setMessageServerId(sqsMessageResponse.messageId()); + setMessageSentStatus(SendMessageResult.SENT); + }}; + + return result; + }*/ diff --git a/gxqueueawssqs/src/test/java/com/genexus/messaging/queue/aws/TestAWSQueue.java b/gxqueueawssqs/src/test/java/com/genexus/messaging/queue/aws/TestAWSQueue.java new file mode 100644 index 000000000..7c8a69051 --- /dev/null +++ b/gxqueueawssqs/src/test/java/com/genexus/messaging/queue/aws/TestAWSQueue.java @@ -0,0 +1,17 @@ +package com.genexus.messaging.queue.aws; + +import com.genexus.messaging.queue.IQueue; +import com.genexus.services.ServiceConfigurationException; + +public class TestAWSQueue extends TestQueueBase { + + @Override + public String getProviderName() { + return "QUEUE_AWSSQS"; + } + + @Override + public IQueue getQueue() throws ServiceConfigurationException { + return new AWSQueue(); + } +} diff --git a/gxqueueawssqs/src/test/java/com/genexus/messaging/queue/aws/TestQueueBase.java b/gxqueueawssqs/src/test/java/com/genexus/messaging/queue/aws/TestQueueBase.java new file mode 100644 index 000000000..157da0549 --- /dev/null +++ b/gxqueueawssqs/src/test/java/com/genexus/messaging/queue/aws/TestQueueBase.java @@ -0,0 +1,124 @@ +package com.genexus.messaging.queue.aws; + +import com.genexus.messaging.queue.IQueue; +import com.genexus.messaging.queue.model.MessageQueueOptions; +import com.genexus.messaging.queue.model.SimpleQueueMessage; +import com.genexus.messaging.queue.model.SendMessageResult; +import com.genexus.services.ServiceConfigurationException; +import com.genexus.specific.java.Connect; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +import java.util.List; + +import static org.junit.Assert.assertTrue; +import static org.junit.Assume.assumeTrue; + +public abstract class TestQueueBase { + + protected IQueue queue; + + //AKIAT2GWL4JGR56VMWGX + //PYlgo9ysgr9G2srypFoKkRycjuPqEFB4uJWjgcNW + //https://sqs.us-east-1.amazonaws.com/262442574413/gx-sqs-githubactions-test + public abstract String getProviderName(); + + public abstract IQueue getQueue() throws ServiceConfigurationException; + + @Before + public void beforeEachTestMethod() { + Connect.init(); + boolean testEnabled = false; + try { + testEnabled = System.getenv(getProviderName() + "_TEST_ENABLED") != null; + } catch (Exception e) { + + } + + assumeTrue(testEnabled); + + try { + queue = getQueue(); + } catch (ServiceConfigurationException e) { + e.printStackTrace(); + } + assertTrue(queue != null); + } + + @Test + public void purgue() { + boolean purged = ensurePurged(); + Assert.assertTrue("Queue was not purged", purged); + } + + private boolean ensurePurged() { + boolean purged = queue.purge(); + int retry = 30; + int sleepMs = 1000 * 5; + while (!purged && retry > 0) { + sleep(sleepMs); + purged = queue.purge() || queue.getQueueLength() == 0; + retry--; + } + return purged; + } + + private void sleep(int sleepMs) { + try { + Thread.sleep(sleepMs); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + + @Test + public void getQueueLength() { + boolean purged = ensurePurged(); + Assert.assertTrue("Queue was not purged", purged); + int qLength = queue.getQueueLength(); + Assert.assertEquals(0, qLength); + } + + @Test + public void getQueueLengthNotEmpty() { + boolean purged = ensurePurged(); + Assert.assertTrue("Queue was not purged", purged); + + int qLength = queue.getQueueLength(); + Assert.assertEquals(0, qLength); + sendQueueMessage(); + qLength = queue.getQueueLength(); + Assert.assertEquals(1, qLength); + } + + @Test + public void sendMessage() { + SendMessageResult sendResult = sendQueueMessage(); + Assert.assertNotNull(sendResult); + Assert.assertEquals(SendMessageResult.SENT, sendResult.getMessageSentStatus()); + Assert.assertNotEquals("", sendResult.getMessageId()); + } + + @Test + public void receiveMessages() { + SendMessageResult sendResult = sendQueueMessage(); + Assert.assertNotNull(sendResult); + Assert.assertEquals(SendMessageResult.SENT, sendResult.getMessageSentStatus()); + Assert.assertNotEquals("", sendResult.getMessageId()); + + List msgs = queue.getMessages(new MessageQueueOptions()); + Assert.assertNotEquals(0, msgs.size()); + + } + + private SendMessageResult sendQueueMessage() { + SimpleQueueMessage msg = new SimpleQueueMessage() {{ + setMessageId(java.util.UUID.randomUUID().toString()); + setMessageBody("messageBody test"); + getMessageAttributes().set("att1", "test1"); + getMessageAttributes().set("att2", "test2"); + }}; + return queue.sendMessage(msg); + } +} diff --git a/pom.xml b/pom.xml index a29aa5ac5..eca558117 100644 --- a/pom.xml +++ b/pom.xml @@ -43,6 +43,8 @@ gxwebsocketjakarta gxawsserverless androidreports + gxqueue + gxqueueawssqs From b576b3b54a7d1511903f058574d7fa3cb1c0dc9e Mon Sep 17 00:00:00 2001 From: Gonzalo Gallotti Date: Wed, 8 Jun 2022 16:25:34 -0300 Subject: [PATCH 02/23] Refactoring --- .../messaging/queue/AWSQueueConnection.java | 5 -- .../queue/model/DeleteMessageResult.java | 15 +++- .../messaging/queue/model/MessageId.java | 23 ++++++ .../queue/model/SendMessageResult.java | 20 +---- .../genexus/messaging/queue/aws/AWSQueue.java | 75 +++++++++---------- .../messaging/queue/aws/TestQueueBase.java | 2 + 6 files changed, 75 insertions(+), 65 deletions(-) delete mode 100644 gxqueue/src/main/java/com/genexus/messaging/queue/AWSQueueConnection.java create mode 100644 gxqueue/src/main/java/com/genexus/messaging/queue/model/MessageId.java diff --git a/gxqueue/src/main/java/com/genexus/messaging/queue/AWSQueueConnection.java b/gxqueue/src/main/java/com/genexus/messaging/queue/AWSQueueConnection.java deleted file mode 100644 index 1e984faa5..000000000 --- a/gxqueue/src/main/java/com/genexus/messaging/queue/AWSQueueConnection.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.genexus.messaging.queue; - -public class AWSQueueConnection { - private String queueUrl; -} diff --git a/gxqueue/src/main/java/com/genexus/messaging/queue/model/DeleteMessageResult.java b/gxqueue/src/main/java/com/genexus/messaging/queue/model/DeleteMessageResult.java index 362e4f0e4..84c46c729 100644 --- a/gxqueue/src/main/java/com/genexus/messaging/queue/model/DeleteMessageResult.java +++ b/gxqueue/src/main/java/com/genexus/messaging/queue/model/DeleteMessageResult.java @@ -1,4 +1,17 @@ package com.genexus.messaging.queue.model; -public class DeleteMessageResult { +public class DeleteMessageResult extends MessageId { + public static int FAILED = 2; + public static int DELETED = 1; + public static int PENDING = 0; + + private int messageDeleteStatus = PENDING; + + public int getMessageDeleteStatus() { + return messageDeleteStatus; + } + + public void setMessageDeleteStatus(int messageDeleteStatus) { + this.messageDeleteStatus = messageDeleteStatus; + } } diff --git a/gxqueue/src/main/java/com/genexus/messaging/queue/model/MessageId.java b/gxqueue/src/main/java/com/genexus/messaging/queue/model/MessageId.java new file mode 100644 index 000000000..50b41782d --- /dev/null +++ b/gxqueue/src/main/java/com/genexus/messaging/queue/model/MessageId.java @@ -0,0 +1,23 @@ +package com.genexus.messaging.queue.model; + +public abstract class MessageId { + private String messageId; + private String messageServerId; + + public String getMessageId() { + return messageId; + } + + public void setMessageId(String messageId) { + this.messageId = messageId; + } + + public String getMessageServerId() { + return messageServerId; + } + + public void setMessageServerId(String messageServerId) { + this.messageServerId = messageServerId; + } + +} diff --git a/gxqueue/src/main/java/com/genexus/messaging/queue/model/SendMessageResult.java b/gxqueue/src/main/java/com/genexus/messaging/queue/model/SendMessageResult.java index 6fefcc67d..41d6e1b1b 100644 --- a/gxqueue/src/main/java/com/genexus/messaging/queue/model/SendMessageResult.java +++ b/gxqueue/src/main/java/com/genexus/messaging/queue/model/SendMessageResult.java @@ -2,31 +2,13 @@ import com.genexus.util.GXProperties; -public class SendMessageResult { +public class SendMessageResult extends MessageId { public static int FAILED = 2; public static int SENT = 1; public static int PENDING = 0; - private String messageId; - private String messageServerId; private int messageSentStatus = PENDING; - public String getMessageId() { - return messageId; - } - - public void setMessageId(String messageId) { - this.messageId = messageId; - } - - public String getMessageServerId() { - return messageServerId; - } - - public void setMessageServerId(String messageServerId) { - this.messageServerId = messageServerId; - } - public int getMessageSentStatus() { return messageSentStatus; } diff --git a/gxqueueawssqs/src/main/java/com/genexus/messaging/queue/aws/AWSQueue.java b/gxqueueawssqs/src/main/java/com/genexus/messaging/queue/aws/AWSQueue.java index 68fbc1326..dbab457ca 100644 --- a/gxqueueawssqs/src/main/java/com/genexus/messaging/queue/aws/AWSQueue.java +++ b/gxqueueawssqs/src/main/java/com/genexus/messaging/queue/aws/AWSQueue.java @@ -98,7 +98,7 @@ public SendMessageResult sendMessage(SimpleQueueMessage simpleQueueMessage) { @Override public SendMessageResult sendMessage(SimpleQueueMessage simpleQueueMessage, MessageQueueOptions messageQueueOptions) { List result = sendMessagesImpl(Arrays.asList(simpleQueueMessage), messageQueueOptions); - return result.get(0); //should not fail + return result.get(0); } @Override @@ -156,7 +156,7 @@ private List sendMessagesImpl(List simple }}); } for (BatchResultErrorEntry msg : responseBatch.failed()) { - logger.error(String.format("SendMessage '%s' was rejected by AWS SQS server", msg.id())); + logger.error(String.format("SendMessage '%s' was rejected by AWS SQS server %s", msg.id(), msg.message())); sendMessageResultList.add(new SendMessageResult() {{ setMessageId(msg.id()); setMessageSentStatus(SendMessageResult.FAILED); @@ -218,12 +218,42 @@ private SimpleQueueMessage setupSimpleQueueMessage(Message response) { @Override public DeleteMessageResult deleteMessage(String messageHandleId) { - return null; + return deleteMessagesImpl(Arrays.asList(messageHandleId), new MessageQueueOptions()).get(0); } @Override - public List deleteMessages(List messageHandleId, MessageQueueOptions messageQueueOptions) { - return null; + public List deleteMessages(List messageHandleIds, MessageQueueOptions messageQueueOptions) { + return deleteMessagesImpl(messageHandleIds, messageQueueOptions); + } + + private List deleteMessagesImpl(List messageHandleIds, MessageQueueOptions messageQueueOptions) { + List deleteMessageResults = new ArrayList<>(); + + List deleteMessageEntries = new ArrayList<>(); + for (String msgId: messageHandleIds) { + + } + DeleteMessageBatchRequest.Builder deleteMessageRequest = DeleteMessageBatchRequest.builder() + .queueUrl(queueURL) + .entries(deleteMessageEntries); + + DeleteMessageBatchResponse deleteMessageBatchResponse = sqsClient.deleteMessageBatch(deleteMessageRequest.build()); + + for (DeleteMessageBatchResultEntry msg:deleteMessageBatchResponse.successful()) { + deleteMessageResults.add(new DeleteMessageResult() {{ + setMessageId(msg.id()); + setMessageDeleteStatus(DeleteMessageResult.DELETED); + }}); + } + + for (BatchResultErrorEntry msg:deleteMessageBatchResponse.failed()) { + logger.error(String.format("DeleteMessage '%s' was rejected by AWS SQS server: %s", msg.id(), msg.message())); + deleteMessageResults.add(new DeleteMessageResult() {{ + setMessageId(msg.id()); + setMessageDeleteStatus(DeleteMessageResult.FAILED); + }}); + } + return deleteMessageResults; } @Override @@ -238,38 +268,3 @@ public boolean purge() { return false; } } - - -/* - @Override - public SendMessageResult sendMessage(SimpleQueueMessage simpleQueueMessage) { - Map msgProps = new HashMap<>(); - for (int i = 0; i < simpleQueueMessage.getMessageAttributes().count(); i++) { - GXProperty prop = simpleQueueMessage.getMessageAttributes().item(i); - MessageAttributeValue msgAtt = MessageAttributeValue.builder() - .stringValue(prop.getValue()) - .dataType("String") - .build(); - - msgProps.put(prop.getKey(), msgAtt); - } - - SendMessageRequest.Builder sendMessageRequestBuilder = SendMessageRequest.builder() - .queueUrl(queueURL) - .messageBody(simpleQueueMessage.getMessageBody()) - .messageAttributes(msgProps); - - if (isFIFO) { - sendMessageRequestBuilder.messageDeduplicationId(simpleQueueMessage.getMessageId()); - } - - SendMessageResponse sqsMessageResponse = sqsClient.sendMessage(sendMessageRequestBuilder.build()); - - SendMessageResult result = new SendMessageResult() {{ - setMessageId(simpleQueueMessage.getMessageId()); - setMessageServerId(sqsMessageResponse.messageId()); - setMessageSentStatus(SendMessageResult.SENT); - }}; - - return result; - }*/ diff --git a/gxqueueawssqs/src/test/java/com/genexus/messaging/queue/aws/TestQueueBase.java b/gxqueueawssqs/src/test/java/com/genexus/messaging/queue/aws/TestQueueBase.java index 157da0549..a5429db70 100644 --- a/gxqueueawssqs/src/test/java/com/genexus/messaging/queue/aws/TestQueueBase.java +++ b/gxqueueawssqs/src/test/java/com/genexus/messaging/queue/aws/TestQueueBase.java @@ -88,6 +88,7 @@ public void getQueueLengthNotEmpty() { int qLength = queue.getQueueLength(); Assert.assertEquals(0, qLength); sendQueueMessage(); + sleep(5000); qLength = queue.getQueueLength(); Assert.assertEquals(1, qLength); } @@ -98,6 +99,7 @@ public void sendMessage() { Assert.assertNotNull(sendResult); Assert.assertEquals(SendMessageResult.SENT, sendResult.getMessageSentStatus()); Assert.assertNotEquals("", sendResult.getMessageId()); + Assert.assertNotEquals("", sendResult.getMessageServerId()); } @Test From 986968d53b1892c5c648068e11f9522e18f419cb Mon Sep 17 00:00:00 2001 From: Gonzalo Gallotti Date: Wed, 8 Jun 2022 17:58:17 -0300 Subject: [PATCH 03/23] Add more unittest --- .../com/genexus/messaging/queue/IQueue.java | 2 +- .../queue/model/MessageQueueOptions.java | 6 +- .../genexus/messaging/queue/aws/AWSQueue.java | 33 ++++- .../messaging/queue/aws/TestQueueBase.java | 137 +++++++++++++++--- 4 files changed, 146 insertions(+), 32 deletions(-) diff --git a/gxqueue/src/main/java/com/genexus/messaging/queue/IQueue.java b/gxqueue/src/main/java/com/genexus/messaging/queue/IQueue.java index a3c2fd2cd..a4164d4bf 100644 --- a/gxqueue/src/main/java/com/genexus/messaging/queue/IQueue.java +++ b/gxqueue/src/main/java/com/genexus/messaging/queue/IQueue.java @@ -15,6 +15,6 @@ public interface IQueue { List getMessages(MessageQueueOptions messageQueueOptions); DeleteMessageResult deleteMessage(String messageHandleId); - List deleteMessages(List messageHandleId, MessageQueueOptions messageQueueOptions); + List deleteMessages(List messageHandleId); boolean purge(); } diff --git a/gxqueue/src/main/java/com/genexus/messaging/queue/model/MessageQueueOptions.java b/gxqueue/src/main/java/com/genexus/messaging/queue/model/MessageQueueOptions.java index e0b6788d9..4e99485c8 100644 --- a/gxqueue/src/main/java/com/genexus/messaging/queue/model/MessageQueueOptions.java +++ b/gxqueue/src/main/java/com/genexus/messaging/queue/model/MessageQueueOptions.java @@ -1,7 +1,7 @@ package com.genexus.messaging.queue.model; public class MessageQueueOptions { - private short maxNumberOfMessages; + private int maxNumberOfMessages; private boolean deleteConsumedMessages; private int waitTimeout; private int visibilityTimeout; @@ -10,11 +10,11 @@ public class MessageQueueOptions { private String receiveRequestAttemptId = ""; private boolean receiveMessageAttributes; - public short getMaxNumberOfMessages() { + public int getMaxNumberOfMessages() { return maxNumberOfMessages; } - public void setMaxNumberOfMessages(short maxNumberOfMessages) { + public void setMaxNumberOfMessages(int maxNumberOfMessages) { this.maxNumberOfMessages = maxNumberOfMessages; } diff --git a/gxqueueawssqs/src/main/java/com/genexus/messaging/queue/aws/AWSQueue.java b/gxqueueawssqs/src/main/java/com/genexus/messaging/queue/aws/AWSQueue.java index dbab457ca..fcab08443 100644 --- a/gxqueueawssqs/src/main/java/com/genexus/messaging/queue/aws/AWSQueue.java +++ b/gxqueueawssqs/src/main/java/com/genexus/messaging/queue/aws/AWSQueue.java @@ -11,6 +11,7 @@ import com.genexus.util.GXProperties; import com.genexus.util.GXProperty; import com.genexus.util.GXService; +import org.apache.commons.lang.Validate; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import software.amazon.awssdk.auth.credentials.AwsBasicCredentials; @@ -110,8 +111,10 @@ private List sendMessagesImpl(List simple List sendMessageResultList = new ArrayList<>(); List entryList = new ArrayList<>(); - for (SimpleQueueMessage msg : simpleQueueMessages) { + if (simpleQueueMessages.size() == 0) + return sendMessageResultList; + for (SimpleQueueMessage msg : simpleQueueMessages) { Map msgProps = new HashMap<>(); for (int i = 0; i < msg.getMessageAttributes().count(); i++) { GXProperty prop = msg.getMessageAttributes().item(i); @@ -156,7 +159,7 @@ private List sendMessagesImpl(List simple }}); } for (BatchResultErrorEntry msg : responseBatch.failed()) { - logger.error(String.format("SendMessage '%s' was rejected by AWS SQS server %s", msg.id(), msg.message())); + logger.error(String.format("SendMessage '%s' was rejected by AWS SQS server. Message: %s", msg.id(), msg.message())); sendMessageResultList.add(new SendMessageResult() {{ setMessageId(msg.id()); setMessageSentStatus(SendMessageResult.FAILED); @@ -186,6 +189,8 @@ public List getMessages(MessageQueueOptions messageQueueOpti } if (messageQueueOptions.isReceiveMessageAttributes()) { receiveMessageRequest.messageAttributeNames("All"); + receiveMessageRequest.attributeNamesWithStrings("All"); + } ReceiveMessageResponse receiveMessageResponse = sqsClient.receiveMessage(receiveMessageRequest.build()); @@ -213,25 +218,37 @@ private SimpleQueueMessage setupSimpleQueueMessage(Message response) { messageAtts.add(entry.getKey(), entry.getValue()); } + for (Map.Entry entry : response.messageAttributes().entrySet()) { + messageAtts.add(entry.getKey(), entry.getValue().stringValue()); + } + return simpleQueueMessage; } @Override public DeleteMessageResult deleteMessage(String messageHandleId) { - return deleteMessagesImpl(Arrays.asList(messageHandleId), new MessageQueueOptions()).get(0); + if (messageHandleId.length() == 0) + return new DeleteMessageResult(); + return deleteMessagesImpl(Arrays.asList(messageHandleId)).get(0); } @Override - public List deleteMessages(List messageHandleIds, MessageQueueOptions messageQueueOptions) { - return deleteMessagesImpl(messageHandleIds, messageQueueOptions); + public List deleteMessages(List messageHandleIds) { + return deleteMessagesImpl(messageHandleIds); } - private List deleteMessagesImpl(List messageHandleIds, MessageQueueOptions messageQueueOptions) { + private List deleteMessagesImpl(List messageHandleIds) { + if (messageHandleIds.size() == 0) + return new ArrayList<>(); + List deleteMessageResults = new ArrayList<>(); List deleteMessageEntries = new ArrayList<>(); for (String msgId: messageHandleIds) { - + deleteMessageEntries.add(DeleteMessageBatchRequestEntry.builder() + .id(java.util.UUID.randomUUID().toString()) + .receiptHandle(msgId) + .build()); } DeleteMessageBatchRequest.Builder deleteMessageRequest = DeleteMessageBatchRequest.builder() .queueUrl(queueURL) @@ -247,7 +264,7 @@ private List deleteMessagesImpl(List messageHandleI } for (BatchResultErrorEntry msg:deleteMessageBatchResponse.failed()) { - logger.error(String.format("DeleteMessage '%s' was rejected by AWS SQS server: %s", msg.id(), msg.message())); + logger.error(String.format("DeleteMessage '%s' was rejected by AWS SQS server: Message: %s", msg.id(), msg.message())); deleteMessageResults.add(new DeleteMessageResult() {{ setMessageId(msg.id()); setMessageDeleteStatus(DeleteMessageResult.FAILED); diff --git a/gxqueueawssqs/src/test/java/com/genexus/messaging/queue/aws/TestQueueBase.java b/gxqueueawssqs/src/test/java/com/genexus/messaging/queue/aws/TestQueueBase.java index a5429db70..e01ba5ab5 100644 --- a/gxqueueawssqs/src/test/java/com/genexus/messaging/queue/aws/TestQueueBase.java +++ b/gxqueueawssqs/src/test/java/com/genexus/messaging/queue/aws/TestQueueBase.java @@ -1,6 +1,7 @@ package com.genexus.messaging.queue.aws; import com.genexus.messaging.queue.IQueue; +import com.genexus.messaging.queue.model.DeleteMessageResult; import com.genexus.messaging.queue.model.MessageQueueOptions; import com.genexus.messaging.queue.model.SimpleQueueMessage; import com.genexus.messaging.queue.model.SendMessageResult; @@ -10,18 +11,15 @@ import org.junit.Before; import org.junit.Test; +import java.util.ArrayList; import java.util.List; import static org.junit.Assert.assertTrue; import static org.junit.Assume.assumeTrue; public abstract class TestQueueBase { - protected IQueue queue; - //AKIAT2GWL4JGR56VMWGX - //PYlgo9ysgr9G2srypFoKkRycjuPqEFB4uJWjgcNW - //https://sqs.us-east-1.amazonaws.com/262442574413/gx-sqs-githubactions-test public abstract String getProviderName(); public abstract IQueue getQueue() throws ServiceConfigurationException; @@ -76,50 +74,149 @@ private void sleep(int sleepMs) { public void getQueueLength() { boolean purged = ensurePurged(); Assert.assertTrue("Queue was not purged", purged); - int qLength = queue.getQueueLength(); - Assert.assertEquals(0, qLength); + int retry = 60; + while (queue.getQueueLength() != 0 && retry-- > 0) { + sleep(500); + } + int queueLength = queue.getQueueLength(); + Assert.assertEquals(0, queueLength); } @Test - public void getQueueLengthNotEmpty() { - boolean purged = ensurePurged(); - Assert.assertTrue("Queue was not purged", purged); + public void sendMessage() { + SendMessageResult sendResult = sendQueueMessage(); + Assert.assertNotNull(sendResult); + Assert.assertEquals(SendMessageResult.SENT, sendResult.getMessageSentStatus()); + Assert.assertNotEquals("", sendResult.getMessageId()); + Assert.assertNotEquals("", sendResult.getMessageServerId()); + } - int qLength = queue.getQueueLength(); - Assert.assertEquals(0, qLength); - sendQueueMessage(); - sleep(5000); - qLength = queue.getQueueLength(); - Assert.assertEquals(1, qLength); + @Test + public void sendMessageError() { + List sendResult = queue.sendMessages(new ArrayList(), new MessageQueueOptions()); + Assert.assertNotNull(sendResult); + Assert.assertTrue(sendResult.size() == 0); } @Test - public void sendMessage() { + public void receiveMessages() { SendMessageResult sendResult = sendQueueMessage(); Assert.assertNotNull(sendResult); Assert.assertEquals(SendMessageResult.SENT, sendResult.getMessageSentStatus()); Assert.assertNotEquals("", sendResult.getMessageId()); - Assert.assertNotEquals("", sendResult.getMessageServerId()); + + List msgs = queue.getMessages(new MessageQueueOptions()); + Assert.assertTrue(msgs.size() > 0); + SimpleQueueMessage msg = msgs.get(0); + Assert.assertTrue(msg.getMessageBody().length() > 0); + Assert.assertTrue(msg.getMessageId().length() > 0); + Assert.assertTrue(msg.getMessageHandleId().length() > 0); + } @Test - public void receiveMessages() { + public void receiveMessagesMaxNumberOfMessages() { + for (int i = 0; i < 20; i++) { + SendMessageResult sendResult = sendQueueMessage(); + Assert.assertNotNull(sendResult); + Assert.assertEquals(SendMessageResult.SENT, sendResult.getMessageSentStatus()); + Assert.assertNotEquals("", sendResult.getMessageId()); + } + sleep(1000); + List msgs = queue.getMessages(new MessageQueueOptions(){{ + setMaxNumberOfMessages(2); + }}); + Assert.assertTrue(msgs.size() <= 2); + SimpleQueueMessage msg = msgs.get(0); + Assert.assertTrue(msg.getMessageBody().length() > 0); + Assert.assertTrue(msg.getMessageId().length() > 0); + Assert.assertTrue(msg.getMessageHandleId().length() > 0); + ensurePurged(); + } + + @Test + public void receiveMultipleMessages() { + for (int i = 0; i < 20; i++) { + SendMessageResult sendResult = sendQueueMessage(); + Assert.assertNotNull(sendResult); + Assert.assertEquals(SendMessageResult.SENT, sendResult.getMessageSentStatus()); + Assert.assertNotEquals("", sendResult.getMessageId()); + } + sleep(1000); + List msgs = queue.getMessages(new MessageQueueOptions(){{ + setWaitTimeout(10); + setMaxNumberOfMessages(10); + }}); + Assert.assertTrue(msgs.size() >= 5); // fewer messages might be returned) + SimpleQueueMessage msg = msgs.get(0); + Assert.assertTrue(msg.getMessageBody().length() > 0); + Assert.assertTrue(msg.getMessageId().length() > 0); + Assert.assertTrue(msg.getMessageHandleId().length() > 0); + } + + @Test + public void receiveMessagesWithAtributes() { SendMessageResult sendResult = sendQueueMessage(); Assert.assertNotNull(sendResult); Assert.assertEquals(SendMessageResult.SENT, sendResult.getMessageSentStatus()); Assert.assertNotEquals("", sendResult.getMessageId()); List msgs = queue.getMessages(new MessageQueueOptions()); - Assert.assertNotEquals(0, msgs.size()); + Assert.assertTrue(msgs.size() > 0); + SimpleQueueMessage msg = msgs.get(0); + Assert.assertTrue(msg.getMessageBody().length() > 0); + Assert.assertTrue(msg.getMessageId().length() > 0); + Assert.assertTrue(msg.getMessageHandleId().length() > 0); + Assert.assertTrue(msg.getMessageAttributes().count() > 1); + Assert.assertTrue(msg.getMessageAttributes().count() < 5); + + MessageQueueOptions opts = new MessageQueueOptions() {{ + setReceiveMessageAttributes(true); + setMaxNumberOfMessages(5); + setDelaySeconds(2); + setTimetoLive(2); + setWaitTimeout(3); + }}; + + sendQueueMessage(); + + msgs = queue.getMessages(opts); + Assert.assertTrue(msgs.size() > 0); + msg = msgs.get(0); + Assert.assertTrue(msg.getMessageBody().length() > 0); + Assert.assertTrue(msg.getMessageId().length() > 0); + Assert.assertTrue(msg.getMessageHandleId().length() > 0); + Assert.assertTrue(msg.getMessageAttributes().count() > 6); + } + + @Test + public void deleteMessage() { + SendMessageResult sendResult = sendQueueMessage(); + Assert.assertNotNull(sendResult); + Assert.assertEquals(SendMessageResult.SENT, sendResult.getMessageSentStatus()); + Assert.assertNotEquals("", sendResult.getMessageId()); + Assert.assertNotEquals("", sendResult.getMessageServerId()); + + sleep(5000); + + List msgs = queue.getMessages(new MessageQueueOptions()); + Assert.assertTrue(msgs.size() > 0); + DeleteMessageResult deleteMessageResult = queue.deleteMessage(msgs.get(0).getMessageHandleId()); + Assert.assertNotNull(deleteMessageResult); + Assert.assertTrue(deleteMessageResult.getMessageId().length() > 0); + Assert.assertEquals(DeleteMessageResult.DELETED, deleteMessageResult.getMessageDeleteStatus()); } private SendMessageResult sendQueueMessage() { SimpleQueueMessage msg = new SimpleQueueMessage() {{ - setMessageId(java.util.UUID.randomUUID().toString()); + setMessageId("gx_" + java.util.UUID.randomUUID().toString()); setMessageBody("messageBody test"); getMessageAttributes().set("att1", "test1"); getMessageAttributes().set("att2", "test2"); + getMessageAttributes().set("att3", "test3"); + getMessageAttributes().set("att4", "test4"); + getMessageAttributes().set("att5", "test5"); }}; return queue.sendMessage(msg); } From 258ab73d35a730d7d6f159f448f8ea536a75a29c Mon Sep 17 00:00:00 2001 From: Gonzalo Gallotti Date: Fri, 10 Jun 2022 18:31:41 -0300 Subject: [PATCH 04/23] Add SDTs models. --- .../com/genexus/xml/GXXMLSerializable.java | 1 - gxqueue/pom.xml | 45 ++++++- .../com/genexus/messaging/queue/Convert.java | 55 ++++++++ .../messaging/queue/SimpleMessageQueue.java | 117 ++++++++++++++++++ .../queue/model/DeleteMessageResult.java | 13 +- .../queue/model/SendMessageResult.java | 17 ++- .../queue/model/SimpleQueueMessage.java | 1 - .../simplequeue/SdtMessage.java | 83 +++++++++++++ .../simplequeue/SdtMessageOptions.java | 111 +++++++++++++++++ .../simplequeue/SdtMessageProperty.java | 53 ++++++++ .../simplequeue/SdtMessageResult.java | 86 +++++++++++++ gxqueueawssqs/pom.xml | 47 ++++--- .../genexus/messaging/queue/aws/AWSQueue.java | 1 - 13 files changed, 590 insertions(+), 40 deletions(-) create mode 100644 gxqueue/src/main/java/com/genexus/messaging/queue/Convert.java create mode 100644 gxqueue/src/main/java/com/genexusmessaging/genexusmessagingqueue/simplequeue/SdtMessage.java create mode 100644 gxqueue/src/main/java/com/genexusmessaging/genexusmessagingqueue/simplequeue/SdtMessageOptions.java create mode 100644 gxqueue/src/main/java/com/genexusmessaging/genexusmessagingqueue/simplequeue/SdtMessageProperty.java create mode 100644 gxqueue/src/main/java/com/genexusmessaging/genexusmessagingqueue/simplequeue/SdtMessageResult.java diff --git a/common/src/main/java/com/genexus/xml/GXXMLSerializable.java b/common/src/main/java/com/genexus/xml/GXXMLSerializable.java index 4ef504414..d4a72cf1a 100644 --- a/common/src/main/java/com/genexus/xml/GXXMLSerializable.java +++ b/common/src/main/java/com/genexus/xml/GXXMLSerializable.java @@ -9,7 +9,6 @@ import java.io.Serializable; import java.util.Iterator; -import java.util.Hashtable; import java.lang.reflect.Method; import java.util.concurrent.ConcurrentHashMap; diff --git a/gxqueue/pom.xml b/gxqueue/pom.xml index f3cead8f5..c3b1adaf5 100644 --- a/gxqueue/pom.xml +++ b/gxqueue/pom.xml @@ -12,16 +12,51 @@ gxqueue - com.genexus + ${project.groupId} + gxclassR + ${project.version} + + + ${project.groupId} gxcommon + ${project.version} + compile + + + com.genexus + gxclassR 2.6-SNAPSHOT compile - - 9 - 9 - + + gxqueue + + + org.apache.maven.plugins + maven-jar-plugin + 3.1.1 + + + + false + + + ${maven.build.timestamp} + GeneXus + ${java.version} + ${os.name} + ${project.version} + ${basedir} + + + + **/com/genexusmessaging/** + + + + + \ No newline at end of file diff --git a/gxqueue/src/main/java/com/genexus/messaging/queue/Convert.java b/gxqueue/src/main/java/com/genexus/messaging/queue/Convert.java new file mode 100644 index 000000000..833d61d9c --- /dev/null +++ b/gxqueue/src/main/java/com/genexus/messaging/queue/Convert.java @@ -0,0 +1,55 @@ +package com.genexus.messaging.queue; + +import com.genexus.GXBaseCollection; +import com.genexus.ModelContext; +import com.genexus.messaging.queue.model.SendMessageResult; +import com.genexus.messaging.queue.model.SimpleQueueMessage; +import com.genexus.util.GXProperties; +import com.genexus.util.GXProperty; +import com.genexusmessaging.genexusmessagingqueue.simplequeue.SdtMessage; +import com.genexusmessaging.genexusmessagingqueue.simplequeue.SdtMessageProperty; +import com.genexusmessaging.genexusmessagingqueue.simplequeue.SdtMessageResult; + +import java.util.ArrayList; + +public class Convert { + + protected static SimpleQueueMessage toSimpleQueueMessage(SdtMessage msg) { + return new SimpleQueueMessage() {{ + setMessageId(msg.getgxTv_SdtMessage_Messageid()); + setMessageBody(msg.getgxTv_SdtMessage_Messagebody()); + setMessageHandleId(msg.getgxTv_SdtMessage_Messagehandleid()); + if (msg.getgxTv_SdtMessage_Messageattributes() != null) { + setMessageAttributes(toGXProperties(msg.getgxTv_SdtMessage_Messageattributes())); + } + }}; + } + + protected static SdtMessageResult toSdtMessageResult(SendMessageResult mResult) { + SdtMessageResult r = new SdtMessageResult(); + r.setgxTv_SdtMessageResult_Messageid(mResult.getMessageId()); + r.setgxTv_SdtMessageResult_Servermessageid(mResult.getMessageServerId()); + r.setgxTv_SdtMessageResult_Messagestatus(mResult.getMessageSentStatus()); + return r; + } + + protected static GXBaseCollection toSdtMessagePropertyCollection(GXProperties msgProps) { + GXBaseCollection props = new GXBaseCollection(); + for (int i = 0; i < msgProps.count(); i++) { + GXProperty propertyItem = msgProps.item(i); + props.add(new SdtMessageProperty() {{ + setgxTv_SdtMessageProperty_Propertykey(propertyItem.getKey()); + setgxTv_SdtMessageProperty_Propertyvalue(propertyItem.getValue()); + }}); + } + return props; + } + + protected static GXProperties toGXProperties(GXBaseCollection msgProps) { + GXProperties props = new GXProperties(); + for (SdtMessageProperty prop : msgProps) { + props.add(prop.getgxTv_SdtMessageProperty_Propertykey(), prop.getgxTv_SdtMessageProperty_Propertyvalue()); + } + return props; + } +} diff --git a/gxqueue/src/main/java/com/genexus/messaging/queue/SimpleMessageQueue.java b/gxqueue/src/main/java/com/genexus/messaging/queue/SimpleMessageQueue.java index b2a1e8e37..4b1d8af5a 100644 --- a/gxqueue/src/main/java/com/genexus/messaging/queue/SimpleMessageQueue.java +++ b/gxqueue/src/main/java/com/genexus/messaging/queue/SimpleMessageQueue.java @@ -1,4 +1,121 @@ package com.genexus.messaging.queue; + +import com.genexus.*; +import com.genexus.diagnostics.core.ILogger; +import com.genexus.diagnostics.core.LogManager; +import com.genexus.messaging.queue.model.DeleteMessageResult; +import com.genexus.messaging.queue.model.MessageId; +import com.genexus.messaging.queue.model.SendMessageResult; +import com.genexus.messaging.queue.model.SimpleQueueMessage; +import com.genexusmessaging.genexusmessagingqueue.simplequeue.SdtMessage; +import com.genexusmessaging.genexusmessagingqueue.simplequeue.SdtMessageResult; + +import java.lang.reflect.Constructor; + public class SimpleMessageQueue { + private IQueue queue; + private static ILogger logger = LogManager.getLogger(SimpleMessageQueue.class); + + private static String SDT_MESSAGE_CLASS_NAME = "SdtMessage"; + private static String SDT_MESSAGEPROPERTY_CLASS_NAME = "SdtMessageProperty"; + private static String SDT_MESSAGERESULT_CLASS_NAME = "SdtMessageResult"; + private static String NAMESPACE = "GeneXus.Programs.genexusmessagingqueue.simplequeue"; + + + public SimpleMessageQueue() { + + } + + public SimpleMessageQueue(SimpleMessageQueue other) { + queue = other.queue; + } + + void validQueue() throws Exception { + if (queue == null) { + logger.error("Queue was not instantiated."); + throw new Exception("Queue was not instantiated."); + } + } + + + public void clear(GXBaseCollection[] errorMessagesArr, boolean[] success) { + GXBaseCollection errorMessages = errorMessagesArr[0]; + errorMessages.clear(); + try { + validQueue(); + success[0] = queue.purge(); + } catch (Exception ex) { + queueErrorMessagesSetup(ex, errorMessages); + } + success[0] = false; + } + + public short getQueueLength(GXBaseCollection[] errorMessagesArr, boolean[] success) { + GXBaseCollection errorMessages = errorMessagesArr[0]; + errorMessages.clear(); + short queueLength = 0; + try { + validQueue(); + queueLength = queue.getQueueLength().shortValue(); + } catch (Exception ex) { + queueErrorMessagesSetup(ex, errorMessages); + } + return queueLength; + } + + public GxUserType sendMessage(SdtMessage sdtMessage, GXBaseCollection[] errorMessagesArr, boolean[] success) { + GXBaseCollection errorMessages = errorMessagesArr[0]; + errorMessages.clear(); + + SendMessageResult sendMessageResult = new SendMessageResult(); + errorMessages = new GXBaseCollection(); + SimpleQueueMessage queueMessage = Convert.toSimpleQueueMessage(sdtMessage); + try { + validQueue(); + sendMessageResult = queue.sendMessage(queueMessage); + success[0] = true; + return Convert.toSdtMessageResult(sendMessageResult); + + } catch (Exception ex) { + queueErrorMessagesSetup(ex, errorMessages); + + logger.error("Could not send queue message", ex); + } + + return Convert.toSdtMessageResult(sendMessageResult); + } + + public boolean deleteMessage(String messageHandleId, GXBaseCollection[] errorMessagesArr, SdtMessageResult sdtDelete) { + GXBaseCollection errorMessages = errorMessagesArr[0]; + errorMessages.clear(); + + try { + validQueue(); + DeleteMessageResult deletedMessage = queue.deleteMessage(messageHandleId); + sdtDelete.setgxTv_SdtMessageResult_Messageid(deletedMessage.getMessageId()); + sdtDelete.setgxTv_SdtMessageResult_Servermessageid(deletedMessage.getMessageServerId()); + sdtDelete.setgxTv_SdtMessageResult_Messagestatus(deletedMessage.getMessageDeleteStatus()); + return deletedMessage.getMessageDeleteStatus() == DeleteMessageResult.DELETED; + } catch (Exception ex) { + queueErrorMessagesSetup(ex, errorMessages); + logger.error(String.format("Could not delete Message '%s' from Queue ", messageHandleId), ex); + } + return false; + } + + protected void queueErrorMessagesSetup(Exception ex, GXBaseCollection messages) { + if (messages != null && ex != null) { + StructSdtMessages_Message struct = new StructSdtMessages_Message(); + /*if (provider!=null && provider.getMessageFromException(ex, struct)) { + struct.setDescription(ex.getMessage()); + struct.setType((byte) 1); //error + SdtMessages_Message msg = new SdtMessages_Message(struct); + messages.add(msg); + } else { + GXutil.ErrorToMessages("Storage Error", ex.getClass()+" " +ex.getMessage(), messages); + }*/ + } + } + } diff --git a/gxqueue/src/main/java/com/genexus/messaging/queue/model/DeleteMessageResult.java b/gxqueue/src/main/java/com/genexus/messaging/queue/model/DeleteMessageResult.java index 84c46c729..0c94de2bd 100644 --- a/gxqueue/src/main/java/com/genexus/messaging/queue/model/DeleteMessageResult.java +++ b/gxqueue/src/main/java/com/genexus/messaging/queue/model/DeleteMessageResult.java @@ -1,17 +1,18 @@ package com.genexus.messaging.queue.model; public class DeleteMessageResult extends MessageId { - public static int FAILED = 2; - public static int DELETED = 1; - public static int PENDING = 0; + public static String DELETED = "Deleted"; + public static String FAILED = "Failed"; + public static String SENT = "Sent"; + public static String UNKNOWN = "Unknown"; - private int messageDeleteStatus = PENDING; + private String messageDeleteStatus = UNKNOWN; - public int getMessageDeleteStatus() { + public String getMessageDeleteStatus() { return messageDeleteStatus; } - public void setMessageDeleteStatus(int messageDeleteStatus) { + public void setMessageDeleteStatus(String messageDeleteStatus) { this.messageDeleteStatus = messageDeleteStatus; } } diff --git a/gxqueue/src/main/java/com/genexus/messaging/queue/model/SendMessageResult.java b/gxqueue/src/main/java/com/genexus/messaging/queue/model/SendMessageResult.java index 41d6e1b1b..53fa0dd81 100644 --- a/gxqueue/src/main/java/com/genexus/messaging/queue/model/SendMessageResult.java +++ b/gxqueue/src/main/java/com/genexus/messaging/queue/model/SendMessageResult.java @@ -1,21 +1,18 @@ package com.genexus.messaging.queue.model; -import com.genexus.util.GXProperties; - public class SendMessageResult extends MessageId { - public static int FAILED = 2; - public static int SENT = 1; - public static int PENDING = 0; + public static String DELETED = "Deleted"; + public static String FAILED = "Failed"; + public static String SENT = "Sent"; + public static String UNKNOWN = "Unknown"; - private int messageSentStatus = PENDING; + private String messageSentStatus = UNKNOWN; - public int getMessageSentStatus() { + public String getMessageSentStatus() { return messageSentStatus; } - public void setMessageSentStatus(int messageSentStatus) { + public void setMessageSentStatus(String messageSentStatus) { this.messageSentStatus = messageSentStatus; } } - - diff --git a/gxqueue/src/main/java/com/genexus/messaging/queue/model/SimpleQueueMessage.java b/gxqueue/src/main/java/com/genexus/messaging/queue/model/SimpleQueueMessage.java index d1d84f75f..e07336cf3 100644 --- a/gxqueue/src/main/java/com/genexus/messaging/queue/model/SimpleQueueMessage.java +++ b/gxqueue/src/main/java/com/genexus/messaging/queue/model/SimpleQueueMessage.java @@ -8,7 +8,6 @@ public class SimpleQueueMessage { private GXProperties messageAttributes = new GXProperties(); private String messageHandleId; - public String getMessageId() { return messageId; } diff --git a/gxqueue/src/main/java/com/genexusmessaging/genexusmessagingqueue/simplequeue/SdtMessage.java b/gxqueue/src/main/java/com/genexusmessaging/genexusmessagingqueue/simplequeue/SdtMessage.java new file mode 100644 index 000000000..d78848416 --- /dev/null +++ b/gxqueue/src/main/java/com/genexusmessaging/genexusmessagingqueue/simplequeue/SdtMessage.java @@ -0,0 +1,83 @@ +package com.genexusmessaging.genexusmessagingqueue.simplequeue; + +import com.genexus.*; + +public class SdtMessage extends GxUserType { + protected byte gxTv_SdtMessage_N; + protected byte gxTv_SdtMessage_Messageattributes_N; + protected String sTagName; + protected String gxTv_SdtMessage_Messagebody; + protected String gxTv_SdtMessage_Messageid; + protected String gxTv_SdtMessage_Messagehandleid; + protected GXBaseCollection gxTv_SdtMessage_Messageattributes_aux; + protected GXBaseCollection gxTv_SdtMessage_Messageattributes = null; + + + public SdtMessage( ) + { + this( new ModelContext(SdtMessage.class)); + } + + public SdtMessage( ModelContext context ) + { + super( context, "SdtMessage"); + } + + public String getgxTv_SdtMessage_Messageid() { + return gxTv_SdtMessage_Messageid; + } + + public void setgxTv_SdtMessage_Messageid(String value) { + gxTv_SdtMessage_N = (byte) (0); + gxTv_SdtMessage_Messageid = value; + } + + public String getgxTv_SdtMessage_Messagebody() { + return gxTv_SdtMessage_Messagebody; + } + + public void setgxTv_SdtMessage_Messagebody(String value) { + gxTv_SdtMessage_N = (byte) (0); + gxTv_SdtMessage_Messagebody = value; + } + + public String getgxTv_SdtMessage_Messagehandleid() { + return gxTv_SdtMessage_Messagehandleid; + } + + public void setgxTv_SdtMessage_Messagehandleid(String value) { + gxTv_SdtMessage_N = (byte) (0); + gxTv_SdtMessage_Messagehandleid = value; + } + + public GXBaseCollection getgxTv_SdtMessage_Messageattributes() { + if (gxTv_SdtMessage_Messageattributes == null) { + gxTv_SdtMessage_Messageattributes = new GXBaseCollection(com.genexusmessaging.genexusmessagingqueue.simplequeue.SdtMessageProperty.class, "MessageProperty", "GeneXusMessaging", remoteHandle); + } + gxTv_SdtMessage_Messageattributes_N = (byte) (0); + gxTv_SdtMessage_N = (byte) (0); + return gxTv_SdtMessage_Messageattributes; + } + + public void setgxTv_SdtMessage_Messageattributes(GXBaseCollection value) { + gxTv_SdtMessage_Messageattributes_N = (byte) (0); + gxTv_SdtMessage_N = (byte) (0); + gxTv_SdtMessage_Messageattributes = value; + } + + + public void initialize() { + gxTv_SdtMessage_Messageid = ""; + gxTv_SdtMessage_N = (byte) (1); + gxTv_SdtMessage_Messagebody = ""; + gxTv_SdtMessage_Messagehandleid = ""; + gxTv_SdtMessage_Messageattributes_N = (byte) (1); + sTagName = ""; + } + + @Override + public String getJsonMap(String value) { + return null; + } +} + diff --git a/gxqueue/src/main/java/com/genexusmessaging/genexusmessagingqueue/simplequeue/SdtMessageOptions.java b/gxqueue/src/main/java/com/genexusmessaging/genexusmessagingqueue/simplequeue/SdtMessageOptions.java new file mode 100644 index 000000000..d5a287e50 --- /dev/null +++ b/gxqueue/src/main/java/com/genexusmessaging/genexusmessagingqueue/simplequeue/SdtMessageOptions.java @@ -0,0 +1,111 @@ +package com.genexusmessaging.genexusmessagingqueue.simplequeue; + +import com.genexus.*; +import com.genexus.xml.*; + +import java.util.*; + +public class SdtMessageOptions extends GxUserType { + protected byte gxTv_SdtMessageOptions_N; + protected short gxTv_SdtMessageOptions_Maxnumberofmessages; + protected int gxTv_SdtMessageOptions_Waittimeout; + protected int gxTv_SdtMessageOptions_Visibilitytimeout; + protected int gxTv_SdtMessageOptions_Timetolive; + protected int gxTv_SdtMessageOptions_Delayseconds; + + protected boolean gxTv_SdtMessageOptions_Deleteconsumedmessages; + protected boolean gxTv_SdtMessageOptions_Receivemessageattributes; + protected String gxTv_SdtMessageOptions_Receiverequestattemptid; + + public SdtMessageOptions( ) + { + this( new ModelContext(SdtMessageOptions.class)); + } + + public SdtMessageOptions( ModelContext context ) + { + super( context, "SdtMessageOptions"); + } + + public short getgxTv_SdtMessageOptions_Maxnumberofmessages() { + return gxTv_SdtMessageOptions_Maxnumberofmessages; + } + + public void setgxTv_SdtMessageOptions_Maxnumberofmessages(short value) { + gxTv_SdtMessageOptions_N = (byte) (0); + gxTv_SdtMessageOptions_Maxnumberofmessages = value; + } + + public boolean getgxTv_SdtMessageOptions_Deleteconsumedmessages() { + return gxTv_SdtMessageOptions_Deleteconsumedmessages; + } + + public void setgxTv_SdtMessageOptions_Deleteconsumedmessages(boolean value) { + gxTv_SdtMessageOptions_N = (byte) (0); + gxTv_SdtMessageOptions_Deleteconsumedmessages = value; + } + + public int getgxTv_SdtMessageOptions_Waittimeout() { + return gxTv_SdtMessageOptions_Waittimeout; + } + + public void setgxTv_SdtMessageOptions_Waittimeout(int value) { + gxTv_SdtMessageOptions_N = (byte) (0); + gxTv_SdtMessageOptions_Waittimeout = value; + } + + public int getgxTv_SdtMessageOptions_Visibilitytimeout() { + return gxTv_SdtMessageOptions_Visibilitytimeout; + } + + public void setgxTv_SdtMessageOptions_Visibilitytimeout(int value) { + gxTv_SdtMessageOptions_N = (byte) (0); + gxTv_SdtMessageOptions_Visibilitytimeout = value; + } + + public int getgxTv_SdtMessageOptions_Timetolive() { + return gxTv_SdtMessageOptions_Timetolive; + } + + public void setgxTv_SdtMessageOptions_Timetolive(int value) { + gxTv_SdtMessageOptions_N = (byte) (0); + gxTv_SdtMessageOptions_Timetolive = value; + } + + public int getgxTv_SdtMessageOptions_Delayseconds() { + return gxTv_SdtMessageOptions_Delayseconds; + } + + public void setgxTv_SdtMessageOptions_Delayseconds(int value) { + gxTv_SdtMessageOptions_N = (byte) (0); + gxTv_SdtMessageOptions_Delayseconds = value; + } + + public String getgxTv_SdtMessageOptions_Receiverequestattemptid() { + return gxTv_SdtMessageOptions_Receiverequestattemptid; + } + + public void setgxTv_SdtMessageOptions_Receiverequestattemptid(String value) { + gxTv_SdtMessageOptions_N = (byte) (0); + gxTv_SdtMessageOptions_Receiverequestattemptid = value; + } + + public boolean getgxTv_SdtMessageOptions_Receivemessageattributes() { + return gxTv_SdtMessageOptions_Receivemessageattributes; + } + + public void setgxTv_SdtMessageOptions_Receivemessageattributes(boolean value) { + gxTv_SdtMessageOptions_N = (byte) (0); + gxTv_SdtMessageOptions_Receivemessageattributes = value; + } + + public void initialize() { + gxTv_SdtMessageOptions_N = (byte) (1); + gxTv_SdtMessageOptions_Receiverequestattemptid = ""; + } + @Override + public String getJsonMap(String value) { + return null; + } +} + diff --git a/gxqueue/src/main/java/com/genexusmessaging/genexusmessagingqueue/simplequeue/SdtMessageProperty.java b/gxqueue/src/main/java/com/genexusmessaging/genexusmessagingqueue/simplequeue/SdtMessageProperty.java new file mode 100644 index 000000000..563ec17cc --- /dev/null +++ b/gxqueue/src/main/java/com/genexusmessaging/genexusmessagingqueue/simplequeue/SdtMessageProperty.java @@ -0,0 +1,53 @@ +package com.genexusmessaging.genexusmessagingqueue.simplequeue; + +import com.genexus.*; + +public class SdtMessageProperty extends GxUserType { + protected byte gxTv_SdtMessageProperty_N; + protected String gxTv_SdtMessageProperty_Propertykey; + protected String gxTv_SdtMessageProperty_Propertyvalue; + + public SdtMessageProperty( ) + { + this( new ModelContext(SdtMessageOptions.class)); + } + + public SdtMessageProperty( ModelContext context ) + { + super( context, "SdtMessageOptions"); + } + + public String getgxTv_SdtMessageProperty_Propertykey() { + return gxTv_SdtMessageProperty_Propertykey; + } + + public void setgxTv_SdtMessageProperty_Propertykey(String value) { + gxTv_SdtMessageProperty_N = (byte) (0); + gxTv_SdtMessageProperty_Propertykey = value; + } + + public String getgxTv_SdtMessageProperty_Propertyvalue() { + return gxTv_SdtMessageProperty_Propertyvalue; + } + + public void setgxTv_SdtMessageProperty_Propertyvalue(String value) { + gxTv_SdtMessageProperty_N = (byte) (0); + gxTv_SdtMessageProperty_Propertyvalue = value; + } + + public void initialize(int remoteHandle) { + initialize(); + } + + public void initialize() { + gxTv_SdtMessageProperty_Propertykey = ""; + gxTv_SdtMessageProperty_N = (byte) (1); + gxTv_SdtMessageProperty_Propertyvalue = ""; + } + + @Override + public String getJsonMap(String value) { + return null; + } +} + diff --git a/gxqueue/src/main/java/com/genexusmessaging/genexusmessagingqueue/simplequeue/SdtMessageResult.java b/gxqueue/src/main/java/com/genexusmessaging/genexusmessagingqueue/simplequeue/SdtMessageResult.java new file mode 100644 index 000000000..c094d4cc7 --- /dev/null +++ b/gxqueue/src/main/java/com/genexusmessaging/genexusmessagingqueue/simplequeue/SdtMessageResult.java @@ -0,0 +1,86 @@ +package com.genexusmessaging.genexusmessagingqueue.simplequeue; + +import com.genexus.*; + +public class SdtMessageResult extends GxUserType { + protected byte gxTv_SdtMessageResult_N; + protected byte gxTv_SdtMessageResult_Messageattributes_N; + protected String gxTv_SdtMessageResult_Messageid; + protected String gxTv_SdtMessageResult_Servermessageid; + protected String gxTv_SdtMessageResult_Messagehandleid; + protected String gxTv_SdtMessageResult_Messagestatus; + protected GXBaseCollection gxTv_SdtMessageResult_Messageattributes_aux; + protected GXBaseCollection gxTv_SdtMessageResult_Messageattributes = null; + + public SdtMessageResult( ) + { + this( new ModelContext(SdtMessageResult.class)); + } + + public SdtMessageResult( ModelContext context ) + { + super( context, "SdtMessageResult"); + } + + public String getgxTv_SdtMessageResult_Messageid() { + return gxTv_SdtMessageResult_Messageid; + } + + public void setgxTv_SdtMessageResult_Messageid(String value) { + gxTv_SdtMessageResult_N = (byte) (0); + gxTv_SdtMessageResult_Messageid = value; + } + + public String getgxTv_SdtMessageResult_Servermessageid() { + return gxTv_SdtMessageResult_Servermessageid; + } + + public void setgxTv_SdtMessageResult_Servermessageid(String value) { + gxTv_SdtMessageResult_N = (byte) (0); + gxTv_SdtMessageResult_Servermessageid = value; + } + + public String getgxTv_SdtMessageResult_Messagehandleid() { + return gxTv_SdtMessageResult_Messagehandleid; + } + + public void setgxTv_SdtMessageResult_Messagehandleid(String value) { + gxTv_SdtMessageResult_N = (byte) (0); + gxTv_SdtMessageResult_Messagehandleid = value; + } + + public String getgxTv_SdtMessageResult_Messagestatus() { + return gxTv_SdtMessageResult_Messagestatus; + } + + public void setgxTv_SdtMessageResult_Messagestatus(String value) { + gxTv_SdtMessageResult_N = (byte) (0); + gxTv_SdtMessageResult_Messagestatus = value; + } + + public GXBaseCollection getgxTv_SdtMessageResult_Messageattributes() { + if (gxTv_SdtMessageResult_Messageattributes == null) { + gxTv_SdtMessageResult_Messageattributes = new GXBaseCollection(com.genexusmessaging.genexusmessagingqueue.simplequeue.SdtMessageProperty.class, "MessageProperty", "GeneXusMessaging", remoteHandle); + } + gxTv_SdtMessageResult_Messageattributes_N = (byte) (0); + gxTv_SdtMessageResult_N = (byte) (0); + return gxTv_SdtMessageResult_Messageattributes; + } + + public void setgxTv_SdtMessageResult_Messageattributes(GXBaseCollection value) { + gxTv_SdtMessageResult_Messageattributes_N = (byte) (0); + gxTv_SdtMessageResult_N = (byte) (0); + gxTv_SdtMessageResult_Messageattributes = value; + } + + @Override + public void initialize() { + + } + + @Override + public String getJsonMap(String value) { + return null; + } +} + diff --git a/gxqueueawssqs/pom.xml b/gxqueueawssqs/pom.xml index 969e15ffb..3a6a6a18a 100644 --- a/gxqueueawssqs/pom.xml +++ b/gxqueueawssqs/pom.xml @@ -18,32 +18,47 @@ ${project.groupId} - gxqueue + gxcommon ${project.version} compile - - software.amazon.awssdk - sqs - 2.17.205 - ${project.groupId} - gxcommon + gxqueue ${project.version} compile - com.genexus - gxclassR - 2.6-SNAPSHOT - test + software.amazon.awssdk + sqs + 2.17.205 - - - 9 - 9 - + + + gxqueue-awssqs + + + org.apache.maven.plugins + maven-jar-plugin + 3.1.1 + + + + false + + + ${maven.build.timestamp} + GeneXus + ${java.version} + ${os.name} + ${project.version} + ${basedir} + + + + + + \ No newline at end of file diff --git a/gxqueueawssqs/src/main/java/com/genexus/messaging/queue/aws/AWSQueue.java b/gxqueueawssqs/src/main/java/com/genexus/messaging/queue/aws/AWSQueue.java index fcab08443..1d3d78152 100644 --- a/gxqueueawssqs/src/main/java/com/genexus/messaging/queue/aws/AWSQueue.java +++ b/gxqueueawssqs/src/main/java/com/genexus/messaging/queue/aws/AWSQueue.java @@ -11,7 +11,6 @@ import com.genexus.util.GXProperties; import com.genexus.util.GXProperty; import com.genexus.util.GXService; -import org.apache.commons.lang.Validate; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import software.amazon.awssdk.auth.credentials.AwsBasicCredentials; From 023ec0d61b8c12ed80cf448e522e109b4882ec7e Mon Sep 17 00:00:00 2001 From: Gonzalo Gallotti Date: Wed, 15 Jun 2022 16:19:13 -0300 Subject: [PATCH 05/23] Refacroting. More UnitTest. GeneXus API Implementation. --- .../java/com/genexus/db/DynamicExecute.java | 3 +- .../com/genexus/messaging/queue/Convert.java | 12 ++- .../messaging/queue/SimpleMessageQueue.java | 29 ++----- .../simplequeue/SdtMessage.java | 2 +- .../simplequeue/SdtMessageOptions.java | 2 +- .../simplequeue/SdtMessageProperty.java | 2 +- .../simplequeue/SdtMessageResult.java | 2 +- gxqueueawssqs/pom.xml | 3 + .../queue/aws/AWSBasicCredentials.java | 31 ++++++++ .../messaging/queue/aws/AWSCredentials.java | 4 + .../genexus/messaging/queue/aws/AWSQueue.java | 33 +++----- .../messaging/queue/aws/AWSQueueFactory.java | 60 ++++++++++++++ .../awscore/SdtAWSBasicCredentials.java | 79 +++++++++++++++++++ .../messaging/queue/aws/TestAWSQueue.java | 46 ++++++++++- .../messaging/queue/aws/TestQueueBase.java | 26 +++++- 15 files changed, 275 insertions(+), 59 deletions(-) create mode 100644 gxqueueawssqs/src/main/java/com/genexus/messaging/queue/aws/AWSBasicCredentials.java create mode 100644 gxqueueawssqs/src/main/java/com/genexus/messaging/queue/aws/AWSCredentials.java create mode 100644 gxqueueawssqs/src/main/java/com/genexus/messaging/queue/aws/AWSQueueFactory.java create mode 100644 gxqueueawssqs/src/main/java/com/genexusmessaging/awscore/SdtAWSBasicCredentials.java diff --git a/common/src/main/java/com/genexus/db/DynamicExecute.java b/common/src/main/java/com/genexus/db/DynamicExecute.java index ed72237c7..1fab80000 100644 --- a/common/src/main/java/com/genexus/db/DynamicExecute.java +++ b/common/src/main/java/com/genexus/db/DynamicExecute.java @@ -439,7 +439,8 @@ public static boolean dynamicExecute(ModelContext context, int handle, Class cal { //Application.printWarning("java.lang.reflect.InvocationTargetException Can't execute dynamic call " + className + " - " + e.getTargetException().getMessage(), e); //return false; - throw new RuntimeException("java.lang.reflect.InvocationTargetException Can't execute dynamic call " + className + " - " + e.getTargetException().getMessage()); + e.printStackTrace(); + throw new RuntimeException("java.lang.reflect.InvocationTargetException Can't execute dynamic call " + className + " - " + e.getTargetException().getMessage(), e); } catch (InstantiationException e) { diff --git a/gxqueue/src/main/java/com/genexus/messaging/queue/Convert.java b/gxqueue/src/main/java/com/genexus/messaging/queue/Convert.java index 833d61d9c..c574ec0a5 100644 --- a/gxqueue/src/main/java/com/genexus/messaging/queue/Convert.java +++ b/gxqueue/src/main/java/com/genexus/messaging/queue/Convert.java @@ -1,7 +1,7 @@ package com.genexus.messaging.queue; import com.genexus.GXBaseCollection; -import com.genexus.ModelContext; + import com.genexus.messaging.queue.model.SendMessageResult; import com.genexus.messaging.queue.model.SimpleQueueMessage; import com.genexus.util.GXProperties; @@ -10,8 +10,6 @@ import com.genexusmessaging.genexusmessagingqueue.simplequeue.SdtMessageProperty; import com.genexusmessaging.genexusmessagingqueue.simplequeue.SdtMessageResult; -import java.util.ArrayList; - public class Convert { protected static SimpleQueueMessage toSimpleQueueMessage(SdtMessage msg) { @@ -37,10 +35,10 @@ protected static GXBaseCollection toSdtMessagePropertyCollec GXBaseCollection props = new GXBaseCollection(); for (int i = 0; i < msgProps.count(); i++) { GXProperty propertyItem = msgProps.item(i); - props.add(new SdtMessageProperty() {{ - setgxTv_SdtMessageProperty_Propertykey(propertyItem.getKey()); - setgxTv_SdtMessageProperty_Propertyvalue(propertyItem.getValue()); - }}); + SdtMessageProperty msgProperty = new SdtMessageProperty(); + msgProperty.setgxTv_SdtMessageProperty_Propertykey(propertyItem.getKey()); + msgProperty.setgxTv_SdtMessageProperty_Propertyvalue(propertyItem.getValue()); + props.add(msgProperty); } return props; } diff --git a/gxqueue/src/main/java/com/genexus/messaging/queue/SimpleMessageQueue.java b/gxqueue/src/main/java/com/genexus/messaging/queue/SimpleMessageQueue.java index 4b1d8af5a..1f88ca6ee 100644 --- a/gxqueue/src/main/java/com/genexus/messaging/queue/SimpleMessageQueue.java +++ b/gxqueue/src/main/java/com/genexus/messaging/queue/SimpleMessageQueue.java @@ -1,34 +1,25 @@ package com.genexus.messaging.queue; - import com.genexus.*; import com.genexus.diagnostics.core.ILogger; import com.genexus.diagnostics.core.LogManager; import com.genexus.messaging.queue.model.DeleteMessageResult; -import com.genexus.messaging.queue.model.MessageId; import com.genexus.messaging.queue.model.SendMessageResult; import com.genexus.messaging.queue.model.SimpleQueueMessage; import com.genexusmessaging.genexusmessagingqueue.simplequeue.SdtMessage; import com.genexusmessaging.genexusmessagingqueue.simplequeue.SdtMessageResult; -import java.lang.reflect.Constructor; - public class SimpleMessageQueue { private IQueue queue; private static ILogger logger = LogManager.getLogger(SimpleMessageQueue.class); - private static String SDT_MESSAGE_CLASS_NAME = "SdtMessage"; - private static String SDT_MESSAGEPROPERTY_CLASS_NAME = "SdtMessageProperty"; - private static String SDT_MESSAGERESULT_CLASS_NAME = "SdtMessageResult"; - private static String NAMESPACE = "GeneXus.Programs.genexusmessagingqueue.simplequeue"; - - - public SimpleMessageQueue() { + public SimpleMessageQueue() + { } - public SimpleMessageQueue(SimpleMessageQueue other) { - queue = other.queue; + public SimpleMessageQueue(IQueue queueProvider) { + queue = queueProvider; } void validQueue() throws Exception { @@ -76,10 +67,8 @@ public GxUserType sendMessage(SdtMessage sdtMessage, GXBaseCollection messages) { if (messages != null && ex != null) { StructSdtMessages_Message struct = new StructSdtMessages_Message(); - /*if (provider!=null && provider.getMessageFromException(ex, struct)) { - struct.setDescription(ex.getMessage()); - struct.setType((byte) 1); //error - SdtMessages_Message msg = new SdtMessages_Message(struct); - messages.add(msg); - } else { - GXutil.ErrorToMessages("Storage Error", ex.getClass()+" " +ex.getMessage(), messages); - }*/ + struct.setType((byte)1); + struct.setDescription(ex.getMessage()); } } diff --git a/gxqueue/src/main/java/com/genexusmessaging/genexusmessagingqueue/simplequeue/SdtMessage.java b/gxqueue/src/main/java/com/genexusmessaging/genexusmessagingqueue/simplequeue/SdtMessage.java index d78848416..d4c7c874e 100644 --- a/gxqueue/src/main/java/com/genexusmessaging/genexusmessagingqueue/simplequeue/SdtMessage.java +++ b/gxqueue/src/main/java/com/genexusmessaging/genexusmessagingqueue/simplequeue/SdtMessage.java @@ -2,7 +2,7 @@ import com.genexus.*; -public class SdtMessage extends GxUserType { +public final class SdtMessage extends GxUserType { protected byte gxTv_SdtMessage_N; protected byte gxTv_SdtMessage_Messageattributes_N; protected String sTagName; diff --git a/gxqueue/src/main/java/com/genexusmessaging/genexusmessagingqueue/simplequeue/SdtMessageOptions.java b/gxqueue/src/main/java/com/genexusmessaging/genexusmessagingqueue/simplequeue/SdtMessageOptions.java index d5a287e50..ca171bf20 100644 --- a/gxqueue/src/main/java/com/genexusmessaging/genexusmessagingqueue/simplequeue/SdtMessageOptions.java +++ b/gxqueue/src/main/java/com/genexusmessaging/genexusmessagingqueue/simplequeue/SdtMessageOptions.java @@ -5,7 +5,7 @@ import java.util.*; -public class SdtMessageOptions extends GxUserType { +public final class SdtMessageOptions extends GxUserType { protected byte gxTv_SdtMessageOptions_N; protected short gxTv_SdtMessageOptions_Maxnumberofmessages; protected int gxTv_SdtMessageOptions_Waittimeout; diff --git a/gxqueue/src/main/java/com/genexusmessaging/genexusmessagingqueue/simplequeue/SdtMessageProperty.java b/gxqueue/src/main/java/com/genexusmessaging/genexusmessagingqueue/simplequeue/SdtMessageProperty.java index 563ec17cc..d8fe7e3a3 100644 --- a/gxqueue/src/main/java/com/genexusmessaging/genexusmessagingqueue/simplequeue/SdtMessageProperty.java +++ b/gxqueue/src/main/java/com/genexusmessaging/genexusmessagingqueue/simplequeue/SdtMessageProperty.java @@ -2,7 +2,7 @@ import com.genexus.*; -public class SdtMessageProperty extends GxUserType { +public final class SdtMessageProperty extends GxUserType { protected byte gxTv_SdtMessageProperty_N; protected String gxTv_SdtMessageProperty_Propertykey; protected String gxTv_SdtMessageProperty_Propertyvalue; diff --git a/gxqueue/src/main/java/com/genexusmessaging/genexusmessagingqueue/simplequeue/SdtMessageResult.java b/gxqueue/src/main/java/com/genexusmessaging/genexusmessagingqueue/simplequeue/SdtMessageResult.java index c094d4cc7..9a5a69cac 100644 --- a/gxqueue/src/main/java/com/genexusmessaging/genexusmessagingqueue/simplequeue/SdtMessageResult.java +++ b/gxqueue/src/main/java/com/genexusmessaging/genexusmessagingqueue/simplequeue/SdtMessageResult.java @@ -2,7 +2,7 @@ import com.genexus.*; -public class SdtMessageResult extends GxUserType { +public final class SdtMessageResult extends GxUserType { protected byte gxTv_SdtMessageResult_N; protected byte gxTv_SdtMessageResult_Messageattributes_N; protected String gxTv_SdtMessageResult_Messageid; diff --git a/gxqueueawssqs/pom.xml b/gxqueueawssqs/pom.xml index 3a6a6a18a..3e79cbc2b 100644 --- a/gxqueueawssqs/pom.xml +++ b/gxqueueawssqs/pom.xml @@ -57,6 +57,9 @@ ${basedir} + + **/com/genexusmessaging/** + diff --git a/gxqueueawssqs/src/main/java/com/genexus/messaging/queue/aws/AWSBasicCredentials.java b/gxqueueawssqs/src/main/java/com/genexus/messaging/queue/aws/AWSBasicCredentials.java new file mode 100644 index 000000000..f2a0af299 --- /dev/null +++ b/gxqueueawssqs/src/main/java/com/genexus/messaging/queue/aws/AWSBasicCredentials.java @@ -0,0 +1,31 @@ +package com.genexus.messaging.queue.aws; + +public class AWSBasicCredentials extends AWSCredentials { + private String accessKeyId; + private String secretKey; + private String region; + + public String getAccessKeyId() { + return accessKeyId; + } + + public void setAccessKeyId(String accessKeyId) { + this.accessKeyId = accessKeyId; + } + + public String getSecretKey() { + return secretKey; + } + + public void setSecretKey(String secretKey) { + this.secretKey = secretKey; + } + + public String getRegion() { + return region; + } + + public void setRegion(String region) { + this.region = region; + } +} diff --git a/gxqueueawssqs/src/main/java/com/genexus/messaging/queue/aws/AWSCredentials.java b/gxqueueawssqs/src/main/java/com/genexus/messaging/queue/aws/AWSCredentials.java new file mode 100644 index 000000000..c09c308c5 --- /dev/null +++ b/gxqueueawssqs/src/main/java/com/genexus/messaging/queue/aws/AWSCredentials.java @@ -0,0 +1,4 @@ +package com.genexus.messaging.queue.aws; + +public abstract class AWSCredentials { +} diff --git a/gxqueueawssqs/src/main/java/com/genexus/messaging/queue/aws/AWSQueue.java b/gxqueueawssqs/src/main/java/com/genexus/messaging/queue/aws/AWSQueue.java index 1d3d78152..adb15f448 100644 --- a/gxqueueawssqs/src/main/java/com/genexus/messaging/queue/aws/AWSQueue.java +++ b/gxqueueawssqs/src/main/java/com/genexus/messaging/queue/aws/AWSQueue.java @@ -7,10 +7,8 @@ import com.genexus.messaging.queue.model.SendMessageResult; import com.genexus.services.ServiceConfigurationException; -import com.genexus.services.ServiceSettingsReader; import com.genexus.util.GXProperties; import com.genexus.util.GXProperty; -import com.genexus.util.GXService; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import software.amazon.awssdk.auth.credentials.AwsBasicCredentials; @@ -29,11 +27,6 @@ public class AWSQueue implements IQueue { private SqsClient sqsClient; - public static String ACCESS_KEY = "ACCESS_KEY"; - public static String SECRET_ACCESS_KEY = "SECRET_KEY"; - public static String REGION = "REGION"; - public static String QUEUE_URL = "QUEUE_URL"; - private String accessKey; private String secret; private String awsRegion; @@ -43,24 +36,24 @@ public class AWSQueue implements IQueue { private static String MESSSAGE_GROUP_ID = "MessageGroupId"; private static String MESSSAGE_DEDUPLICATION_ID = "MessageDeduplicationId"; - public AWSQueue() throws ServiceConfigurationException { - initialize(new GXService()); + public AWSQueue(String queueUrl) throws ServiceConfigurationException { + initialize(null, queueURL); } - public AWSQueue(GXService service) throws ServiceConfigurationException { - initialize(service); + public AWSQueue(AWSBasicCredentials credentials, String queueUrl) throws ServiceConfigurationException { + initialize(credentials, queueUrl); } - private void initialize(GXService providerService) throws ServiceConfigurationException { - ServiceSettingsReader serviceSettings = new ServiceSettingsReader("QUEUE", Name, providerService); - - queueURL = serviceSettings.getEncryptedPropertyValue(QUEUE_URL, ""); - accessKey = serviceSettings.getEncryptedPropertyValue(ACCESS_KEY, ""); - secret = serviceSettings.getEncryptedPropertyValue(SECRET_ACCESS_KEY, ""); - awsRegion = serviceSettings.getEncryptedPropertyValue(REGION, ""); - isFIFO = queueURL.endsWith(".fifo"); + private void initialize(AWSBasicCredentials credentials, String queueUrl) throws ServiceConfigurationException { + queueURL = queueUrl; - boolean bUseIAM = !serviceSettings.getPropertyValue("USE_IAM", "", "").isEmpty() || (accessKey.equals("") && secret.equals("")); + boolean bUseIAM = credentials == null; + if (!bUseIAM) { + accessKey = credentials.getAccessKeyId(); + secret = credentials.getSecretKey(); + awsRegion = credentials.getRegion(); + isFIFO = queueURL.endsWith(".fifo"); + } if (bUseIAM) { sqsClient = SqsClient.builder() diff --git a/gxqueueawssqs/src/main/java/com/genexus/messaging/queue/aws/AWSQueueFactory.java b/gxqueueawssqs/src/main/java/com/genexus/messaging/queue/aws/AWSQueueFactory.java new file mode 100644 index 000000000..9f12a2e5f --- /dev/null +++ b/gxqueueawssqs/src/main/java/com/genexus/messaging/queue/aws/AWSQueueFactory.java @@ -0,0 +1,60 @@ +package com.genexus.messaging.queue.aws; + +import com.genexus.GXBaseCollection; +import com.genexus.GxUserType; +import com.genexus.SdtMessages_Message; +import com.genexus.diagnostics.core.ILogger; +import com.genexus.diagnostics.core.LogManager; +import com.genexus.messaging.queue.IQueue; +import com.genexus.messaging.queue.SimpleMessageQueue; +import com.genexus.services.ServiceConfigurationException; +import com.genexusmessaging.awscore.SdtAWSBasicCredentials; + + +public class AWSQueueFactory { + private static ILogger logger = LogManager.getLogger(AWSQueueFactory.class); + + public SimpleMessageQueue connect(GxUserType awsBasicCredentials, String queueURL, GXBaseCollection[] errorMessagesArr, boolean[] success) { + GXBaseCollection errMessages = errorMessagesArr[0]; + AWSBasicCredentials credentials = new AWSBasicCredentials() {{ + setAccessKeyId(((SdtAWSBasicCredentials)awsBasicCredentials).getgxTv_SdtAWSBasicCredentials_Accesskey()); + setSecretKey(((SdtAWSBasicCredentials)awsBasicCredentials).getgxTv_SdtAWSBasicCredentials_Secretkey()); + setRegion(((SdtAWSBasicCredentials)awsBasicCredentials).getgxTv_SdtAWSBasicCredentials_Region()); + }}; + + try { + IQueue queueImpl = new AWSQueue(credentials, queueURL); + errMessages.clear(); + success[0] = true; + return new SimpleMessageQueue(queueImpl); + + } catch (ServiceConfigurationException e) { + handleConnectionError(errMessages, e); + } + return null; + } + + public SimpleMessageQueue connect(String queueURL, GXBaseCollection[] errorMessagesArr, boolean[] success) { + GXBaseCollection errMessages = errorMessagesArr[0]; + + try { + IQueue queueImpl = new AWSQueue(queueURL); + errMessages.clear(); + success[0] = true; + return new SimpleMessageQueue(queueImpl); + + } catch (ServiceConfigurationException e) { + handleConnectionError(errMessages, e); + } + return null; + } + + private static void handleConnectionError(GXBaseCollection errMessages, ServiceConfigurationException e) { + logger.error("Failed to connect to AWS SQS Queue", e); + SdtMessages_Message msg = new SdtMessages_Message(); + msg.setgxTv_SdtMessages_Message_Description(e.getMessage()); + msg.setgxTv_SdtMessages_Message_Type((byte) 1); + errMessages.add(msg); + } + +} diff --git a/gxqueueawssqs/src/main/java/com/genexusmessaging/awscore/SdtAWSBasicCredentials.java b/gxqueueawssqs/src/main/java/com/genexusmessaging/awscore/SdtAWSBasicCredentials.java new file mode 100644 index 000000000..e3933ec9a --- /dev/null +++ b/gxqueueawssqs/src/main/java/com/genexusmessaging/awscore/SdtAWSBasicCredentials.java @@ -0,0 +1,79 @@ +package com.genexusmessaging.awscore; +import com.genexus.*; + +public final class SdtAWSBasicCredentials extends GxUserType { + protected byte gxTv_SdtAWSBasicCredentials_N; + protected String sTagName; + protected String gxTv_SdtAWSBasicCredentials_Accesskey; + protected String gxTv_SdtAWSBasicCredentials_Secretkey; + protected String gxTv_SdtAWSBasicCredentials_Region; + + + public SdtAWSBasicCredentials() { + this(new ModelContext(SdtAWSBasicCredentials.class)); + } + + public SdtAWSBasicCredentials(ModelContext context) { + super(context, "SdtAWSBasicCredentials"); + } + + public SdtAWSBasicCredentials(int remoteHandle, + ModelContext context) { + super(remoteHandle, context, "SdtAWSBasicCredentials"); + } + + + public String getgxTv_SdtAWSBasicCredentials_Accesskey() { + return gxTv_SdtAWSBasicCredentials_Accesskey; + } + + public void setgxTv_SdtAWSBasicCredentials_Accesskey(String value) { + gxTv_SdtAWSBasicCredentials_N = (byte) (0); + gxTv_SdtAWSBasicCredentials_Accesskey = value; + } + + public String getgxTv_SdtAWSBasicCredentials_Secretkey() { + return gxTv_SdtAWSBasicCredentials_Secretkey; + } + + public void setgxTv_SdtAWSBasicCredentials_Secretkey(String value) { + gxTv_SdtAWSBasicCredentials_N = (byte) (0); + gxTv_SdtAWSBasicCredentials_Secretkey = value; + } + + public String getgxTv_SdtAWSBasicCredentials_Region() { + return gxTv_SdtAWSBasicCredentials_Region; + } + + public void setgxTv_SdtAWSBasicCredentials_Region(String value) { + gxTv_SdtAWSBasicCredentials_N = (byte) (0); + gxTv_SdtAWSBasicCredentials_Region = value; + } + + public void initialize(int remoteHandle) { + initialize(); + } + + public void initialize() { + gxTv_SdtAWSBasicCredentials_Accesskey = ""; + gxTv_SdtAWSBasicCredentials_N = (byte) (1); + gxTv_SdtAWSBasicCredentials_Secretkey = ""; + gxTv_SdtAWSBasicCredentials_Region = ""; + sTagName = ""; + } + + public byte isNull() { + return gxTv_SdtAWSBasicCredentials_N; + } + + public SdtAWSBasicCredentials Clone() { + return (SdtAWSBasicCredentials) (clone()); + } + + + @Override + public String getJsonMap(String value) { + return null; + } +} + diff --git a/gxqueueawssqs/src/test/java/com/genexus/messaging/queue/aws/TestAWSQueue.java b/gxqueueawssqs/src/test/java/com/genexus/messaging/queue/aws/TestAWSQueue.java index 7c8a69051..8675d8fcd 100644 --- a/gxqueueawssqs/src/test/java/com/genexus/messaging/queue/aws/TestAWSQueue.java +++ b/gxqueueawssqs/src/test/java/com/genexus/messaging/queue/aws/TestAWSQueue.java @@ -1,17 +1,57 @@ package com.genexus.messaging.queue.aws; +import com.genexus.GXBaseCollection; +import com.genexus.SdtMessages_Message; import com.genexus.messaging.queue.IQueue; +import com.genexus.messaging.queue.SimpleMessageQueue; import com.genexus.services.ServiceConfigurationException; +import com.genexus.services.ServiceSettingsReader; +import com.genexus.util.GXService; +import com.genexusmessaging.awscore.SdtAWSBasicCredentials; + +public class TestAWSQueue extends TestQueueBase { + + public static String ACCESS_KEY = "ACCESS_KEY"; + public static String SECRET_ACCESS_KEY = "SECRET_KEY"; + public static String REGION = "REGION"; + public static String QUEUE_URL = "QUEUE_URL"; -public class TestAWSQueue extends TestQueueBase { @Override public String getProviderName() { - return "QUEUE_AWSSQS"; + return AWSQueue.Name; } @Override public IQueue getQueue() throws ServiceConfigurationException { - return new AWSQueue(); + + ServiceSettingsReader serviceSettings = new ServiceSettingsReader("QUEUE", AWSQueue.Name, new GXService()); + String queueURL = serviceSettings.getEncryptedPropertyValue(QUEUE_URL, ""); + + AWSBasicCredentials credentials = new AWSBasicCredentials() {{ + setAccessKeyId(serviceSettings.getEncryptedPropertyValue(ACCESS_KEY, "")); + setSecretKey(serviceSettings.getEncryptedPropertyValue(SECRET_ACCESS_KEY, "")); + setRegion(serviceSettings.getEncryptedPropertyValue(REGION, "")); + }}; + + return new AWSQueue(credentials, queueURL); + } + + @Override + public SimpleMessageQueue getQueueWrapper() throws ServiceConfigurationException { + + ServiceSettingsReader serviceSettings = new ServiceSettingsReader("QUEUE", AWSQueue.Name, new GXService()); + String queueURL = serviceSettings.getEncryptedPropertyValue(QUEUE_URL, ""); + + SdtAWSBasicCredentials credentials = new SdtAWSBasicCredentials(); + credentials.setgxTv_SdtAWSBasicCredentials_Accesskey(serviceSettings.getEncryptedPropertyValue(ACCESS_KEY, "")); + credentials.setgxTv_SdtAWSBasicCredentials_Secretkey(serviceSettings.getEncryptedPropertyValue(SECRET_ACCESS_KEY, "")); + credentials.setgxTv_SdtAWSBasicCredentials_Region(serviceSettings.getEncryptedPropertyValue(REGION, "")); + + GXBaseCollection[] errArray = new GXBaseCollection[1]; + boolean[] success = new boolean[1]; + + return new AWSQueueFactory().connect(credentials, queueURL, errArray, success); + } } diff --git a/gxqueueawssqs/src/test/java/com/genexus/messaging/queue/aws/TestQueueBase.java b/gxqueueawssqs/src/test/java/com/genexus/messaging/queue/aws/TestQueueBase.java index e01ba5ab5..c9da1ee9f 100644 --- a/gxqueueawssqs/src/test/java/com/genexus/messaging/queue/aws/TestQueueBase.java +++ b/gxqueueawssqs/src/test/java/com/genexus/messaging/queue/aws/TestQueueBase.java @@ -1,6 +1,7 @@ package com.genexus.messaging.queue.aws; import com.genexus.messaging.queue.IQueue; +import com.genexus.messaging.queue.SimpleMessageQueue; import com.genexus.messaging.queue.model.DeleteMessageResult; import com.genexus.messaging.queue.model.MessageQueueOptions; import com.genexus.messaging.queue.model.SimpleQueueMessage; @@ -23,6 +24,7 @@ public abstract class TestQueueBase { public abstract String getProviderName(); public abstract IQueue getQueue() throws ServiceConfigurationException; + public abstract SimpleMessageQueue getQueueWrapper() throws ServiceConfigurationException; @Before public void beforeEachTestMethod() { @@ -91,6 +93,23 @@ public void sendMessage() { Assert.assertNotEquals("", sendResult.getMessageServerId()); } + /*@Test + public void sendMessageWithFactoryQueue() { + try { + SimpleMessageQueue simpleQueue = getQueueWrapper(); + simpleQueue.sendMessage(createMessage()); + + } catch (ServiceConfigurationException e) { + e.printStackTrace(); + } + + SendMessageResult sendResult = sendQueueMessage(); + Assert.assertNotNull(sendResult); + Assert.assertEquals(SendMessageResult.SENT, sendResult.getMessageSentStatus()); + Assert.assertNotEquals("", sendResult.getMessageId()); + Assert.assertNotEquals("", sendResult.getMessageServerId()); + }*/ + @Test public void sendMessageError() { List sendResult = queue.sendMessages(new ArrayList(), new MessageQueueOptions()); @@ -209,6 +228,11 @@ public void deleteMessage() { } private SendMessageResult sendQueueMessage() { + SimpleQueueMessage msg = createMessage(); + return queue.sendMessage(msg); + } + + private SimpleQueueMessage createMessage() { SimpleQueueMessage msg = new SimpleQueueMessage() {{ setMessageId("gx_" + java.util.UUID.randomUUID().toString()); setMessageBody("messageBody test"); @@ -218,6 +242,6 @@ private SendMessageResult sendQueueMessage() { getMessageAttributes().set("att4", "test4"); getMessageAttributes().set("att5", "test5"); }}; - return queue.sendMessage(msg); + return msg; } } From a73f7ebdb3f2e3e1aada12665774d0013012a0cf Mon Sep 17 00:00:00 2001 From: Gonzalo Gallotti Date: Thu, 16 Jun 2022 15:55:38 -0300 Subject: [PATCH 06/23] Missing Methods implementation --- .../com/genexus/messaging/queue/Convert.java | 39 ++++++++ .../messaging/queue/SimpleMessageQueue.java | 99 +++++++++++++++---- .../messaging/queue/aws/AWSQueueFactory.java | 10 +- .../awscore/SdtAWSBasicCredentials.java | 3 +- 4 files changed, 125 insertions(+), 26 deletions(-) diff --git a/gxqueue/src/main/java/com/genexus/messaging/queue/Convert.java b/gxqueue/src/main/java/com/genexus/messaging/queue/Convert.java index c574ec0a5..261486086 100644 --- a/gxqueue/src/main/java/com/genexus/messaging/queue/Convert.java +++ b/gxqueue/src/main/java/com/genexus/messaging/queue/Convert.java @@ -2,14 +2,19 @@ import com.genexus.GXBaseCollection; +import com.genexus.messaging.queue.model.DeleteMessageResult; +import com.genexus.messaging.queue.model.MessageQueueOptions; import com.genexus.messaging.queue.model.SendMessageResult; import com.genexus.messaging.queue.model.SimpleQueueMessage; import com.genexus.util.GXProperties; import com.genexus.util.GXProperty; import com.genexusmessaging.genexusmessagingqueue.simplequeue.SdtMessage; +import com.genexusmessaging.genexusmessagingqueue.simplequeue.SdtMessageOptions; import com.genexusmessaging.genexusmessagingqueue.simplequeue.SdtMessageProperty; import com.genexusmessaging.genexusmessagingqueue.simplequeue.SdtMessageResult; +import java.util.List; + public class Convert { protected static SimpleQueueMessage toSimpleQueueMessage(SdtMessage msg) { @@ -23,6 +28,18 @@ protected static SimpleQueueMessage toSimpleQueueMessage(SdtMessage msg) { }}; } + protected static MessageQueueOptions toMessageQueueOptions(SdtMessageOptions receiveOptions) { + MessageQueueOptions mqOptions = new MessageQueueOptions() {{ + setMaxNumberOfMessages(receiveOptions.getgxTv_SdtMessageOptions_Maxnumberofmessages()); + setWaitTimeout(receiveOptions.getgxTv_SdtMessageOptions_Waittimeout()); + setTimetoLive(receiveOptions.getgxTv_SdtMessageOptions_Timetolive()); + setDelaySeconds(receiveOptions.getgxTv_SdtMessageOptions_Delayseconds()); + setVisibilityTimeout(receiveOptions.getgxTv_SdtMessageOptions_Visibilitytimeout()); + }}; + return mqOptions; + } + + protected static SdtMessageResult toSdtMessageResult(SendMessageResult mResult) { SdtMessageResult r = new SdtMessageResult(); r.setgxTv_SdtMessageResult_Messageid(mResult.getMessageId()); @@ -50,4 +67,26 @@ protected static GXProperties toGXProperties(GXBaseCollection toDeleteExternalMessageResultList(List deletedMessages) { + GXBaseCollection externalList = new GXBaseCollection<>(); + for (DeleteMessageResult deletedMessage : deletedMessages) { + SdtMessageResult sdtMessageResult = new SdtMessageResult(); + sdtMessageResult.setgxTv_SdtMessageResult_Messageid(deletedMessage.getMessageId()); + sdtMessageResult.setgxTv_SdtMessageResult_Servermessageid(deletedMessage.getMessageServerId()); + sdtMessageResult.setgxTv_SdtMessageResult_Messagestatus(deletedMessage.getMessageDeleteStatus()); + externalList.add(sdtMessageResult); + } + return externalList; + } + } diff --git a/gxqueue/src/main/java/com/genexus/messaging/queue/SimpleMessageQueue.java b/gxqueue/src/main/java/com/genexus/messaging/queue/SimpleMessageQueue.java index 1f88ca6ee..51ecd0eeb 100644 --- a/gxqueue/src/main/java/com/genexus/messaging/queue/SimpleMessageQueue.java +++ b/gxqueue/src/main/java/com/genexus/messaging/queue/SimpleMessageQueue.java @@ -4,17 +4,24 @@ import com.genexus.diagnostics.core.ILogger; import com.genexus.diagnostics.core.LogManager; import com.genexus.messaging.queue.model.DeleteMessageResult; +import com.genexus.messaging.queue.model.MessageQueueOptions; import com.genexus.messaging.queue.model.SendMessageResult; import com.genexus.messaging.queue.model.SimpleQueueMessage; +import com.genexus.xml.GXXMLSerializable; import com.genexusmessaging.genexusmessagingqueue.simplequeue.SdtMessage; +import com.genexusmessaging.genexusmessagingqueue.simplequeue.SdtMessageOptions; import com.genexusmessaging.genexusmessagingqueue.simplequeue.SdtMessageResult; +import jakarta.mail.event.MailEvent; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; public class SimpleMessageQueue { private IQueue queue; private static ILogger logger = LogManager.getLogger(SimpleMessageQueue.class); - public SimpleMessageQueue() - { + public SimpleMessageQueue() { } @@ -29,7 +36,6 @@ void validQueue() throws Exception { } } - public void clear(GXBaseCollection[] errorMessagesArr, boolean[] success) { GXBaseCollection errorMessages = errorMessagesArr[0]; errorMessages.clear(); @@ -55,48 +61,103 @@ public short getQueueLength(GXBaseCollection[] errorMessage return queueLength; } - public GxUserType sendMessage(SdtMessage sdtMessage, GXBaseCollection[] errorMessagesArr, boolean[] success) { + public SdtMessageResult sendMessage(SdtMessage sdtMessage, GXBaseCollection[] errorMessagesArr, boolean[] success) { + GXBaseCollection messages = new GXBaseCollection<>(); + messages.add(sdtMessage); + GXBaseCollection result = sendMessages(messages, new SdtMessageOptions(), errorMessagesArr, success); + return ((result.size() == 1) ? result.item(1) : Convert.toSdtMessageResult(new SendMessageResult())); + } + + public GXBaseCollection sendMessages(GXBaseCollection sdtMessages, SdtMessageOptions msgOptions, GXBaseCollection[] errorMessagesArr, boolean[] success) { GXBaseCollection errorMessages = errorMessagesArr[0]; + List msgList = new ArrayList<>(); + GXBaseCollection listReturn = new GXBaseCollection<>(); errorMessages.clear(); - SendMessageResult sendMessageResult = new SendMessageResult(); - errorMessages = new GXBaseCollection(); - SimpleQueueMessage queueMessage = Convert.toSimpleQueueMessage(sdtMessage); + for (SdtMessage m : sdtMessages) { + msgList.add(Convert.toSimpleQueueMessage(m)); + } + try { validQueue(); - sendMessageResult = queue.sendMessage(queueMessage); + List sendMessageResult = queue.sendMessages(msgList, Convert.toMessageQueueOptions(msgOptions)); success[0] = true; - return Convert.toSdtMessageResult(sendMessageResult); + for (SendMessageResult msgResult : sendMessageResult) { + listReturn.add(Convert.toSdtMessageResult(msgResult)); + } } catch (Exception ex) { queueErrorMessagesSetup(ex, errorMessages); logger.error("Could not send queue message", ex); } - return Convert.toSdtMessageResult(sendMessageResult); + return listReturn; + } + + public GXBaseCollection getMessages(GXBaseCollection[] errorMessagesArr, boolean[] success) { + return getMessages(null, errorMessagesArr, success); + } + + public GXBaseCollection getMessages(SdtMessageOptions receiveOptions, GXBaseCollection[] errorMessagesArr, boolean[] success) { + GXBaseCollection errorMessages = errorMessagesArr[0]; + + MessageQueueOptions mqOptions = (receiveOptions != null) ? Convert.toMessageQueueOptions(receiveOptions) : new MessageQueueOptions(); + List receivedMessages = queue.getMessages(mqOptions); + GXBaseCollection receivedMessagesResult = new GXBaseCollection<>(); + try { + validQueue(); + for (SimpleQueueMessage m : receivedMessages) { + receivedMessagesResult.add(Convert.toSdtMessage(m)); + } + success[0] = true; +} catch (Exception ex) { + queueErrorMessagesSetup(ex, errorMessages); + logger.error(String.format("Could not get Messages from Queue"), ex); + } + return receivedMessagesResult; } - public boolean deleteMessage(String messageHandleId, GXBaseCollection[] errorMessagesArr, SdtMessageResult sdtDelete) { +public SdtMessageResult deleteMessage(String messageHandleId, GXBaseCollection[] errorMessagesArr, boolean[] success) { + GXBaseCollection errorMessages = errorMessagesArr[0]; + errorMessages.clear(); + SdtMessageResult sdtDelete = new SdtMessageResult(); + try { + validQueue(); + DeleteMessageResult deletedMessage = queue.deleteMessage(messageHandleId); + sdtDelete.setgxTv_SdtMessageResult_Messageid(deletedMessage.getMessageId()); + sdtDelete.setgxTv_SdtMessageResult_Servermessageid(deletedMessage.getMessageServerId()); + sdtDelete.setgxTv_SdtMessageResult_Messagestatus(deletedMessage.getMessageDeleteStatus()); + success[0] = true; + } catch (Exception ex) { + queueErrorMessagesSetup(ex, errorMessages); + logger.error(String.format("Could not delete Message '%s' from Queue ", messageHandleId), ex); + } + return sdtDelete; + } + +public GXBaseCollection deleteMessages(GXSimpleCollection msgHandlesToDelete, GXBaseCollection[] errorMessagesArr, boolean[] success) { GXBaseCollection errorMessages = errorMessagesArr[0]; errorMessages.clear(); try { validQueue(); - DeleteMessageResult deletedMessage = queue.deleteMessage(messageHandleId); - sdtDelete.setgxTv_SdtMessageResult_Messageid(deletedMessage.getMessageId()); - sdtDelete.setgxTv_SdtMessageResult_Servermessageid(deletedMessage.getMessageServerId()); - sdtDelete.setgxTv_SdtMessageResult_Messagestatus(deletedMessage.getMessageDeleteStatus()); - return deletedMessage.getMessageDeleteStatus() == DeleteMessageResult.DELETED; + List handles = new ArrayList<>(); + for (String hnd:msgHandlesToDelete) { + handles.add(hnd); + } + List deletedMessage = queue.deleteMessages(handles); + success[0] = true; + return Convert.toDeleteExternalMessageResultList(deletedMessage); } catch (Exception ex) { queueErrorMessagesSetup(ex, errorMessages); - logger.error(String.format("Could not delete Message '%s' from Queue ", messageHandleId), ex); + logger.error(String.format("Could not delete Messages from Queue "), ex); } - return false; + return new GXBaseCollection(); } protected void queueErrorMessagesSetup(Exception ex, GXBaseCollection messages) { if (messages != null && ex != null) { StructSdtMessages_Message struct = new StructSdtMessages_Message(); - struct.setType((byte)1); + struct.setType((byte) 1); struct.setDescription(ex.getMessage()); } } diff --git a/gxqueueawssqs/src/main/java/com/genexus/messaging/queue/aws/AWSQueueFactory.java b/gxqueueawssqs/src/main/java/com/genexus/messaging/queue/aws/AWSQueueFactory.java index 9f12a2e5f..6074f3b86 100644 --- a/gxqueueawssqs/src/main/java/com/genexus/messaging/queue/aws/AWSQueueFactory.java +++ b/gxqueueawssqs/src/main/java/com/genexus/messaging/queue/aws/AWSQueueFactory.java @@ -17,15 +17,15 @@ public class AWSQueueFactory { public SimpleMessageQueue connect(GxUserType awsBasicCredentials, String queueURL, GXBaseCollection[] errorMessagesArr, boolean[] success) { GXBaseCollection errMessages = errorMessagesArr[0]; AWSBasicCredentials credentials = new AWSBasicCredentials() {{ - setAccessKeyId(((SdtAWSBasicCredentials)awsBasicCredentials).getgxTv_SdtAWSBasicCredentials_Accesskey()); - setSecretKey(((SdtAWSBasicCredentials)awsBasicCredentials).getgxTv_SdtAWSBasicCredentials_Secretkey()); - setRegion(((SdtAWSBasicCredentials)awsBasicCredentials).getgxTv_SdtAWSBasicCredentials_Region()); + setAccessKeyId(((SdtAWSBasicCredentials) awsBasicCredentials).getgxTv_SdtAWSBasicCredentials_Accesskey()); + setSecretKey(((SdtAWSBasicCredentials) awsBasicCredentials).getgxTv_SdtAWSBasicCredentials_Secretkey()); + setRegion(((SdtAWSBasicCredentials) awsBasicCredentials).getgxTv_SdtAWSBasicCredentials_Region()); }}; try { IQueue queueImpl = new AWSQueue(credentials, queueURL); errMessages.clear(); - success[0] = true; + success[0] = queueURL.length() > 0; return new SimpleMessageQueue(queueImpl); } catch (ServiceConfigurationException e) { @@ -40,7 +40,7 @@ public SimpleMessageQueue connect(String queueURL, GXBaseCollection 0; return new SimpleMessageQueue(queueImpl); } catch (ServiceConfigurationException e) { diff --git a/gxqueueawssqs/src/main/java/com/genexusmessaging/awscore/SdtAWSBasicCredentials.java b/gxqueueawssqs/src/main/java/com/genexusmessaging/awscore/SdtAWSBasicCredentials.java index e3933ec9a..423847095 100644 --- a/gxqueueawssqs/src/main/java/com/genexusmessaging/awscore/SdtAWSBasicCredentials.java +++ b/gxqueueawssqs/src/main/java/com/genexusmessaging/awscore/SdtAWSBasicCredentials.java @@ -1,4 +1,5 @@ package com.genexusmessaging.awscore; + import com.genexus.*; public final class SdtAWSBasicCredentials extends GxUserType { @@ -8,7 +9,6 @@ public final class SdtAWSBasicCredentials extends GxUserType { protected String gxTv_SdtAWSBasicCredentials_Secretkey; protected String gxTv_SdtAWSBasicCredentials_Region; - public SdtAWSBasicCredentials() { this(new ModelContext(SdtAWSBasicCredentials.class)); } @@ -22,7 +22,6 @@ public SdtAWSBasicCredentials(int remoteHandle, super(remoteHandle, context, "SdtAWSBasicCredentials"); } - public String getgxTv_SdtAWSBasicCredentials_Accesskey() { return gxTv_SdtAWSBasicCredentials_Accesskey; } From abe19305c4d51d4dc6dc0b8ecb883fa1bdcd4056 Mon Sep 17 00:00:00 2001 From: Gonzalo Gallotti Date: Fri, 17 Jun 2022 09:04:56 -0300 Subject: [PATCH 07/23] Add Queue Azure Maven Project --- gxqueueazure/pom.xml | 73 +++++++++++++++++++ .../queue/azure/AzureQueueFactory.java | 28 +++++++ pom.xml | 1 + 3 files changed, 102 insertions(+) create mode 100644 gxqueueazure/pom.xml create mode 100644 gxqueueazure/src/main/java/com/genexus/messaging/queue/azure/AzureQueueFactory.java diff --git a/gxqueueazure/pom.xml b/gxqueueazure/pom.xml new file mode 100644 index 000000000..012cf7ec8 --- /dev/null +++ b/gxqueueazure/pom.xml @@ -0,0 +1,73 @@ + + + + parent + com.genexus + 2.6-SNAPSHOT + + 4.0.0 + + gxqueueazure + + + ${project.groupId} + gxclassR + ${project.version} + + + ${project.groupId} + gxcommon + ${project.version} + compile + + + ${project.groupId} + gxqueue + ${project.version} + compile + + + software.amazon.awssdk + sqs + 2.17.205 + + + com.genexus + gxcommon + 2.6-SNAPSHOT + compile + + + + + + gxqueue-azure + + + org.apache.maven.plugins + maven-jar-plugin + 3.1.1 + + + + false + + + ${maven.build.timestamp} + GeneXus + ${java.version} + ${os.name} + ${project.version} + ${basedir} + + + + **/com/genexusmessaging/** + + + + + + \ No newline at end of file diff --git a/gxqueueazure/src/main/java/com/genexus/messaging/queue/azure/AzureQueueFactory.java b/gxqueueazure/src/main/java/com/genexus/messaging/queue/azure/AzureQueueFactory.java new file mode 100644 index 000000000..20afd9f73 --- /dev/null +++ b/gxqueueazure/src/main/java/com/genexus/messaging/queue/azure/AzureQueueFactory.java @@ -0,0 +1,28 @@ +package com.genexus.messaging.queue.azure; + +import com.genexus.GXBaseCollection; +import com.genexus.SdtMessages_Message; +import com.genexus.diagnostics.core.ILogger; +import com.genexus.diagnostics.core.LogManager; +import com.genexus.messaging.queue.SimpleMessageQueue; +import com.genexus.services.ServiceConfigurationException; +import org.apache.commons.lang.NotImplementedException; + + +public class AzureQueueFactory { + private static ILogger logger = LogManager.getLogger(AzureQueueFactory.class); + + + public SimpleMessageQueue connect(String queueName, String queueUrl, GXBaseCollection[] errorMessagesArr, boolean[] success) { + throw new NotImplementedException(); + } + + private static void handleConnectionError(GXBaseCollection errMessages, ServiceConfigurationException e) { + logger.error("Failed to connect to AWS SQS Queue", e); + SdtMessages_Message msg = new SdtMessages_Message(); + msg.setgxTv_SdtMessages_Message_Description(e.getMessage()); + msg.setgxTv_SdtMessages_Message_Type((byte) 1); + errMessages.add(msg); + } + +} diff --git a/pom.xml b/pom.xml index eca558117..9f455d089 100644 --- a/pom.xml +++ b/pom.xml @@ -45,6 +45,7 @@ androidreports gxqueue gxqueueawssqs + gxqueueazure From 006b644873588d982ddb78185f48166aad2ac270 Mon Sep 17 00:00:00 2001 From: Gonzalo Gallotti Date: Fri, 17 Jun 2022 09:07:43 -0300 Subject: [PATCH 08/23] Project restructure --- {gxqueueawssqs => QueueProviders/gxqueueawssqs}/pom.xml | 0 .../com/genexus/messaging/queue/aws/AWSBasicCredentials.java | 0 .../java/com/genexus/messaging/queue/aws/AWSCredentials.java | 0 .../main/java/com/genexus/messaging/queue/aws/AWSQueue.java | 0 .../java/com/genexus/messaging/queue/aws/AWSQueueFactory.java | 0 .../com/genexusmessaging/awscore/SdtAWSBasicCredentials.java | 0 .../java/com/genexus/messaging/queue/aws/TestAWSQueue.java | 0 .../java/com/genexus/messaging/queue/aws/TestQueueBase.java | 0 {gxqueueazure => QueueProviders/gxqueueazure}/pom.xml | 0 .../com/genexus/messaging/queue/azure/AzureQueueFactory.java | 0 .../java/com/genexus/messaging/queue/SimpleMessageQueue.java | 3 --- .../genexusmessagingqueue/simplequeue/SdtMessageOptions.java | 3 --- pom.xml | 4 ++-- 13 files changed, 2 insertions(+), 8 deletions(-) rename {gxqueueawssqs => QueueProviders/gxqueueawssqs}/pom.xml (100%) rename {gxqueueawssqs => QueueProviders/gxqueueawssqs}/src/main/java/com/genexus/messaging/queue/aws/AWSBasicCredentials.java (100%) rename {gxqueueawssqs => QueueProviders/gxqueueawssqs}/src/main/java/com/genexus/messaging/queue/aws/AWSCredentials.java (100%) rename {gxqueueawssqs => QueueProviders/gxqueueawssqs}/src/main/java/com/genexus/messaging/queue/aws/AWSQueue.java (100%) rename {gxqueueawssqs => QueueProviders/gxqueueawssqs}/src/main/java/com/genexus/messaging/queue/aws/AWSQueueFactory.java (100%) rename {gxqueueawssqs => QueueProviders/gxqueueawssqs}/src/main/java/com/genexusmessaging/awscore/SdtAWSBasicCredentials.java (100%) rename {gxqueueawssqs => QueueProviders/gxqueueawssqs}/src/test/java/com/genexus/messaging/queue/aws/TestAWSQueue.java (100%) rename {gxqueueawssqs => QueueProviders/gxqueueawssqs}/src/test/java/com/genexus/messaging/queue/aws/TestQueueBase.java (100%) rename {gxqueueazure => QueueProviders/gxqueueazure}/pom.xml (100%) rename {gxqueueazure => QueueProviders/gxqueueazure}/src/main/java/com/genexus/messaging/queue/azure/AzureQueueFactory.java (100%) diff --git a/gxqueueawssqs/pom.xml b/QueueProviders/gxqueueawssqs/pom.xml similarity index 100% rename from gxqueueawssqs/pom.xml rename to QueueProviders/gxqueueawssqs/pom.xml diff --git a/gxqueueawssqs/src/main/java/com/genexus/messaging/queue/aws/AWSBasicCredentials.java b/QueueProviders/gxqueueawssqs/src/main/java/com/genexus/messaging/queue/aws/AWSBasicCredentials.java similarity index 100% rename from gxqueueawssqs/src/main/java/com/genexus/messaging/queue/aws/AWSBasicCredentials.java rename to QueueProviders/gxqueueawssqs/src/main/java/com/genexus/messaging/queue/aws/AWSBasicCredentials.java diff --git a/gxqueueawssqs/src/main/java/com/genexus/messaging/queue/aws/AWSCredentials.java b/QueueProviders/gxqueueawssqs/src/main/java/com/genexus/messaging/queue/aws/AWSCredentials.java similarity index 100% rename from gxqueueawssqs/src/main/java/com/genexus/messaging/queue/aws/AWSCredentials.java rename to QueueProviders/gxqueueawssqs/src/main/java/com/genexus/messaging/queue/aws/AWSCredentials.java diff --git a/gxqueueawssqs/src/main/java/com/genexus/messaging/queue/aws/AWSQueue.java b/QueueProviders/gxqueueawssqs/src/main/java/com/genexus/messaging/queue/aws/AWSQueue.java similarity index 100% rename from gxqueueawssqs/src/main/java/com/genexus/messaging/queue/aws/AWSQueue.java rename to QueueProviders/gxqueueawssqs/src/main/java/com/genexus/messaging/queue/aws/AWSQueue.java diff --git a/gxqueueawssqs/src/main/java/com/genexus/messaging/queue/aws/AWSQueueFactory.java b/QueueProviders/gxqueueawssqs/src/main/java/com/genexus/messaging/queue/aws/AWSQueueFactory.java similarity index 100% rename from gxqueueawssqs/src/main/java/com/genexus/messaging/queue/aws/AWSQueueFactory.java rename to QueueProviders/gxqueueawssqs/src/main/java/com/genexus/messaging/queue/aws/AWSQueueFactory.java diff --git a/gxqueueawssqs/src/main/java/com/genexusmessaging/awscore/SdtAWSBasicCredentials.java b/QueueProviders/gxqueueawssqs/src/main/java/com/genexusmessaging/awscore/SdtAWSBasicCredentials.java similarity index 100% rename from gxqueueawssqs/src/main/java/com/genexusmessaging/awscore/SdtAWSBasicCredentials.java rename to QueueProviders/gxqueueawssqs/src/main/java/com/genexusmessaging/awscore/SdtAWSBasicCredentials.java diff --git a/gxqueueawssqs/src/test/java/com/genexus/messaging/queue/aws/TestAWSQueue.java b/QueueProviders/gxqueueawssqs/src/test/java/com/genexus/messaging/queue/aws/TestAWSQueue.java similarity index 100% rename from gxqueueawssqs/src/test/java/com/genexus/messaging/queue/aws/TestAWSQueue.java rename to QueueProviders/gxqueueawssqs/src/test/java/com/genexus/messaging/queue/aws/TestAWSQueue.java diff --git a/gxqueueawssqs/src/test/java/com/genexus/messaging/queue/aws/TestQueueBase.java b/QueueProviders/gxqueueawssqs/src/test/java/com/genexus/messaging/queue/aws/TestQueueBase.java similarity index 100% rename from gxqueueawssqs/src/test/java/com/genexus/messaging/queue/aws/TestQueueBase.java rename to QueueProviders/gxqueueawssqs/src/test/java/com/genexus/messaging/queue/aws/TestQueueBase.java diff --git a/gxqueueazure/pom.xml b/QueueProviders/gxqueueazure/pom.xml similarity index 100% rename from gxqueueazure/pom.xml rename to QueueProviders/gxqueueazure/pom.xml diff --git a/gxqueueazure/src/main/java/com/genexus/messaging/queue/azure/AzureQueueFactory.java b/QueueProviders/gxqueueazure/src/main/java/com/genexus/messaging/queue/azure/AzureQueueFactory.java similarity index 100% rename from gxqueueazure/src/main/java/com/genexus/messaging/queue/azure/AzureQueueFactory.java rename to QueueProviders/gxqueueazure/src/main/java/com/genexus/messaging/queue/azure/AzureQueueFactory.java diff --git a/gxqueue/src/main/java/com/genexus/messaging/queue/SimpleMessageQueue.java b/gxqueue/src/main/java/com/genexus/messaging/queue/SimpleMessageQueue.java index 51ecd0eeb..97c471c4f 100644 --- a/gxqueue/src/main/java/com/genexus/messaging/queue/SimpleMessageQueue.java +++ b/gxqueue/src/main/java/com/genexus/messaging/queue/SimpleMessageQueue.java @@ -7,14 +7,11 @@ import com.genexus.messaging.queue.model.MessageQueueOptions; import com.genexus.messaging.queue.model.SendMessageResult; import com.genexus.messaging.queue.model.SimpleQueueMessage; -import com.genexus.xml.GXXMLSerializable; import com.genexusmessaging.genexusmessagingqueue.simplequeue.SdtMessage; import com.genexusmessaging.genexusmessagingqueue.simplequeue.SdtMessageOptions; import com.genexusmessaging.genexusmessagingqueue.simplequeue.SdtMessageResult; -import jakarta.mail.event.MailEvent; import java.util.ArrayList; -import java.util.Collections; import java.util.List; public class SimpleMessageQueue { diff --git a/gxqueue/src/main/java/com/genexusmessaging/genexusmessagingqueue/simplequeue/SdtMessageOptions.java b/gxqueue/src/main/java/com/genexusmessaging/genexusmessagingqueue/simplequeue/SdtMessageOptions.java index ca171bf20..7809a5665 100644 --- a/gxqueue/src/main/java/com/genexusmessaging/genexusmessagingqueue/simplequeue/SdtMessageOptions.java +++ b/gxqueue/src/main/java/com/genexusmessaging/genexusmessagingqueue/simplequeue/SdtMessageOptions.java @@ -1,9 +1,6 @@ package com.genexusmessaging.genexusmessagingqueue.simplequeue; import com.genexus.*; -import com.genexus.xml.*; - -import java.util.*; public final class SdtMessageOptions extends GxUserType { protected byte gxTv_SdtMessageOptions_N; diff --git a/pom.xml b/pom.xml index 9f455d089..d58c51678 100644 --- a/pom.xml +++ b/pom.xml @@ -44,8 +44,8 @@ gxawsserverless androidreports gxqueue - gxqueueawssqs - gxqueueazure + QueueProviders/gxqueueawssqs + QueueProviders/gxqueueazure From 4ace819d673634c641555d200c84fcdaf0c3beed Mon Sep 17 00:00:00 2001 From: Gonzalo Gallotti Date: Fri, 17 Jun 2022 09:24:19 -0300 Subject: [PATCH 09/23] DynamicExecute --- common/src/main/java/com/genexus/db/DynamicExecute.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/common/src/main/java/com/genexus/db/DynamicExecute.java b/common/src/main/java/com/genexus/db/DynamicExecute.java index 1fab80000..e298c412c 100644 --- a/common/src/main/java/com/genexus/db/DynamicExecute.java +++ b/common/src/main/java/com/genexus/db/DynamicExecute.java @@ -437,9 +437,6 @@ public static boolean dynamicExecute(ModelContext context, int handle, Class cal } catch (java.lang.reflect.InvocationTargetException e) { - //Application.printWarning("java.lang.reflect.InvocationTargetException Can't execute dynamic call " + className + " - " + e.getTargetException().getMessage(), e); - //return false; - e.printStackTrace(); throw new RuntimeException("java.lang.reflect.InvocationTargetException Can't execute dynamic call " + className + " - " + e.getTargetException().getMessage(), e); } catch (InstantiationException e) From 5ac49f46a0b61f9c9660b97c153ea745e4dd23ab Mon Sep 17 00:00:00 2001 From: Gonzalo Gallotti Date: Fri, 17 Jun 2022 10:10:30 -0300 Subject: [PATCH 10/23] Minor refactoring --- .../genexus/messaging/queue/model/DeleteMessageResult.java | 3 --- .../java/com/genexus/messaging/queue/model/MessageId.java | 3 +++ .../com/genexus/messaging/queue/model/SendMessageResult.java | 4 +--- 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/gxqueue/src/main/java/com/genexus/messaging/queue/model/DeleteMessageResult.java b/gxqueue/src/main/java/com/genexus/messaging/queue/model/DeleteMessageResult.java index 0c94de2bd..0c5c8cf88 100644 --- a/gxqueue/src/main/java/com/genexus/messaging/queue/model/DeleteMessageResult.java +++ b/gxqueue/src/main/java/com/genexus/messaging/queue/model/DeleteMessageResult.java @@ -2,9 +2,6 @@ public class DeleteMessageResult extends MessageId { public static String DELETED = "Deleted"; - public static String FAILED = "Failed"; - public static String SENT = "Sent"; - public static String UNKNOWN = "Unknown"; private String messageDeleteStatus = UNKNOWN; diff --git a/gxqueue/src/main/java/com/genexus/messaging/queue/model/MessageId.java b/gxqueue/src/main/java/com/genexus/messaging/queue/model/MessageId.java index 50b41782d..701276b93 100644 --- a/gxqueue/src/main/java/com/genexus/messaging/queue/model/MessageId.java +++ b/gxqueue/src/main/java/com/genexus/messaging/queue/model/MessageId.java @@ -1,6 +1,9 @@ package com.genexus.messaging.queue.model; public abstract class MessageId { + public static String FAILED = "Failed"; + public static String UNKNOWN = "Unknown"; + private String messageId; private String messageServerId; diff --git a/gxqueue/src/main/java/com/genexus/messaging/queue/model/SendMessageResult.java b/gxqueue/src/main/java/com/genexus/messaging/queue/model/SendMessageResult.java index 53fa0dd81..de889c169 100644 --- a/gxqueue/src/main/java/com/genexus/messaging/queue/model/SendMessageResult.java +++ b/gxqueue/src/main/java/com/genexus/messaging/queue/model/SendMessageResult.java @@ -1,10 +1,8 @@ package com.genexus.messaging.queue.model; public class SendMessageResult extends MessageId { - public static String DELETED = "Deleted"; - public static String FAILED = "Failed"; public static String SENT = "Sent"; - public static String UNKNOWN = "Unknown"; + private String messageSentStatus = UNKNOWN; From 57f9e7b9cd3210c90e2c363ee30950c225dfd72b Mon Sep 17 00:00:00 2001 From: Gonzalo Gallotti Date: Fri, 17 Jun 2022 10:11:18 -0300 Subject: [PATCH 11/23] Remove ununsed file --- .../com/genexus/messaging/queue/MessageQueueProvider.java | 4 ---- 1 file changed, 4 deletions(-) delete mode 100644 gxqueue/src/main/java/com/genexus/messaging/queue/MessageQueueProvider.java diff --git a/gxqueue/src/main/java/com/genexus/messaging/queue/MessageQueueProvider.java b/gxqueue/src/main/java/com/genexus/messaging/queue/MessageQueueProvider.java deleted file mode 100644 index 05e73e71b..000000000 --- a/gxqueue/src/main/java/com/genexus/messaging/queue/MessageQueueProvider.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.genexus.messaging.queue; - -public class MessageQueueProvider { -} From 086d29a5e7de6c42ae15a82ed72ebca06880ceb1 Mon Sep 17 00:00:00 2001 From: Gonzalo Gallotti Date: Fri, 17 Jun 2022 10:13:24 -0300 Subject: [PATCH 12/23] Reformat code --- .../messaging/queue/SimpleMessageQueue.java | 46 +++++++++---------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/gxqueue/src/main/java/com/genexus/messaging/queue/SimpleMessageQueue.java b/gxqueue/src/main/java/com/genexus/messaging/queue/SimpleMessageQueue.java index 97c471c4f..2bd3eef87 100644 --- a/gxqueue/src/main/java/com/genexus/messaging/queue/SimpleMessageQueue.java +++ b/gxqueue/src/main/java/com/genexus/messaging/queue/SimpleMessageQueue.java @@ -106,39 +106,39 @@ public GXBaseCollection getMessages(SdtMessageOptions receiveOptions receivedMessagesResult.add(Convert.toSdtMessage(m)); } success[0] = true; -} catch (Exception ex) { - queueErrorMessagesSetup(ex, errorMessages); - logger.error(String.format("Could not get Messages from Queue"), ex); - } - return receivedMessagesResult; + } catch (Exception ex) { + queueErrorMessagesSetup(ex, errorMessages); + logger.error(String.format("Could not get Messages from Queue"), ex); + } + return receivedMessagesResult; } -public SdtMessageResult deleteMessage(String messageHandleId, GXBaseCollection[] errorMessagesArr, boolean[] success) { - GXBaseCollection errorMessages = errorMessagesArr[0]; - errorMessages.clear(); - SdtMessageResult sdtDelete = new SdtMessageResult(); - try { - validQueue(); - DeleteMessageResult deletedMessage = queue.deleteMessage(messageHandleId); - sdtDelete.setgxTv_SdtMessageResult_Messageid(deletedMessage.getMessageId()); - sdtDelete.setgxTv_SdtMessageResult_Servermessageid(deletedMessage.getMessageServerId()); - sdtDelete.setgxTv_SdtMessageResult_Messagestatus(deletedMessage.getMessageDeleteStatus()); - success[0] = true; - } catch (Exception ex) { - queueErrorMessagesSetup(ex, errorMessages); - logger.error(String.format("Could not delete Message '%s' from Queue ", messageHandleId), ex); - } - return sdtDelete; + public SdtMessageResult deleteMessage(String messageHandleId, GXBaseCollection[] errorMessagesArr, boolean[] success) { + GXBaseCollection errorMessages = errorMessagesArr[0]; + errorMessages.clear(); + SdtMessageResult sdtDelete = new SdtMessageResult(); + try { + validQueue(); + DeleteMessageResult deletedMessage = queue.deleteMessage(messageHandleId); + sdtDelete.setgxTv_SdtMessageResult_Messageid(deletedMessage.getMessageId()); + sdtDelete.setgxTv_SdtMessageResult_Servermessageid(deletedMessage.getMessageServerId()); + sdtDelete.setgxTv_SdtMessageResult_Messagestatus(deletedMessage.getMessageDeleteStatus()); + success[0] = true; + } catch (Exception ex) { + queueErrorMessagesSetup(ex, errorMessages); + logger.error(String.format("Could not delete Message '%s' from Queue ", messageHandleId), ex); + } + return sdtDelete; } -public GXBaseCollection deleteMessages(GXSimpleCollection msgHandlesToDelete, GXBaseCollection[] errorMessagesArr, boolean[] success) { + public GXBaseCollection deleteMessages(GXSimpleCollection msgHandlesToDelete, GXBaseCollection[] errorMessagesArr, boolean[] success) { GXBaseCollection errorMessages = errorMessagesArr[0]; errorMessages.clear(); try { validQueue(); List handles = new ArrayList<>(); - for (String hnd:msgHandlesToDelete) { + for (String hnd : msgHandlesToDelete) { handles.add(hnd); } List deletedMessage = queue.deleteMessages(handles); From c64756a85e036943ba5afbea5fe9787546e322cd Mon Sep 17 00:00:00 2001 From: Gonzalo Gallotti Date: Fri, 17 Jun 2022 10:22:23 -0300 Subject: [PATCH 13/23] Move folders to root --- gxqueue/pom.xml | 8 +------- {QueueProviders/gxqueueawssqs => gxqueueawssqs}/pom.xml | 2 +- .../genexus/messaging/queue/aws/AWSBasicCredentials.java | 0 .../com/genexus/messaging/queue/aws/AWSCredentials.java | 0 .../java/com/genexus/messaging/queue/aws/AWSQueue.java | 0 .../com/genexus/messaging/queue/aws/AWSQueueFactory.java | 0 .../genexusmessaging/awscore/SdtAWSBasicCredentials.java | 0 .../com/genexus/messaging/queue/aws/TestAWSQueue.java | 0 .../com/genexus/messaging/queue/aws/TestQueueBase.java | 0 {QueueProviders/gxqueueazure => gxqueueazure}/pom.xml | 8 +------- .../genexus/messaging/queue/azure/AzureQueueFactory.java | 0 pom.xml | 4 ++-- 12 files changed, 5 insertions(+), 17 deletions(-) rename {QueueProviders/gxqueueawssqs => gxqueueawssqs}/pom.xml (98%) rename {QueueProviders/gxqueueawssqs => gxqueueawssqs}/src/main/java/com/genexus/messaging/queue/aws/AWSBasicCredentials.java (100%) rename {QueueProviders/gxqueueawssqs => gxqueueawssqs}/src/main/java/com/genexus/messaging/queue/aws/AWSCredentials.java (100%) rename {QueueProviders/gxqueueawssqs => gxqueueawssqs}/src/main/java/com/genexus/messaging/queue/aws/AWSQueue.java (100%) rename {QueueProviders/gxqueueawssqs => gxqueueawssqs}/src/main/java/com/genexus/messaging/queue/aws/AWSQueueFactory.java (100%) rename {QueueProviders/gxqueueawssqs => gxqueueawssqs}/src/main/java/com/genexusmessaging/awscore/SdtAWSBasicCredentials.java (100%) rename {QueueProviders/gxqueueawssqs => gxqueueawssqs}/src/test/java/com/genexus/messaging/queue/aws/TestAWSQueue.java (100%) rename {QueueProviders/gxqueueawssqs => gxqueueawssqs}/src/test/java/com/genexus/messaging/queue/aws/TestQueueBase.java (100%) rename {QueueProviders/gxqueueazure => gxqueueazure}/pom.xml (90%) rename {QueueProviders/gxqueueazure => gxqueueazure}/src/main/java/com/genexus/messaging/queue/azure/AzureQueueFactory.java (100%) diff --git a/gxqueue/pom.xml b/gxqueue/pom.xml index c3b1adaf5..f33dcd68e 100644 --- a/gxqueue/pom.xml +++ b/gxqueue/pom.xml @@ -5,7 +5,7 @@ parent com.genexus - 2.6-SNAPSHOT + 2.7-SNAPSHOT 4.0.0 @@ -22,12 +22,6 @@ ${project.version} compile - - com.genexus - gxclassR - 2.6-SNAPSHOT - compile - diff --git a/QueueProviders/gxqueueawssqs/pom.xml b/gxqueueawssqs/pom.xml similarity index 98% rename from QueueProviders/gxqueueawssqs/pom.xml rename to gxqueueawssqs/pom.xml index 3e79cbc2b..4f5ef9dd1 100644 --- a/QueueProviders/gxqueueawssqs/pom.xml +++ b/gxqueueawssqs/pom.xml @@ -5,7 +5,7 @@ parent com.genexus - 2.6-SNAPSHOT + 2.7-SNAPSHOT 4.0.0 diff --git a/QueueProviders/gxqueueawssqs/src/main/java/com/genexus/messaging/queue/aws/AWSBasicCredentials.java b/gxqueueawssqs/src/main/java/com/genexus/messaging/queue/aws/AWSBasicCredentials.java similarity index 100% rename from QueueProviders/gxqueueawssqs/src/main/java/com/genexus/messaging/queue/aws/AWSBasicCredentials.java rename to gxqueueawssqs/src/main/java/com/genexus/messaging/queue/aws/AWSBasicCredentials.java diff --git a/QueueProviders/gxqueueawssqs/src/main/java/com/genexus/messaging/queue/aws/AWSCredentials.java b/gxqueueawssqs/src/main/java/com/genexus/messaging/queue/aws/AWSCredentials.java similarity index 100% rename from QueueProviders/gxqueueawssqs/src/main/java/com/genexus/messaging/queue/aws/AWSCredentials.java rename to gxqueueawssqs/src/main/java/com/genexus/messaging/queue/aws/AWSCredentials.java diff --git a/QueueProviders/gxqueueawssqs/src/main/java/com/genexus/messaging/queue/aws/AWSQueue.java b/gxqueueawssqs/src/main/java/com/genexus/messaging/queue/aws/AWSQueue.java similarity index 100% rename from QueueProviders/gxqueueawssqs/src/main/java/com/genexus/messaging/queue/aws/AWSQueue.java rename to gxqueueawssqs/src/main/java/com/genexus/messaging/queue/aws/AWSQueue.java diff --git a/QueueProviders/gxqueueawssqs/src/main/java/com/genexus/messaging/queue/aws/AWSQueueFactory.java b/gxqueueawssqs/src/main/java/com/genexus/messaging/queue/aws/AWSQueueFactory.java similarity index 100% rename from QueueProviders/gxqueueawssqs/src/main/java/com/genexus/messaging/queue/aws/AWSQueueFactory.java rename to gxqueueawssqs/src/main/java/com/genexus/messaging/queue/aws/AWSQueueFactory.java diff --git a/QueueProviders/gxqueueawssqs/src/main/java/com/genexusmessaging/awscore/SdtAWSBasicCredentials.java b/gxqueueawssqs/src/main/java/com/genexusmessaging/awscore/SdtAWSBasicCredentials.java similarity index 100% rename from QueueProviders/gxqueueawssqs/src/main/java/com/genexusmessaging/awscore/SdtAWSBasicCredentials.java rename to gxqueueawssqs/src/main/java/com/genexusmessaging/awscore/SdtAWSBasicCredentials.java diff --git a/QueueProviders/gxqueueawssqs/src/test/java/com/genexus/messaging/queue/aws/TestAWSQueue.java b/gxqueueawssqs/src/test/java/com/genexus/messaging/queue/aws/TestAWSQueue.java similarity index 100% rename from QueueProviders/gxqueueawssqs/src/test/java/com/genexus/messaging/queue/aws/TestAWSQueue.java rename to gxqueueawssqs/src/test/java/com/genexus/messaging/queue/aws/TestAWSQueue.java diff --git a/QueueProviders/gxqueueawssqs/src/test/java/com/genexus/messaging/queue/aws/TestQueueBase.java b/gxqueueawssqs/src/test/java/com/genexus/messaging/queue/aws/TestQueueBase.java similarity index 100% rename from QueueProviders/gxqueueawssqs/src/test/java/com/genexus/messaging/queue/aws/TestQueueBase.java rename to gxqueueawssqs/src/test/java/com/genexus/messaging/queue/aws/TestQueueBase.java diff --git a/QueueProviders/gxqueueazure/pom.xml b/gxqueueazure/pom.xml similarity index 90% rename from QueueProviders/gxqueueazure/pom.xml rename to gxqueueazure/pom.xml index 012cf7ec8..c0ddf7ae3 100644 --- a/QueueProviders/gxqueueazure/pom.xml +++ b/gxqueueazure/pom.xml @@ -5,7 +5,7 @@ parent com.genexus - 2.6-SNAPSHOT + 2.7-SNAPSHOT 4.0.0 @@ -33,12 +33,6 @@ sqs 2.17.205 - - com.genexus - gxcommon - 2.6-SNAPSHOT - compile - diff --git a/QueueProviders/gxqueueazure/src/main/java/com/genexus/messaging/queue/azure/AzureQueueFactory.java b/gxqueueazure/src/main/java/com/genexus/messaging/queue/azure/AzureQueueFactory.java similarity index 100% rename from QueueProviders/gxqueueazure/src/main/java/com/genexus/messaging/queue/azure/AzureQueueFactory.java rename to gxqueueazure/src/main/java/com/genexus/messaging/queue/azure/AzureQueueFactory.java diff --git a/pom.xml b/pom.xml index e4319dd6c..f44ac13f0 100644 --- a/pom.xml +++ b/pom.xml @@ -44,8 +44,8 @@ gxawsserverless androidreports gxqueue - QueueProviders/gxqueueawssqs - QueueProviders/gxqueueazure + gxqueueawssqs + gxqueueazure From 05cafc71a502d3429129b30b09f9ce526557d821 Mon Sep 17 00:00:00 2001 From: Gonzalo Gallotti Date: Fri, 17 Jun 2022 15:19:24 -0300 Subject: [PATCH 14/23] Added log and required http client impl --- .../com/genexus/messaging/queue/SimpleMessageQueue.java | 2 ++ gxqueueawssqs/pom.xml | 6 ++++++ 2 files changed, 8 insertions(+) diff --git a/gxqueue/src/main/java/com/genexus/messaging/queue/SimpleMessageQueue.java b/gxqueue/src/main/java/com/genexus/messaging/queue/SimpleMessageQueue.java index 2bd3eef87..635438afd 100644 --- a/gxqueue/src/main/java/com/genexus/messaging/queue/SimpleMessageQueue.java +++ b/gxqueue/src/main/java/com/genexus/messaging/queue/SimpleMessageQueue.java @@ -41,6 +41,7 @@ public void clear(GXBaseCollection[] errorMessagesArr, bool success[0] = queue.purge(); } catch (Exception ex) { queueErrorMessagesSetup(ex, errorMessages); + logger.error("Could not clear queue", ex); } success[0] = false; } @@ -54,6 +55,7 @@ public short getQueueLength(GXBaseCollection[] errorMessage queueLength = queue.getQueueLength().shortValue(); } catch (Exception ex) { queueErrorMessagesSetup(ex, errorMessages); + logger.error("Could not getQueueLength", ex); } return queueLength; } diff --git a/gxqueueawssqs/pom.xml b/gxqueueawssqs/pom.xml index 4f5ef9dd1..28960aa5d 100644 --- a/gxqueueawssqs/pom.xml +++ b/gxqueueawssqs/pom.xml @@ -33,6 +33,12 @@ sqs 2.17.205 + + software.amazon.awssdk + apache-client + 2.17.205 + test + From 1907b86a5757ccbabb688faad0b3ddb9ac41fdc5 Mon Sep 17 00:00:00 2001 From: Gonzalo Gallotti Date: Fri, 17 Jun 2022 15:43:32 -0300 Subject: [PATCH 15/23] Remvoe AWS dependency from Azure Project --- gxqueueazure/pom.xml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/gxqueueazure/pom.xml b/gxqueueazure/pom.xml index c0ddf7ae3..f8f8c8cd2 100644 --- a/gxqueueazure/pom.xml +++ b/gxqueueazure/pom.xml @@ -28,12 +28,6 @@ ${project.version} compile - - software.amazon.awssdk - sqs - 2.17.205 - - From d62bba9c4617a8b2c6fb4a2ee11fba1c19aad960 Mon Sep 17 00:00:00 2001 From: Gonzalo Gallotti Date: Fri, 17 Jun 2022 15:59:42 -0300 Subject: [PATCH 16/23] Bump AWS SDK Version --- gxqueueawssqs/pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gxqueueawssqs/pom.xml b/gxqueueawssqs/pom.xml index 28960aa5d..704340d7c 100644 --- a/gxqueueawssqs/pom.xml +++ b/gxqueueawssqs/pom.xml @@ -31,12 +31,12 @@ software.amazon.awssdk sqs - 2.17.205 + 2.17.213 software.amazon.awssdk apache-client - 2.17.205 + 2.17.213 test From 333a49bc78e5f85a44ce7bc1fb300d2174761667 Mon Sep 17 00:00:00 2001 From: Gonzalo Gallotti Date: Fri, 17 Jun 2022 16:02:33 -0300 Subject: [PATCH 17/23] Refactoring Pom version --- gxqueueawssqs/pom.xml | 6 ++---- pom.xml | 1 + 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/gxqueueawssqs/pom.xml b/gxqueueawssqs/pom.xml index 704340d7c..ce61bd55e 100644 --- a/gxqueueawssqs/pom.xml +++ b/gxqueueawssqs/pom.xml @@ -31,15 +31,13 @@ software.amazon.awssdk sqs - 2.17.213 + ${software.awssdk.version} software.amazon.awssdk apache-client - 2.17.213 - test + ${software.awssdk.version} - diff --git a/pom.xml b/pom.xml index f44ac13f0..a6c8eef9f 100644 --- a/pom.xml +++ b/pom.xml @@ -19,6 +19,7 @@ 3.0.1 2.13.2 4.13.2 + 2.17.213 From 3aff46b42ecfdf62792370fead58a4b93d727030 Mon Sep 17 00:00:00 2001 From: Gonzalo Gallotti Date: Tue, 21 Jun 2022 08:26:26 -0300 Subject: [PATCH 18/23] Use same AWS version as DynamoDB project --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index a6c8eef9f..c96a9a60b 100644 --- a/pom.xml +++ b/pom.xml @@ -19,7 +19,7 @@ 3.0.1 2.13.2 4.13.2 - 2.17.213 + 2.17.151 From a27a4e6ef6d9918c03ccebe3ac898af38e4465ca Mon Sep 17 00:00:00 2001 From: Gonzalo Gallotti Date: Tue, 21 Jun 2022 08:28:17 -0300 Subject: [PATCH 19/23] Maven dependencies --- gxqueueawssqs/pom.xml | 2 -- 1 file changed, 2 deletions(-) diff --git a/gxqueueawssqs/pom.xml b/gxqueueawssqs/pom.xml index ce61bd55e..695ffc5e1 100644 --- a/gxqueueawssqs/pom.xml +++ b/gxqueueawssqs/pom.xml @@ -20,13 +20,11 @@ ${project.groupId} gxcommon ${project.version} - compile ${project.groupId} gxqueue ${project.version} - compile software.amazon.awssdk From 0064bdeb18f68aee6927c5b3e7fde155c1036967 Mon Sep 17 00:00:00 2001 From: Gonzalo Gallotti Date: Mon, 11 Jul 2022 12:13:32 -0300 Subject: [PATCH 20/23] DeleteMessage Signature modification --- .../com/genexus/messaging/queue/Convert.java | 3 +- .../messaging/queue/SimpleMessageQueue.java | 30 ++++++++++++------- .../messaging/queue/aws/TestQueueBase.java | 11 +++++++ 3 files changed, 33 insertions(+), 11 deletions(-) diff --git a/gxqueue/src/main/java/com/genexus/messaging/queue/Convert.java b/gxqueue/src/main/java/com/genexus/messaging/queue/Convert.java index 261486086..2bc5bcc5d 100644 --- a/gxqueue/src/main/java/com/genexus/messaging/queue/Convert.java +++ b/gxqueue/src/main/java/com/genexus/messaging/queue/Convert.java @@ -19,7 +19,8 @@ public class Convert { protected static SimpleQueueMessage toSimpleQueueMessage(SdtMessage msg) { return new SimpleQueueMessage() {{ - setMessageId(msg.getgxTv_SdtMessage_Messageid()); + String id = msg.getgxTv_SdtMessage_Messageid(); + setMessageId((id.isEmpty())? java.util.UUID.randomUUID().toString() :id); setMessageBody(msg.getgxTv_SdtMessage_Messagebody()); setMessageHandleId(msg.getgxTv_SdtMessage_Messagehandleid()); if (msg.getgxTv_SdtMessage_Messageattributes() != null) { diff --git a/gxqueue/src/main/java/com/genexus/messaging/queue/SimpleMessageQueue.java b/gxqueue/src/main/java/com/genexus/messaging/queue/SimpleMessageQueue.java index 635438afd..43377bcef 100644 --- a/gxqueue/src/main/java/com/genexus/messaging/queue/SimpleMessageQueue.java +++ b/gxqueue/src/main/java/com/genexus/messaging/queue/SimpleMessageQueue.java @@ -115,33 +115,38 @@ public GXBaseCollection getMessages(SdtMessageOptions receiveOptions return receivedMessagesResult; } - public SdtMessageResult deleteMessage(String messageHandleId, GXBaseCollection[] errorMessagesArr, boolean[] success) { + public SdtMessageResult deleteMessage(SdtMessage msg, GXBaseCollection[] errorMessagesArr, boolean[] success) { GXBaseCollection errorMessages = errorMessagesArr[0]; errorMessages.clear(); SdtMessageResult sdtDelete = new SdtMessageResult(); + if (msg == null || msg.getgxTv_SdtMessage_Messagehandleid().isEmpty()) { + sdtDelete.setgxTv_SdtMessageResult_Messagestatus(DeleteMessageResult.FAILED); + appendErrorMessage(errorMessages, 1, "Message HandledId property cannot be empty"); + return sdtDelete; + } + try { validQueue(); - DeleteMessageResult deletedMessage = queue.deleteMessage(messageHandleId); + DeleteMessageResult deletedMessage = queue.deleteMessage(msg.getgxTv_SdtMessage_Messagehandleid()); sdtDelete.setgxTv_SdtMessageResult_Messageid(deletedMessage.getMessageId()); sdtDelete.setgxTv_SdtMessageResult_Servermessageid(deletedMessage.getMessageServerId()); sdtDelete.setgxTv_SdtMessageResult_Messagestatus(deletedMessage.getMessageDeleteStatus()); success[0] = true; } catch (Exception ex) { queueErrorMessagesSetup(ex, errorMessages); - logger.error(String.format("Could not delete Message '%s' from Queue ", messageHandleId), ex); + logger.error(String.format("Could not delete Message '%s' from Queue", msg.getgxTv_SdtMessage_Messagehandleid()), ex); } return sdtDelete; } - public GXBaseCollection deleteMessages(GXSimpleCollection msgHandlesToDelete, GXBaseCollection[] errorMessagesArr, boolean[] success) { + public GXBaseCollection deleteMessages(GXBaseCollection msgHandlesToDelete, GXBaseCollection[] errorMessagesArr, boolean[] success) { GXBaseCollection errorMessages = errorMessagesArr[0]; errorMessages.clear(); - try { validQueue(); List handles = new ArrayList<>(); - for (String hnd : msgHandlesToDelete) { - handles.add(hnd); + for (SdtMessage msg : msgHandlesToDelete) { + handles.add(msg.getgxTv_SdtMessage_Messagehandleid()); } List deletedMessage = queue.deleteMessages(handles); success[0] = true; @@ -155,10 +160,15 @@ public GXBaseCollection deleteMessages(GXSimpleCollection messages) { if (messages != null && ex != null) { - StructSdtMessages_Message struct = new StructSdtMessages_Message(); - struct.setType((byte) 1); - struct.setDescription(ex.getMessage()); + appendErrorMessage(messages, 1, ex.getMessage()); } } + private void appendErrorMessage(GXBaseCollection messages, int errorType, String errMessage) { + SdtMessages_Message struct = new SdtMessages_Message(); + struct.setgxTv_SdtMessages_Message_Type((byte) errorType); + struct.setgxTv_SdtMessages_Message_Description(errMessage); + messages.add(struct); + } + } diff --git a/gxqueueawssqs/src/test/java/com/genexus/messaging/queue/aws/TestQueueBase.java b/gxqueueawssqs/src/test/java/com/genexus/messaging/queue/aws/TestQueueBase.java index c9da1ee9f..eeb0a2b70 100644 --- a/gxqueueawssqs/src/test/java/com/genexus/messaging/queue/aws/TestQueueBase.java +++ b/gxqueueawssqs/src/test/java/com/genexus/messaging/queue/aws/TestQueueBase.java @@ -93,6 +93,17 @@ public void sendMessage() { Assert.assertNotEquals("", sendResult.getMessageServerId()); } + @Test + public void sendMessageWithNoId() { + SimpleQueueMessage msg = createMessage(); + msg.setMessageId(""); + SendMessageResult sendResult = queue.sendMessage(msg); + Assert.assertNotNull(sendResult); + Assert.assertEquals(SendMessageResult.SENT, sendResult.getMessageSentStatus()); + Assert.assertNotEquals("", sendResult.getMessageId()); + Assert.assertNotEquals("", sendResult.getMessageServerId()); + } + /*@Test public void sendMessageWithFactoryQueue() { try { From 9c7fd7716678d8151fe33faba1184122c4b55545 Mon Sep 17 00:00:00 2001 From: Gonzalo Gallotti Date: Mon, 25 Jul 2022 13:59:42 -0300 Subject: [PATCH 21/23] Remove redundant isLevelEnabled when is not neccesrry --- .../core/provider/Log4J2Logger.java | 92 ++++++------------- 1 file changed, 29 insertions(+), 63 deletions(-) diff --git a/wrappercommon/src/main/java/com/genexus/diagnostics/core/provider/Log4J2Logger.java b/wrappercommon/src/main/java/com/genexus/diagnostics/core/provider/Log4J2Logger.java index eb824c849..9db36cb9a 100644 --- a/wrappercommon/src/main/java/com/genexus/diagnostics/core/provider/Log4J2Logger.java +++ b/wrappercommon/src/main/java/com/genexus/diagnostics/core/provider/Log4J2Logger.java @@ -3,30 +3,23 @@ import com.genexus.diagnostics.core.ILogger; public class Log4J2Logger implements ILogger { - - //Java implementation - public Log4J2Logger (final Class clazz) { + private org.apache.logging.log4j.Logger log; + + public Log4J2Logger(final Class clazz) { log = org.apache.logging.log4j.LogManager.getLogger(clazz); } - - public Log4J2Logger (String clazz) { + + public Log4J2Logger(String clazz) { log = org.apache.logging.log4j.LogManager.getLogger(clazz); } - - org.apache.logging.log4j.Logger log = null; - - + @Override public void fatal(String msg) { - if (log.isFatalEnabled()) { - log.fatal(msg); - } + log.fatal(msg); } - + public void fatal(String msg, Throwable ex) { - if (log.isFatalEnabled()) { - log.fatal(msg, ex); - } + log.fatal(msg, ex); } public void fatal(String msg1, String msg2, Throwable ex) { @@ -44,15 +37,11 @@ public void fatal(Throwable ex, String[] list) { } public void fatal(String[] list) { - if (log.isFatalEnabled()) { - fatal(null, list); - } + fatal(null, list); } - + public void error(String msg, Throwable ex) { - if (log.isErrorEnabled()) { - log.error(msg, ex); - } + log.error(msg, ex); } public void error(String msg1, String msg2, Throwable ex) { @@ -72,11 +61,9 @@ public void error(Throwable ex, String[] list) { public void error(String[] list) { error(null, list); } - + public void error(String msg) { - if (log.isErrorEnabled()) { - log.error(msg); - } + log.error(msg); } public void warn(Throwable ex, String[] list) { @@ -97,18 +84,14 @@ public void warn(String[] list) { } public void warn(String msg, Throwable ex) { - if (log.isWarnEnabled()) { - log.warn(msg, ex); - } + log.warn(msg, ex); } public void debug(String msg) { - if (log.isDebugEnabled()) { - log.debug(msg); - } + log.debug(msg); } - - + + public void debug(Throwable ex, String[] list) { if (log.isDebugEnabled()) { StringBuilder msg = new StringBuilder(); @@ -123,9 +106,7 @@ public void debug(Throwable ex, String[] list) { } public void debug(String[] list) { - if (log.isDebugEnabled()) { - debug(null, list); - } + debug(null, list); } // Lambda Functions not supported JAVA 7. Only Java 8. @@ -142,9 +123,7 @@ public void debug(String msg1, String msg2, Throwable ex) { } public void debug(String msg, Throwable ex) { - if (log.isDebugEnabled()) { - log.debug(msg, ex); - } + log.debug(msg, ex); } public void info(String[] list) { @@ -156,28 +135,19 @@ public void info(String[] list) { log.info(msg); } } - + public void info(String msg) { - if (log.isInfoEnabled()) { - log.info(msg); - } + log.info(msg); } - + public void warn(String msg) { - if (log.isWarnEnabled()) { - log.warn(msg); - } + log.warn(msg); } - - public void trace(String msg) { - if (log.isTraceEnabled()) { - log.trace(msg); - } + log.trace(msg); } - public void trace(Throwable ex, String[] list) { if (log.isTraceEnabled()) { StringBuilder msg = new StringBuilder(); @@ -192,9 +162,7 @@ public void trace(Throwable ex, String[] list) { } public void trace(String[] list) { - if (log.isTraceEnabled()) { - trace(null, list); - } + trace(null, list); } // Lambda Functions not supported JAVA 7. Only Java 8. @@ -211,11 +179,9 @@ public void trace(String msg1, String msg2, Throwable ex) { } public void trace(String msg, Throwable ex) { - if (log.isTraceEnabled()) { - log.trace(msg, ex); - } + log.trace(msg, ex); } - + public boolean isDebugEnabled() { return log.isDebugEnabled(); } @@ -223,5 +189,5 @@ public boolean isDebugEnabled() { public boolean isErrorEnabled() { return log.isErrorEnabled(); } - + } From 9b98346c6c054cc3163b6948a4eda6cbc3ee4806 Mon Sep 17 00:00:00 2001 From: Gonzalo Gallotti Date: Tue, 26 Jul 2022 09:32:27 -0300 Subject: [PATCH 22/23] Remove not needed dependency --- gxqueueazure/pom.xml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/gxqueueazure/pom.xml b/gxqueueazure/pom.xml index f8f8c8cd2..d30104fd5 100644 --- a/gxqueueazure/pom.xml +++ b/gxqueueazure/pom.xml @@ -11,11 +11,6 @@ gxqueueazure - - ${project.groupId} - gxclassR - ${project.version} - ${project.groupId} gxcommon From 678412f8004db300dd26fa5932ee3bad9476b533 Mon Sep 17 00:00:00 2001 From: Gonzalo Gallotti Date: Mon, 29 Aug 2022 09:33:38 -0300 Subject: [PATCH 23/23] Fix Issues after Gradle Build System --- gxqueue/pom.xml | 2 +- gxqueueawssqs/pom.xml | 2 +- gxqueueazure/pom.xml | 2 +- pom.xml | 32 +++++++++++++++++--------------- 4 files changed, 20 insertions(+), 18 deletions(-) diff --git a/gxqueue/pom.xml b/gxqueue/pom.xml index f33dcd68e..628235710 100644 --- a/gxqueue/pom.xml +++ b/gxqueue/pom.xml @@ -5,7 +5,7 @@ parent com.genexus - 2.7-SNAPSHOT + ${revision}${changelist} 4.0.0 diff --git a/gxqueueawssqs/pom.xml b/gxqueueawssqs/pom.xml index 695ffc5e1..f2ad2f07e 100644 --- a/gxqueueawssqs/pom.xml +++ b/gxqueueawssqs/pom.xml @@ -5,7 +5,7 @@ parent com.genexus - 2.7-SNAPSHOT + ${revision}${changelist} 4.0.0 diff --git a/gxqueueazure/pom.xml b/gxqueueazure/pom.xml index d30104fd5..30d5d1250 100644 --- a/gxqueueazure/pom.xml +++ b/gxqueueazure/pom.xml @@ -5,7 +5,7 @@ parent com.genexus - 2.7-SNAPSHOT + ${revision}${changelist} 4.0.0 diff --git a/pom.xml b/pom.xml index 4006b4f28..5b88c8aa0 100644 --- a/pom.xml +++ b/pom.xml @@ -13,18 +13,20 @@ Core classes for the runtime used by Java and Android apps generated with GeneXus https://github.com/genexuslabs/JavaClasses - - 2.8 - -SNAPSHOT - - UTF-8 - 2.34 - 3.0.3 - 5.2.2 - 2.13.2 - 4.13.2 - 2.17.213 - + + 2.8 + -SNAPSHOT + + + UTF-8 + + 2.34 + 3.0.3 + 5.2.2 + 2.13.2 + 4.13.2 + 2.17.213 + GeneXus S.A. @@ -82,9 +84,9 @@ gxwebsocketjakarta gxawsserverless androidreports - gxqueue - gxqueueawssqs - gxqueueazure + gxqueue + gxqueueawssqs + gxqueueazure