diff --git a/customer-service/Dockerfile b/customer-service/Dockerfile new file mode 100644 index 0000000..fb066b9 --- /dev/null +++ b/customer-service/Dockerfile @@ -0,0 +1,15 @@ +FROM maven:3.6.3-jdk-11-openj9 AS mvn + +WORKDIR /usr/src/customer-service +COPY pom.xml ./ +RUN mvn package dependency:go-offline # cache dependencies +COPY src ./src +RUN mvn clean package -DskipTests + +FROM openjdk:11 + +EXPOSE 8080 +COPY --from=mvn /usr/src/customer-service/target/runner/meecrowave-core-runner.jar /opt/meecrowave-runner.jar +COPY --from=mvn /usr/src/customer-service/target/customer-service.war /opt/customer-service.war + +ENTRYPOINT ["java", "--illegal-access=permit", "-Djava.net.preferIPv4Stack=true", "-jar", "/opt/meecrowave-runner.jar", "--webapp", "/opt/customer-service.war"] diff --git a/customer-service/pom.xml b/customer-service/pom.xml index 852e26d..5bf8be7 100644 --- a/customer-service/pom.xml +++ b/customer-service/pom.xml @@ -11,26 +11,15 @@ war - 1.8 - 1.8 + 11 + 11 false UTF-8 - 1.2.9 + 1.2.11 - - - - org.jboss.arquillian - arquillian-bom - 1.2.0.Final - import - pom - - - - + customer-service org.apache.maven.plugins @@ -42,14 +31,39 @@ meecrowave-maven-plugin ${meecrowave.version} + + org.apache.maven.plugins + maven-dependency-plugin + + + copy-runner + package + + copy + + + + + org.apache.meecrowave + meecrowave-core + ${meecrowave.version} + runner + + + ${project.build.directory}/runner + true + + + + - org.apache.tomee - javaee-api - 8.0-2 + org.apache.meecrowave + meecrowave-specs-api + ${meecrowave.version} provided @@ -80,47 +94,21 @@ 3.9 - junit - junit - 4.12 - test - - - org.assertj - assertj-core - 3.6.2 - test - - - org.jboss.arquillian.junit - arquillian-junit-container - test - - - org.jboss.shrinkwrap.resolver - shrinkwrap-resolver-impl-maven + org.junit.jupiter + junit-jupiter + 5.7.2 test org.apache.meecrowave - meecrowave-arquillian + meecrowave-junit ${meecrowave.version} test - org.jboss.shrinkwrap.resolver - shrinkwrap-resolver-impl-maven - test - - - org.jboss.shrinkwrap.descriptors - shrinkwrap-descriptors-impl-javaee - test - - - org.apache.meecrowave - meecrowave-arquillian - ${meecrowave.version} + org.assertj + assertj-core + 3.6.2 test @@ -132,7 +120,7 @@ com.fasterxml.jackson.core jackson-databind - 2.10.0 + 2.12.7.1 runtime diff --git a/customer-service/src/main/java/de/openknowledge/sample/customer/application/CustomMediaType.java b/customer-service/src/main/java/de/openknowledge/sample/customer/application/CustomMediaType.java index 52016e8..2ad95a2 100644 --- a/customer-service/src/main/java/de/openknowledge/sample/customer/application/CustomMediaType.java +++ b/customer-service/src/main/java/de/openknowledge/sample/customer/application/CustomMediaType.java @@ -20,7 +20,7 @@ */ public final class CustomMediaType { - public static final String CUSTOMER_V1 = "application/vnd.de.openknowledge.sample.customer.v1+json2"; - public static final String CUSTOMER_V2 = "application/vnd.de.openknowledge.sample.customer.v2+json2"; + public static final String CUSTOMER_V1 = "application/vnd.de.openknowledge.sample.customer.v1+json"; + public static final String CUSTOMER_V2 = "application/vnd.de.openknowledge.sample.customer.v2+json"; } diff --git a/customer-service/src/main/java/de/openknowledge/sample/customer/application/CustomerResource.java b/customer-service/src/main/java/de/openknowledge/sample/customer/application/CustomerResource.java index 80bc895..0aef23a 100644 --- a/customer-service/src/main/java/de/openknowledge/sample/customer/application/CustomerResource.java +++ b/customer-service/src/main/java/de/openknowledge/sample/customer/application/CustomerResource.java @@ -21,6 +21,7 @@ import java.util.logging.Logger; import java.util.stream.Collectors; +import javax.enterprise.context.ApplicationScoped; import javax.inject.Inject; import javax.ws.rs.Consumes; import javax.ws.rs.DELETE; @@ -49,6 +50,7 @@ * A resource that provides access to the {@link Customer} entity. */ @Path("customers") +@ApplicationScoped public class CustomerResource { private static final Logger LOG = Logger.getLogger(CustomerResource.class.getName()); diff --git a/customer-service/src/main/java/de/openknowledge/sample/customer/application/JaxRsActivator.java b/customer-service/src/main/java/de/openknowledge/sample/customer/application/JaxRsActivator.java index 1f51720..df71a3d 100644 --- a/customer-service/src/main/java/de/openknowledge/sample/customer/application/JaxRsActivator.java +++ b/customer-service/src/main/java/de/openknowledge/sample/customer/application/JaxRsActivator.java @@ -15,6 +15,7 @@ */ package de.openknowledge.sample.customer.application; +import javax.enterprise.context.ApplicationScoped; import javax.ws.rs.ApplicationPath; import javax.ws.rs.core.Application; @@ -26,11 +27,13 @@ import org.eclipse.microprofile.openapi.annotations.media.Content; import org.eclipse.microprofile.openapi.annotations.media.Schema; import org.eclipse.microprofile.openapi.annotations.parameters.RequestBody; +import org.eclipse.microprofile.openapi.annotations.servers.Server; /** * JAX-RS Activator */ @ApplicationPath("api") +@ApplicationScoped @OpenAPIDefinition(info = @Info( title = "Customer Service", contact = @Contact( @@ -42,6 +45,7 @@ url = "http://www.apache.org/licenses/LICENSE-2.0"), version = "2", description = "A customer service"), + servers = @Server(url = "http://localhost:8080/api"), components = @Components(requestBodies = @RequestBody(name = "Customer", content = @Content(schema = @Schema(implementation = CustomerResourceType.class))))) public class JaxRsActivator extends Application { diff --git a/customer-service/src/main/webapp/versions/v1.yaml b/customer-service/src/main/webapp/versions/v1.yaml index d4e36a9..ca5d6f3 100644 --- a/customer-service/src/main/webapp/versions/v1.yaml +++ b/customer-service/src/main/webapp/versions/v1.yaml @@ -184,8 +184,10 @@ components: properties: firstName: type: "string" + deprecated: true lastName: type: "string" + deprecated: true emailAddress: type: "string" gender: diff --git a/customer-service/src/test/java/de/openknowledge/sample/customer/application/CustomerResourceV10IntegrationTest.java b/customer-service/src/test/java/de/openknowledge/sample/customer/application/CustomerResourceV10IntegrationTest.java index 8115fea..57fe917 100644 --- a/customer-service/src/test/java/de/openknowledge/sample/customer/application/CustomerResourceV10IntegrationTest.java +++ b/customer-service/src/test/java/de/openknowledge/sample/customer/application/CustomerResourceV10IntegrationTest.java @@ -22,10 +22,7 @@ import java.io.InputStream; import java.io.StringReader; -import java.net.URL; import java.util.List; -import java.util.logging.Level; -import java.util.logging.Logger; import javax.json.Json; import javax.json.JsonObject; @@ -36,62 +33,27 @@ import javax.ws.rs.core.Response.Status; import org.apache.johnzon.jaxrs.jsonb.jaxrs.JsonbJaxrsProvider; -import org.jboss.arquillian.container.test.api.Deployment; -import org.jboss.arquillian.container.test.api.RunAsClient; -import org.jboss.arquillian.junit.Arquillian; -import org.jboss.arquillian.test.api.ArquillianResource; -import org.jboss.shrinkwrap.api.ShrinkWrap; -import org.jboss.shrinkwrap.api.asset.EmptyAsset; -import org.jboss.shrinkwrap.api.spec.WebArchive; -import org.jboss.shrinkwrap.resolver.api.maven.Maven; -import org.jboss.shrinkwrap.resolver.api.maven.PomEquippedResolveStage; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; - -import de.openknowledge.sample.customer.application.v1.CustomerResourceTypeV1; -import de.openknowledge.sample.customer.domain.Customer; -import de.openknowledge.sample.customer.domain.CustomerNotFoundException; -import de.openknowledge.sample.customer.domain.CustomerRepository; -import de.openknowledge.sample.customer.domain.Gender; -import de.openknowledge.sample.customer.domain.Name; -import de.openknowledge.sample.customer.domain.TestCustomers; +import org.apache.meecrowave.Meecrowave; +import org.apache.meecrowave.junit5.MonoMeecrowaveConfig; +import org.apache.meecrowave.testing.ConfigurationInject; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; /** - * Arquillian test class for the rest resource {@link CustomerResource}. + * test class for the rest resource {@link CustomerResource}. */ -@RunAsClient -@RunWith(Arquillian.class) +@MonoMeecrowaveConfig public class CustomerResourceV10IntegrationTest { - private static final Logger LOG = Logger.getLogger(CustomerResourceV10IntegrationTest.class.getName()); - - @Deployment - public static WebArchive createDeployment() { - PomEquippedResolveStage pomFile = Maven.resolver().loadPomFromFile("pom.xml"); - - WebArchive archive = ShrinkWrap.create(WebArchive.class) - .addAsLibraries(pomFile.resolve("org.apache.commons:commons-lang3").withTransitivity().asFile()) - .addPackage(CustomerResourceTypeV1.class.getPackage()) - .addClasses(CustomerResource.class, CustomerResourceType.class, CustomMediaType.class, JaxRsActivator.class) - .addClasses(CustomerMessageBodyReader.class, CustomerMessageBodyWriter.class, CustomerListMessageBodyWriter.class) - .addClasses(Customer.class, Name.class, CustomerRepository.class, CustomerNotFoundException.class, Gender.class) - .addClass(TestCustomers.class) - .addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml"); - - LOG.log(Level.FINE, () -> archive.toString(true)); - return archive; - } - - @ArquillianResource - private URL baseURI; + @ConfigurationInject + private Meecrowave.Builder config; private WebTarget customerListTarget; - @Before + @BeforeEach public void initializeClient() { customerListTarget = ClientBuilder.newClient() .register(JsonbJaxrsProvider.class) - .target(baseURI.toString()) + .target("http://localhost:" + config.getHttpPort()) .path("api/customers"); } diff --git a/customer-service/src/test/java/de/openknowledge/sample/customer/application/CustomerResourceV11IntegrationTest.java b/customer-service/src/test/java/de/openknowledge/sample/customer/application/CustomerResourceV11IntegrationTest.java index bdd8a97..ddc2bf1 100644 --- a/customer-service/src/test/java/de/openknowledge/sample/customer/application/CustomerResourceV11IntegrationTest.java +++ b/customer-service/src/test/java/de/openknowledge/sample/customer/application/CustomerResourceV11IntegrationTest.java @@ -22,10 +22,7 @@ import java.io.InputStream; import java.io.StringReader; -import java.net.URL; import java.util.List; -import java.util.logging.Level; -import java.util.logging.Logger; import javax.json.Json; import javax.json.JsonObject; @@ -36,62 +33,27 @@ import javax.ws.rs.core.Response.Status; import org.apache.johnzon.jaxrs.jsonb.jaxrs.JsonbJaxrsProvider; -import org.jboss.arquillian.container.test.api.Deployment; -import org.jboss.arquillian.container.test.api.RunAsClient; -import org.jboss.arquillian.junit.Arquillian; -import org.jboss.arquillian.test.api.ArquillianResource; -import org.jboss.shrinkwrap.api.ShrinkWrap; -import org.jboss.shrinkwrap.api.asset.EmptyAsset; -import org.jboss.shrinkwrap.api.spec.WebArchive; -import org.jboss.shrinkwrap.resolver.api.maven.Maven; -import org.jboss.shrinkwrap.resolver.api.maven.PomEquippedResolveStage; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; - -import de.openknowledge.sample.customer.application.v1.CustomerResourceTypeV1; -import de.openknowledge.sample.customer.domain.Customer; -import de.openknowledge.sample.customer.domain.CustomerNotFoundException; -import de.openknowledge.sample.customer.domain.CustomerRepository; -import de.openknowledge.sample.customer.domain.Gender; -import de.openknowledge.sample.customer.domain.Name; -import de.openknowledge.sample.customer.domain.TestCustomers; +import org.apache.meecrowave.Meecrowave; +import org.apache.meecrowave.junit5.MonoMeecrowaveConfig; +import org.apache.meecrowave.testing.ConfigurationInject; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; /** - * Arquillian test class for the rest resource {@link CustomerResource}. + * test class for the rest resource {@link CustomerResource}. */ -@RunAsClient -@RunWith(Arquillian.class) +@MonoMeecrowaveConfig public class CustomerResourceV11IntegrationTest { - private static final Logger LOG = Logger.getLogger(CustomerResourceV11IntegrationTest.class.getName()); - - @Deployment - public static WebArchive createDeployment() { - PomEquippedResolveStage pomFile = Maven.resolver().loadPomFromFile("pom.xml"); - - WebArchive archive = ShrinkWrap.create(WebArchive.class) - .addAsLibraries(pomFile.resolve("org.apache.commons:commons-lang3").withTransitivity().asFile()) - .addPackage(CustomerResourceTypeV1.class.getPackage()) - .addClasses(CustomerResource.class, CustomerResourceType.class, CustomMediaType.class, JaxRsActivator.class) - .addClasses(CustomerMessageBodyReader.class, CustomerMessageBodyWriter.class, CustomerListMessageBodyWriter.class) - .addClasses(Customer.class, Name.class, CustomerRepository.class, CustomerNotFoundException.class, Gender.class) - .addClass(TestCustomers.class) - .addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml"); - - LOG.log(Level.FINE, () -> archive.toString(true)); - return archive; - } - - @ArquillianResource - private URL baseURI; + @ConfigurationInject + private Meecrowave.Builder config; private WebTarget customerListTarget; - @Before + @BeforeEach public void initializeClient() { customerListTarget = ClientBuilder.newClient() .register(JsonbJaxrsProvider.class) - .target(baseURI.toString()) + .target("http://localhost:" + config.getHttpPort()) .path("api/customers"); } diff --git a/customer-service/src/test/java/de/openknowledge/sample/customer/application/CustomerResourceV20IntegrationTest.java b/customer-service/src/test/java/de/openknowledge/sample/customer/application/CustomerResourceV20IntegrationTest.java index ad905a4..3d8c7ae 100644 --- a/customer-service/src/test/java/de/openknowledge/sample/customer/application/CustomerResourceV20IntegrationTest.java +++ b/customer-service/src/test/java/de/openknowledge/sample/customer/application/CustomerResourceV20IntegrationTest.java @@ -21,10 +21,7 @@ import java.io.InputStream; import java.io.StringReader; -import java.net.URL; import java.util.List; -import java.util.logging.Level; -import java.util.logging.Logger; import javax.json.Json; import javax.json.JsonObject; @@ -35,62 +32,27 @@ import javax.ws.rs.core.Response.Status; import org.apache.johnzon.jaxrs.jsonb.jaxrs.JsonbJaxrsProvider; -import org.jboss.arquillian.container.test.api.Deployment; -import org.jboss.arquillian.container.test.api.RunAsClient; -import org.jboss.arquillian.junit.Arquillian; -import org.jboss.arquillian.test.api.ArquillianResource; -import org.jboss.shrinkwrap.api.ShrinkWrap; -import org.jboss.shrinkwrap.api.asset.EmptyAsset; -import org.jboss.shrinkwrap.api.spec.WebArchive; -import org.jboss.shrinkwrap.resolver.api.maven.Maven; -import org.jboss.shrinkwrap.resolver.api.maven.PomEquippedResolveStage; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; - -import de.openknowledge.sample.customer.application.v1.CustomerResourceTypeV1; -import de.openknowledge.sample.customer.domain.Customer; -import de.openknowledge.sample.customer.domain.CustomerNotFoundException; -import de.openknowledge.sample.customer.domain.CustomerRepository; -import de.openknowledge.sample.customer.domain.Gender; -import de.openknowledge.sample.customer.domain.Name; -import de.openknowledge.sample.customer.domain.TestCustomers; +import org.apache.meecrowave.Meecrowave; +import org.apache.meecrowave.junit5.MonoMeecrowaveConfig; +import org.apache.meecrowave.testing.ConfigurationInject; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; /** - * Arquillian test class for the rest resource {@link CustomerResource}. + * test class for the rest resource {@link CustomerResource}. */ -@RunAsClient -@RunWith(Arquillian.class) +@MonoMeecrowaveConfig public class CustomerResourceV20IntegrationTest { - private static final Logger LOG = Logger.getLogger(CustomerResourceV20IntegrationTest.class.getName()); - - @Deployment - public static WebArchive createDeployment() { - PomEquippedResolveStage pomFile = Maven.resolver().loadPomFromFile("pom.xml"); - - WebArchive archive = ShrinkWrap.create(WebArchive.class) - .addAsLibraries(pomFile.resolve("org.apache.commons:commons-lang3").withTransitivity().asFile()) - .addPackage(CustomerResourceTypeV1.class.getPackage()) - .addClasses(CustomerResource.class, CustomerResourceType.class, CustomMediaType.class, JaxRsActivator.class) - .addClasses(CustomerMessageBodyReader.class, CustomerMessageBodyWriter.class, CustomerListMessageBodyWriter.class) - .addClasses(Customer.class, Name.class, CustomerRepository.class, CustomerNotFoundException.class, Gender.class) - .addClass(TestCustomers.class) - .addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml"); - - LOG.log(Level.FINE, () -> archive.toString(true)); - return archive; - } - - @ArquillianResource - private URL baseURI; + @ConfigurationInject + private Meecrowave.Builder config; private WebTarget customerListTarget; - @Before + @BeforeEach public void initializeClient() { customerListTarget = ClientBuilder.newClient() .register(JsonbJaxrsProvider.class) - .target(baseURI.toString()) + .target("http://localhost:" + config.getHttpPort()) .path("api/customers"); }