diff --git a/README.md b/README.md index ef3e9738..61451f98 100644 --- a/README.md +++ b/README.md @@ -52,9 +52,9 @@ well, where all services code is in Spring. ### Requirements -* Spring 5+, 6+ +* Spring 5+, 6+, 7+ * Java 1.8+,17 -* Spring boot 2+,3+ +* Spring boot 2+,3+,4+ * Lettuce client for Redis cluster * Read master preference for Redis cluster @@ -98,6 +98,7 @@ from [Maven central](https://search.maven.org/search?q=g:com.github.sonus21%20AN * For spring framework 5.x use rqueue-spring 2.x * For spring framework 6.x use rqueue-spring 3.x +* For spring framework 7.x use rqueue-spring 4.x Get the latest one from [Maven central](https://search.maven.org/search?q=g:com.github.sonus21%20AND%20a:rqueue-spring) diff --git a/build.gradle b/build.gradle index 74f54259..71d12cdf 100644 --- a/build.gradle +++ b/build.gradle @@ -1,8 +1,8 @@ plugins { id "jacoco" id 'com.github.kt3k.coveralls' version '2.12.2' - id "com.adarshr.test-logger" version "3.2.0" - id "org.gradle.test-retry" version "1.5.0" + id "com.adarshr.test-logger" version "4.0.0" + id "org.gradle.test-retry" version "1.6.4" } allprojects { @@ -12,8 +12,10 @@ allprojects { apply plugin: "com.adarshr.test-logger" apply plugin: "org.gradle.test-retry" - sourceCompatibility = 17 - targetCompatibility = 17 + java { + sourceCompatibility = "17" + targetCompatibility = "17" + } repositories { mavenCentral() @@ -22,15 +24,15 @@ allprojects { } ext { - springBootVersion = "3.0.1" - springVersion = "6.0.3" - springDataVersion = "3.0.0" - microMeterVersion = "1.10.2" + springBootVersion = "4.0.1" + springVersion = "7.0.3" + springDataVersion = "4.0.2" + microMeterVersion = "1.16.2" // logging dependencies - lombokVersion = "1.18.30" - logbackVersion = "1.4.5" - sl4jVersion = "2.0.6" + lombokVersion = "1.18.42" + logbackVersion = "1.5.25" + sl4jVersion = "2.0.17" // testing jupiterVersion = "5.5.0" @@ -42,34 +44,35 @@ ext { tomcatVersion = "10.1.4" // utility - lang3Version = "3.9" - jacksonVersion = "2.14.1" + lang3Version = "3.20.0" + jacksonVersion = "3.0.3" + jacksonAnnotationsVersion = "2.21" // server - jakartaServletVersion = "6.0.0" - pebbleVersion = "3.2.2" + jakartaServletVersion = "6.1.0" + pebbleVersion = "4.1.0" // database - lettuceVersion = "6.2.2.RELEASE" - jakartaAnnotationVersion = "2.1.0" - jakartaPersistenceVersion = "3.1.0" - hibernateCoreVersion = "5.6.14.Final" + lettuceVersion = "7.2.1.RELEASE" + jakartaAnnotationVersion = "3.0.0" + jakartaPersistenceVersion = "3.2.0" + hibernateCoreVersion = "7.2.1.Final" // other dependencies - jakartaValidationApiVersion = "3.0.2" + jakartaValidationApiVersion = "3.1.1" serucoEncodingVersion = "0.1.3" - apacheCommonCollectionVerion = "4.4" - hibernateValidatorVersion = "7.0.5.Final" - springDepManagementVersion = "1.1.0" - projectReactorReactorTestVersion = "3.5.1" - aspectjVersion = "1.9.19" - guavaVersion = "32.1.1-jre" + apacheCommonCollectionVerion = "4.5.0" + hibernateValidatorVersion = "9.1.0.Final" + springDepManagementVersion = "1.1.7" + projectReactorReactorTestVersion = "3.8.2" + aspectjVersion = "1.9.25.1" + guavaVersion = "33.5.0-jre" } subprojects { group = "com.github.sonus21" - version = "3.4.0-RELEASE" + version = "4.0.0-RELEASE" dependencies { // https://mvnrepository.com/artifact/org.springframework/spring-messaging @@ -94,6 +97,7 @@ subprojects { // https://mvnrepository.com/artifact/ch.qos.logback/logback-classic testImplementation "ch.qos.logback:logback-classic:${logbackVersion}" testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:${jupiterVersion}" + testRuntimeOnly "org.junit.platform:junit-platform-launcher:6.0.2" testImplementation "org.junit.jupiter:junit-jupiter-api:${jupiterVersion}" testImplementation "org.junit.jupiter:junit-jupiter-params:${jupiterVersion}" // https://mvnrepository.com/artifact/org.mockito/mockito-inline diff --git a/docs/index.md b/docs/index.md index 3d153c11..6e0d5deb 100644 --- a/docs/index.md +++ b/docs/index.md @@ -52,8 +52,8 @@ frameworks. ### Requirements -* Spring 5+, 6+ -* Spring Boot 2+, 3+ +* Spring 5+, 6+, 7+ +* Spring Boot 2+, 3+, 4+ * Spring Reactive * Lettuce client for Redis cluster * Read master preference for Redis cluster @@ -82,8 +82,8 @@ Redis cluster compatibility, otherwise the application may fail to start. ### Spring Boot {: .warning } -Use Rqueue Spring Boot Starter 3.x for Spring Boot 3.x, and Rqueue Spring Boot Starter 2.x for -Spring Boot 2.x. +Use Rqueue Spring Boot Starter 4.x for Spring Boot 4.x, Rqueue Spring Boot Starter 3.x for +Spring Boot 3.x, and Rqueue Spring Boot Starter 2.x for Spring Boot 2.x. Get the latest version of Rqueue Spring Boot Starter from [Maven Central][Boot Maven Central]. Add the dependency to your project: @@ -125,7 +125,8 @@ the dependency to your project: ### Spring Framework {: .warning } -Use Rqueue Spring 3.x for Spring Framework 6.x, and Rqueue Spring 2.x for Spring Framework 5.x. +Use Rqueue Spring 4.x for Spring Framework 7.x, Rqueue Spring 3.x for Spring Framework 6.x, +and Rqueue Spring 2.x for Spring Framework 5.x. Get the latest version of Rqueue Spring from [Maven Central][Maven Central]. Add the dependency to your project: diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 943f0cbf..d64cd491 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 3499ded5..19a6bdeb 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,7 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.3.0-bin.zip networkTimeout=10000 +validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index 65dcd68d..1aa94a42 100755 --- a/gradlew +++ b/gradlew @@ -83,10 +83,8 @@ done # This is normally unused # shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} -APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum @@ -133,10 +131,13 @@ location of your Java installation." fi else JAVACMD=java - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the location of your Java installation." + fi fi # Increase the maximum file descriptors if we can. @@ -144,7 +145,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then case $MAX_FD in #( max*) # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC3045 + # shellcheck disable=SC2039,SC3045 MAX_FD=$( ulimit -H -n ) || warn "Could not query maximum file descriptor limit" esac @@ -152,7 +153,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then '' | soft) :;; #( *) # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC3045 + # shellcheck disable=SC2039,SC3045 ulimit -n "$MAX_FD" || warn "Could not set maximum file descriptor limit to $MAX_FD" esac @@ -197,11 +198,15 @@ if "$cygwin" || "$msys" ; then done fi -# Collect all arguments for the java command; -# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of -# shell script including quotes and variable substitutions, so put them in -# double quotes to make sure that they get re-expanded; and -# * put everything else in single quotes, so that it's not re-expanded. + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. set -- \ "-Dorg.gradle.appname=$APP_BASE_NAME" \ diff --git a/rqueue-core/build.gradle b/rqueue-core/build.gradle index 8f051264..75812407 100644 --- a/rqueue-core/build.gradle +++ b/rqueue-core/build.gradle @@ -41,13 +41,15 @@ mavenPublishing { dependencies { // https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core - api "com.fasterxml.jackson.core:jackson-core:${jacksonVersion}" - api "com.fasterxml.jackson.core:jackson-annotations:${jacksonVersion}" - api "com.fasterxml.jackson.core:jackson-databind:${jacksonVersion}" + api "tools.jackson.core:jackson-core:${jacksonVersion}" + api "tools.jackson.core:jackson-databind:${jacksonVersion}" + api "com.fasterxml.jackson.core:jackson-annotations:${jacksonAnnotationsVersion}" // https://mvnrepository.com/artifact/jakarta.servlet/jakarta.servlet-api api "jakarta.servlet:jakarta.servlet-api:${jakartaServletVersion}" // https://mvnrepository.com/artifact/jakarta.validation/jakarta.validation-api api "jakarta.validation:jakarta.validation-api:${jakartaValidationApiVersion}" + implementation 'jakarta.el:jakarta.el-api:5.0.0' + runtimeOnly 'org.glassfish:jakarta.el:4.0.2' // https://mvnrepository.com/artifact/org.springframework/spring-webmvc api "org.springframework:spring-webmvc:${springVersion}" api "org.springframework:spring-webflux:${springVersion}" diff --git a/rqueue-core/src/main/java/com/github/sonus21/rqueue/converter/GenericMessageConverter.java b/rqueue-core/src/main/java/com/github/sonus21/rqueue/converter/GenericMessageConverter.java index 515dd1bb..c2fccea2 100644 --- a/rqueue-core/src/main/java/com/github/sonus21/rqueue/converter/GenericMessageConverter.java +++ b/rqueue-core/src/main/java/com/github/sonus21/rqueue/converter/GenericMessageConverter.java @@ -18,9 +18,6 @@ import static org.springframework.util.Assert.notNull; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.JavaType; -import com.fasterxml.jackson.databind.ObjectMapper; import com.github.sonus21.rqueue.utils.SerializationUtils; import java.lang.reflect.TypeVariable; import java.util.Collection; @@ -34,6 +31,9 @@ import org.springframework.messaging.MessageHeaders; import org.springframework.messaging.converter.SmartMessageConverter; import org.springframework.messaging.support.GenericMessage; +import tools.jackson.core.JacksonException; +import tools.jackson.databind.JavaType; +import tools.jackson.databind.ObjectMapper; /** * A converter to turn the payload of a {@link Message} from serialized form to a typed String and @@ -212,7 +212,7 @@ public String serialize(Object payload) { String msg = objectMapper.writeValueAsString(payload); Msg message = new Msg(msg, name); return objectMapper.writeValueAsString(message); - } catch (JsonProcessingException e) { + } catch (JacksonException e) { log.debug("Serialisation failed", e); return null; } diff --git a/rqueue-core/src/main/java/com/github/sonus21/rqueue/converter/JsonMessageConverter.java b/rqueue-core/src/main/java/com/github/sonus21/rqueue/converter/JsonMessageConverter.java index 84fb3da1..3ee447d3 100644 --- a/rqueue-core/src/main/java/com/github/sonus21/rqueue/converter/JsonMessageConverter.java +++ b/rqueue-core/src/main/java/com/github/sonus21/rqueue/converter/JsonMessageConverter.java @@ -18,15 +18,15 @@ import static org.springframework.util.Assert.notNull; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; import com.github.sonus21.rqueue.utils.SerializationUtils; import lombok.extern.slf4j.Slf4j; import org.springframework.messaging.Message; import org.springframework.messaging.MessageHeaders; -import org.springframework.messaging.converter.MappingJackson2MessageConverter; +import org.springframework.messaging.converter.JacksonJsonMessageConverter; import org.springframework.messaging.converter.MessageConverter; import org.springframework.messaging.support.GenericMessage; +import tools.jackson.core.JacksonException; +import tools.jackson.databind.ObjectMapper; /** * JsonMessageConverter tries to convert to JSON and from JSON to object. @@ -37,7 +37,7 @@ *

