Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fixes for 4.0.0-SNAPSHOT #210

Merged
merged 7 commits into from
Dec 14, 2022
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
1 change: 0 additions & 1 deletion gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@ managed-paho-mqttv5-client = { module = "org.eclipse.paho:org.eclipse.paho.mqttv

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(mn.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: 1 addition & 2 deletions test-suite-kotlin/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,10 @@ dependencies {
runtimeOnly mn.logback
api(mn.micronaut.inject)
testAnnotationProcessor(mn.micronaut.inject.java)
testImplementation(mn.micronaut.test.kotest)
testImplementation(mn.micronaut.test.kotest5)

kaptTest(mn.micronaut.inject.java)


testImplementation projects.testSuiteUtils
testImplementation projects.mqttv5
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ import io.micronaut.context.annotation.Requires
@Requires(property = "spec.name", value = "CorrelationSpec")
// tag::clazz[]
@Singleton // <1>
class CorrelationAnnotationBinder(private val conversionService: ConversionService<*>)// <3>
class CorrelationAnnotationBinder(private val conversionService: ConversionService)// <3>
: AnnotatedMqttBinder<MqttV5BindingContext, Correlation> { // <2>

override fun getAnnotationType(): Class<Correlation> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ import io.micronaut.context.annotation.Requires
@Requires(property = "spec.name", value = "ProductInfoSpec")
// tag::clazz[]
@Singleton // <1>
class ProductInfoTypeBinder constructor(private val conversionService: ConversionService<*>) //<3>
class ProductInfoTypeBinder constructor(private val conversionService: ConversionService) //<3>
: TypedMqttBinder<MqttV5BindingContext, ProductInfo> { // <2>

override fun bindTo(context: MqttV5BindingContext, value: ProductInfo, argument: Argument<ProductInfo>) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import io.micronaut.context.annotation.Requires
@Requires(property = "spec.name", value = "ProductInfoSerDesSpec")
// tag::clazz[]
@Singleton // <1>
class ProductInfoSerDes(private val conversionService: ConversionService<*>)// <3>
class ProductInfoSerDes(private val conversionService: ConversionService)// <3>
: MqttPayloadSerDes<ProductInfo> { // <2>

override fun deserialize(payload: ByteArray, argument: Argument<ProductInfo>): ProductInfo? {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,9 @@
@Singleton // <1>
public class CorrelationAnnotationBinder implements AnnotatedMqttBinder<MqttV5BindingContext, Correlation> { // <2>

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

public CorrelationAnnotationBinder(ConversionService<?> conversionService) { // <3>
public CorrelationAnnotationBinder(ConversionService conversionService) { // <3>
this.conversionService = conversionService;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,9 @@
@Singleton // <1>
public class ProductInfoTypeBinder implements TypedMqttBinder<MqttV5BindingContext, ProductInfo> { //<2>

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

ProductInfoTypeBinder(ConversionService<?> conversionService) { //<3>
ProductInfoTypeBinder(ConversionService conversionService) { //<3>
this.conversionService = conversionService;
}

Expand Down
Loading