Skip to content

Commit

Permalink
Fixes for 4.0.0-SNAPSHOT (#210)
Browse files Browse the repository at this point in the history
Accept API changes
Switch ConversionContext from Generic

* Caffeine must be an API dependency
* Micronaut test 4.0.0 and Kotest 5
* Remove Caffeine and java 17 fixes
* Fix for latest 4.0.0

Co-authored-by: Sergio del Amo <sergio.delamo@softamo.com>
  • Loading branch information
timyates and sdelamo authored Dec 14, 2022
1 parent 5d26cd7 commit 6dfda17
Show file tree
Hide file tree
Showing 24 changed files with 177 additions and 63 deletions.
Original file line number Diff line number Diff line change
@@ -1,17 +1,3 @@
plugins {
id "io.micronaut.build.internal.mqtt-base"
}
configurations.all {
resolutionStrategy.dependencySubstitution {
substitute(module("org.codehaus.groovy:groovy"))
.using(module("org.apache.groovy:groovy:4.0.6"))
}
}

configurations.all {
resolutionStrategy.eachDependency { details ->
if (details.requested.group == 'org.spockframework') {
details.useVersion "2.3-groovy-4.0"
}
}
}
130 changes: 130 additions & 0 deletions config/accepted-api-changes.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,135 @@
"type": "io.micronaut.mqtt.serdes.JsonMqttPayloadSerDes",
"member": "Constructor io.micronaut.mqtt.serdes.JsonMqttPayloadSerDes(com.fasterxml.jackson.databind.ObjectMapper)",
"reason": "Removed deprecated constructor for Micronaut 4.0.x"
},
{
"type": "io.micronaut.mqtt.v3.$BeanConfiguration",
"member": "Field $ANNOTATION_METADATA",
"reason": "Micronaut 4.0.0 Bean Definition changes"
},
{
"type": "io.micronaut.mqtt.v3.$BeanConfiguration",
"member": "Constructor io.micronaut.mqtt.v3.$BeanConfiguration()",
"reason": "Micronaut 4.0.0 Bean Definition changes"
},
{
"type": "io.micronaut.mqtt.v3.$BeanConfiguration",
"member": "Implemented interface io.micronaut.core.annotation.AnnotationSource",
"reason": "Micronaut 4.0.0 Bean Definition changes"
},
{
"type": "io.micronaut.mqtt.v3.$BeanConfiguration",
"member": "Implemented interface io.micronaut.inject.BeanContextConditional",
"reason": "Micronaut 4.0.0 Bean Definition changes"
},
{
"type": "io.micronaut.mqtt.v3.$BeanConfiguration",
"member": "Implemented interface io.micronaut.core.annotation.AnnotationMetadataProvider",
"reason": "Micronaut 4.0.0 Bean Definition changes"
},
{
"type": "io.micronaut.mqtt.v3.$BeanConfiguration",
"member": "Implemented interface io.micronaut.inject.BeanConfiguration",
"reason": "Micronaut 4.0.0 Bean Definition changes"
},
{
"type": "io.micronaut.mqtt.v3.intercept.$MqttIntroductionAdvice$Definition$Reference",
"member": "Field $ANNOTATION_METADATA",
"reason": "Micronaut 4.0.0 Bean Definition changes"
},
{
"type": "io.micronaut.mqtt.v3.intercept.$MqttIntroductionAdvice$Definition$Reference",
"member": "Constructor io.micronaut.mqtt.v3.intercept.$MqttIntroductionAdvice$Definition$Reference()",
"reason": "Micronaut 4.0.0 Bean Definition changes"
},
{
"type": "io.micronaut.mqtt.v3.intercept.$MqttIntroductionAdvice$Definition$Reference",
"member": "Implemented interface io.micronaut.core.annotation.AnnotationSource",
"reason": "Micronaut 4.0.0 Bean Definition changes"
},
{
"type": "io.micronaut.mqtt.v3.intercept.$MqttIntroductionAdvice$Definition$Reference",
"member": "Implemented interface io.micronaut.inject.BeanContextConditional",
"reason": "Micronaut 4.0.0 Bean Definition changes"
},
{
"type": "io.micronaut.mqtt.v3.intercept.$MqttIntroductionAdvice$Definition$Reference",
"member": "Implemented interface io.micronaut.core.annotation.AnnotationMetadataProvider",
"reason": "Micronaut 4.0.0 Bean Definition changes"
},
{
"type": "io.micronaut.mqtt.v3.intercept.$MqttIntroductionAdvice$Definition$Reference",
"member": "Implemented interface io.micronaut.inject.BeanType",
"reason": "Micronaut 4.0.0 Bean Definition changes"
},
{
"type": "io.micronaut.mqtt.v3.intercept.$MqttIntroductionAdvice$Definition$Reference",
"member": "Implemented interface io.micronaut.inject.BeanDefinitionReference",
"reason": "Micronaut 4.0.0 Bean Definition changes"
},
{
"type": "io.micronaut.mqtt.v5.$BeanConfiguration",
"member": "Field $ANNOTATION_METADATA",
"reason": "Micronaut 4.0.0 Bean Definition changes"
},
{
"type": "io.micronaut.mqtt.v5.$BeanConfiguration",
"member": "Constructor io.micronaut.mqtt.v5.$BeanConfiguration()",
"reason": "Micronaut 4.0.0 Bean Definition changes"
},
{
"type": "io.micronaut.mqtt.v5.$BeanConfiguration",
"member": "Implemented interface io.micronaut.core.annotation.AnnotationSource",
"reason": "Micronaut 4.0.0 Bean Definition changes"
},
{
"type": "io.micronaut.mqtt.v5.$BeanConfiguration",
"member": "Implemented interface io.micronaut.inject.BeanContextConditional",
"reason": "Micronaut 4.0.0 Bean Definition changes"
},
{
"type": "io.micronaut.mqtt.v5.$BeanConfiguration",
"member": "Implemented interface io.micronaut.core.annotation.AnnotationMetadataProvider",
"reason": "Micronaut 4.0.0 Bean Definition changes"
},
{
"type": "io.micronaut.mqtt.v5.$BeanConfiguration",
"member": "Implemented interface io.micronaut.inject.BeanConfiguration",
"reason": "Micronaut 4.0.0 Bean Definition changes"
},
{
"type": "io.micronaut.mqtt.v5.intercept.$MqttIntroductionAdvice$Definition$Reference",
"member": "Field $ANNOTATION_METADATA",
"reason": "Micronaut 4.0.0 Bean Definition changes"
},
{
"type": "io.micronaut.mqtt.v5.intercept.$MqttIntroductionAdvice$Definition$Reference",
"member": "Constructor io.micronaut.mqtt.v5.intercept.$MqttIntroductionAdvice$Definition$Reference()",
"reason": "Micronaut 4.0.0 Bean Definition changes"
},
{
"type": "io.micronaut.mqtt.v5.intercept.$MqttIntroductionAdvice$Definition$Reference",
"member": "Implemented interface io.micronaut.core.annotation.AnnotationSource",
"reason": "Micronaut 4.0.0 Bean Definition changes"
},
{
"type": "io.micronaut.mqtt.v5.intercept.$MqttIntroductionAdvice$Definition$Reference",
"member": "Implemented interface io.micronaut.inject.BeanContextConditional",
"reason": "Micronaut 4.0.0 Bean Definition changes"
},
{
"type": "io.micronaut.mqtt.v5.intercept.$MqttIntroductionAdvice$Definition$Reference",
"member": "Implemented interface io.micronaut.core.annotation.AnnotationMetadataProvider",
"reason": "Micronaut 4.0.0 Bean Definition changes"
},
{
"type": "io.micronaut.mqtt.v5.intercept.$MqttIntroductionAdvice$Definition$Reference",
"member": "Implemented interface io.micronaut.inject.BeanType",
"reason": "Micronaut 4.0.0 Bean Definition changes"
},
{
"type": "io.micronaut.mqtt.v5.intercept.$MqttIntroductionAdvice$Definition$Reference",
"member": "Implemented interface io.micronaut.inject.BeanDefinitionReference",
"reason": "Micronaut 4.0.0 Bean Definition changes"
}
]
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ projectGroup=io.micronaut.mqtt

