diff --git a/.github/workflows/pr_artifacts_size.yml b/.github/workflows/pr_artifacts_size.yml
index 1d905af01..2244f7b06 100644
--- a/.github/workflows/pr_artifacts_size.yml
+++ b/.github/workflows/pr_artifacts_size.yml
@@ -11,7 +11,8 @@ on:
- 'powertools-core/**' # not in v2
- 'powertools-common/**' # v2 only
- 'powertools-e2e-tests/**'
- - 'powertools-idempotency/**'
+ - 'powertools-idempotency-core/**'
+ - 'powertools-idempotency-dynamodb/**'
- 'powertools-large-messages/**'
- 'powertools-logging/**'
- 'powertools-metrics/**'
diff --git a/.github/workflows/pr_build.yml b/.github/workflows/pr_build.yml
index e86f49753..5373f4b4c 100644
--- a/.github/workflows/pr_build.yml
+++ b/.github/workflows/pr_build.yml
@@ -26,6 +26,7 @@ on:
push:
branches:
- main
+ - v2
paths:
- 'powertools-batch/**'
- 'powertools-cloudformation/**'
diff --git a/docs/utilities/idempotency.md b/docs/utilities/idempotency.md
index 5392b8d4c..f4defbdfd 100644
--- a/docs/utilities/idempotency.md
+++ b/docs/utilities/idempotency.md
@@ -35,7 +35,7 @@ Depending on your version of Java (either Java 1.8 or 11+), the configuration sl
...
software.amazon.lambda
- powertools-idempotency
+ powertools-idempotency-dynamodb
{{ powertools.version }}
...
@@ -56,7 +56,7 @@ Depending on your version of Java (either Java 1.8 or 11+), the configuration sl
software.amazon.lambda
- powertools-idempotency
+ powertools-idempotency-dynamodb
@@ -80,7 +80,7 @@ Depending on your version of Java (either Java 1.8 or 11+), the configuration sl
...
software.amazon.lambda
- powertools-idempotency
+ powertools-idempotency-dynamodb
{{ powertools.version }}
...
@@ -101,7 +101,7 @@ Depending on your version of Java (either Java 1.8 or 11+), the configuration sl
software.amazon.lambda
- powertools-idempotency
+ powertools-idempotency-dynamodb
@@ -131,7 +131,7 @@ Depending on your version of Java (either Java 1.8 or 11+), the configuration sl
}
dependencies {
- aspect 'software.amazon.lambda:powertools-idempotency:{{ powertools.version }}'
+ aspect 'software.amazon.lambda:powertools-idempotency-dynamodb:{{ powertools.version }}'
}
sourceCompatibility = 11 // or higher
@@ -151,7 +151,7 @@ Depending on your version of Java (either Java 1.8 or 11+), the configuration sl
}
dependencies {
- aspect 'software.amazon.lambda:powertools-idempotency:{{ powertools.version }}'
+ aspect 'software.amazon.lambda:powertools-idempotency-dynamodb:{{ powertools.version }}'
}
sourceCompatibility = 1.8
diff --git a/examples/powertools-examples-idempotency/pom.xml b/examples/powertools-examples-idempotency/pom.xml
index 19d7a2272..39d6a8172 100644
--- a/examples/powertools-examples-idempotency/pom.xml
+++ b/examples/powertools-examples-idempotency/pom.xml
@@ -41,7 +41,7 @@
software.amazon.lambda
- powertools-idempotency
+ powertools-idempotency-dynamodb
${project.version}
@@ -95,7 +95,7 @@
software.amazon.lambda
- powertools-idempotency
+ powertools-idempotency-dynamodb
diff --git a/examples/powertools-examples-idempotency/src/main/java/helloworld/App.java b/examples/powertools-examples-idempotency/src/main/java/helloworld/App.java
index cf0c0ee31..0c4693230 100644
--- a/examples/powertools-examples-idempotency/src/main/java/helloworld/App.java
+++ b/examples/powertools-examples-idempotency/src/main/java/helloworld/App.java
@@ -32,7 +32,7 @@
import software.amazon.lambda.powertools.idempotency.Idempotency;
import software.amazon.lambda.powertools.idempotency.IdempotencyConfig;
import software.amazon.lambda.powertools.idempotency.Idempotent;
-import software.amazon.lambda.powertools.idempotency.persistence.DynamoDBPersistenceStore;
+import software.amazon.lambda.powertools.idempotency.persistence.dynamodb.DynamoDBPersistenceStore;
import software.amazon.lambda.powertools.logging.Logging;
import software.amazon.lambda.powertools.utilities.JsonConfig;
diff --git a/pom.xml b/pom.xml
index f0f5e051e..0c7ca43d3 100644
--- a/pom.xml
+++ b/pom.xml
@@ -32,25 +32,6 @@
GitHub Issues
https://github.com/aws-powertools/powertools-lambda-java/issues
-
-
- https://github.com/aws-powertools/powertools-lambda-java.git
-
-
-
- Powertools for AWS Lambda (Java) Team
- Amazon Web Services
- https://aws.amazon.com/
-
-
-
-
-
- ossrh
- https://aws.oss.sonatype.org/content/repositories/snapshots
-
-
-
Apache License, Version 2.0
@@ -421,7 +402,6 @@
- process-sources
compile
test-compile
diff --git a/powertools-batch/pom.xml b/powertools-batch/pom.xml
index eaafdb56e..1886f56e6 100644
--- a/powertools-batch/pom.xml
+++ b/powertools-batch/pom.xml
@@ -25,6 +25,7 @@
powertools-batch
+
com.amazonaws
diff --git a/powertools-idempotency/pom.xml b/powertools-idempotency/pom.xml
index fd53cd9e2..fddef497a 100644
--- a/powertools-idempotency/pom.xml
+++ b/powertools-idempotency/pom.xml
@@ -25,13 +25,19 @@
powertools-idempotency
- jar
+ pom
- Powertools for AWS Lambda (Java) - Idempotency
+ Powertools for AWS Lambda (Java) library Idempotency
+
+
+ powertools-idempotency-core
+ powertools-idempotency-dynamodb
+
+
org.aspectj
@@ -42,34 +48,6 @@
software.amazon.lambda
powertools-common
-
- software.amazon.lambda
- powertools-serialization
-
-
- com.amazonaws
- aws-lambda-java-core
-
-
- software.amazon.awssdk
- dynamodb
-
-
- software.amazon.awssdk
- netty-nio-client
-
-
- software.amazon.awssdk
- apache-client
-
-
-
-
- software.amazon.awssdk
- url-connection-client
- ${aws.sdk.version}
-
-
org.junit.jupiter
@@ -106,20 +84,6 @@
aws-lambda-java-tests
test
-
- com.amazonaws
- DynamoDBLocal
- [1.12,2.0)
- test
-
-
-
- io.github.ganadist.sqlite4java
- libsqlite4java-osx-aarch64
- 1.0.392
- test
- dylib
-
@@ -150,22 +114,6 @@
-
- org.apache.maven.plugins
- maven-jar-plugin
- 3.3.0
-
-
-
- software.amazon.awssdk.enhanced.dynamodb
-
-
-
-
-
- org.apache.maven.plugins
- maven-checkstyle-plugin
-
\ No newline at end of file
diff --git a/powertools-idempotency/powertools-idempotency-core/pom.xml b/powertools-idempotency/powertools-idempotency-core/pom.xml
new file mode 100644
index 000000000..302cc24f5
--- /dev/null
+++ b/powertools-idempotency/powertools-idempotency-core/pom.xml
@@ -0,0 +1,42 @@
+
+
+
+
+ 4.0.0
+
+
+ software.amazon.lambda
+ powertools-idempotency
+ 2.0.0-SNAPSHOT
+
+
+ powertools-idempotency-core
+ jar
+
+ Powertools for AWS Lambda (Java) library Idempotency - Core
+
+ Idempotency module common implementation
+
+
+
+
+ software.amazon.lambda
+ powertools-serialization
+
+
+
+
\ No newline at end of file
diff --git a/powertools-idempotency/src/main/java/software/amazon/lambda/powertools/idempotency/Constants.java b/powertools-idempotency/powertools-idempotency-core/src/main/java/software/amazon/lambda/powertools/idempotency/Constants.java
similarity index 100%
rename from powertools-idempotency/src/main/java/software/amazon/lambda/powertools/idempotency/Constants.java
rename to powertools-idempotency/powertools-idempotency-core/src/main/java/software/amazon/lambda/powertools/idempotency/Constants.java
diff --git a/powertools-idempotency/src/main/java/software/amazon/lambda/powertools/idempotency/Idempotency.java b/powertools-idempotency/powertools-idempotency-core/src/main/java/software/amazon/lambda/powertools/idempotency/Idempotency.java
similarity index 100%
rename from powertools-idempotency/src/main/java/software/amazon/lambda/powertools/idempotency/Idempotency.java
rename to powertools-idempotency/powertools-idempotency-core/src/main/java/software/amazon/lambda/powertools/idempotency/Idempotency.java
diff --git a/powertools-idempotency/src/main/java/software/amazon/lambda/powertools/idempotency/IdempotencyConfig.java b/powertools-idempotency/powertools-idempotency-core/src/main/java/software/amazon/lambda/powertools/idempotency/IdempotencyConfig.java
similarity index 99%
rename from powertools-idempotency/src/main/java/software/amazon/lambda/powertools/idempotency/IdempotencyConfig.java
rename to powertools-idempotency/powertools-idempotency-core/src/main/java/software/amazon/lambda/powertools/idempotency/IdempotencyConfig.java
index 58d0a7f5b..2b22cac51 100644
--- a/powertools-idempotency/src/main/java/software/amazon/lambda/powertools/idempotency/IdempotencyConfig.java
+++ b/powertools-idempotency/powertools-idempotency-core/src/main/java/software/amazon/lambda/powertools/idempotency/IdempotencyConfig.java
@@ -15,9 +15,10 @@
package software.amazon.lambda.powertools.idempotency;
import com.amazonaws.services.lambda.runtime.Context;
-import java.time.Duration;
import software.amazon.lambda.powertools.idempotency.internal.cache.LRUCache;
+import java.time.Duration;
+
/**
* Configuration of the idempotency feature. Use the {@link Builder} to create an instance.
*/
@@ -92,7 +93,7 @@ public static class Builder {
private int localCacheMaxItems = 256;
private boolean useLocalCache = false;
- private long expirationInSeconds = 60 * 60; // 1 hour
+ private long expirationInSeconds = 60 * 60L; // 1 hour
private String eventKeyJMESPath;
private String payloadValidationJMESPath;
private boolean throwOnNoIdempotencyKey = false;
diff --git a/powertools-idempotency/src/main/java/software/amazon/lambda/powertools/idempotency/IdempotencyKey.java b/powertools-idempotency/powertools-idempotency-core/src/main/java/software/amazon/lambda/powertools/idempotency/IdempotencyKey.java
similarity index 100%
rename from powertools-idempotency/src/main/java/software/amazon/lambda/powertools/idempotency/IdempotencyKey.java
rename to powertools-idempotency/powertools-idempotency-core/src/main/java/software/amazon/lambda/powertools/idempotency/IdempotencyKey.java
diff --git a/powertools-idempotency/src/main/java/software/amazon/lambda/powertools/idempotency/Idempotent.java b/powertools-idempotency/powertools-idempotency-core/src/main/java/software/amazon/lambda/powertools/idempotency/Idempotent.java
similarity index 99%
rename from powertools-idempotency/src/main/java/software/amazon/lambda/powertools/idempotency/Idempotent.java
rename to powertools-idempotency/powertools-idempotency-core/src/main/java/software/amazon/lambda/powertools/idempotency/Idempotent.java
index 6ca40a0e1..d08874492 100644
--- a/powertools-idempotency/src/main/java/software/amazon/lambda/powertools/idempotency/Idempotent.java
+++ b/powertools-idempotency/powertools-idempotency-core/src/main/java/software/amazon/lambda/powertools/idempotency/Idempotent.java
@@ -15,6 +15,7 @@
package software.amazon.lambda.powertools.idempotency;
import com.amazonaws.services.lambda.runtime.Context;
+
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
diff --git a/powertools-idempotency/src/main/java/software/amazon/lambda/powertools/idempotency/exceptions/IdempotencyAlreadyInProgressException.java b/powertools-idempotency/powertools-idempotency-core/src/main/java/software/amazon/lambda/powertools/idempotency/exceptions/IdempotencyAlreadyInProgressException.java
similarity index 100%
rename from powertools-idempotency/src/main/java/software/amazon/lambda/powertools/idempotency/exceptions/IdempotencyAlreadyInProgressException.java
rename to powertools-idempotency/powertools-idempotency-core/src/main/java/software/amazon/lambda/powertools/idempotency/exceptions/IdempotencyAlreadyInProgressException.java
diff --git a/powertools-idempotency/src/main/java/software/amazon/lambda/powertools/idempotency/exceptions/IdempotencyConfigurationException.java b/powertools-idempotency/powertools-idempotency-core/src/main/java/software/amazon/lambda/powertools/idempotency/exceptions/IdempotencyConfigurationException.java
similarity index 100%
rename from powertools-idempotency/src/main/java/software/amazon/lambda/powertools/idempotency/exceptions/IdempotencyConfigurationException.java
rename to powertools-idempotency/powertools-idempotency-core/src/main/java/software/amazon/lambda/powertools/idempotency/exceptions/IdempotencyConfigurationException.java
diff --git a/powertools-idempotency/src/main/java/software/amazon/lambda/powertools/idempotency/exceptions/IdempotencyInconsistentStateException.java b/powertools-idempotency/powertools-idempotency-core/src/main/java/software/amazon/lambda/powertools/idempotency/exceptions/IdempotencyInconsistentStateException.java
similarity index 100%
rename from powertools-idempotency/src/main/java/software/amazon/lambda/powertools/idempotency/exceptions/IdempotencyInconsistentStateException.java
rename to powertools-idempotency/powertools-idempotency-core/src/main/java/software/amazon/lambda/powertools/idempotency/exceptions/IdempotencyInconsistentStateException.java
diff --git a/powertools-idempotency/src/main/java/software/amazon/lambda/powertools/idempotency/exceptions/IdempotencyItemAlreadyExistsException.java b/powertools-idempotency/powertools-idempotency-core/src/main/java/software/amazon/lambda/powertools/idempotency/exceptions/IdempotencyItemAlreadyExistsException.java
similarity index 100%
rename from powertools-idempotency/src/main/java/software/amazon/lambda/powertools/idempotency/exceptions/IdempotencyItemAlreadyExistsException.java
rename to powertools-idempotency/powertools-idempotency-core/src/main/java/software/amazon/lambda/powertools/idempotency/exceptions/IdempotencyItemAlreadyExistsException.java
diff --git a/powertools-idempotency/src/main/java/software/amazon/lambda/powertools/idempotency/exceptions/IdempotencyItemNotFoundException.java b/powertools-idempotency/powertools-idempotency-core/src/main/java/software/amazon/lambda/powertools/idempotency/exceptions/IdempotencyItemNotFoundException.java
similarity index 100%
rename from powertools-idempotency/src/main/java/software/amazon/lambda/powertools/idempotency/exceptions/IdempotencyItemNotFoundException.java
rename to powertools-idempotency/powertools-idempotency-core/src/main/java/software/amazon/lambda/powertools/idempotency/exceptions/IdempotencyItemNotFoundException.java
diff --git a/powertools-idempotency/src/main/java/software/amazon/lambda/powertools/idempotency/exceptions/IdempotencyKeyException.java b/powertools-idempotency/powertools-idempotency-core/src/main/java/software/amazon/lambda/powertools/idempotency/exceptions/IdempotencyKeyException.java
similarity index 100%
rename from powertools-idempotency/src/main/java/software/amazon/lambda/powertools/idempotency/exceptions/IdempotencyKeyException.java
rename to powertools-idempotency/powertools-idempotency-core/src/main/java/software/amazon/lambda/powertools/idempotency/exceptions/IdempotencyKeyException.java
diff --git a/powertools-idempotency/src/main/java/software/amazon/lambda/powertools/idempotency/exceptions/IdempotencyPersistenceLayerException.java b/powertools-idempotency/powertools-idempotency-core/src/main/java/software/amazon/lambda/powertools/idempotency/exceptions/IdempotencyPersistenceLayerException.java
similarity index 100%
rename from powertools-idempotency/src/main/java/software/amazon/lambda/powertools/idempotency/exceptions/IdempotencyPersistenceLayerException.java
rename to powertools-idempotency/powertools-idempotency-core/src/main/java/software/amazon/lambda/powertools/idempotency/exceptions/IdempotencyPersistenceLayerException.java
diff --git a/powertools-idempotency/src/main/java/software/amazon/lambda/powertools/idempotency/exceptions/IdempotencyValidationException.java b/powertools-idempotency/powertools-idempotency-core/src/main/java/software/amazon/lambda/powertools/idempotency/exceptions/IdempotencyValidationException.java
similarity index 100%
rename from powertools-idempotency/src/main/java/software/amazon/lambda/powertools/idempotency/exceptions/IdempotencyValidationException.java
rename to powertools-idempotency/powertools-idempotency-core/src/main/java/software/amazon/lambda/powertools/idempotency/exceptions/IdempotencyValidationException.java
diff --git a/powertools-idempotency/src/main/java/software/amazon/lambda/powertools/idempotency/internal/IdempotencyHandler.java b/powertools-idempotency/powertools-idempotency-core/src/main/java/software/amazon/lambda/powertools/idempotency/internal/IdempotencyHandler.java
similarity index 99%
rename from powertools-idempotency/src/main/java/software/amazon/lambda/powertools/idempotency/internal/IdempotencyHandler.java
rename to powertools-idempotency/powertools-idempotency-core/src/main/java/software/amazon/lambda/powertools/idempotency/internal/IdempotencyHandler.java
index 2875ab3d1..7982d911a 100644
--- a/powertools-idempotency/src/main/java/software/amazon/lambda/powertools/idempotency/internal/IdempotencyHandler.java
+++ b/powertools-idempotency/powertools-idempotency-core/src/main/java/software/amazon/lambda/powertools/idempotency/internal/IdempotencyHandler.java
@@ -14,13 +14,8 @@
package software.amazon.lambda.powertools.idempotency.internal;
-import static software.amazon.lambda.powertools.idempotency.persistence.DataRecord.Status.EXPIRED;
-import static software.amazon.lambda.powertools.idempotency.persistence.DataRecord.Status.INPROGRESS;
-
import com.amazonaws.services.lambda.runtime.Context;
import com.fasterxml.jackson.databind.JsonNode;
-import java.time.Instant;
-import java.util.OptionalInt;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.reflect.MethodSignature;
import org.slf4j.Logger;
@@ -37,6 +32,12 @@
import software.amazon.lambda.powertools.idempotency.persistence.DataRecord;
import software.amazon.lambda.powertools.utilities.JsonConfig;
+import java.time.Instant;
+import java.util.OptionalInt;
+
+import static software.amazon.lambda.powertools.idempotency.persistence.DataRecord.Status.EXPIRED;
+import static software.amazon.lambda.powertools.idempotency.persistence.DataRecord.Status.INPROGRESS;
+
/**
* Internal class that will handle the Idempotency, and use the {@link software.amazon.lambda.powertools.idempotency.persistence.PersistenceStore}
* to store the result of previous calls.
diff --git a/powertools-idempotency/src/main/java/software/amazon/lambda/powertools/idempotency/internal/IdempotentAspect.java b/powertools-idempotency/powertools-idempotency-core/src/main/java/software/amazon/lambda/powertools/idempotency/internal/IdempotentAspect.java
similarity index 99%
rename from powertools-idempotency/src/main/java/software/amazon/lambda/powertools/idempotency/internal/IdempotentAspect.java
rename to powertools-idempotency/powertools-idempotency-core/src/main/java/software/amazon/lambda/powertools/idempotency/internal/IdempotentAspect.java
index 0b9d729f4..ea6d743f0 100644
--- a/powertools-idempotency/src/main/java/software/amazon/lambda/powertools/idempotency/internal/IdempotentAspect.java
+++ b/powertools-idempotency/powertools-idempotency-core/src/main/java/software/amazon/lambda/powertools/idempotency/internal/IdempotentAspect.java
@@ -14,12 +14,8 @@
package software.amazon.lambda.powertools.idempotency.internal;
-import static software.amazon.lambda.powertools.common.internal.LambdaHandlerProcessor.placedOnRequestHandler;
-
import com.amazonaws.services.lambda.runtime.Context;
import com.fasterxml.jackson.databind.JsonNode;
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Method;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
@@ -33,6 +29,11 @@
import software.amazon.lambda.powertools.idempotency.exceptions.IdempotencyConfigurationException;
import software.amazon.lambda.powertools.utilities.JsonConfig;
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Method;
+
+import static software.amazon.lambda.powertools.common.internal.LambdaHandlerProcessor.placedOnRequestHandler;
+
/**
* Aspect that handles the {@link Idempotent} annotation.
* It uses the {@link IdempotencyHandler} to actually do the job.
diff --git a/powertools-idempotency/src/main/java/software/amazon/lambda/powertools/idempotency/internal/cache/LRUCache.java b/powertools-idempotency/powertools-idempotency-core/src/main/java/software/amazon/lambda/powertools/idempotency/internal/cache/LRUCache.java
similarity index 100%
rename from powertools-idempotency/src/main/java/software/amazon/lambda/powertools/idempotency/internal/cache/LRUCache.java
rename to powertools-idempotency/powertools-idempotency-core/src/main/java/software/amazon/lambda/powertools/idempotency/internal/cache/LRUCache.java
diff --git a/powertools-idempotency/src/main/java/software/amazon/lambda/powertools/idempotency/persistence/BasePersistenceStore.java b/powertools-idempotency/powertools-idempotency-core/src/main/java/software/amazon/lambda/powertools/idempotency/persistence/BasePersistenceStore.java
similarity index 96%
rename from powertools-idempotency/src/main/java/software/amazon/lambda/powertools/idempotency/persistence/BasePersistenceStore.java
rename to powertools-idempotency/powertools-idempotency-core/src/main/java/software/amazon/lambda/powertools/idempotency/persistence/BasePersistenceStore.java
index ac5044972..bafbcbd42 100644
--- a/powertools-idempotency/src/main/java/software/amazon/lambda/powertools/idempotency/persistence/BasePersistenceStore.java
+++ b/powertools-idempotency/powertools-idempotency-core/src/main/java/software/amazon/lambda/powertools/idempotency/persistence/BasePersistenceStore.java
@@ -14,12 +14,20 @@
package software.amazon.lambda.powertools.idempotency.persistence;
-import static software.amazon.lambda.powertools.common.internal.LambdaConstants.LAMBDA_FUNCTION_NAME_ENV;
-
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectWriter;
import io.burt.jmespath.Expression;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import software.amazon.lambda.powertools.idempotency.IdempotencyConfig;
+import software.amazon.lambda.powertools.idempotency.exceptions.IdempotencyItemAlreadyExistsException;
+import software.amazon.lambda.powertools.idempotency.exceptions.IdempotencyItemNotFoundException;
+import software.amazon.lambda.powertools.idempotency.exceptions.IdempotencyKeyException;
+import software.amazon.lambda.powertools.idempotency.exceptions.IdempotencyValidationException;
+import software.amazon.lambda.powertools.idempotency.internal.cache.LRUCache;
+import software.amazon.lambda.powertools.utilities.JsonConfig;
+
import java.math.BigInteger;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
@@ -33,16 +41,8 @@
import java.util.Spliterators;
import java.util.stream.Stream;
import java.util.stream.StreamSupport;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import software.amazon.awssdk.utils.StringUtils;
-import software.amazon.lambda.powertools.idempotency.IdempotencyConfig;
-import software.amazon.lambda.powertools.idempotency.exceptions.IdempotencyItemAlreadyExistsException;
-import software.amazon.lambda.powertools.idempotency.exceptions.IdempotencyItemNotFoundException;
-import software.amazon.lambda.powertools.idempotency.exceptions.IdempotencyKeyException;
-import software.amazon.lambda.powertools.idempotency.exceptions.IdempotencyValidationException;
-import software.amazon.lambda.powertools.idempotency.internal.cache.LRUCache;
-import software.amazon.lambda.powertools.utilities.JsonConfig;
+
+import static software.amazon.lambda.powertools.common.internal.LambdaConstants.LAMBDA_FUNCTION_NAME_ENV;
/**
* Persistence layer that will store the idempotency result.
@@ -55,7 +55,7 @@ public abstract class BasePersistenceStore implements PersistenceStore {
protected boolean payloadValidationEnabled = false;
private String functionName = "";
private boolean configured = false;
- private long expirationInSeconds = 60 * 60; // 1 hour default
+ private long expirationInSeconds = 60 * 60L; // 1 hour default
private boolean useLocalCache = false;
private LRUCache cache;
private String eventKeyJMESPath;
@@ -73,7 +73,7 @@ public abstract class BasePersistenceStore implements PersistenceStore {
public void configure(IdempotencyConfig config, String functionName) {
String funcEnv = System.getenv(LAMBDA_FUNCTION_NAME_ENV);
this.functionName = funcEnv != null ? funcEnv : "testFunction";
- if (!StringUtils.isEmpty(functionName)) {
+ if (functionName != null && !functionName.isEmpty()) {
this.functionName += "." + functionName;
}
@@ -339,7 +339,7 @@ private MessageDigest getHashAlgorithm() {
private void validatePayload(JsonNode data, DataRecord dataRecord) throws IdempotencyValidationException {
if (payloadValidationEnabled) {
String dataHash = getHashedPayload(data);
- if (!StringUtils.equals(dataHash, dataRecord.getPayloadHash())) {
+ if (!isEqual(dataRecord.getPayloadHash(), dataHash)) {
throw new IdempotencyValidationException("Payload does not match stored record for this event key");
}
}
@@ -402,4 +402,12 @@ void configure(IdempotencyConfig config, String functionName, LRUCache
+
+
+
+ 4.0.0
+
+
+ software.amazon.lambda
+ powertools-idempotency
+ 2.0.0-SNAPSHOT
+
+
+ powertools-idempotency-dynamodb
+ jar
+
+ Powertools for AWS Lambda (Java) library Idempotency - DynamoDB
+
+ DynamoDB implementation for the idempotency module
+
+
+
+
+ software.amazon.lambda
+ powertools-idempotency-core
+ ${project.version}
+
+
+ software.amazon.awssdk
+ url-connection-client
+ ${aws.sdk.version}
+
+
+ software.amazon.awssdk
+ dynamodb
+
+
+ software.amazon.awssdk
+ netty-nio-client
+
+
+ software.amazon.awssdk
+ apache-client
+
+
+
+
+
+
+ com.amazonaws
+ DynamoDBLocal
+ [1.12,2.0)
+ test
+
+
+
+ io.github.ganadist.sqlite4java
+ libsqlite4java-osx-aarch64
+ 1.0.392
+ test
+ dylib
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-jar-plugin
+ 3.3.0
+
+
+
+ software.amazon.awssdk.enhanced.dynamodb
+
+
+
+
+
+ dev.aspectj
+ aspectj-maven-plugin
+ ${aspectj-maven-plugin.version}
+
+ ${maven.compiler.source}
+ ${maven.compiler.target}
+ ${maven.compiler.target}
+ ignore
+ ${project.build.sourceEncoding}
+
+
+ software.amazon.lambda
+ powertools-idempotency-core
+
+
+
+
+
+
+ compile
+ test-compile
+
+
+
+
+
+ org.aspectj
+ aspectjtools
+ ${aspectj.version}
+
+
+
+
+
+
\ No newline at end of file
diff --git a/powertools-idempotency/src/main/java/software/amazon/lambda/powertools/idempotency/persistence/DynamoDBPersistenceStore.java b/powertools-idempotency/powertools-idempotency-dynamodb/src/main/java/software/amazon/lambda/powertools/idempotency/persistence/dynamodb/DynamoDBPersistenceStore.java
similarity index 98%
rename from powertools-idempotency/src/main/java/software/amazon/lambda/powertools/idempotency/persistence/DynamoDBPersistenceStore.java
rename to powertools-idempotency/powertools-idempotency-dynamodb/src/main/java/software/amazon/lambda/powertools/idempotency/persistence/dynamodb/DynamoDBPersistenceStore.java
index 054f61ef3..0e20e396f 100644
--- a/powertools-idempotency/src/main/java/software/amazon/lambda/powertools/idempotency/persistence/DynamoDBPersistenceStore.java
+++ b/powertools-idempotency/powertools-idempotency-dynamodb/src/main/java/software/amazon/lambda/powertools/idempotency/persistence/dynamodb/DynamoDBPersistenceStore.java
@@ -12,19 +12,8 @@
*
*/
-package software.amazon.lambda.powertools.idempotency.persistence;
+package software.amazon.lambda.powertools.idempotency.persistence.dynamodb;
-import static software.amazon.lambda.powertools.common.internal.LambdaConstants.AWS_REGION_ENV;
-import static software.amazon.lambda.powertools.common.internal.LambdaConstants.LAMBDA_FUNCTION_NAME_ENV;
-import static software.amazon.lambda.powertools.idempotency.persistence.DataRecord.Status.INPROGRESS;
-
-import java.time.Instant;
-import java.util.AbstractMap;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.OptionalLong;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import software.amazon.awssdk.core.client.config.ClientOverrideConfiguration;
@@ -39,11 +28,25 @@
import software.amazon.awssdk.services.dynamodb.model.GetItemResponse;
import software.amazon.awssdk.services.dynamodb.model.PutItemRequest;
import software.amazon.awssdk.services.dynamodb.model.UpdateItemRequest;
-import software.amazon.awssdk.utils.StringUtils;
import software.amazon.lambda.powertools.common.internal.UserAgentConfigurator;
import software.amazon.lambda.powertools.idempotency.Constants;
import software.amazon.lambda.powertools.idempotency.exceptions.IdempotencyItemAlreadyExistsException;
import software.amazon.lambda.powertools.idempotency.exceptions.IdempotencyItemNotFoundException;
+import software.amazon.lambda.powertools.idempotency.persistence.BasePersistenceStore;
+import software.amazon.lambda.powertools.idempotency.persistence.DataRecord;
+import software.amazon.lambda.powertools.idempotency.persistence.PersistenceStore;
+
+import java.time.Instant;
+import java.util.AbstractMap;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.OptionalLong;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+import static software.amazon.lambda.powertools.common.internal.LambdaConstants.AWS_REGION_ENV;
+import static software.amazon.lambda.powertools.common.internal.LambdaConstants.LAMBDA_FUNCTION_NAME_ENV;
+import static software.amazon.lambda.powertools.idempotency.persistence.DataRecord.Status.INPROGRESS;
/**
* DynamoDB version of the {@link PersistenceStore}. Will store idempotency data in DynamoDB.
@@ -310,7 +313,7 @@ public static class Builder {
* @return an instance of the {@link DynamoDBPersistenceStore}
*/
public DynamoDBPersistenceStore build() {
- if (StringUtils.isEmpty(tableName)) {
+ if (tableName == null || "".equals(tableName)) {
throw new IllegalArgumentException("Table name is not specified");
}
return new DynamoDBPersistenceStore(tableName, keyAttr, staticPkValue, sortKeyAttr, expiryAttr,
diff --git a/powertools-idempotency/src/test/java/software/amazon/lambda/powertools/idempotency/DynamoDBConfig.java b/powertools-idempotency/powertools-idempotency-dynamodb/src/test/java/software.amazon.lambda.powertools.idempotency.dynamodb/DynamoDBConfig.java
similarity index 98%
rename from powertools-idempotency/src/test/java/software/amazon/lambda/powertools/idempotency/DynamoDBConfig.java
rename to powertools-idempotency/powertools-idempotency-dynamodb/src/test/java/software.amazon.lambda.powertools.idempotency.dynamodb/DynamoDBConfig.java
index 66ddb53ac..30b4976d7 100644
--- a/powertools-idempotency/src/test/java/software/amazon/lambda/powertools/idempotency/DynamoDBConfig.java
+++ b/powertools-idempotency/powertools-idempotency-dynamodb/src/test/java/software.amazon.lambda.powertools.idempotency.dynamodb/DynamoDBConfig.java
@@ -12,7 +12,7 @@
*
*/
-package software.amazon.lambda.powertools.idempotency;
+package software.amazon.lambda.powertools.idempotency.dynamodb;
import com.amazonaws.services.dynamodbv2.local.main.ServerRunner;
import com.amazonaws.services.dynamodbv2.local.server.DynamoDBProxyServer;
diff --git a/powertools-idempotency/src/test/java/software/amazon/lambda/powertools/idempotency/IdempotencyTest.java b/powertools-idempotency/powertools-idempotency-dynamodb/src/test/java/software.amazon.lambda.powertools.idempotency.dynamodb/IdempotencyTest.java
similarity index 93%
rename from powertools-idempotency/src/test/java/software/amazon/lambda/powertools/idempotency/IdempotencyTest.java
rename to powertools-idempotency/powertools-idempotency-dynamodb/src/test/java/software.amazon.lambda.powertools.idempotency.dynamodb/IdempotencyTest.java
index c94fec3db..be915b610 100644
--- a/powertools-idempotency/src/test/java/software/amazon/lambda/powertools/idempotency/IdempotencyTest.java
+++ b/powertools-idempotency/powertools-idempotency-dynamodb/src/test/java/software.amazon.lambda.powertools.idempotency.dynamodb/IdempotencyTest.java
@@ -12,7 +12,7 @@
*
*/
-package software.amazon.lambda.powertools.idempotency;
+package software.amazon.lambda.powertools.idempotency.dynamodb;
import static org.assertj.core.api.Assertions.assertThat;
@@ -25,7 +25,7 @@
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import software.amazon.awssdk.services.dynamodb.model.ScanRequest;
-import software.amazon.lambda.powertools.idempotency.handlers.IdempotencyFunction;
+import software.amazon.lambda.powertools.idempotency.dynamodb.handlers.IdempotencyFunction;
public class IdempotencyTest extends DynamoDBConfig {
diff --git a/powertools-idempotency/src/test/java/software/amazon/lambda/powertools/idempotency/handlers/IdempotencyFunction.java b/powertools-idempotency/powertools-idempotency-dynamodb/src/test/java/software.amazon.lambda.powertools.idempotency.dynamodb/handlers/IdempotencyFunction.java
similarity index 93%
rename from powertools-idempotency/src/test/java/software/amazon/lambda/powertools/idempotency/handlers/IdempotencyFunction.java
rename to powertools-idempotency/powertools-idempotency-dynamodb/src/test/java/software.amazon.lambda.powertools.idempotency.dynamodb/handlers/IdempotencyFunction.java
index 43e191fc2..1296a75c7 100644
--- a/powertools-idempotency/src/test/java/software/amazon/lambda/powertools/idempotency/handlers/IdempotencyFunction.java
+++ b/powertools-idempotency/powertools-idempotency-dynamodb/src/test/java/software.amazon.lambda.powertools.idempotency.dynamodb/handlers/IdempotencyFunction.java
@@ -12,12 +12,21 @@
*
*/
-package software.amazon.lambda.powertools.idempotency.handlers;
+package software.amazon.lambda.powertools.idempotency.dynamodb.handlers;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent;
import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyResponseEvent;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import software.amazon.awssdk.services.dynamodb.DynamoDbClient;
+import software.amazon.lambda.powertools.idempotency.Idempotency;
+import software.amazon.lambda.powertools.idempotency.IdempotencyConfig;
+import software.amazon.lambda.powertools.idempotency.Idempotent;
+import software.amazon.lambda.powertools.idempotency.persistence.dynamodb.DynamoDBPersistenceStore;
+import software.amazon.lambda.powertools.utilities.JsonConfig;
+
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
@@ -25,17 +34,9 @@
import java.util.HashMap;
import java.util.Map;
import java.util.stream.Collectors;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import software.amazon.awssdk.services.dynamodb.DynamoDbClient;
-import software.amazon.lambda.powertools.idempotency.Idempotency;
-import software.amazon.lambda.powertools.idempotency.IdempotencyConfig;
-import software.amazon.lambda.powertools.idempotency.Idempotent;
-import software.amazon.lambda.powertools.idempotency.persistence.DynamoDBPersistenceStore;
-import software.amazon.lambda.powertools.utilities.JsonConfig;
public class IdempotencyFunction implements RequestHandler {
- private static final Logger LOG = LoggerFactory.getLogger(IdempotencyFunction.class);
+ private final static Logger LOG = LogManager.getLogger(IdempotencyFunction.class);
public boolean handlerExecuted = false;
diff --git a/powertools-idempotency/src/test/java/software/amazon/lambda/powertools/idempotency/persistence/DynamoDBPersistenceStoreTest.java b/powertools-idempotency/powertools-idempotency-dynamodb/src/test/java/software/amazon/lambda/powertools/idempotency/persistence/dynamodb/DynamoDBPersistenceStoreTest.java
similarity index 99%
rename from powertools-idempotency/src/test/java/software/amazon/lambda/powertools/idempotency/persistence/DynamoDBPersistenceStoreTest.java
rename to powertools-idempotency/powertools-idempotency-dynamodb/src/test/java/software/amazon/lambda/powertools/idempotency/persistence/dynamodb/DynamoDBPersistenceStoreTest.java
index b19cebfe1..cc682a81f 100644
--- a/powertools-idempotency/src/test/java/software/amazon/lambda/powertools/idempotency/persistence/DynamoDBPersistenceStoreTest.java
+++ b/powertools-idempotency/powertools-idempotency-dynamodb/src/test/java/software/amazon/lambda/powertools/idempotency/persistence/dynamodb/DynamoDBPersistenceStoreTest.java
@@ -12,16 +12,8 @@
*
*/
-package software.amazon.lambda.powertools.idempotency.persistence;
+package software.amazon.lambda.powertools.idempotency.persistence.dynamodb;
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.assertj.core.api.Assertions.assertThatThrownBy;
-
-import java.time.Instant;
-import java.time.temporal.ChronoUnit;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
@@ -39,10 +31,20 @@
import software.amazon.awssdk.services.dynamodb.model.ScalarAttributeType;
import software.amazon.awssdk.services.dynamodb.model.ScanRequest;
import software.amazon.lambda.powertools.idempotency.Constants;
-import software.amazon.lambda.powertools.idempotency.DynamoDBConfig;
import software.amazon.lambda.powertools.idempotency.IdempotencyConfig;
+import software.amazon.lambda.powertools.idempotency.dynamodb.DynamoDBConfig;
import software.amazon.lambda.powertools.idempotency.exceptions.IdempotencyItemAlreadyExistsException;
import software.amazon.lambda.powertools.idempotency.exceptions.IdempotencyItemNotFoundException;
+import software.amazon.lambda.powertools.idempotency.persistence.DataRecord;
+
+import java.time.Instant;
+import java.time.temporal.ChronoUnit;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
/**
* These test are using DynamoDBLocal and sqlite, see https://nickolasfisher.com/blog/Configuring-an-In-Memory-DynamoDB-instance-with-Java-for-Integration-Testing
diff --git a/powertools-idempotency/src/test/resources/apigw_event2.json b/powertools-idempotency/powertools-idempotency-dynamodb/src/test/resources/apigw_event2.json
similarity index 100%
rename from powertools-idempotency/src/test/resources/apigw_event2.json
rename to powertools-idempotency/powertools-idempotency-dynamodb/src/test/resources/apigw_event2.json
diff --git a/powertools-idempotency/spotbugs-exclude.xml b/powertools-idempotency/spotbugs-exclude.xml
new file mode 100644
index 000000000..9a2369c75
--- /dev/null
+++ b/powertools-idempotency/spotbugs-exclude.xml
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/powertools-parameters/powertools-parameters-appconfig/pom.xml b/powertools-parameters/powertools-parameters-appconfig/pom.xml
index 3a3018c7c..34b1238f6 100644
--- a/powertools-parameters/powertools-parameters-appconfig/pom.xml
+++ b/powertools-parameters/powertools-parameters-appconfig/pom.xml
@@ -21,7 +21,6 @@
powertools-parameters
${project.version}
-
software.amazon.awssdk
appconfigdata
@@ -36,6 +35,11 @@
+
+ org.aspectj
+ aspectjrt
+ provided
+
diff --git a/powertools-parameters/powertools-parameters-dynamodb/pom.xml b/powertools-parameters/powertools-parameters-dynamodb/pom.xml
index ad32bdff8..2ec6ad27c 100644
--- a/powertools-parameters/powertools-parameters-dynamodb/pom.xml
+++ b/powertools-parameters/powertools-parameters-dynamodb/pom.xml
@@ -36,6 +36,11 @@
+
+ org.aspectj
+ aspectjrt
+ provided
+
diff --git a/powertools-parameters/powertools-parameters-secrets/pom.xml b/powertools-parameters/powertools-parameters-secrets/pom.xml
index 6c4501ca3..3275d0ee0 100644
--- a/powertools-parameters/powertools-parameters-secrets/pom.xml
+++ b/powertools-parameters/powertools-parameters-secrets/pom.xml
@@ -36,6 +36,11 @@
+
+ org.aspectj
+ aspectjrt
+ provided
+
diff --git a/powertools-parameters/powertools-parameters-ssm/pom.xml b/powertools-parameters/powertools-parameters-ssm/pom.xml
index 80276189d..65332c9ef 100644
--- a/powertools-parameters/powertools-parameters-ssm/pom.xml
+++ b/powertools-parameters/powertools-parameters-ssm/pom.xml
@@ -36,6 +36,11 @@
+
+ org.aspectj
+ aspectjrt
+ provided
+
diff --git a/powertools-validation/pom.xml b/powertools-validation/pom.xml
index a5fc4a890..0de38c1c1 100644
--- a/powertools-validation/pom.xml
+++ b/powertools-validation/pom.xml
@@ -33,6 +33,11 @@
+
+ org.aspectj
+ aspectjrt
+ provided
+
software.amazon.lambda
powertools-common
diff --git a/spotbugs-exclude.xml b/spotbugs-exclude.xml
index 747752130..ee39b5d0f 100644
--- a/spotbugs-exclude.xml
+++ b/spotbugs-exclude.xml
@@ -27,6 +27,10 @@
+
+
+
+
@@ -106,6 +110,10 @@
+
+
+
+
@@ -127,7 +135,7 @@
-
+