Target class is null till the time method arguments are not resolved, once method arguments * are resolved then it will become non-null. * - * @see MappingJackson2MessageConverter + * @see JacksonJsonMessageConverter */ @Slf4j public class JsonMessageConverter implements MessageConverter { @@ -65,7 +65,7 @@ public Object fromMessage(Message message, Class targetClass) { return objectMapper.readValue(payload, targetClass); } return null; - } catch (JsonProcessingException | ClassCastException e) { + } catch (JacksonException | ClassCastException e) { log.debug("Deserialization of message {} failed", message, e); return null; } @@ -77,7 +77,7 @@ public Message toMessage(Object payload, MessageHeaders headers) { try { String msg = objectMapper.writeValueAsString(payload); return new GenericMessage<>(msg); - } catch (JsonProcessingException e) { + } catch (JacksonException e) { log.debug("Serialisation failed, Payload: {}", payload, e); return null; } diff --git a/rqueue-core/src/main/java/com/github/sonus21/rqueue/converter/RqueueRedisSerializer.java b/rqueue-core/src/main/java/com/github/sonus21/rqueue/converter/RqueueRedisSerializer.java index 01432afa..b37388bc 100644 --- a/rqueue-core/src/main/java/com/github/sonus21/rqueue/converter/RqueueRedisSerializer.java +++ b/rqueue-core/src/main/java/com/github/sonus21/rqueue/converter/RqueueRedisSerializer.java @@ -17,19 +17,19 @@ package com.github.sonus21.rqueue.converter; import com.fasterxml.jackson.annotation.JsonTypeInfo.As; -import com.fasterxml.jackson.core.JsonGenerator; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.ObjectMapper.DefaultTyping; -import com.fasterxml.jackson.databind.SerializerProvider; -import com.fasterxml.jackson.databind.module.SimpleModule; -import com.fasterxml.jackson.databind.ser.std.StdSerializer; import com.github.sonus21.rqueue.utils.SerializationUtils; -import java.io.IOException; import lombok.extern.slf4j.Slf4j; import org.springframework.cache.support.NullValue; import org.springframework.data.redis.serializer.RedisSerializer; import org.springframework.data.redis.serializer.SerializationException; +import tools.jackson.core.JacksonException; +import tools.jackson.core.JsonGenerator; +import tools.jackson.databind.DefaultTyping; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.SerializationContext; +import tools.jackson.databind.jsontype.BasicPolymorphicTypeValidator; +import tools.jackson.databind.module.SimpleModule; +import tools.jackson.databind.ser.std.StdSerializer; @Slf4j public class RqueueRedisSerializer implements RedisSerializer { @@ -68,10 +68,12 @@ private static class RqueueRedisSerDes implements RedisSerializer { private ObjectMapper mapper; RqueueRedisSerDes() { - this.mapper = SerializationUtils.createObjectMapper(); - this.mapper = - mapper.registerModule(new SimpleModule().addSerializer(new NullValueSerializer())); - this.mapper = mapper.enableDefaultTyping(DefaultTyping.NON_FINAL, As.PROPERTY); + this.mapper = SerializationUtils.createObjectMapper().rebuild() + .addModule(new SimpleModule().addSerializer(new NullValueSerializer())) + .activateDefaultTyping(BasicPolymorphicTypeValidator.builder() + .allowIfSubType(Object.class) + .build(), DefaultTyping.NON_FINAL, As.PROPERTY) + .build(); } @Override @@ -81,7 +83,7 @@ public byte[] serialize(Object source) throws SerializationException { } try { return mapper.writeValueAsBytes(source); - } catch (JsonProcessingException e) { + } catch (JacksonException e) { throw new SerializationException("Could not write JSON: " + e.getMessage(), e); } } @@ -109,11 +111,9 @@ private static class NullValueSerializer extends StdSerializer { } @Override - public void serialize( - NullValue value, JsonGenerator jsonGenerator, SerializerProvider provider) - throws IOException { + public void serialize(NullValue value, JsonGenerator jsonGenerator, SerializationContext provider) throws JacksonException { jsonGenerator.writeStartObject(); - jsonGenerator.writeStringField(classIdentifier, NullValue.class.getName()); + jsonGenerator.writeStringProperty(classIdentifier, NullValue.class.getName()); jsonGenerator.writeEndObject(); } } diff --git a/rqueue-core/src/main/java/com/github/sonus21/rqueue/utils/SerializationUtils.java b/rqueue-core/src/main/java/com/github/sonus21/rqueue/utils/SerializationUtils.java index 49dc07fe..e1c3ba1c 100644 --- a/rqueue-core/src/main/java/com/github/sonus21/rqueue/utils/SerializationUtils.java +++ b/rqueue-core/src/main/java/com/github/sonus21/rqueue/utils/SerializationUtils.java @@ -16,8 +16,10 @@ package com.github.sonus21.rqueue.utils; -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.ObjectMapper; + +import tools.jackson.databind.DeserializationFeature; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.json.JsonMapper; public final class SerializationUtils { @@ -37,8 +39,8 @@ public static boolean isJson(String data) { } public static ObjectMapper createObjectMapper() { - ObjectMapper mapper = new ObjectMapper(); - mapper = mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - return mapper; + return JsonMapper.builder() + .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false) + .build(); } } diff --git a/rqueue-core/src/main/java/com/github/sonus21/rqueue/web/controller/RqueueRestController.java b/rqueue-core/src/main/java/com/github/sonus21/rqueue/web/controller/RqueueRestController.java index 4076b7fe..1778df42 100644 --- a/rqueue-core/src/main/java/com/github/sonus21/rqueue/web/controller/RqueueRestController.java +++ b/rqueue-core/src/main/java/com/github/sonus21/rqueue/web/controller/RqueueRestController.java @@ -194,7 +194,7 @@ public BaseResponse pauseUnpauseQueue( @GetMapping("aggregate-data-selector") @ResponseBody public DataSelectorResponse aggregateDataCounter( - @RequestParam AggregationType type, HttpServletResponse response) { + @RequestParam("type") AggregationType type, HttpServletResponse response) { if (isEnable(response)) { return rqueueUtilityService.aggregateDataCounter(type); } diff --git a/rqueue-core/src/main/java/com/github/sonus21/rqueue/web/service/impl/RqueueJobServiceImpl.java b/rqueue-core/src/main/java/com/github/sonus21/rqueue/web/service/impl/RqueueJobServiceImpl.java index 0ff7a612..7fc8b24f 100644 --- a/rqueue-core/src/main/java/com/github/sonus21/rqueue/web/service/impl/RqueueJobServiceImpl.java +++ b/rqueue-core/src/main/java/com/github/sonus21/rqueue/web/service/impl/RqueueJobServiceImpl.java @@ -16,8 +16,6 @@ package com.github.sonus21.rqueue.web.service.impl; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; import com.github.sonus21.rqueue.dao.RqueueJobDao; import com.github.sonus21.rqueue.exception.ProcessingException; import com.github.sonus21.rqueue.models.db.CheckinMessage; @@ -37,6 +35,8 @@ import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import reactor.core.publisher.Mono; +import tools.jackson.core.JacksonException; +import tools.jackson.databind.ObjectMapper; @Service public class RqueueJobServiceImpl implements RqueueJobService { @@ -79,7 +79,7 @@ private TableRow getTableRow(RqueueJob job) throws ProcessingException { try { String data = objectMapper.writeValueAsString(job.getCheckins()); columns.add(new TableColumn(data)); - } catch (JsonProcessingException e) { + } catch (JacksonException e) { throw new ProcessingException(e.getMessage(), e); } } diff --git a/rqueue-core/src/test/java/com/github/sonus21/rqueue/converter/GenericMessageConverterTest.java b/rqueue-core/src/test/java/com/github/sonus21/rqueue/converter/GenericMessageConverterTest.java index 32d991f2..8220adef 100644 --- a/rqueue-core/src/test/java/com/github/sonus21/rqueue/converter/GenericMessageConverterTest.java +++ b/rqueue-core/src/test/java/com/github/sonus21/rqueue/converter/GenericMessageConverterTest.java @@ -29,6 +29,7 @@ import java.lang.reflect.WildcardType; import java.util.Arrays; import java.util.Collections; +import java.util.LinkedHashMap; import java.util.List; import java.util.Objects; import java.util.UUID; @@ -74,7 +75,8 @@ void fromMessageClassNotFoundException() { @Test void toMessageEmptyObject() { Message m = (Message) genericMessageConverter.toMessage(new Object(), null); - assertNull(m); + Object object = genericMessageConverter.fromMessage(m, null); + assertEquals(object, new LinkedHashMap<>()); } @Test diff --git a/rqueue-core/src/test/java/com/github/sonus21/rqueue/converter/JsonMessageConverterTest.java b/rqueue-core/src/test/java/com/github/sonus21/rqueue/converter/JsonMessageConverterTest.java index b1bd0b24..9a25308c 100644 --- a/rqueue-core/src/test/java/com/github/sonus21/rqueue/converter/JsonMessageConverterTest.java +++ b/rqueue-core/src/test/java/com/github/sonus21/rqueue/converter/JsonMessageConverterTest.java @@ -20,7 +20,6 @@ import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertNull; -import com.fasterxml.jackson.databind.ObjectMapper; import com.github.sonus21.TestBase; import com.github.sonus21.rqueue.CoreUnitTest; import java.util.UUID; @@ -32,6 +31,7 @@ import org.junit.jupiter.api.Test; import org.springframework.messaging.Message; import org.springframework.messaging.converter.MessageConverter; +import tools.jackson.databind.ObjectMapper; @CoreUnitTest class JsonMessageConverterTest extends TestBase { @@ -53,10 +53,13 @@ void fromMessage() { assertEquals(testData, messageConverter.fromMessage(testDataMessage, TestData.class)); assertEquals(testDataX, messageConverter.fromMessage(testDataXMessage, TestDataX.class)); - // unknown property error - assertNull(messageConverter2.fromMessage(testDataXMessage, TestData.class)); + // deserializing from type 2 to type 1 + TestData newTestData = + (TestData) messageConverter2.fromMessage(testDataXMessage, TestData.class); + assertEquals(testDataX.id, newTestData.id); + assertEquals(testDataX.message, newTestData.message); - // serializing from type 1 to type 2 + // deserializing from type 1 to type 2 TestDataX newTestDataX = (TestDataX) messageConverter2.fromMessage(testDataMessage, TestDataX.class); assertEquals(testData.id, newTestDataX.id); diff --git a/rqueue-core/src/test/java/com/github/sonus21/rqueue/core/RqueueMessageTest.java b/rqueue-core/src/test/java/com/github/sonus21/rqueue/core/RqueueMessageTest.java index b917cd31..7194ff6b 100644 --- a/rqueue-core/src/test/java/com/github/sonus21/rqueue/core/RqueueMessageTest.java +++ b/rqueue-core/src/test/java/com/github/sonus21/rqueue/core/RqueueMessageTest.java @@ -21,13 +21,13 @@ import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertTrue; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; import com.github.sonus21.TestBase; import com.github.sonus21.rqueue.CoreUnitTest; import com.github.sonus21.rqueue.utils.SerializationUtils; import java.util.UUID; import org.junit.jupiter.api.Test; +import tools.jackson.core.JacksonException; +import tools.jackson.databind.ObjectMapper; @CoreUnitTest class RqueueMessageTest extends TestBase { @@ -54,7 +54,7 @@ void setReEnqueuedAt() { } @Test - void objectEquality() throws JsonProcessingException { + void objectEquality() throws JacksonException { RqueueMessage message = RqueueMessage.builder() .id(UUID.randomUUID().toString()) @@ -69,7 +69,7 @@ void objectEquality() throws JsonProcessingException { } @Test - void objectEqualityWithoutDelay() throws JsonProcessingException { + void objectEqualityWithoutDelay() throws JacksonException { RqueueMessage message = RqueueMessage.builder() .id(UUID.randomUUID().toString()) diff --git a/rqueue-spring-boot-example/build.gradle b/rqueue-spring-boot-example/build.gradle index 8eb44c6b..84041b5c 100644 --- a/rqueue-spring-boot-example/build.gradle +++ b/rqueue-spring-boot-example/build.gradle @@ -1,17 +1,16 @@ plugins { id "org.springframework.boot" version "${springBootVersion}" - id "io.spring.dependency-management" version "${springDepManagementVersion}" id "war" } dependencies { implementation project(":rqueue-spring-boot-starter") - implementation "org.springframework.boot:spring-boot-starter-data-redis" - implementation "org.springframework.boot:spring-boot-starter-web" + implementation "org.springframework.boot:spring-boot-starter-data-redis:${springBootVersion}" + implementation "org.springframework.boot:spring-boot-starter-webmvc:${springBootVersion}" // https://mvnrepository.com/artifact/ch.qos.logback/logback-core implementation "ch.qos.logback:logback-core:${logbackVersion}" // https://mvnrepository.com/artifact/ch.qos.logback/logback-classic implementation "ch.qos.logback:logback-classic:${logbackVersion}" implementation "io.lettuce:lettuce-core" - annotationProcessor "org.springframework.boot:spring-boot-configuration-processor" - providedRuntime "org.springframework.boot:spring-boot-starter-tomcat" + annotationProcessor "org.springframework.boot:spring-boot-configuration-processor:${springBootVersion}" + providedRuntime "org.springframework.boot:spring-boot-starter-tomcat:${springBootVersion}" } diff --git a/rqueue-spring-boot-reactive-example/build.gradle b/rqueue-spring-boot-reactive-example/build.gradle index f661a78d..10eb719b 100644 --- a/rqueue-spring-boot-reactive-example/build.gradle +++ b/rqueue-spring-boot-reactive-example/build.gradle @@ -1,12 +1,14 @@ plugins { id "org.springframework.boot" version "${springBootVersion}" - id "io.spring.dependency-management" version "${springDepManagementVersion}" id "war" } + +apply from: "${rootDir}/gradle/test-runner.gradle" + dependencies { implementation project(":rqueue-spring-boot-starter") - implementation "org.springframework.boot:spring-boot-starter-data-redis-reactive" - implementation "org.springframework.boot:spring-boot-starter-webflux" + implementation "org.springframework.boot:spring-boot-starter-data-redis-reactive:${springBootVersion}" + implementation "org.springframework.boot:spring-boot-starter-webflux:${springBootVersion}" implementation "io.lettuce:lettuce-core" // https://mvnrepository.com/artifact/ch.qos.logback/logback-core implementation "ch.qos.logback:logback-core:${logbackVersion}" diff --git a/rqueue-spring-boot-starter/build.gradle b/rqueue-spring-boot-starter/build.gradle index b0dced58..828d5243 100644 --- a/rqueue-spring-boot-starter/build.gradle +++ b/rqueue-spring-boot-starter/build.gradle @@ -47,6 +47,7 @@ dependencies { testImplementation project(":rqueue-spring-common-test") testImplementation "org.springframework.boot:spring-boot-starter-test:${springBootVersion}" testImplementation "org.springframework.boot:spring-boot-starter-webflux:${springBootVersion}" + testImplementation "org.springframework.boot:spring-boot-webtestclient:${springBootVersion}" testImplementation "org.springframework.boot:spring-boot-starter-data-redis-reactive:${springBootVersion}" testImplementation "org.springframework.boot:spring-boot-starter-data-jpa:${springBootVersion}" testImplementation "org.springframework.boot:spring-boot-devtools:${springBootVersion}" diff --git a/rqueue-spring-boot-starter/src/main/java/com/github/sonus21/rqueue/spring/boot/RqueueListenerAutoConfig.java b/rqueue-spring-boot-starter/src/main/java/com/github/sonus21/rqueue/spring/boot/RqueueListenerAutoConfig.java index 093b7545..0949474f 100644 --- a/rqueue-spring-boot-starter/src/main/java/com/github/sonus21/rqueue/spring/boot/RqueueListenerAutoConfig.java +++ b/rqueue-spring-boot-starter/src/main/java/com/github/sonus21/rqueue/spring/boot/RqueueListenerAutoConfig.java @@ -33,7 +33,8 @@ import com.github.sonus21.rqueue.utils.condition.RqueueEnabled; import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; -import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration; + +import org.springframework.boot.data.redis.autoconfigure.DataRedisAutoConfiguration; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Conditional; @@ -41,7 +42,7 @@ import org.springframework.context.annotation.DependsOn; @Configuration -@AutoConfigureAfter(RedisAutoConfiguration.class) +@AutoConfigureAfter(DataRedisAutoConfiguration.class) @ComponentScan({"com.github.sonus21.rqueue.web", "com.github.sonus21.rqueue.dao"}) @Conditional({RqueueEnabled.class}) public class RqueueListenerAutoConfig extends RqueueListenerBaseConfig { diff --git a/rqueue-spring-boot-starter/src/main/java/com/github/sonus21/rqueue/spring/boot/RqueueMetricsAutoConfig.java b/rqueue-spring-boot-starter/src/main/java/com/github/sonus21/rqueue/spring/boot/RqueueMetricsAutoConfig.java index 268c1a58..d47f932b 100644 --- a/rqueue-spring-boot-starter/src/main/java/com/github/sonus21/rqueue/spring/boot/RqueueMetricsAutoConfig.java +++ b/rqueue-spring-boot-starter/src/main/java/com/github/sonus21/rqueue/spring/boot/RqueueMetricsAutoConfig.java @@ -28,10 +28,10 @@ import java.util.Collections; import java.util.Map; import java.util.Map.Entry; -import org.springframework.boot.actuate.autoconfigure.metrics.MetricsAutoConfiguration; -import org.springframework.boot.actuate.autoconfigure.metrics.MetricsProperties; import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.micrometer.metrics.autoconfigure.MetricsAutoConfiguration; +import org.springframework.boot.micrometer.metrics.autoconfigure.MetricsProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Conditional; import org.springframework.context.annotation.Configuration; diff --git a/rqueue-spring-boot-starter/src/test/java/com/github/sonus21/rqueue/spring/boot/tests/integration/BootRetryTest.java b/rqueue-spring-boot-starter/src/test/java/com/github/sonus21/rqueue/spring/boot/tests/integration/BootRetryTest.java index db083ed7..8806c2dd 100644 --- a/rqueue-spring-boot-starter/src/test/java/com/github/sonus21/rqueue/spring/boot/tests/integration/BootRetryTest.java +++ b/rqueue-spring-boot-starter/src/test/java/com/github/sonus21/rqueue/spring/boot/tests/integration/BootRetryTest.java @@ -16,7 +16,6 @@ package com.github.sonus21.rqueue.spring.boot.tests.integration; -import com.fasterxml.jackson.core.JsonProcessingException; import com.github.sonus21.rqueue.exception.TimedOutException; import com.github.sonus21.rqueue.spring.boot.application.Application; import com.github.sonus21.rqueue.spring.boot.tests.SpringBootIntegrationTest; @@ -26,6 +25,7 @@ import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.TestPropertySource; +import tools.jackson.core.JacksonException; @ContextConfiguration(classes = Application.class) @SpringBootTest @@ -70,7 +70,7 @@ void jobIsRetriedAndMessageIsInProcessingQueue() throws TimedOutException { @Test void messageIsConsumedByDeadLetterQueueListener() - throws TimedOutException, JsonProcessingException { + throws TimedOutException, JacksonException { verifyMessageIsConsumedByDeadLetterQueueListener(); } } diff --git a/rqueue-spring-boot-starter/src/test/java/com/github/sonus21/rqueue/spring/boot/tests/integration/CustomMessageConverterTest.java b/rqueue-spring-boot-starter/src/test/java/com/github/sonus21/rqueue/spring/boot/tests/integration/CustomMessageConverterTest.java index e94dc03d..5116080c 100644 --- a/rqueue-spring-boot-starter/src/test/java/com/github/sonus21/rqueue/spring/boot/tests/integration/CustomMessageConverterTest.java +++ b/rqueue-spring-boot-starter/src/test/java/com/github/sonus21/rqueue/spring/boot/tests/integration/CustomMessageConverterTest.java @@ -19,7 +19,6 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; -import com.fasterxml.jackson.core.JsonProcessingException; import com.github.sonus21.rqueue.core.RqueueMessage; import com.github.sonus21.rqueue.exception.TimedOutException; import com.github.sonus21.rqueue.spring.boot.application.ApplicationWithCustomMessageConverter; @@ -36,6 +35,7 @@ import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.TestPropertySource; +import tools.jackson.core.JacksonException; @ContextConfiguration(classes = ApplicationWithCustomMessageConverter.class) @SpringBootTest @@ -59,7 +59,7 @@ void verifyListenerIsWorking() throws TimedOutException { } @Test - void verifyMessageStoredInDb() throws TimedOutException, JsonProcessingException { + void verifyMessageStoredInDb() throws TimedOutException, JacksonException { rqueueEndpointManager.pauseUnpauseQueue(jobQueue, true); TimeoutUtils.sleep(Constants.ONE_MILLI); List jobs = new ArrayList<>(); diff --git a/rqueue-spring-boot-starter/src/test/java/com/github/sonus21/rqueue/spring/boot/tests/integration/ReactiveWebViewTest.java b/rqueue-spring-boot-starter/src/test/java/com/github/sonus21/rqueue/spring/boot/tests/integration/ReactiveWebViewTest.java index bcfa6573..94f5a03b 100644 --- a/rqueue-spring-boot-starter/src/test/java/com/github/sonus21/rqueue/spring/boot/tests/integration/ReactiveWebViewTest.java +++ b/rqueue-spring-boot-starter/src/test/java/com/github/sonus21/rqueue/spring/boot/tests/integration/ReactiveWebViewTest.java @@ -30,9 +30,9 @@ import org.junit.jupiter.api.TestInstance.Lifecycle; import org.junit.jupiter.api.condition.EnabledIfEnvironmentVariable; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.web.reactive.AutoConfigureWebTestClient; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; +import org.springframework.boot.webtestclient.autoconfigure.AutoConfigureWebTestClient; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.TestPropertySource; import org.springframework.test.web.reactive.server.FluxExchangeResult; diff --git a/rqueue-spring-boot-starter/src/test/java/com/github/sonus21/rqueue/spring/boot/tests/unit/RqueueMetricsAutoConfigTest.java b/rqueue-spring-boot-starter/src/test/java/com/github/sonus21/rqueue/spring/boot/tests/unit/RqueueMetricsAutoConfigTest.java index 67ee47df..da2f64e9 100644 --- a/rqueue-spring-boot-starter/src/test/java/com/github/sonus21/rqueue/spring/boot/tests/unit/RqueueMetricsAutoConfigTest.java +++ b/rqueue-spring-boot-starter/src/test/java/com/github/sonus21/rqueue/spring/boot/tests/unit/RqueueMetricsAutoConfigTest.java @@ -29,7 +29,7 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.reflect.FieldUtils; import org.junit.jupiter.api.Test; -import org.springframework.boot.actuate.autoconfigure.metrics.MetricsProperties; +import org.springframework.boot.micrometer.metrics.autoconfigure.MetricsProperties; @SpringBootUnitTest @Slf4j diff --git a/rqueue-spring-common-test/src/main/java/com/github/sonus21/rqueue/test/MessageListener.java b/rqueue-spring-common-test/src/main/java/com/github/sonus21/rqueue/test/MessageListener.java index 95f5413c..49f58c65 100644 --- a/rqueue-spring-common-test/src/main/java/com/github/sonus21/rqueue/test/MessageListener.java +++ b/rqueue-spring-common-test/src/main/java/com/github/sonus21/rqueue/test/MessageListener.java @@ -16,7 +16,6 @@ package com.github.sonus21.rqueue.test; -import com.fasterxml.jackson.core.JsonProcessingException; import com.github.sonus21.rqueue.annotation.RqueueListener; import com.github.sonus21.rqueue.config.RqueueConfig; import com.github.sonus21.rqueue.core.RqueueMessage; @@ -40,6 +39,7 @@ import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledThreadPoolExecutor; import java.util.concurrent.TimeUnit; +import tools.jackson.core.JacksonException; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -266,7 +266,7 @@ public void onMessageReservationRequestDeadLetterQueue( } @RqueueListener(value = "${list.email.queue.name}", active = "${list.email.queue.enabled}") - public void onMessageEmailList(List emailList) throws JsonProcessingException { + public void onMessageEmailList(List emailList) throws JacksonException { log.info("onMessageEmailList {}", emailList); String consumedId = UUID.randomUUID().toString(); for (Email email : emailList) { diff --git a/rqueue-spring-common-test/src/main/java/com/github/sonus21/rqueue/test/UserBannedMessageListener.java b/rqueue-spring-common-test/src/main/java/com/github/sonus21/rqueue/test/UserBannedMessageListener.java index 1b4e43ef..a5f3a4dc 100644 --- a/rqueue-spring-common-test/src/main/java/com/github/sonus21/rqueue/test/UserBannedMessageListener.java +++ b/rqueue-spring-common-test/src/main/java/com/github/sonus21/rqueue/test/UserBannedMessageListener.java @@ -16,7 +16,6 @@ package com.github.sonus21.rqueue.test; -import com.fasterxml.jackson.core.JsonProcessingException; import com.github.sonus21.rqueue.annotation.RqueueHandler; import com.github.sonus21.rqueue.annotation.RqueueListener; import com.github.sonus21.rqueue.test.dto.UserBanned; @@ -26,6 +25,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; +import tools.jackson.core.JacksonException; @RqueueListener(value = "${user.banned.queue.name}", active = "${user.banned.queue.active}") @Slf4j @@ -40,25 +40,25 @@ public class UserBannedMessageListener { private String userBannedQueue; @RqueueHandler - public void handleMessage1(UserBanned userBanned) throws JsonProcessingException { + public void handleMessage1(UserBanned userBanned) throws JacksonException { consumedMessageStore.save(userBanned, "handleMessage1", userBannedQueue); log.info("handleMessage1 {}", userBanned); } @RqueueHandler - public void handleMessage2(UserBanned userBanned) throws JsonProcessingException { + public void handleMessage2(UserBanned userBanned) throws JacksonException { consumedMessageStore.save(userBanned, "handleMessage2", userBannedQueue); log.info("handleMessage2 {}", userBanned); } @RqueueHandler(primary = true) - public void handleMessagePrimary(UserBanned userBanned) throws JsonProcessingException { + public void handleMessagePrimary(UserBanned userBanned) throws JacksonException { consumedMessageStore.save(userBanned, "handleMessagePrimary", userBannedQueue); log.info("handleMessagePrimary {}", userBanned); } @RqueueHandler - public void handleUserBanned(UserBanned userBanned) throws JsonProcessingException { + public void handleUserBanned(UserBanned userBanned) throws JacksonException { consumedMessageStore.save(userBanned, "handleUserBanned", userBannedQueue); log.info("handleUserBanned {}", userBanned); } diff --git a/rqueue-spring-common-test/src/main/java/com/github/sonus21/rqueue/test/application/ApplicationBasicConfiguration.java b/rqueue-spring-common-test/src/main/java/com/github/sonus21/rqueue/test/application/ApplicationBasicConfiguration.java index 61ace1e8..cd4849fb 100644 --- a/rqueue-spring-common-test/src/main/java/com/github/sonus21/rqueue/test/application/ApplicationBasicConfiguration.java +++ b/rqueue-spring-common-test/src/main/java/com/github/sonus21/rqueue/test/application/ApplicationBasicConfiguration.java @@ -17,7 +17,6 @@ package com.github.sonus21.rqueue.test.application; import com.athaydes.javanna.Javanna; -import com.fasterxml.jackson.databind.ObjectMapper; import com.github.sonus21.junit.BootstrapRedis; import com.github.sonus21.junit.RedisBootstrapperBase; import com.github.sonus21.rqueue.utils.SerializationUtils; @@ -31,6 +30,7 @@ import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType; import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter; +import tools.jackson.databind.ObjectMapper; @Slf4j public abstract class ApplicationBasicConfiguration extends RedisBootstrapperBase { diff --git a/rqueue-spring-common-test/src/main/java/com/github/sonus21/rqueue/test/common/SpringTestBase.java b/rqueue-spring-common-test/src/main/java/com/github/sonus21/rqueue/test/common/SpringTestBase.java index 4c6ab889..340d07d3 100644 --- a/rqueue-spring-common-test/src/main/java/com/github/sonus21/rqueue/test/common/SpringTestBase.java +++ b/rqueue-spring-common-test/src/main/java/com/github/sonus21/rqueue/test/common/SpringTestBase.java @@ -16,7 +16,6 @@ package com.github.sonus21.rqueue.test.common; -import com.fasterxml.jackson.databind.ObjectMapper; import com.github.sonus21.TestBase; import com.github.sonus21.rqueue.common.RqueueRedisTemplate; import com.github.sonus21.rqueue.config.RqueueConfig; @@ -27,6 +26,8 @@ import com.github.sonus21.rqueue.core.RqueueMessage; import com.github.sonus21.rqueue.core.RqueueMessageEnqueuer; import com.github.sonus21.rqueue.core.RqueueMessageManager; +import com.github.sonus21.rqueue.core.RqueueMessageManager; +import com.github.sonus21.rqueue.core.RqueueMessageManager; import com.github.sonus21.rqueue.core.RqueueMessageTemplate; import com.github.sonus21.rqueue.core.support.RqueueMessageUtils; import com.github.sonus21.rqueue.dao.RqueueJobDao; @@ -53,6 +54,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; +import tools.jackson.databind.ObjectMapper; @Slf4j public abstract class SpringTestBase extends TestBase { diff --git a/rqueue-spring-common-test/src/main/java/com/github/sonus21/rqueue/test/common/SpringWebTestBase.java b/rqueue-spring-common-test/src/main/java/com/github/sonus21/rqueue/test/common/SpringWebTestBase.java index a2d71594..1d576be1 100644 --- a/rqueue-spring-common-test/src/main/java/com/github/sonus21/rqueue/test/common/SpringWebTestBase.java +++ b/rqueue-spring-common-test/src/main/java/com/github/sonus21/rqueue/test/common/SpringWebTestBase.java @@ -16,7 +16,6 @@ package com.github.sonus21.rqueue.test.common; -import com.fasterxml.jackson.databind.ObjectMapper; import org.junit.jupiter.api.BeforeEach; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; @@ -26,6 +25,7 @@ import org.springframework.web.context.WebApplicationContext; import org.springframework.web.reactive.function.client.WebClient; import org.springframework.web.server.adapter.WebHttpHandlerBuilder; +import tools.jackson.databind.ObjectMapper; public abstract class SpringWebTestBase extends SpringTestBase { diff --git a/rqueue-spring-common-test/src/main/java/com/github/sonus21/rqueue/test/service/ConsumedMessageStore.java b/rqueue-spring-common-test/src/main/java/com/github/sonus21/rqueue/test/service/ConsumedMessageStore.java index 135e2f86..df3dbc2c 100644 --- a/rqueue-spring-common-test/src/main/java/com/github/sonus21/rqueue/test/service/ConsumedMessageStore.java +++ b/rqueue-spring-common-test/src/main/java/com/github/sonus21/rqueue/test/service/ConsumedMessageStore.java @@ -16,12 +16,9 @@ package com.github.sonus21.rqueue.test.service; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; import com.github.sonus21.rqueue.test.dto.BaseQueueMessage; import com.github.sonus21.rqueue.test.entity.ConsumedMessage; import com.github.sonus21.rqueue.test.repository.ConsumedMessageRepository; -import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.HashMap; @@ -33,6 +30,8 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import tools.jackson.core.JacksonException; +import tools.jackson.databind.ObjectMapper; @Service @RequiredArgsConstructor(onConstructor = @__(@Autowired)) @@ -47,7 +46,7 @@ public void deleteAll() { } public void save(BaseQueueMessage message, Object tag, String queueName) - throws JsonProcessingException { + throws JacksonException { log.info("Queue '{}' Message: {} Tag: '{}'", queueName, message, tag); String tagStr; if (tag == null) { @@ -91,7 +90,7 @@ public Map getMessages(Collection messageIds, Class tC try { T value = objectMapper.readValue(consumedMessage.getMessage(), tClass); idToMessage.put(consumedMessage.getMessageId(), value); - } catch (JsonProcessingException e) { + } catch (JacksonException e) { e.printStackTrace(); } }); diff --git a/rqueue-spring-common-test/src/main/java/com/github/sonus21/rqueue/test/tests/RetryTests.java b/rqueue-spring-common-test/src/main/java/com/github/sonus21/rqueue/test/tests/RetryTests.java index 343ab283..2e537d58 100644 --- a/rqueue-spring-common-test/src/main/java/com/github/sonus21/rqueue/test/tests/RetryTests.java +++ b/rqueue-spring-common-test/src/main/java/com/github/sonus21/rqueue/test/tests/RetryTests.java @@ -22,7 +22,6 @@ import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertTrue; -import com.fasterxml.jackson.core.JsonProcessingException; import com.github.sonus21.rqueue.core.RqueueMessage; import com.github.sonus21.rqueue.exception.TimedOutException; import com.github.sonus21.rqueue.test.common.SpringTestBase; @@ -33,6 +32,7 @@ import com.github.sonus21.rqueue.test.entity.ConsumedMessage; import java.util.List; import lombok.extern.slf4j.Slf4j; +import tools.jackson.core.JacksonException; @Slf4j public class RetryTests extends SpringTestBase { @@ -133,7 +133,7 @@ public void verifySimpleTaskExecution() throws TimedOutException { } public void verifyMessageIsConsumedByDeadLetterQueueListener() - throws TimedOutException, JsonProcessingException { + throws TimedOutException, JacksonException { cleanQueue(reservationRequestQueue); cleanQueue(reservationRequestDeadLetterQueue); ReservationRequest request = ReservationRequest.newInstance(); diff --git a/rqueue-spring-common-test/src/main/java/com/github/sonus21/rqueue/test/util/TestMessageConverterProvider.java b/rqueue-spring-common-test/src/main/java/com/github/sonus21/rqueue/test/util/TestMessageConverterProvider.java index 38200e91..b5e184e5 100644 --- a/rqueue-spring-common-test/src/main/java/com/github/sonus21/rqueue/test/util/TestMessageConverterProvider.java +++ b/rqueue-spring-common-test/src/main/java/com/github/sonus21/rqueue/test/util/TestMessageConverterProvider.java @@ -17,13 +17,13 @@ package com.github.sonus21.rqueue.test.util; import com.github.sonus21.rqueue.converter.MessageConverterProvider; -import org.springframework.messaging.converter.MappingJackson2MessageConverter; +import org.springframework.messaging.converter.JacksonJsonMessageConverter; import org.springframework.messaging.converter.MessageConverter; public class TestMessageConverterProvider implements MessageConverterProvider { @Override public MessageConverter getConverter() { - return new MappingJackson2MessageConverter(); + return new JacksonJsonMessageConverter(); } } diff --git a/rqueue-spring-example/build.gradle b/rqueue-spring-example/build.gradle index c05b5edc..e8c0c7cd 100644 --- a/rqueue-spring-example/build.gradle +++ b/rqueue-spring-example/build.gradle @@ -2,7 +2,9 @@ plugins { id "application" } -mainClassName = "rqueue.spring.example.Main" +application { + mainClass = "rqueue.spring.example.Main" +} dependencies { diff --git a/rqueue-spring-example/src/main/java/rqueue/spring/example/AppConfig.java b/rqueue-spring-example/src/main/java/rqueue/spring/example/AppConfig.java index 9d64d7fe..dd7211b9 100644 --- a/rqueue-spring-example/src/main/java/rqueue/spring/example/AppConfig.java +++ b/rqueue-spring-example/src/main/java/rqueue/spring/example/AppConfig.java @@ -18,7 +18,7 @@ import com.github.sonus21.rqueue.spring.EnableRqueue; import com.github.sonus21.rqueue.spring.RqueueMetricsProperties; -import io.micrometer.prometheus.PrometheusMeterRegistry; +import io.micrometer.prometheusmetrics.PrometheusMeterRegistry; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; diff --git a/rqueue-spring-example/src/main/java/rqueue/spring/example/Controller.java b/rqueue-spring-example/src/main/java/rqueue/spring/example/Controller.java index 7e36d27c..e57d8c8b 100644 --- a/rqueue-spring-example/src/main/java/rqueue/spring/example/Controller.java +++ b/rqueue-spring-example/src/main/java/rqueue/spring/example/Controller.java @@ -18,7 +18,7 @@ import com.github.sonus21.rqueue.core.RqueueMessageEnqueuer; import com.github.sonus21.rqueue.utils.StringUtils; -import io.micrometer.prometheus.PrometheusMeterRegistry; +import io.micrometer.prometheusmetrics.PrometheusMeterRegistry; import java.util.UUID; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; diff --git a/rqueue-spring/src/test/java/com/github/sonus21/rqueue/spring/app/SpringApp.java b/rqueue-spring/src/test/java/com/github/sonus21/rqueue/spring/app/SpringApp.java index 427323bc..c4d847b2 100644 --- a/rqueue-spring/src/test/java/com/github/sonus21/rqueue/spring/app/SpringApp.java +++ b/rqueue-spring/src/test/java/com/github/sonus21/rqueue/spring/app/SpringApp.java @@ -23,8 +23,8 @@ import com.github.sonus21.rqueue.test.DeleteMessageListener; import com.github.sonus21.rqueue.test.application.BaseApplication; import io.micrometer.core.instrument.Tags; -import io.micrometer.prometheus.PrometheusConfig; -import io.micrometer.prometheus.PrometheusMeterRegistry; +import io.micrometer.prometheusmetrics.PrometheusConfig; +import io.micrometer.prometheusmetrics.PrometheusMeterRegistry; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; diff --git a/rqueue-spring/src/test/java/com/github/sonus21/rqueue/spring/services/FailureDetailRepositoryImpl.java b/rqueue-spring/src/test/java/com/github/sonus21/rqueue/spring/services/FailureDetailRepositoryImpl.java index 39bddb92..31aa00cb 100644 --- a/rqueue-spring/src/test/java/com/github/sonus21/rqueue/spring/services/FailureDetailRepositoryImpl.java +++ b/rqueue-spring/src/test/java/com/github/sonus21/rqueue/spring/services/FailureDetailRepositoryImpl.java @@ -46,9 +46,9 @@ public S save(S entity) { Session session = entityManager.unwrap(Session.class); Transaction tx = session.beginTransaction(); if (entity.getFailureCount() == 0) { - session.save(entity); + session.persist(entity); } else { - session.update(entity); + session.merge(entity); } tx.commit(); return entity; diff --git a/rqueue-test-util/build.gradle b/rqueue-test-util/build.gradle index f543d3c8..7ef6db9a 100644 --- a/rqueue-test-util/build.gradle +++ b/rqueue-test-util/build.gradle @@ -27,7 +27,7 @@ dependencies { api "org.springframework.data:spring-data-jpa:${springDataVersion}" // https://mvnrepository.com/artifact/org.hibernate/hibernate-core-jakarta - api "org.hibernate:hibernate-core-jakarta:${hibernateCoreVersion}" + api "org.hibernate.orm:hibernate-core:${hibernateCoreVersion}" api "com.athaydes.javanna:javanna:1.1" }