micronautDocsVersion=2.0.0
micronautVersion=4.0.0-SNAPSHOT
micronautTestVersion=3.7.0
micronautTestVersion=4.0.0-SNAPSHOT

groovyVersion=4.0.6
spockVersion=2.3-groovy-4.0
Expand Down
8 changes: 6 additions & 2 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,21 @@ managed-mqttv5 = "1.2.5"

awaitility = "4.2.0"
bcpkix-jdk15on = "1.70"
caffeine = '3.1.2'
kotlin = "1.7.21"
testcontainers = "1.17.6"

micronaut-serde = "2.0.0-SNAPSHOT"
micronaut-test = "4.0.0-SNAPSHOT"

[libraries]
managed-paho-mqttv3-client = { module = "org.eclipse.paho:org.eclipse.paho.client.mqttv3", version.ref = "managed-mqttv3" }
managed-paho-mqttv5-client = { module = "org.eclipse.paho:org.eclipse.paho.mqttv5.client", version.ref = "managed-mqttv5" }

micronaut-serde = { module = "io.micronaut.serde:micronaut-serde-bom", version.ref = "micronaut-serde" }
micronaut-test = { module = "io.micronaut.test:micronaut-test-bom", version.ref = "micronaut-test" }

awaitility = { module = "org.awaitility:awaitility", version.ref = "awaitility" }
bcpkix-jdk15on = { module = "org.bouncycastle:bcpkix-jdk15on", version.ref = "bcpkix-jdk15on" }
caffeine = { module = 'com.github.ben-manes.caffeine:caffeine', version.ref = 'caffeine' }
junit-jupiter-api = { module = "org.junit.jupiter:junit-jupiter-api" }
junit-jupiter-engine = { module = "org.junit.jupiter:junit-jupiter-engine" }
reactor-core = { module = "io.projectreactor:reactor-core" }
Expand Down
2 changes: 1 addition & 1 deletion mqtt-core/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ dependencies {
api(mn.micronaut.aop)
api(mn.micronaut.runtime)
api(mn.micronaut.messaging)
implementation(libs.caffeine)
implementation(mnSerde.micronaut.serde.jackson)
implementation(libs.reactor.core)
compileOnly(libs.kotlin.stdlib.jdk8)
}
Original file line number Diff line number Diff line change
Expand Up @@ -54,15 +54,13 @@ public DefaultMqttBinderRegistry(FallbackMqttBinder<?> fallbackMqttBinder,
MqttBinder<?, ?>... binders) {
this.fallbackMqttBinder = fallbackMqttBinder;
if (ArrayUtils.isNotEmpty(binders)) {
for (MqttBinder binder : binders) {
if (binder instanceof AnnotatedMqttBinder) {
AnnotatedMqttBinder<?, ?> annotatedBinder = (AnnotatedMqttBinder<?, ?>) binder;
for (MqttBinder<?, ?> binder : binders) {
if (binder instanceof AnnotatedMqttBinder<?, ?> annotatedBinder) {
byAnnotation.put(
annotatedBinder.getAnnotationType(),
binder
);
} else if (binder instanceof TypedMqttBinder) {
TypedMqttBinder<?, ?> typedBinder = (TypedMqttBinder<?, ?>) binder;
} else if (binder instanceof TypedMqttBinder<?, ?> typedBinder) {
byType.put(
typedBinder.getArgumentType().typeHashCode(),
typedBinder
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,9 +35,9 @@
@Singleton
public class IdMqttBinder implements AnnotatedMqttBinder<MqttBindingContext<?>, Id> {

private final ConversionService<?> conversionService;
private final ConversionService conversionService;

public IdMqttBinder(ConversionService<?> conversionService) {
public IdMqttBinder(ConversionService conversionService) {
this.conversionService = conversionService;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,9 +34,9 @@
@Singleton
public class QosMqttBinder implements AnnotatedMqttBinder<MqttBindingContext<?>, Qos> {

private final ConversionService<?> conversionService;
private final ConversionService conversionService;

public QosMqttBinder(ConversionService<?> conversionService) {
public QosMqttBinder(ConversionService conversionService) {
this.conversionService = conversionService;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,9 +34,9 @@
@Singleton
public class RetainedMqttBinder implements AnnotatedMqttBinder<MqttBindingContext<?>, Retained> {

private final ConversionService<?> conversionService;
private final ConversionService conversionService;

public RetainedMqttBinder(ConversionService<?> conversionService) {
public RetainedMqttBinder(ConversionService conversionService) {
this.conversionService = conversionService;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,9 +34,9 @@
@Singleton
public class TopicMqttBinder implements AnnotatedMqttBinder<MqttBindingContext<?>, Topic> {

private final ConversionService<?> conversionService;
private final ConversionService conversionService;

public TopicMqttBinder(ConversionService<?> conversionService) {
public TopicMqttBinder(ConversionService conversionService) {
this.conversionService = conversionService;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,6 @@
import io.micronaut.aop.InterceptedMethod;
import io.micronaut.aop.MethodInterceptor;
import io.micronaut.aop.MethodInvocationContext;
import com.github.benmanes.caffeine.cache.Cache;
import com.github.benmanes.caffeine.cache.Caffeine;
import io.micronaut.core.annotation.AnnotationValue;
import io.micronaut.core.type.Argument;
import io.micronaut.inject.ExecutableMethod;
Expand All @@ -37,6 +35,8 @@

import java.lang.annotation.Annotation;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.atomic.AtomicReference;
import java.util.function.Consumer;
Expand All @@ -53,7 +53,7 @@ public abstract class AbstractMqttIntroductionAdvice<L, M> implements MethodInte

private static final Logger LOG = LoggerFactory.getLogger(AbstractMqttIntroductionAdvice.class);

private final Cache<ExecutableMethod<?, ?>, MqttPublisherState> publisherCache = Caffeine.newBuilder().build();
private final ConcurrentMap<ExecutableMethod<?, ?>, MqttPublisherState> publisherCache = new ConcurrentHashMap<>();
private final MqttBinderRegistry binderRegistry;

public AbstractMqttIntroductionAdvice(MqttBinderRegistry binderRegistry) {
Expand All @@ -71,17 +71,17 @@ public Object intercept(MethodInvocationContext<Object, Object> context) {

switch (interceptedMethod.resultType()) {
case PUBLISHER:
return interceptedMethod.handleResult(Flux.create(emitter -> {
publish(publisherState, context, createListener(emitter::complete, emitter::error));
}, FluxSink.OverflowStrategy.ERROR));
return interceptedMethod.handleResult(Flux.create(emitter ->
publish(publisherState, context, createListener(emitter::complete, emitter::error)), FluxSink.OverflowStrategy.ERROR)
);
case COMPLETION_STAGE:
CompletableFuture<Void> future = new CompletableFuture<>();
publish(publisherState, context, createListener(() -> future.complete(null), future::completeExceptionally));
return interceptedMethod.handleResult(future);
case SYNCHRONOUS:
CountDownLatch countDownLatch = new CountDownLatch(1);
AtomicReference<Throwable> error = new AtomicReference<>();
Object token = publish(publisherState, context, createListener(countDownLatch::countDown, (t) -> {
Object token = publish(publisherState, context, createListener(countDownLatch::countDown, t -> {
error.set(t);
countDownLatch.countDown();
}));
Expand Down Expand Up @@ -137,7 +137,7 @@ public Object intercept(MethodInvocationContext<Object, Object> context) {
public abstract Class<? extends Annotation> getRequiredAnnotation();

private MqttPublisherState getPublisherState(MethodInvocationContext<Object, Object> context) {
return publisherCache.get(context.getExecutableMethod(), (method) -> {
return publisherCache.computeIfAbsent(context.getExecutableMethod(), method -> {
MqttPublisherState state = new MqttPublisherState();

method.findAnnotation(Topic.class)
Expand All @@ -146,7 +146,7 @@ private MqttPublisherState getPublisherState(MethodInvocationContext<Object, Obj
topicAnn.intValue("qos").ifPresent(state::setQos);
});
method.findAnnotation(Qos.class)
.ifPresent((av) -> av.intValue().ifPresent(state::setQos));
.ifPresent(av -> av.intValue().ifPresent(state::setQos));
method.findAnnotation(Retained.class)
.flatMap(AnnotationValue::booleanValue)
.ifPresent(state::setRetained);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,19 +1,17 @@
package io.micronaut.mqtt.ssl

import io.micronaut.context.ApplicationContext
import spock.lang.PendingFeature
import spock.util.concurrent.PollingConditions

class SslAuthenticationSpec extends AbstractMQTTTest {

@PendingFeature
void "test product client and listener"() {
ApplicationContext applicationContext = startContext()
PollingConditions conditions = new PollingConditions(timeout: 5)

when:
def productClient = applicationContext.getBean(ProductClient)
productClient.send("quickstart".getBytes())
productClient.send("quickstart".bytes)

ProductListener productListener = applicationContext.getBean(ProductListener)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,13 +41,13 @@
@Singleton
public class MqttPropertyBinder implements AnnotatedMqttBinder<MqttV5BindingContext, MqttProperty> {

private final ConversionService<?> conversionService;
private final ConversionService conversionService;
private final BeanIntrospection<MqttProperties> introspection;

/**
* @param conversionService The conversion service
*/
public MqttPropertyBinder(ConversionService<?> conversionService) {
public MqttPropertyBinder(ConversionService conversionService) {
this.conversionService = conversionService;
this.introspection = BeanIntrospection.getIntrospection(MqttProperties.class);
}
Expand Down
3 changes: 3 additions & 0 deletions settings.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -31,5 +31,8 @@ dependencyResolutionManagement {
}

micronautBuild {
addSnapshotRepository()
importMicronautCatalog()
importMicronautCatalog("micronaut-serde")
importMicronautCatalog("micronaut-test")
}
1 change: 0 additions & 1 deletion test-suite-groovy/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ dependencies {
testImplementation(mn.micronaut.validation)
testImplementation projects.testSuiteUtils
testImplementation projects.mqttv5
testImplementation mn.spock
}

tasks.named('test') {
Expand Down
Loading

0 comments on commit 6dfda17

Please sign in to comment.