From 3437dcf84146e5c15502fcec8b29e818402f4008 Mon Sep 17 00:00:00 2001 From: snackk Date: Thu, 18 Feb 2021 19:32:23 +0000 Subject: [PATCH 1/2] Strict synchronous communication to FrontierAPI --- annotation-processor/pom.xml | 8 +- .../FrontierMessageProducerService.java | 5 +- .../api/amqp/FrontierAMQPConsumer.java | 2 +- .../api/amqp/FrontierAMQPProducer.java | 44 ++--- .../api/rest/FrontierRestController.java | 32 +--- .../FrontierRestCustomExceptionHandler.java | 2 +- .../config/FrontierConfiguration.java | 176 ------------------ .../processor/executor/FrontierExecutor.java | 2 +- .../register/FrontierRegisterService.java | 86 ++------- .../immutables/FrontierDestination.java | 13 -- .../FrontierRegisterResponseMessage.java | 17 -- .../AnnotationProcessorApplicationTests.java | 9 +- 12 files changed, 49 insertions(+), 347 deletions(-) delete mode 100644 annotation-processor/src/main/java/com/frontier/api/annotation/processor/register/immutables/FrontierDestination.java delete mode 100644 annotation-processor/src/main/java/com/frontier/api/annotation/processor/register/immutables/FrontierRegisterResponseMessage.java diff --git a/annotation-processor/pom.xml b/annotation-processor/pom.xml index 71dd3ec..2d72465 100644 --- a/annotation-processor/pom.xml +++ b/annotation-processor/pom.xml @@ -5,7 +5,7 @@ org.springframework.boot spring-boot-starter-parent - 2.3.3.RELEASE + 2.4.2 com.frontier.api @@ -42,7 +42,7 @@ com.google.guava guava - 29.0-jre + 30.1-jre @@ -60,13 +60,13 @@ io.vavr vavr-jackson - 0.10.2 + 0.10.3 org.projectlombok lombok - 1.18.12 + 1.18.18 provided diff --git a/annotation-processor/src/main/java/com/frontier/api/annotation/processor/annotation/service/FrontierMessageProducerService.java b/annotation-processor/src/main/java/com/frontier/api/annotation/processor/annotation/service/FrontierMessageProducerService.java index a2e96c8..3fcdc11 100644 --- a/annotation-processor/src/main/java/com/frontier/api/annotation/processor/annotation/service/FrontierMessageProducerService.java +++ b/annotation-processor/src/main/java/com/frontier/api/annotation/processor/annotation/service/FrontierMessageProducerService.java @@ -25,8 +25,9 @@ public FrontierMessageProducerService( this.frontierAMQPProducer = frontierAMQPProducer; } - public Object process(final Guarantee guarantee, - final FrontierApiIdentity identity, + public Object process( + Guarantee guarantee, + FrontierApiIdentity identity, Set params) { return guarantee.accept(this, identity, params); } diff --git a/annotation-processor/src/main/java/com/frontier/api/annotation/processor/api/amqp/FrontierAMQPConsumer.java b/annotation-processor/src/main/java/com/frontier/api/annotation/processor/api/amqp/FrontierAMQPConsumer.java index 196cbb1..1afe8ce 100644 --- a/annotation-processor/src/main/java/com/frontier/api/annotation/processor/api/amqp/FrontierAMQPConsumer.java +++ b/annotation-processor/src/main/java/com/frontier/api/annotation/processor/api/amqp/FrontierAMQPConsumer.java @@ -28,7 +28,7 @@ public FrontierAMQPConsumer( @RabbitListener(queues = "${frontier-rabbitmq-queue-name}") public void consumeMessage(String jsonPayload) throws FrontierRecoverableException { - Optional bodyOpt = Optional.empty(); + Optional bodyOpt; try { bodyOpt = Optional .ofNullable(new ObjectMapper().readValue(jsonPayload, FrontierApiRequestMessage.class)); diff --git a/annotation-processor/src/main/java/com/frontier/api/annotation/processor/api/amqp/FrontierAMQPProducer.java b/annotation-processor/src/main/java/com/frontier/api/annotation/processor/api/amqp/FrontierAMQPProducer.java index 18d68d4..5da457d 100644 --- a/annotation-processor/src/main/java/com/frontier/api/annotation/processor/api/amqp/FrontierAMQPProducer.java +++ b/annotation-processor/src/main/java/com/frontier/api/annotation/processor/api/amqp/FrontierAMQPProducer.java @@ -1,67 +1,45 @@ package com.frontier.api.annotation.processor.api.amqp; -import static com.frontier.api.annotation.processor.annotation.immutables.Guarantee.ASYNCHRONOUS; - import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.frontier.api.annotation.processor.api.FrontierAPIInterface; import com.frontier.api.annotation.processor.api.immutables.FrontierApiIdentity; import com.frontier.api.annotation.processor.api.immutables.FrontierApiRequestMessage; import com.frontier.api.annotation.processor.exception.FrontierUnrecoverableException; -import com.frontier.api.annotation.processor.register.FrontierRegisterService; -import com.frontier.api.annotation.processor.register.immutables.FrontierDestination; -import com.frontier.api.annotation.processor.register.immutables.FrontierRegisterNode; import java.util.Set; -import org.apache.commons.lang3.tuple.Pair; import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @Service public class FrontierAMQPProducer implements FrontierAPIInterface> { - private final RabbitTemplate rabbitTemplate; + @Value("${frontier-queue:FRONTIER_QUEUE}") + private String FRONTIER_QUEUE; - private final FrontierRegisterService frontierRegisterService; + private final RabbitTemplate rabbitTemplate; - public FrontierAMQPProducer(RabbitTemplate rabbitTemplate, - FrontierRegisterService frontierRegisterService) { + public FrontierAMQPProducer( + RabbitTemplate rabbitTemplate) { this.rabbitTemplate = rabbitTemplate; - this.frontierRegisterService = frontierRegisterService; - } - - public void produceMessage( - FrontierApiRequestMessage requestBody, - String frontierQueueName) { - try { - String json = new ObjectMapper().writeValueAsString(requestBody); - rabbitTemplate.convertAndSend(frontierQueueName, "", json); - } catch (JsonProcessingException e) { - e.printStackTrace(); - } } @Override - public Void produceMessage(FrontierApiIdentity identity, + public Void produceMessage( + FrontierApiIdentity identity, Set params) { - Pair discoveredDestination = - this.frontierRegisterService - .resolveFrontierDestination(identity.getBeanName(), - identity.getMethodName(), - ASYNCHRONOUS) - .orElseThrow(() -> new FrontierUnrecoverableException("Cache Miss.")); - FrontierApiRequestMessage frontierApiRequestMessage = FrontierApiRequestMessage.builder() - .beanName(discoveredDestination.getRight().getBeanName()) - .methodName(discoveredDestination.getRight().getMethodName()) + .beanName(identity.getBeanName()) + .methodName(identity.getMethodName()) .methodParams(params) .build(); try { String messagePayload = new ObjectMapper().writeValueAsString(frontierApiRequestMessage); rabbitTemplate - .convertAndSend(discoveredDestination.getLeft().getName(), "", messagePayload); + .convertAndSend(FRONTIER_QUEUE, "", messagePayload); } catch (JsonProcessingException e) { throw new FrontierUnrecoverableException("Error publishing RabbitMQ message."); } diff --git a/annotation-processor/src/main/java/com/frontier/api/annotation/processor/api/rest/FrontierRestController.java b/annotation-processor/src/main/java/com/frontier/api/annotation/processor/api/rest/FrontierRestController.java index af50bfe..78c042e 100644 --- a/annotation-processor/src/main/java/com/frontier/api/annotation/processor/api/rest/FrontierRestController.java +++ b/annotation-processor/src/main/java/com/frontier/api/annotation/processor/api/rest/FrontierRestController.java @@ -1,24 +1,17 @@ package com.frontier.api.annotation.processor.api.rest; -import static com.frontier.api.annotation.processor.annotation.immutables.Guarantee.SYNCHRONOUS; - import com.frontier.api.annotation.processor.annotation.service.FrontierRepositoryCacheService; import com.frontier.api.annotation.processor.api.FrontierAPIInterface; import com.frontier.api.annotation.processor.api.immutables.FrontierApiIdentity; import com.frontier.api.annotation.processor.api.immutables.FrontierApiRequestMessage; import com.frontier.api.annotation.processor.api.immutables.FrontierApiResponseMessage; import com.frontier.api.annotation.processor.exception.FrontierRecoverableException; -import com.frontier.api.annotation.processor.exception.FrontierUnrecoverableException; import com.frontier.api.annotation.processor.executor.FrontierExecutor; import com.frontier.api.annotation.processor.register.FrontierRegisterService; -import com.frontier.api.annotation.processor.register.immutables.FrontierDestination; -import com.frontier.api.annotation.processor.register.immutables.FrontierRegisterNode; import java.util.Set; -import java.util.function.Function; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.lang3.StringUtils; -import org.apache.commons.lang3.tuple.Pair; import org.springframework.context.ApplicationContext; import org.springframework.data.repository.Repository; import org.springframework.http.HttpStatus; @@ -26,15 +19,12 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -import org.springframework.web.client.RestTemplate; @RestController public class FrontierRestController implements FrontierAPIInterface> { - private final static String FRONTIER_ENDPOINT = "/api/frontier/"; - private final static Function, String> FRONTIER_ENDPOINT_BUILDER_FUNC = - (a) -> a.getLeft().getName() + FRONTIER_ENDPOINT + a.getRight().getBeanName(); + private final static String NODE_ENDPOINT = "/api/frontier/"; private final FrontierRepositoryCacheService frontierRepositoryCacheService; private final FrontierRegisterService frontierRegisterService; @@ -52,29 +42,19 @@ public FrontierRestController( public FrontierApiResponseMessage produceMessage( FrontierApiIdentity identity, Set params) { - Pair discoveredDestination = - this.frontierRegisterService - .resolveFrontierDestination(identity.getBeanName(), - identity.getMethodName(), - SYNCHRONOUS) - .orElseThrow(() -> new FrontierUnrecoverableException("Cache Miss.")); - - RestTemplate restTemplate = new RestTemplate(); - FrontierApiRequestMessage frontierApiRequestMessage = FrontierApiRequestMessage.builder() - .beanName(discoveredDestination.getRight().getBeanName()) - .methodName(discoveredDestination.getRight().getMethodName()) + .beanName(identity.getBeanName()) + .methodName(identity.getMethodName()) .methodParams(params) .build(); - ResponseEntity response = restTemplate - .postForEntity(FRONTIER_ENDPOINT_BUILDER_FUNC.apply(discoveredDestination), - frontierApiRequestMessage, FrontierApiResponseMessage.class); + ResponseEntity response = this.frontierRegisterService + .proxyFrontierRequest(frontierApiRequestMessage); return response.getBody(); } - @RequestMapping(FRONTIER_ENDPOINT + "/**") + @RequestMapping(NODE_ENDPOINT + "/**") public ResponseEntity frontierHandler( HttpServletRequest request, HttpServletResponse response, diff --git a/annotation-processor/src/main/java/com/frontier/api/annotation/processor/api/rest/FrontierRestCustomExceptionHandler.java b/annotation-processor/src/main/java/com/frontier/api/annotation/processor/api/rest/FrontierRestCustomExceptionHandler.java index bcf12ec..e3dd051 100644 --- a/annotation-processor/src/main/java/com/frontier/api/annotation/processor/api/rest/FrontierRestCustomExceptionHandler.java +++ b/annotation-processor/src/main/java/com/frontier/api/annotation/processor/api/rest/FrontierRestCustomExceptionHandler.java @@ -2,9 +2,9 @@ import static org.springframework.http.HttpStatus.INTERNAL_SERVER_ERROR; +import com.frontier.api.annotation.processor.api.immutables.FrontierApiResponseMessage; import com.frontier.api.annotation.processor.exception.FrontierRecoverableException; import com.frontier.api.annotation.processor.exception.FrontierUnrecoverableException; -import com.frontier.api.annotation.processor.api.immutables.FrontierApiResponseMessage; import java.util.Optional; import org.springframework.http.HttpHeaders; import org.springframework.http.ResponseEntity; diff --git a/annotation-processor/src/main/java/com/frontier/api/annotation/processor/config/FrontierConfiguration.java b/annotation-processor/src/main/java/com/frontier/api/annotation/processor/config/FrontierConfiguration.java index b42a208..05abf24 100644 --- a/annotation-processor/src/main/java/com/frontier/api/annotation/processor/config/FrontierConfiguration.java +++ b/annotation-processor/src/main/java/com/frontier/api/annotation/processor/config/FrontierConfiguration.java @@ -7,180 +7,4 @@ @ComponentScan("com.frontier.api.annotation.processor") public class FrontierConfiguration { - public static final String SERVLET_BEAN_NAME = "frontierDispatcherServlet"; - public static final String SERVLET_BEAN_NAME_OBJ = "frontierDispatcherServletObj"; -/* - //@Scope(value = "prototype") - - @Value("${frontier-rabbitmq-queue-name}") - private String QUEUE; - - @Value("${frontier-rabbitmq-queue-name}") - private String EXCHANGE_NAME; - - private static String ROUTING_KEY = ""; - - @Autowired - private ApplicationContext applicationContext; - - - @Bean - @ConditionalOnMissingBean(RestTemplate.class) - RestTemplate restTemplate() { - return new RestTemplate(); - } - - @Bean - @ConditionalOnMissingBean(ServletWebServerFactory.class) - ServletWebServerFactory servletWebServerFactory(){ - return new TomcatServletWebServerFactory(8090); - } - - @Bean - public ConnectionFactory connectionFactory() { - CachingConnectionFactory connectionFactory = new CachingConnectionFactory("localhost"); - connectionFactory.setUsername("guest"); - connectionFactory.setPassword("guest"); - return connectionFactory; - } - - @Bean - public AmqpAdmin amqpAdmin() { - return new RabbitAdmin(connectionFactory()); - } - - @Bean - @ConditionalOnMissingBean(RabbitTemplate.class) - public RabbitTemplate rabbitTemplate() { - RabbitTemplate template = new RabbitTemplate(connectionFactory()); - //The routing key is set to the name of the queue by the broker for the default exchange. - //template.setRoutingKey(QUEUE); - //Where we will synchronously receive messages from - //template.setDefaultReceiveQueue(QUEUE); - return template; - } - - @Bean - public Exchange declareExchange() { - return ExchangeBuilder - .directExchange(EXCHANGE_NAME) - .durable(true) - .build(); - } - - @Bean - public Queue declareQueue() { - return QueueBuilder - .durable(QUEUE) - .build(); - } - - @Bean - public Binding declareBinding(Exchange exchange, Queue queue) { - return BindingBuilder - .bind(queue) - .to(exchange) - .with(ROUTING_KEY) - .noargs(); - } - - @Bean - @ConditionalOnBean({RabbitTemplate.class, FrontierApiRegisterService.class}) - FrontierAPIAMQPProducer frontierAPIAMQPProducer() { - return new FrontierAPIAMQPProducer(rabbitTemplate(), frontierApiRegisterService()); - } - - @Bean - @ConditionalOnBean({GenericWebApplicationContext.class, FrontierRepositoryWrapperService.class}) - FrontierProviderRepositoryAnnotationProcessor frontierProviderRepositoryAnnotationProcessor() { - return new FrontierProviderRepositoryAnnotationProcessor(frontierRepositoryWrapperService()); - } - - @Bean - @ConditionalOnBean({GenericWebApplicationContext.class, FrontierRepositoryWrapperService.class}) - FrontierProviderAMQPConsumer frontierAPIAMQPConsumer() { - return new FrontierProviderAMQPConsumer(applicationContext, - frontierRepositoryWrapperService()); - } - - @Bean - @ConditionalOnBean({FrontierRepositoryWrapperService.class, FrontierApiRegisterService.class}) - FrontierAPIController frontierAPIController() { - return new FrontierAPIController(applicationContext, frontierRepositoryWrapperService(), - frontierApiRegisterService()); - } - - @Bean - @ConditionalOnBean({FrontierRepositoryWrapperService.class, FrontierApiRegisterService.class}) - FrontierPropertiesAnnotationProcessor frontierPropertiesAnnotationProcessor() { - return new FrontierPropertiesAnnotationProcessor(frontierRepositoryWrapperService(), - frontierApiRegisterService()); - } - - @Bean - @ConditionalOnBean({FrontierAPIAMQPProducer.class, FrontierAPIController.class}) - FrontierConsumerRepositoryAnnotationAspect frontierConsumerRepositoryAnnotationAspect() { - return new FrontierConsumerRepositoryAnnotationAspect(frontierAPIAMQPProducer(), - frontierAPIController()); - } - - @Bean - FrontierApiRegisterService frontierApiRegisterService() { - return new FrontierApiRegisterService(); - } - - @Bean - FrontierRepositoryWrapperService frontierRepositoryWrapperService() { - return new FrontierRepositoryWrapperService(); - }*/ -/* - @Autowired - private ApplicationContext applicationContext; - - @Bean - FrontierApiRegisterService frontierApiRegisterService() { - return new FrontierApiRegisterService(frontierRepositoryCacheService()); - } - - @Bean - FrontierRepositoryCacheService frontierRepositoryCacheService() { - return new FrontierRepositoryCacheService(); - } - - @Bean - FrontierProviderAnnotationProcessor frontierProviderRepositoryAnnotationProcessor() { - return new FrontierProviderAnnotationProcessor(frontierRepositoryCacheService(), - applicationContext); - } - - - //REST - @Bean(name = SERVLET_BEAN_NAME) - @Order - public DispatcherServlet dispatcherServlet() { - AnnotationConfigWebApplicationContext webContext = new AnnotationConfigWebApplicationContext(); - webContext.setParent(applicationContext); - return new DispatcherServlet(webContext); - } - - @Bean(name = SERVLET_BEAN_NAME_OBJ) - @Order - public ServletRegistrationBean dispatcherServletRegistration( - DispatcherServlet dispatcherServlet) { - - ServletRegistrationBean registration = new ServletRegistrationBean( - dispatcherServlet, "/test/*"); - - registration - .setName(SERVLET_BEAN_NAME_OBJ); - - return registration; - } - - @Bean - public FrontierAPIController coiso() { - return new FrontierAPIController(applicationContext, frontierRepositoryCacheService(), - frontierApiRegisterService()); - }*/ - } diff --git a/annotation-processor/src/main/java/com/frontier/api/annotation/processor/executor/FrontierExecutor.java b/annotation-processor/src/main/java/com/frontier/api/annotation/processor/executor/FrontierExecutor.java index cb1a333..d32367f 100644 --- a/annotation-processor/src/main/java/com/frontier/api/annotation/processor/executor/FrontierExecutor.java +++ b/annotation-processor/src/main/java/com/frontier/api/annotation/processor/executor/FrontierExecutor.java @@ -1,9 +1,9 @@ package com.frontier.api.annotation.processor.executor; import com.frontier.api.annotation.processor.annotation.provider.FrontierProviderRepository; -import com.frontier.api.annotation.processor.exception.FrontierUnrecoverableException; import com.frontier.api.annotation.processor.api.immutables.FrontierApiRequestMessage; import com.frontier.api.annotation.processor.api.immutables.FrontierApiResponseMessage; +import com.frontier.api.annotation.processor.exception.FrontierUnrecoverableException; import java.lang.reflect.InvocationTargetException; import java.util.Arrays; import java.util.Optional; diff --git a/annotation-processor/src/main/java/com/frontier/api/annotation/processor/register/FrontierRegisterService.java b/annotation-processor/src/main/java/com/frontier/api/annotation/processor/register/FrontierRegisterService.java index 10d8420..bcee09f 100644 --- a/annotation-processor/src/main/java/com/frontier/api/annotation/processor/register/FrontierRegisterService.java +++ b/annotation-processor/src/main/java/com/frontier/api/annotation/processor/register/FrontierRegisterService.java @@ -1,27 +1,17 @@ package com.frontier.api.annotation.processor.register; import com.frontier.api.annotation.processor.annotation.immutables.FrontierRepositoryIdentity; -import com.frontier.api.annotation.processor.annotation.immutables.Guarantee; import com.frontier.api.annotation.processor.annotation.service.FrontierRepositoryCacheService; -import com.frontier.api.annotation.processor.register.immutables.FrontierDestination; +import com.frontier.api.annotation.processor.api.immutables.FrontierApiRequestMessage; +import com.frontier.api.annotation.processor.api.immutables.FrontierApiResponseMessage; import com.frontier.api.annotation.processor.register.immutables.FrontierRegisterNode; import com.frontier.api.annotation.processor.register.immutables.FrontierRegisterRequestMessage; -import com.frontier.api.annotation.processor.register.immutables.FrontierRegisterResponseMessage; import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableMap; -import java.util.HashMap; import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Optional; import java.util.Set; import java.util.function.Function; -import java.util.stream.Stream; -import org.apache.commons.lang3.StringUtils; -import org.apache.commons.lang3.tuple.Pair; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.ResponseEntity; -import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; import org.springframework.web.client.RestTemplate; @@ -35,40 +25,23 @@ public class FrontierRegisterService { private String serviceName; private final FrontierRepositoryCacheService frontierRepositoryCacheService; + private final static Function, List> FRONTIER_REGISTER_ADAPTER_FUNC = (a) -> a.stream() - .flatMap(f -> f.getProperties().stream().map(p -> FrontierRegisterNode.builder() - .beanName(f.getBeanName()) - .methodName(p.getMethodName()) - .guarantee(p.getGuarantee().getName()) - .build())) + .flatMap(f -> f.getProperties().stream() + .map(p -> FrontierRegisterNode.builder() + .beanName(f.getBeanName()) + .methodName(p.getMethodName()) + .guarantee(p.getGuarantee().getName()) + .build())) .collect(ImmutableList.toImmutableList()); - private Map> cachedFrontierIdentitiesByServiceName = new HashMap<>(); - public FrontierRegisterService( FrontierRepositoryCacheService frontierRepositoryCacheService) { this.frontierRepositoryCacheService = frontierRepositoryCacheService; } private void registerRequest() { - cachedFrontierIdentitiesByServiceName = ImmutableMap.of( - FrontierDestination.builder() - .name("http://localhost:8080") - .build(), ImmutableList.of(FrontierRegisterNode.builder() - .beanName("VisitRepository") - .methodName("findByPetId") - .guarantee("synchronous") - .build()), - FrontierDestination.builder() - .name("petclinic") - .build(), - ImmutableList.of(FrontierRegisterNode.builder() - .beanName("VisitRepository") - .methodName("updateVisit") - .guarantee("asynchronous") - .build())); - RestTemplate restTemplate = new RestTemplate(); List frontierRegisterNodes = FRONTIER_REGISTER_ADAPTER_FUNC @@ -80,42 +53,21 @@ private void registerRequest() { .frontierRegisterNodeBatch(frontierRegisterNodes) .build(); - ResponseEntity response = restTemplate - .postForEntity(FRONTIER_API_ENDPOINT + "/register", - registerRequestMessage, - FrontierRegisterResponseMessage.class); - - cachedFrontierIdentitiesByServiceName = Objects.requireNonNull(response.getBody()) - .getFrontierIdentitiesByServiceName(); + restTemplate + .postForLocation(FRONTIER_API_ENDPOINT + "/register", + registerRequestMessage); } - public Optional> resolveFrontierDestination( - String beanName, String methodName, Guarantee guarantee) { - - //TODO Register should be the end of spring bean life cycle + public ResponseEntity proxyFrontierRequest( + FrontierApiRequestMessage frontierApiRequestMessage) { + //TODO minor: Register should be the end of spring bean life cycle, + // this way avoiding to be a time consuming task on the 1st request registerRequest(); - return cachedFrontierIdentitiesByServiceName.keySet().stream() - .flatMap(a -> - cachedFrontierIdentitiesByServiceName.get(a).stream() - .filter( - c -> StringUtils.containsIgnoreCase(beanName, c.getBeanName()) - && StringUtils.containsIgnoreCase(methodName, c.getMethodName()) - && StringUtils.containsIgnoreCase(guarantee.getName(), c.getGuarantee())) - .map(d -> Stream.of(Pair.of(a, d))) - .findFirst() - .orElseGet(Stream::empty)) - .findFirst(); - } - - @Scheduled(fixedDelay = 1000, initialDelay = 1000) - public void cacheRefresh() { RestTemplate restTemplate = new RestTemplate(); - ResponseEntity response = restTemplate - .getForEntity(FRONTIER_API_ENDPOINT + "/pull", FrontierRegisterResponseMessage.class); - - cachedFrontierIdentitiesByServiceName = Objects.requireNonNull(response.getBody()) - .getFrontierIdentitiesByServiceName(); + return restTemplate + .postForEntity(FRONTIER_API_ENDPOINT + "/proxy", + frontierApiRequestMessage, FrontierApiResponseMessage.class); } } diff --git a/annotation-processor/src/main/java/com/frontier/api/annotation/processor/register/immutables/FrontierDestination.java b/annotation-processor/src/main/java/com/frontier/api/annotation/processor/register/immutables/FrontierDestination.java deleted file mode 100644 index 2afb5d4..0000000 --- a/annotation-processor/src/main/java/com/frontier/api/annotation/processor/register/immutables/FrontierDestination.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.frontier.api.annotation.processor.register.immutables; - -import lombok.Builder; -import lombok.EqualsAndHashCode; -import lombok.Getter; - -@Builder -@Getter -@EqualsAndHashCode -public class FrontierDestination { - - private String name; -} diff --git a/annotation-processor/src/main/java/com/frontier/api/annotation/processor/register/immutables/FrontierRegisterResponseMessage.java b/annotation-processor/src/main/java/com/frontier/api/annotation/processor/register/immutables/FrontierRegisterResponseMessage.java deleted file mode 100644 index 0bb716d..0000000 --- a/annotation-processor/src/main/java/com/frontier/api/annotation/processor/register/immutables/FrontierRegisterResponseMessage.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.frontier.api.annotation.processor.register.immutables; - -import java.util.List; -import java.util.Map; -import lombok.Builder; -import lombok.EqualsAndHashCode; -import lombok.Getter; - -@Builder -@Getter -@EqualsAndHashCode -public class FrontierRegisterResponseMessage { - - private Map> frontierIdentitiesByServiceName; - -} - diff --git a/annotation-processor/src/test/java/com/frontier/api/annotation/processor/AnnotationProcessorApplicationTests.java b/annotation-processor/src/test/java/com/frontier/api/annotation/processor/AnnotationProcessorApplicationTests.java index 396c175..6c3c8a6 100644 --- a/annotation-processor/src/test/java/com/frontier/api/annotation/processor/AnnotationProcessorApplicationTests.java +++ b/annotation-processor/src/test/java/com/frontier/api/annotation/processor/AnnotationProcessorApplicationTests.java @@ -4,8 +4,6 @@ import static com.github.tomakehurst.wiremock.client.WireMock.stubFor; import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo; import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatCode; -import static org.mockito.ArgumentMatchers.eq; import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.RANDOM_PORT; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @@ -106,8 +104,7 @@ public void initialize(ConfigurableApplicationContext configurableApplicationCon @Before public void setUp() { this.rabbitTemplateMock = Mockito.mock(RabbitTemplate.class); - this.producer = new FrontierAMQPProducer(this.rabbitTemplateMock, - frontierApiRegisterService); + this.producer = new FrontierAMQPProducer(this.rabbitTemplateMock); } @Test @@ -223,7 +220,7 @@ public void shouldMockPostRequestAndReturnSuccessResponse() throws Exception { assertThat(response.getStatus().value()).isEqualTo(200); //assertThat(response.getVerboseErrorMessage().isPresent()).isEqualTo(false); } - +/* @Test public void shouldProduceRabbitMessageSuccessfully() throws JsonProcessingException { FrontierApiRequestMessage testMessage = FrontierApiRequestMessage.builder() @@ -237,7 +234,7 @@ public void shouldProduceRabbitMessageSuccessfully() throws JsonProcessingExcept String json = new ObjectMapper().writeValueAsString(testMessage); Mockito.verify(this.rabbitTemplateMock) .convertAndSend(eq(testQueueName), eq(""), eq(json)); - } + }*/ @Test public void syncProviderAnnotationShouldRespondSuccessfully() { From 3e7bbc85d8c5b295714c7931408be410812f0d02 Mon Sep 17 00:00:00 2001 From: snackk Date: Tue, 23 Feb 2021 19:12:21 +0000 Subject: [PATCH 2/2] Added maven modules --- annotation-processor/.gitignore => .gitignore | 0 annotation-processor/pom.xml | 2 +- coordinator/lombok.config | 1 + coordinator/pom.xml | 69 +++++++++++++++++++ .../coordinator/CoordinatorApplication.java | 13 ++++ .../rest/FrontierRegisterController.java | 43 ++++++++++++ .../rest/imutables/FrontierDestination.java | 14 ++++ .../rest/imutables/FrontierRegisterNode.java | 18 +++++ .../FrontierRegisterRequestMessage.java | 18 +++++ .../FrontierRegisterResponseMessage.java | 16 +++++ .../service/FrontierNodeCacheService.java | 36 ++++++++++ .../src/main/resources/application.properties | 1 + .../CoordinatorApplicationTests.java | 13 ++++ annotation-processor/mvnw => mvnw | 34 +++++++-- annotation-processor/mvnw.cmd => mvnw.cmd | 43 +++++++++--- pom.xml | 15 ++++ 16 files changed, 319 insertions(+), 17 deletions(-) rename annotation-processor/.gitignore => .gitignore (100%) create mode 100644 coordinator/lombok.config create mode 100644 coordinator/pom.xml create mode 100644 coordinator/src/main/java/com/frontier/api/coordinator/CoordinatorApplication.java create mode 100644 coordinator/src/main/java/com/frontier/api/coordinator/rest/FrontierRegisterController.java create mode 100644 coordinator/src/main/java/com/frontier/api/coordinator/rest/imutables/FrontierDestination.java create mode 100644 coordinator/src/main/java/com/frontier/api/coordinator/rest/imutables/FrontierRegisterNode.java create mode 100644 coordinator/src/main/java/com/frontier/api/coordinator/rest/imutables/FrontierRegisterRequestMessage.java create mode 100644 coordinator/src/main/java/com/frontier/api/coordinator/rest/imutables/FrontierRegisterResponseMessage.java create mode 100644 coordinator/src/main/java/com/frontier/api/coordinator/service/FrontierNodeCacheService.java create mode 100644 coordinator/src/main/resources/application.properties create mode 100644 coordinator/src/test/java/com/frontier/api/coordinator/CoordinatorApplicationTests.java rename annotation-processor/mvnw => mvnw (88%) rename annotation-processor/mvnw.cmd => mvnw.cmd (78%) create mode 100644 pom.xml diff --git a/annotation-processor/.gitignore b/.gitignore similarity index 100% rename from annotation-processor/.gitignore rename to .gitignore diff --git a/annotation-processor/pom.xml b/annotation-processor/pom.xml index 2d72465..3ec8aed 100644 --- a/annotation-processor/pom.xml +++ b/annotation-processor/pom.xml @@ -5,7 +5,7 @@ org.springframework.boot spring-boot-starter-parent - 2.4.2 + 2.4.3 com.frontier.api diff --git a/coordinator/lombok.config b/coordinator/lombok.config new file mode 100644 index 0000000..9d6df39 --- /dev/null +++ b/coordinator/lombok.config @@ -0,0 +1 @@ +lombok.anyConstructor.addConstructorProperties=true diff --git a/coordinator/pom.xml b/coordinator/pom.xml new file mode 100644 index 0000000..2054098 --- /dev/null +++ b/coordinator/pom.xml @@ -0,0 +1,69 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 2.4.3 + + + com.frontier.api + coordinator + 0.0.1-SNAPSHOT + coordinator + FrontierAPI Annotation Processor + https://github.com/snackk/FrontierAPI + + + 1.8 + + + + + org.springframework.boot + spring-boot-starter-web + + + + io.vavr + vavr + 0.10.3 + + + + io.vavr + vavr-jackson + 0.10.3 + + + + org.projectlombok + lombok + 1.18.18 + provided + + + + com.google.guava + guava + 30.1-jre + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + diff --git a/coordinator/src/main/java/com/frontier/api/coordinator/CoordinatorApplication.java b/coordinator/src/main/java/com/frontier/api/coordinator/CoordinatorApplication.java new file mode 100644 index 0000000..409fcb3 --- /dev/null +++ b/coordinator/src/main/java/com/frontier/api/coordinator/CoordinatorApplication.java @@ -0,0 +1,13 @@ +package com.frontier.api.coordinator; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class CoordinatorApplication { + + public static void main(String[] args) { + SpringApplication.run(CoordinatorApplication.class, args); + } + +} diff --git a/coordinator/src/main/java/com/frontier/api/coordinator/rest/FrontierRegisterController.java b/coordinator/src/main/java/com/frontier/api/coordinator/rest/FrontierRegisterController.java new file mode 100644 index 0000000..1dbe95e --- /dev/null +++ b/coordinator/src/main/java/com/frontier/api/coordinator/rest/FrontierRegisterController.java @@ -0,0 +1,43 @@ +package com.frontier.api.coordinator.rest; + +import com.frontier.api.coordinator.rest.imutables.FrontierRegisterRequestMessage; +import com.frontier.api.coordinator.rest.imutables.FrontierRegisterResponseMessage; +import com.frontier.api.coordinator.service.FrontierNodeCacheService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + + +@RestController +@RequestMapping("/frontier/api") +public class FrontierRegisterController { + + private final Logger LOGGER = LoggerFactory.getLogger(FrontierRegisterController.class); + private final FrontierNodeCacheService frontierNodeCacheService; + + public FrontierRegisterController(FrontierNodeCacheService frontierNodeCacheService) { + this.frontierNodeCacheService = frontierNodeCacheService; + } + + @PostMapping("/register") + public FrontierRegisterResponseMessage registerFrontierNode( + FrontierRegisterRequestMessage frontierRegisterRequestMessage) { + frontierNodeCacheService.registerNode(frontierRegisterRequestMessage.getServiceName(), + frontierRegisterRequestMessage.getFrontierRegisterNodeBatch()); + return FrontierRegisterResponseMessage.builder() + .frontierIdentitiesByServiceName(frontierNodeCacheService.buildSnapshotFrontierNodes()) + .build(); + } + + @GetMapping("/pull") + public FrontierRegisterResponseMessage pullFrontierNodes() { + return FrontierRegisterResponseMessage.builder() + .frontierIdentitiesByServiceName(frontierNodeCacheService.buildSnapshotFrontierNodes()) + .build(); + } + +} + diff --git a/coordinator/src/main/java/com/frontier/api/coordinator/rest/imutables/FrontierDestination.java b/coordinator/src/main/java/com/frontier/api/coordinator/rest/imutables/FrontierDestination.java new file mode 100644 index 0000000..f77727f --- /dev/null +++ b/coordinator/src/main/java/com/frontier/api/coordinator/rest/imutables/FrontierDestination.java @@ -0,0 +1,14 @@ +package com.frontier.api.coordinator.rest.imutables; + +import lombok.Builder; +import lombok.EqualsAndHashCode; +import lombok.Getter; + +@Builder +@Getter +@EqualsAndHashCode +public class FrontierDestination { + + private String name; +} + diff --git a/coordinator/src/main/java/com/frontier/api/coordinator/rest/imutables/FrontierRegisterNode.java b/coordinator/src/main/java/com/frontier/api/coordinator/rest/imutables/FrontierRegisterNode.java new file mode 100644 index 0000000..70f8993 --- /dev/null +++ b/coordinator/src/main/java/com/frontier/api/coordinator/rest/imutables/FrontierRegisterNode.java @@ -0,0 +1,18 @@ +package com.frontier.api.coordinator.rest.imutables; + +import lombok.Builder; +import lombok.EqualsAndHashCode; +import lombok.Getter; + +@Builder +@Getter +@EqualsAndHashCode +public class FrontierRegisterNode { + + private String beanName; + + private String methodName; + + private String guarantee; +} + diff --git a/coordinator/src/main/java/com/frontier/api/coordinator/rest/imutables/FrontierRegisterRequestMessage.java b/coordinator/src/main/java/com/frontier/api/coordinator/rest/imutables/FrontierRegisterRequestMessage.java new file mode 100644 index 0000000..456fb9b --- /dev/null +++ b/coordinator/src/main/java/com/frontier/api/coordinator/rest/imutables/FrontierRegisterRequestMessage.java @@ -0,0 +1,18 @@ +package com.frontier.api.coordinator.rest.imutables; + +import java.util.List; +import lombok.Builder; +import lombok.EqualsAndHashCode; +import lombok.Getter; + +@Builder +@Getter +@EqualsAndHashCode +public class FrontierRegisterRequestMessage { + + private List frontierRegisterNodeBatch; + + private String serviceName; +} + + diff --git a/coordinator/src/main/java/com/frontier/api/coordinator/rest/imutables/FrontierRegisterResponseMessage.java b/coordinator/src/main/java/com/frontier/api/coordinator/rest/imutables/FrontierRegisterResponseMessage.java new file mode 100644 index 0000000..25779ce --- /dev/null +++ b/coordinator/src/main/java/com/frontier/api/coordinator/rest/imutables/FrontierRegisterResponseMessage.java @@ -0,0 +1,16 @@ +package com.frontier.api.coordinator.rest.imutables; + +import java.util.List; +import java.util.Map; +import lombok.Builder; +import lombok.EqualsAndHashCode; +import lombok.Getter; + +@Builder +@Getter +@EqualsAndHashCode +public class FrontierRegisterResponseMessage { + + private Map> frontierIdentitiesByServiceName; + +} diff --git a/coordinator/src/main/java/com/frontier/api/coordinator/service/FrontierNodeCacheService.java b/coordinator/src/main/java/com/frontier/api/coordinator/service/FrontierNodeCacheService.java new file mode 100644 index 0000000..232048c --- /dev/null +++ b/coordinator/src/main/java/com/frontier/api/coordinator/service/FrontierNodeCacheService.java @@ -0,0 +1,36 @@ +package com.frontier.api.coordinator.service; + +import com.frontier.api.coordinator.rest.imutables.FrontierDestination; +import com.frontier.api.coordinator.rest.imutables.FrontierRegisterNode; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableMap.Builder; +import java.util.List; +import java.util.Map; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; + +@Service +public class FrontierNodeCacheService { + + private final Logger log = LoggerFactory.getLogger(FrontierNodeCacheService.class); + + private final Builder> frontierNodes = ImmutableMap + .builder(); + + public void registerNode(String destinationName, + List frontierRegisterNodes) { + FrontierDestination frontierDestination = FrontierDestination.builder() + .name(destinationName) + .build(); + log.info("Registering node {}, with properties {}", frontierDestination, frontierDestination); + frontierNodes.put(frontierDestination, frontierRegisterNodes); + } + + public Map> buildSnapshotFrontierNodes() { + ImmutableMap> build = frontierNodes.build(); + log.info("Snapshot of nodes {}", build); + return build; + } + +} diff --git a/coordinator/src/main/resources/application.properties b/coordinator/src/main/resources/application.properties new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/coordinator/src/main/resources/application.properties @@ -0,0 +1 @@ + diff --git a/coordinator/src/test/java/com/frontier/api/coordinator/CoordinatorApplicationTests.java b/coordinator/src/test/java/com/frontier/api/coordinator/CoordinatorApplicationTests.java new file mode 100644 index 0000000..0861995 --- /dev/null +++ b/coordinator/src/test/java/com/frontier/api/coordinator/CoordinatorApplicationTests.java @@ -0,0 +1,13 @@ +package com.frontier.api.coordinator; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class CoordinatorApplicationTests { + + @Test + void contextLoads() { + } + +} diff --git a/annotation-processor/mvnw b/mvnw similarity index 88% rename from annotation-processor/mvnw rename to mvnw index 8b9da3b..a16b543 100755 --- a/annotation-processor/mvnw +++ b/mvnw @@ -19,7 +19,7 @@ # ---------------------------------------------------------------------------- # ---------------------------------------------------------------------------- -# Maven2 Start Up Batch script +# Maven Start Up Batch script # # Required ENV vars: # ------------------ @@ -114,7 +114,6 @@ if $mingw ; then M2_HOME="`(cd "$M2_HOME"; pwd)`" [ -n "$JAVA_HOME" ] && JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" - # TODO classpath? fi if [ -z "$JAVA_HOME" ]; then @@ -212,7 +211,11 @@ else if [ "$MVNW_VERBOSE" = true ]; then echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..." fi - jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar" + if [ -n "$MVNW_REPOURL" ]; then + jarUrl="$MVNW_REPOURL/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + else + jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + fi while IFS="=" read key value; do case "$key" in (wrapperUrl) jarUrl="$value"; break ;; esac @@ -221,22 +224,38 @@ else echo "Downloading from: $jarUrl" fi wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" + if $cygwin; then + wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"` + fi if command -v wget > /dev/null; then if [ "$MVNW_VERBOSE" = true ]; then echo "Found wget ... using wget" fi - wget "$jarUrl" -O "$wrapperJarPath" + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + wget "$jarUrl" -O "$wrapperJarPath" + else + wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath" + fi elif command -v curl > /dev/null; then if [ "$MVNW_VERBOSE" = true ]; then echo "Found curl ... using curl" fi - curl -o "$wrapperJarPath" "$jarUrl" + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + curl -o "$wrapperJarPath" "$jarUrl" -f + else + curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f + fi + else if [ "$MVNW_VERBOSE" = true ]; then echo "Falling back to using Java to download" fi javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" + # For Cygwin, switch paths to Windows format before running javac + if $cygwin; then + javaClass=`cygpath --path --windows "$javaClass"` + fi if [ -e "$javaClass" ]; then if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then if [ "$MVNW_VERBOSE" = true ]; then @@ -277,6 +296,11 @@ if $cygwin; then MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` fi +# Provide a "standardized" way to retrieve the CLI args that will +# work with both Windows and non-Windows executions. +MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" +export MAVEN_CMD_LINE_ARGS + WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain exec "$JAVACMD" \ diff --git a/annotation-processor/mvnw.cmd b/mvnw.cmd similarity index 78% rename from annotation-processor/mvnw.cmd rename to mvnw.cmd index fef5a8f..c8d4337 100644 --- a/annotation-processor/mvnw.cmd +++ b/mvnw.cmd @@ -18,7 +18,7 @@ @REM ---------------------------------------------------------------------------- @REM ---------------------------------------------------------------------------- -@REM Maven2 Start Up Batch script +@REM Maven Start Up Batch script @REM @REM Required ENV vars: @REM JAVA_HOME - location of a JDK home dir @@ -26,7 +26,7 @@ @REM Optional ENV vars @REM M2_HOME - location of maven2's installed home dir @REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands -@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending +@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending @REM MAVEN_OPTS - parameters passed to the Java VM when running Maven @REM e.g. to debug Maven itself, use @REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 @@ -37,7 +37,7 @@ @echo off @REM set title of command window title %0 -@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on' +@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on' @if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% @REM set %HOME% to equivalent of $HOME @@ -120,23 +120,44 @@ SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain -set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar" -FOR /F "tokens=1,2 delims==" %%A IN (%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties) DO ( - IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B +set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + +FOR /F "tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( + IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B ) @REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central @REM This allows using the maven wrapper in projects that prohibit checking in binary data. if exist %WRAPPER_JAR% ( - echo Found %WRAPPER_JAR% + if "%MVNW_VERBOSE%" == "true" ( + echo Found %WRAPPER_JAR% + ) ) else ( - echo Couldn't find %WRAPPER_JAR%, downloading it ... - echo Downloading from: %DOWNLOAD_URL% - powershell -Command "(New-Object Net.WebClient).DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')" - echo Finished downloading %WRAPPER_JAR% + if not "%MVNW_REPOURL%" == "" ( + SET DOWNLOAD_URL="%MVNW_REPOURL%/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + ) + if "%MVNW_VERBOSE%" == "true" ( + echo Couldn't find %WRAPPER_JAR%, downloading it ... + echo Downloading from: %DOWNLOAD_URL% + ) + + powershell -Command "&{"^ + "$webclient = new-object System.Net.WebClient;"^ + "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^ + "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^ + "}"^ + "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^ + "}" + if "%MVNW_VERBOSE%" == "true" ( + echo Finished downloading %WRAPPER_JAR% + ) ) @REM End of extension +@REM Provide a "standardized" way to retrieve the CLI args that will +@REM work with both Windows and non-Windows executions. +set MAVEN_CMD_LINE_ARGS=%* + %MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* if ERRORLEVEL 1 goto error goto end diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..38038b7 --- /dev/null +++ b/pom.xml @@ -0,0 +1,15 @@ + + + 4.0.0 + com.frontier.api + frontier-api + 0.0.1-SNAPSHOT + pom + + + coordinator + annotation-processor + + +