Skip to content

Commit

Permalink
Merge pull request #10935 from geoand/#10928
Browse files Browse the repository at this point in the history
Unregister Vert.x codecs in dev-mode
  • Loading branch information
gastaldi authored Jul 23, 2020
2 parents 05a0ec5 + 0e528df commit 99c531d
Show file tree
Hide file tree
Showing 3 changed files with 81 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
package io.quarkus.vertx.devmode;

import java.util.UUID;
import java.util.concurrent.CountDownLatch;

import javax.enterprise.context.ApplicationScoped;
import javax.enterprise.event.Observes;
import javax.inject.Inject;

import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.spec.JavaArchive;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;

import io.quarkus.test.QuarkusDevModeTest;
import io.restassured.RestAssured;
import io.vertx.core.Vertx;
import io.vertx.ext.web.Router;

public class ConsumeUuidEventHotReloadTest {

@RegisterExtension
static final QuarkusDevModeTest test = new QuarkusDevModeTest()
.setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class)
.addClasses(UuidMessageConsumer.class, BeanDeployingAVerticleFromInstance.class));

private static final String SAMPLE_UUID = "38400000-8cf0-11bd-b23e-10b96e4ef00d";

@Test
public void testUuidMessageConsumption() {
String resp = RestAssured.get("/").asString();
Assertions.assertEquals("test-" + SAMPLE_UUID, resp);
test.modifySourceFile(UuidMessageConsumer.class, data -> data.replace("test-", "other-"));
resp = RestAssured.get("/").asString();
Assertions.assertEquals("other-" + SAMPLE_UUID, resp);
String resp2 = RestAssured.get("/").asString();
Assertions.assertEquals(resp, resp2);

}

@ApplicationScoped
public static class BeanDeployingAVerticleFromInstance {
@Inject
Vertx vertx;

public void init(@Observes Router router) throws InterruptedException {
CountDownLatch latch = new CountDownLatch(1);
vertx.deployVerticle(new MyVerticle(),
ar -> latch.countDown());
router.get("/").handler(rc -> vertx.eventBus().<String> request("event", UUID.fromString(SAMPLE_UUID),
ar -> rc.response().end(ar.result().body())));
latch.await();
}
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package io.quarkus.vertx.devmode;

import java.util.UUID;

import javax.enterprise.context.ApplicationScoped;

import io.quarkus.vertx.ConsumeEvent;

@ApplicationScoped
public class UuidMessageConsumer {

@ConsumeEvent(value = "event", blocking = true)
public String handleUuid(UUID uuid) {
return "test-" + uuid.toString();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
import io.quarkus.runtime.RuntimeValue;
import io.quarkus.runtime.ShutdownContext;
import io.quarkus.runtime.annotations.Recorder;
import io.quarkus.runtime.configuration.ProfileManager;
import io.quarkus.vertx.ConsumeEvent;
import io.vertx.core.AsyncResult;
import io.vertx.core.Handler;
Expand Down Expand Up @@ -144,12 +145,19 @@ private EventConsumerInvoker createInvoker(String invokerClassName) {
@SuppressWarnings("unchecked")
private void registerCodecs(Map<Class<?>, Class<?>> codecByClass) {
EventBus eventBus = vertx.eventBus();
boolean isDevMode = ProfileManager.getLaunchMode() == LaunchMode.DEVELOPMENT;
for (Map.Entry<Class<?>, Class<?>> codecEntry : codecByClass.entrySet()) {
Class<?> target = codecEntry.getKey();
Class<?> codec = codecEntry.getValue();
try {
if (MessageCodec.class.isAssignableFrom(codec)) {
MessageCodec messageCodec = (MessageCodec) codec.newInstance();
if (isDevMode) {
// we need to unregister the codecs because in dev mode vert.x is not reloaded
// which means that if we don't unregister, we get an exception mentioning that the
// codec has already been registered
eventBus.unregisterDefaultCodec(target);
}
eventBus.registerDefaultCodec(target, messageCodec);
} else {
LOGGER.error(String.format("The codec %s does not inherit from MessageCodec ", target.toString()));
Expand Down

0 comments on commit 99c531d

Please sign in to comment.