Skip to content

Commit f876043

Browse files
author
Guilherme Biff Zarelli
committed
fix: web jersey
1 parent cf133b5 commit f876043

File tree

12 files changed

+92
-23
lines changed

12 files changed

+92
-23
lines changed

.docker-compose/spring-app.yml

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
version: '3.8'
1+
version: '3.3'
22

33
services:
44

@@ -7,7 +7,7 @@ services:
77
ports:
88
- 8080:8080
99
environment:
10-
MYSQL_URL: jdbc:mysql://db:3306/sample
10+
MYSQL_URL: jdbc:mysql://sampledb:3306/sample
1111
MYSQL_USER: user
12-
MYSQL_PASSWORD: pass
12+
MYSQL_PASSWORD: pass123
1313

README.md

+19
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,13 @@ mvn clean install
9696
```
9797

9898
#### Spring boot
99+
100+
Nota: O projeto com Spring Boot não está finalizado. No caso o profile do Spring está sem o módulo
101+
de output: `restclient-http-service`, pois o Spring Boot não tem uma implementação para o microprofile-restclient
102+
no caso, o ideal seria a criação de um modulo com o Feign para implementar a porta do use-case: `ProtocolGeneratorClient`
103+
Porém, atualmente para o projeto rodar, essa porta foi implementada como um fake no modulo da app `spring-app` no seguinte package: ` br.com.helpdev.protocolgenerator`.
104+
Mas o módulo de `acceptance-test` irá falhar, pois o mesmo faz um mock desse serviço;
105+
99106
```bash
100107
mvn clean install -Pspring
101108
```
@@ -105,6 +112,11 @@ mvn clean install -Pspring
105112
docker build -t helpdev/app-quarkus-jvm .
106113
```
107114

115+
## Gerando imagem docker com o Spring
116+
```bash
117+
docker build -t helpdev/app-spring-jvm .
118+
```
119+
108120
## Iniciando serviço
109121

110122
*O comando sobe toda infraestrutura necessária para a aplicação*
@@ -113,10 +125,17 @@ docker-compose -f .docker-compose/stack.yml up
113125
```
114126

115127
*Agora podemos iniciar nossa aplicação*
128+
129+
Quarkus:
116130
```bash
117131
docker-compose -f .docker-compose/quarkus-app.yml up
118132
```
119133

134+
Spring:
135+
```bash
136+
docker-compose -f .docker-compose/spring-app.yml up
137+
```
138+
120139
## Consumindo API
121140

122141
<p align="center">

adapter/input/jaxrs-controller-v1/src/main/java/br/com/helpdev/controller/dto/ChatResponseDto.java

+4
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,15 @@
22

33
import com.fasterxml.jackson.annotation.JsonFormat;
44
import java.time.ZonedDateTime;
5+
import lombok.AllArgsConstructor;
56
import lombok.Builder;
67
import lombok.Data;
8+
import lombok.NoArgsConstructor;
79

810
@Data
911
@Builder
12+
@AllArgsConstructor
13+
@NoArgsConstructor
1014
public class ChatResponseDto {
1115

1216
private StatusResponseDto status;

adapter/input/jaxrs-controller-v1/src/main/java/br/com/helpdev/controller/dto/ErrorDto.java

+4-2
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
11
package br.com.helpdev.controller.dto;
22

3+
import lombok.AllArgsConstructor;
34
import lombok.Builder;
45
import lombok.Data;
56
import lombok.EqualsAndHashCode;
7+
import lombok.NoArgsConstructor;
68
import lombok.ToString;
79

810
@Data
911
@Builder
10-
@EqualsAndHashCode
11-
@ToString
12+
@AllArgsConstructor
13+
@NoArgsConstructor
1214
public class ErrorDto {
1315

1416
private String message;

adapter/input/jaxrs-controller-v1/src/main/java/br/com/helpdev/controller/dto/MessageCreateDto.java

+4-2
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,17 @@
55
import javax.validation.Valid;
66
import javax.validation.constraints.NotBlank;
77
import javax.validation.constraints.NotNull;
8+
import lombok.AllArgsConstructor;
89
import lombok.Builder;
910
import lombok.Data;
1011
import lombok.EqualsAndHashCode;
12+
import lombok.NoArgsConstructor;
1113
import lombok.ToString;
1214

1315
@Data
1416
@Builder
15-
@ToString
16-
@EqualsAndHashCode
17+
@AllArgsConstructor
18+
@NoArgsConstructor
1719
public class MessageCreateDto {
1820

1921
@JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX")

adapter/input/jaxrs-controller-v1/src/main/java/br/com/helpdev/controller/dto/MessageResponseDto.java

+4
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,15 @@
33
import com.fasterxml.jackson.annotation.JsonFormat;
44
import java.time.ZonedDateTime;
55
import java.util.Collection;
6+
import lombok.AllArgsConstructor;
67
import lombok.Builder;
78
import lombok.Data;
9+
import lombok.NoArgsConstructor;
810

911
@Data
1012
@Builder
13+
@AllArgsConstructor
14+
@NoArgsConstructor
1115
public class MessageResponseDto {
1216

1317
private Long id;

adapter/input/jaxrs-controller-v1/src/main/java/br/com/helpdev/controller/dto/RecipientDto.java

+4-2
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,17 @@
22

33
import br.com.helpdev.domain.Recipient;
44
import javax.validation.constraints.NotBlank;
5+
import lombok.AllArgsConstructor;
56
import lombok.Builder;
67
import lombok.Data;
78
import lombok.EqualsAndHashCode;
9+
import lombok.NoArgsConstructor;
810
import lombok.ToString;
911

1012
@Data
11-
@EqualsAndHashCode
12-
@ToString
1313
@Builder
14+
@AllArgsConstructor
15+
@NoArgsConstructor
1416
public class RecipientDto {
1517

1618
@NotBlank(message = "Recipient name can't be null!")

app/spring-app/src/main/java/br/com/helpdev/SpringSampleApplication.java

-2
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
11
package br.com.helpdev;
22

33
import org.springframework.boot.SpringApplication;
4-
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
54
import org.springframework.boot.autoconfigure.SpringBootApplication;
65

76
@SpringBootApplication(
87
scanBasePackages = {"br.com.helpdev"}
98
)
10-
@EnableAutoConfiguration
119
public class SpringSampleApplication {
1210

1311
public static void main(String[] args) {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package br.com.helpdev.config;
2+
3+
import br.com.helpdev.controller.config.CustomObjectMapperConfig;
4+
import com.fasterxml.jackson.databind.ObjectMapper;
5+
import org.springframework.context.annotation.Bean;
6+
import org.springframework.context.annotation.Configuration;
7+
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
8+
9+
@Configuration
10+
public class ObjectMapperConfig {
11+
12+
@Bean
13+
public ObjectMapper objectMapper(final Jackson2ObjectMapperBuilder builder) {
14+
final var objectMapper = builder.build();
15+
CustomObjectMapperConfig.customize(objectMapper);
16+
return objectMapper;
17+
}
18+
}
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,30 @@
11
package br.com.helpdev.config;
22

3+
import java.util.Objects;
4+
import java.util.stream.Collectors;
35
import javax.ws.rs.Path;
46
import javax.ws.rs.ext.Provider;
5-
import lombok.extern.slf4j.Slf4j;
67
import org.glassfish.jersey.server.ResourceConfig;
78
import org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider;
89
import org.springframework.context.annotation.Configuration;
910
import org.springframework.core.type.filter.AnnotationTypeFilter;
11+
import org.springframework.util.ClassUtils;
1012

1113
@Configuration
12-
@Slf4j
1314
public class WebJerseyConfiguration extends ResourceConfig {
1415

1516
public WebJerseyConfiguration() {
1617
var scanner = new ClassPathScanningCandidateComponentProvider(false);
1718
scanner.addIncludeFilter(new AnnotationTypeFilter(Provider.class));
1819
scanner.addIncludeFilter(new AnnotationTypeFilter(Path.class));
19-
scanner.findCandidateComponents("br.com.helpdev.controller").forEach(beanDefinition -> {
20-
try {
21-
register(Class.forName(beanDefinition.getBeanClassName()));
22-
} catch (ClassNotFoundException e) {
23-
log.warn("Failed to register: {}", beanDefinition.getBeanClassName());
24-
}
25-
});
20+
registerClasses(
21+
scanner.findCandidateComponents("br.com.helpdev.controller").stream()
22+
.map(
23+
beanDefinition ->
24+
ClassUtils.resolveClassName(
25+
Objects.requireNonNull(beanDefinition.getBeanClassName()),
26+
getClassLoader()))
27+
.collect(Collectors.toSet()));
28+
2629
}
2730
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package br.com.helpdev.protocolgenerator;
2+
3+
import br.com.helpdev.usecase.port.ProtocolGeneratorClient;
4+
import java.util.Random;
5+
import org.springframework.stereotype.Component;
6+
7+
@Component
8+
public class FakeProtocolGenerator implements ProtocolGeneratorClient {
9+
10+
public static final Random RANDOM = new Random();
11+
12+
@Override
13+
public String generateNewProtocol() {
14+
return "PROT-" + RANDOM.nextInt(Integer.MAX_VALUE);
15+
}
16+
}

pom.xml

+4-3
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,8 @@
4444
<module>core/use-case</module>
4545
<module>adapter/input/jaxrs-controller-v1</module>
4646
<module>adapter/output/jpa-mysql-repository</module>
47-
<module>adapter/output/restclient-http-services</module>
47+
<!--TODO: The restclient don't work in Spring; In this sample, the implementation about ProtocolGeneratorClient is in the spring-app module ( br.com.helpdev.protocolgenerator )-->
48+
<!--<module>adapter/output/restclient-http-services</module>-->
4849
<module>app/spring-app</module>
4950
<module>acceptance-test</module>
5051
</modules>
@@ -88,7 +89,7 @@
8889
<assertj.version>3.22.0</assertj.version>
8990
<testcontainers.version>1.17.1</testcontainers.version>
9091
<java-faker.version>1.0.2</java-faker.version>
91-
<glassfish.test.version>2.32</glassfish.test.version>
92+
<glassfish.test.version>2.35</glassfish.test.version>
9293

9394
<!-- Specs / apis -->
9495
<jakarta.enterprise.cdi-api.version>2.0.2</jakarta.enterprise.cdi-api.version>
@@ -100,7 +101,7 @@
100101
<jaxb-api.version>2.3.1</jaxb-api.version>
101102

102103
<!-- Others -->
103-
<jersey.version>2.32</jersey.version>
104+
<jersey.version>2.35</jersey.version>
104105
<lombok.version>1.18.24</lombok.version>
105106

106107
<slf4j.version>1.7.36</slf4j.version>

0 commit comments

Comments
 (0)