From a11b2d812be30138e980285d2ebc76fdaa864e87 Mon Sep 17 00:00:00 2001
From: andrebrowne <42154231+andrebrowne@users.noreply.github.com>
Date: Tue, 1 Oct 2019 12:56:55 -0400
Subject: [PATCH 1/9] Add architecture module with Hexagonal example
---
architecture/README.md | 3 ++
architecture/pom.xml | 33 ++++++++++++
.../HexagonalArchitectureTaskApplication.java | 12 +++++
.../application/task/AddNewDailyTask.java | 29 ++++++++++
.../application/task/AddNewTask.java | 22 ++++++++
.../application/task/GetTasks.java | 22 ++++++++
.../commands/task/CreateTask.java | 7 +++
.../commands/task/GetAllTasks.java | 7 +++
.../architecture/domain/task/Task.java | 53 +++++++++++++++++++
.../domain/task/TaskRepository.java | 7 +++
.../architecture/domain/task/TaskService.java | 22 ++++++++
.../framework/cli/StartupRunner.java | 25 +++++++++
.../http/task/TaskApiController.java | 42 +++++++++++++++
.../framework/http/task/TaskRequest.java | 29 ++++++++++
14 files changed, 313 insertions(+)
create mode 100644 architecture/README.md
create mode 100644 architecture/pom.xml
create mode 100644 architecture/src/main/java/com/baeldung/architecture/HexagonalArchitectureTaskApplication.java
create mode 100644 architecture/src/main/java/com/baeldung/architecture/application/task/AddNewDailyTask.java
create mode 100644 architecture/src/main/java/com/baeldung/architecture/application/task/AddNewTask.java
create mode 100644 architecture/src/main/java/com/baeldung/architecture/application/task/GetTasks.java
create mode 100644 architecture/src/main/java/com/baeldung/architecture/commands/task/CreateTask.java
create mode 100644 architecture/src/main/java/com/baeldung/architecture/commands/task/GetAllTasks.java
create mode 100644 architecture/src/main/java/com/baeldung/architecture/domain/task/Task.java
create mode 100644 architecture/src/main/java/com/baeldung/architecture/domain/task/TaskRepository.java
create mode 100644 architecture/src/main/java/com/baeldung/architecture/domain/task/TaskService.java
create mode 100644 architecture/src/main/java/com/baeldung/architecture/framework/cli/StartupRunner.java
create mode 100644 architecture/src/main/java/com/baeldung/architecture/framework/http/task/TaskApiController.java
create mode 100644 architecture/src/main/java/com/baeldung/architecture/framework/http/task/TaskRequest.java
diff --git a/architecture/README.md b/architecture/README.md
new file mode 100644
index 0000000000..be093f25ed
--- /dev/null
+++ b/architecture/README.md
@@ -0,0 +1,3 @@
+### Relevant articles
+
+- [A Quick and Practical Example of Hexagonal Architecture in Java](https://www.baeldung.com/a-quick-and-practical-example-of-hexagonal-architecture-in-java-3/)
diff --git a/architecture/pom.xml b/architecture/pom.xml
new file mode 100644
index 0000000000..4ad104293e
--- /dev/null
+++ b/architecture/pom.xml
@@ -0,0 +1,33 @@
+
+ 4.0.0
+ com.baeldung.architecture
+ architecture
+ 0.0.1-SNAPSHOT
+ architecture
+ jar
+ A Quick and Practical Example of Hexagonal Architecture in Java
+
+
+ parent-boot-2
+ com.baeldung
+ 0.0.1-SNAPSHOT
+ ../parent-boot-2
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-data-jpa
+
+
+ com.h2database
+ h2
+ runtime
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
diff --git a/architecture/src/main/java/com/baeldung/architecture/HexagonalArchitectureTaskApplication.java b/architecture/src/main/java/com/baeldung/architecture/HexagonalArchitectureTaskApplication.java
new file mode 100644
index 0000000000..83e4fc4c0b
--- /dev/null
+++ b/architecture/src/main/java/com/baeldung/architecture/HexagonalArchitectureTaskApplication.java
@@ -0,0 +1,12 @@
+package com.baeldung.architecture;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class HexagonalArchitectureTaskApplication {
+ public static void main(String[] args) {
+ SpringApplication.run(HexagonalArchitectureTaskApplication.class, args);
+ }
+
+}
diff --git a/architecture/src/main/java/com/baeldung/architecture/application/task/AddNewDailyTask.java b/architecture/src/main/java/com/baeldung/architecture/application/task/AddNewDailyTask.java
new file mode 100644
index 0000000000..208d1bfcc9
--- /dev/null
+++ b/architecture/src/main/java/com/baeldung/architecture/application/task/AddNewDailyTask.java
@@ -0,0 +1,29 @@
+package com.baeldung.architecture.application.task;
+
+import java.time.Instant;
+import java.time.temporal.ChronoUnit;
+
+import com.baeldung.architecture.commands.task.CreateTask;
+import com.baeldung.architecture.domain.task.Task;
+
+import org.springframework.stereotype.Component;
+
+@Component
+public class AddNewDailyTask implements CreateTask {
+
+ private AddNewTask addNewTask;
+
+ public AddNewDailyTask(AddNewTask addNewTask) {
+ this.addNewTask = addNewTask;
+ }
+
+ @Override
+ public void create(Task newTask) {
+ Instant initialDueDate = newTask.getDueDate();
+ String description = newTask.getDescription();
+ for (int i = 1; i <= 5; i++) {
+ Task task = new Task(initialDueDate.plus(i, ChronoUnit.DAYS), description);
+ addNewTask.create(task);
+ }
+ }
+};
diff --git a/architecture/src/main/java/com/baeldung/architecture/application/task/AddNewTask.java b/architecture/src/main/java/com/baeldung/architecture/application/task/AddNewTask.java
new file mode 100644
index 0000000000..2e5aff4a53
--- /dev/null
+++ b/architecture/src/main/java/com/baeldung/architecture/application/task/AddNewTask.java
@@ -0,0 +1,22 @@
+package com.baeldung.architecture.application.task;
+
+import com.baeldung.architecture.domain.task.Task;
+import com.baeldung.architecture.domain.task.TaskService;
+import com.baeldung.architecture.commands.task.*;
+
+import org.springframework.stereotype.Component;
+
+@Component
+public class AddNewTask implements CreateTask {
+
+ private TaskService taskService;
+
+ public AddNewTask(TaskService taskService) {
+ this.taskService = taskService;
+ }
+
+ @Override
+ public void create(Task newTask) {
+ taskService.createTask(newTask);
+ }
+};
diff --git a/architecture/src/main/java/com/baeldung/architecture/application/task/GetTasks.java b/architecture/src/main/java/com/baeldung/architecture/application/task/GetTasks.java
new file mode 100644
index 0000000000..54539290ba
--- /dev/null
+++ b/architecture/src/main/java/com/baeldung/architecture/application/task/GetTasks.java
@@ -0,0 +1,22 @@
+package com.baeldung.architecture.application.task;
+
+import com.baeldung.architecture.domain.task.Task;
+import com.baeldung.architecture.domain.task.TaskService;
+import com.baeldung.architecture.commands.task.*;
+
+import org.springframework.stereotype.Component;
+
+@Component
+public class GetTasks implements GetAllTasks {
+
+ private TaskService taskService;
+
+ public GetTasks(TaskService taskService) {
+ this.taskService = taskService;
+ }
+
+ @Override
+ public Iterable getAll() {
+ return taskService.getAllTasks();
+ }
+};
diff --git a/architecture/src/main/java/com/baeldung/architecture/commands/task/CreateTask.java b/architecture/src/main/java/com/baeldung/architecture/commands/task/CreateTask.java
new file mode 100644
index 0000000000..26e6da10e2
--- /dev/null
+++ b/architecture/src/main/java/com/baeldung/architecture/commands/task/CreateTask.java
@@ -0,0 +1,7 @@
+package com.baeldung.architecture.commands.task;
+
+import com.baeldung.architecture.domain.task.Task;
+
+public interface CreateTask {
+ public void create(Task newTask);
+};
diff --git a/architecture/src/main/java/com/baeldung/architecture/commands/task/GetAllTasks.java b/architecture/src/main/java/com/baeldung/architecture/commands/task/GetAllTasks.java
new file mode 100644
index 0000000000..d3c40db92f
--- /dev/null
+++ b/architecture/src/main/java/com/baeldung/architecture/commands/task/GetAllTasks.java
@@ -0,0 +1,7 @@
+package com.baeldung.architecture.commands.task;
+
+import com.baeldung.architecture.domain.task.Task;
+
+public interface GetAllTasks {
+ public Iterable getAll();
+};
diff --git a/architecture/src/main/java/com/baeldung/architecture/domain/task/Task.java b/architecture/src/main/java/com/baeldung/architecture/domain/task/Task.java
new file mode 100644
index 0000000000..240dc33571
--- /dev/null
+++ b/architecture/src/main/java/com/baeldung/architecture/domain/task/Task.java
@@ -0,0 +1,53 @@
+package com.baeldung.architecture.domain.task;
+
+import java.time.Instant;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+
+@Entity
+public class Task {
+ @Id
+ @GeneratedValue(strategy=GenerationType.AUTO)
+ private Long id;
+ private Instant dueDate = Instant.now();
+ private String description;
+
+ public Task() {}
+
+ public Task(Instant dueDate, String description) {
+ this.dueDate = dueDate;
+ this.description = description;
+ }
+
+ public Task(Long id, Instant dueDate, String description) {
+ this(dueDate, description);
+ this.id = id;
+ }
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public Instant getDueDate() {
+ return dueDate;
+ }
+
+ public void setDueDate(Instant dueDate) {
+ this.dueDate = dueDate;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public void setDescription(String description) {
+ this.description = description;
+ }
+}
diff --git a/architecture/src/main/java/com/baeldung/architecture/domain/task/TaskRepository.java b/architecture/src/main/java/com/baeldung/architecture/domain/task/TaskRepository.java
new file mode 100644
index 0000000000..d896212714
--- /dev/null
+++ b/architecture/src/main/java/com/baeldung/architecture/domain/task/TaskRepository.java
@@ -0,0 +1,7 @@
+package com.baeldung.architecture.domain.task;
+
+import org.springframework.data.repository.CrudRepository;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface TaskRepository extends CrudRepository {};
diff --git a/architecture/src/main/java/com/baeldung/architecture/domain/task/TaskService.java b/architecture/src/main/java/com/baeldung/architecture/domain/task/TaskService.java
new file mode 100644
index 0000000000..cace0614ad
--- /dev/null
+++ b/architecture/src/main/java/com/baeldung/architecture/domain/task/TaskService.java
@@ -0,0 +1,22 @@
+package com.baeldung.architecture.domain.task;
+
+import org.springframework.stereotype.Service;
+
+@Service
+public class TaskService {
+
+ private TaskRepository taskRepository;
+
+ public TaskService(TaskRepository taskRepository) {
+ this.taskRepository = taskRepository;
+ }
+
+ public void createTask(Task task) {
+ taskRepository.save(task);
+ }
+
+ public Iterable getAllTasks() {
+ return taskRepository.findAll();
+ }
+
+};
diff --git a/architecture/src/main/java/com/baeldung/architecture/framework/cli/StartupRunner.java b/architecture/src/main/java/com/baeldung/architecture/framework/cli/StartupRunner.java
new file mode 100644
index 0000000000..260c033b71
--- /dev/null
+++ b/architecture/src/main/java/com/baeldung/architecture/framework/cli/StartupRunner.java
@@ -0,0 +1,25 @@
+package com.baeldung.architecture.framework.cli;
+
+import com.baeldung.architecture.application.task.AddNewDailyTask;
+import com.baeldung.architecture.domain.task.Task;
+
+import org.springframework.boot.ApplicationArguments;
+import org.springframework.boot.ApplicationRunner;
+import org.springframework.stereotype.Component;
+
+@Component
+public class StartupRunner implements ApplicationRunner {
+
+ AddNewDailyTask addNewDailyTask;
+
+ public StartupRunner(AddNewDailyTask addNewDailyTask) {
+ this.addNewDailyTask = addNewDailyTask;
+ }
+ @Override
+ public void run(ApplicationArguments args) throws Exception {
+ System.out.println("Adding daily tasks");
+ Task task = new Task();
+ task.setDescription("Startup Task");
+ addNewDailyTask.create(task);
+ }
+}
\ No newline at end of file
diff --git a/architecture/src/main/java/com/baeldung/architecture/framework/http/task/TaskApiController.java b/architecture/src/main/java/com/baeldung/architecture/framework/http/task/TaskApiController.java
new file mode 100644
index 0000000000..c6f7bff2dd
--- /dev/null
+++ b/architecture/src/main/java/com/baeldung/architecture/framework/http/task/TaskApiController.java
@@ -0,0 +1,42 @@
+package com.baeldung.architecture.framework.http.task;
+
+import java.time.Instant;
+
+import com.baeldung.architecture.application.task.AddNewTask;
+import com.baeldung.architecture.application.task.GetTasks;
+import com.baeldung.architecture.domain.task.Task;
+
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("task")
+public class TaskApiController {
+
+ private AddNewTask addNewTask;
+ private GetTasks getTasks;
+
+ public TaskApiController(
+ AddNewTask addNewTask,
+ GetTasks getTasks
+ ) {
+ this.addNewTask = addNewTask;
+ this.getTasks = getTasks;
+ }
+
+ @GetMapping
+ Iterable listTasks() {
+ return getTasks.getAll();
+ }
+
+ @PostMapping(consumes = "application/json", produces = "application/json")
+ void createTask(@RequestBody TaskRequest taskRequest) {
+ Task task = new Task();
+ task.setDescription(taskRequest.getDescription());
+ task.setDueDate(Instant.parse(taskRequest.getDueDate()));
+ addNewTask.create(task);
+ }
+}
\ No newline at end of file
diff --git a/architecture/src/main/java/com/baeldung/architecture/framework/http/task/TaskRequest.java b/architecture/src/main/java/com/baeldung/architecture/framework/http/task/TaskRequest.java
new file mode 100644
index 0000000000..2e353b079a
--- /dev/null
+++ b/architecture/src/main/java/com/baeldung/architecture/framework/http/task/TaskRequest.java
@@ -0,0 +1,29 @@
+package com.baeldung.architecture.framework.http.task;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonInclude.Include;
+
+public class TaskRequest {
+ @JsonInclude(Include.NON_NULL)
+ private String description;
+
+ @JsonInclude(Include.NON_NULL)
+ private String dueDate;
+
+ public String getDescription() {
+ return description;
+ }
+
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ public String getDueDate() {
+ return dueDate;
+ }
+
+ public void setDueDate(String dueDate) {
+ this.dueDate = dueDate;
+ }
+
+}
\ No newline at end of file
From 8ed374c4b073fe83d326401bee41dca828d7d1e7 Mon Sep 17 00:00:00 2001
From: andrebrowne <42154231+andrebrowne@users.noreply.github.com>
Date: Tue, 1 Oct 2019 20:15:39 -0400
Subject: [PATCH 2/9] Fixup styling
---
.../architecture/HexagonalArchitectureTaskApplication.java | 6 +++---
.../baeldung/architecture/application/task/AddNewTask.java | 2 +-
.../baeldung/architecture/application/task/GetTasks.java | 2 +-
.../baeldung/architecture/framework/cli/StartupRunner.java | 1 -
4 files changed, 5 insertions(+), 6 deletions(-)
diff --git a/architecture/src/main/java/com/baeldung/architecture/HexagonalArchitectureTaskApplication.java b/architecture/src/main/java/com/baeldung/architecture/HexagonalArchitectureTaskApplication.java
index 83e4fc4c0b..69c6f4b276 100644
--- a/architecture/src/main/java/com/baeldung/architecture/HexagonalArchitectureTaskApplication.java
+++ b/architecture/src/main/java/com/baeldung/architecture/HexagonalArchitectureTaskApplication.java
@@ -5,8 +5,8 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class HexagonalArchitectureTaskApplication {
- public static void main(String[] args) {
- SpringApplication.run(HexagonalArchitectureTaskApplication.class, args);
- }
+ public static void main(String[] args) {
+ SpringApplication.run(HexagonalArchitectureTaskApplication.class, args);
+ }
}
diff --git a/architecture/src/main/java/com/baeldung/architecture/application/task/AddNewTask.java b/architecture/src/main/java/com/baeldung/architecture/application/task/AddNewTask.java
index 2e5aff4a53..70638378f9 100644
--- a/architecture/src/main/java/com/baeldung/architecture/application/task/AddNewTask.java
+++ b/architecture/src/main/java/com/baeldung/architecture/application/task/AddNewTask.java
@@ -19,4 +19,4 @@ public class AddNewTask implements CreateTask {
public void create(Task newTask) {
taskService.createTask(newTask);
}
-};
+}
diff --git a/architecture/src/main/java/com/baeldung/architecture/application/task/GetTasks.java b/architecture/src/main/java/com/baeldung/architecture/application/task/GetTasks.java
index 54539290ba..c876f7de85 100644
--- a/architecture/src/main/java/com/baeldung/architecture/application/task/GetTasks.java
+++ b/architecture/src/main/java/com/baeldung/architecture/application/task/GetTasks.java
@@ -19,4 +19,4 @@ public class GetTasks implements GetAllTasks {
public Iterable getAll() {
return taskService.getAllTasks();
}
-};
+}
diff --git a/architecture/src/main/java/com/baeldung/architecture/framework/cli/StartupRunner.java b/architecture/src/main/java/com/baeldung/architecture/framework/cli/StartupRunner.java
index 260c033b71..cf38e5ee5e 100644
--- a/architecture/src/main/java/com/baeldung/architecture/framework/cli/StartupRunner.java
+++ b/architecture/src/main/java/com/baeldung/architecture/framework/cli/StartupRunner.java
@@ -17,7 +17,6 @@ public class StartupRunner implements ApplicationRunner {
}
@Override
public void run(ApplicationArguments args) throws Exception {
- System.out.println("Adding daily tasks");
Task task = new Task();
task.setDescription("Startup Task");
addNewDailyTask.create(task);
From f830524b20cf2dde5a8667779c39ac07ad84e095 Mon Sep 17 00:00:00 2001
From: andrebrowne <42154231+andrebrowne@users.noreply.github.com>
Date: Tue, 1 Oct 2019 20:15:39 -0400
Subject: [PATCH 3/9] Fixup styling
---
.../architecture/application/task/AddNewDailyTask.java | 2 +-
.../com/baeldung/architecture/commands/task/CreateTask.java | 2 +-
.../com/baeldung/architecture/commands/task/GetAllTasks.java | 2 +-
.../com/baeldung/architecture/domain/task/TaskService.java | 2 +-
.../com/baeldung/architecture/framework/cli/StartupRunner.java | 2 +-
.../architecture/framework/http/task/TaskApiController.java | 2 +-
.../baeldung/architecture/framework/http/task/TaskRequest.java | 3 +--
7 files changed, 7 insertions(+), 8 deletions(-)
diff --git a/architecture/src/main/java/com/baeldung/architecture/application/task/AddNewDailyTask.java b/architecture/src/main/java/com/baeldung/architecture/application/task/AddNewDailyTask.java
index 208d1bfcc9..f9ee97542c 100644
--- a/architecture/src/main/java/com/baeldung/architecture/application/task/AddNewDailyTask.java
+++ b/architecture/src/main/java/com/baeldung/architecture/application/task/AddNewDailyTask.java
@@ -26,4 +26,4 @@ public class AddNewDailyTask implements CreateTask {
addNewTask.create(task);
}
}
-};
+}
diff --git a/architecture/src/main/java/com/baeldung/architecture/commands/task/CreateTask.java b/architecture/src/main/java/com/baeldung/architecture/commands/task/CreateTask.java
index 26e6da10e2..ec60868a22 100644
--- a/architecture/src/main/java/com/baeldung/architecture/commands/task/CreateTask.java
+++ b/architecture/src/main/java/com/baeldung/architecture/commands/task/CreateTask.java
@@ -4,4 +4,4 @@ import com.baeldung.architecture.domain.task.Task;
public interface CreateTask {
public void create(Task newTask);
-};
+}
diff --git a/architecture/src/main/java/com/baeldung/architecture/commands/task/GetAllTasks.java b/architecture/src/main/java/com/baeldung/architecture/commands/task/GetAllTasks.java
index d3c40db92f..c9aa1be5f8 100644
--- a/architecture/src/main/java/com/baeldung/architecture/commands/task/GetAllTasks.java
+++ b/architecture/src/main/java/com/baeldung/architecture/commands/task/GetAllTasks.java
@@ -4,4 +4,4 @@ import com.baeldung.architecture.domain.task.Task;
public interface GetAllTasks {
public Iterable getAll();
-};
+}
diff --git a/architecture/src/main/java/com/baeldung/architecture/domain/task/TaskService.java b/architecture/src/main/java/com/baeldung/architecture/domain/task/TaskService.java
index cace0614ad..11ef0f3e19 100644
--- a/architecture/src/main/java/com/baeldung/architecture/domain/task/TaskService.java
+++ b/architecture/src/main/java/com/baeldung/architecture/domain/task/TaskService.java
@@ -19,4 +19,4 @@ public class TaskService {
return taskRepository.findAll();
}
-};
+}
diff --git a/architecture/src/main/java/com/baeldung/architecture/framework/cli/StartupRunner.java b/architecture/src/main/java/com/baeldung/architecture/framework/cli/StartupRunner.java
index cf38e5ee5e..449bc9386e 100644
--- a/architecture/src/main/java/com/baeldung/architecture/framework/cli/StartupRunner.java
+++ b/architecture/src/main/java/com/baeldung/architecture/framework/cli/StartupRunner.java
@@ -21,4 +21,4 @@ public class StartupRunner implements ApplicationRunner {
task.setDescription("Startup Task");
addNewDailyTask.create(task);
}
-}
\ No newline at end of file
+}
diff --git a/architecture/src/main/java/com/baeldung/architecture/framework/http/task/TaskApiController.java b/architecture/src/main/java/com/baeldung/architecture/framework/http/task/TaskApiController.java
index c6f7bff2dd..87a8f5fe4b 100644
--- a/architecture/src/main/java/com/baeldung/architecture/framework/http/task/TaskApiController.java
+++ b/architecture/src/main/java/com/baeldung/architecture/framework/http/task/TaskApiController.java
@@ -39,4 +39,4 @@ public class TaskApiController {
task.setDueDate(Instant.parse(taskRequest.getDueDate()));
addNewTask.create(task);
}
-}
\ No newline at end of file
+}
diff --git a/architecture/src/main/java/com/baeldung/architecture/framework/http/task/TaskRequest.java b/architecture/src/main/java/com/baeldung/architecture/framework/http/task/TaskRequest.java
index 2e353b079a..70b98a32f9 100644
--- a/architecture/src/main/java/com/baeldung/architecture/framework/http/task/TaskRequest.java
+++ b/architecture/src/main/java/com/baeldung/architecture/framework/http/task/TaskRequest.java
@@ -25,5 +25,4 @@ public class TaskRequest {
public void setDueDate(String dueDate) {
this.dueDate = dueDate;
}
-
-}
\ No newline at end of file
+}
From 9e03b89e699d9dc567af844157dc9307fe3f8329 Mon Sep 17 00:00:00 2001
From: andrebrowne <42154231+andrebrowne@users.noreply.github.com>
Date: Wed, 15 Jul 2020 20:53:23 -0400
Subject: [PATCH 4/9] BAEL-4007 Add jpa data equality unit test specs
---
persistence-modules/java-jpa-3/README.md | 3 +
persistence-modules/java-jpa-3/pom.xml | 139 ++++++++++++++++++
.../jpa/equality/EqualByBusinessKey.java | 54 +++++++
.../com/baeldung/jpa/equality/EqualById.java | 54 +++++++
.../jpa/equality/EqualByJavaDefault.java | 38 +++++
.../main/resources/META-INF/persistence.xml | 25 ++++
.../java-jpa-3/src/main/resources/logback.xml | 15 ++
.../jpa/equality/EqualityUnitTest.java | 74 ++++++++++
8 files changed, 402 insertions(+)
create mode 100644 persistence-modules/java-jpa-3/README.md
create mode 100644 persistence-modules/java-jpa-3/pom.xml
create mode 100644 persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/equality/EqualByBusinessKey.java
create mode 100644 persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/equality/EqualById.java
create mode 100644 persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/equality/EqualByJavaDefault.java
create mode 100644 persistence-modules/java-jpa-3/src/main/resources/META-INF/persistence.xml
create mode 100644 persistence-modules/java-jpa-3/src/main/resources/logback.xml
create mode 100644 persistence-modules/java-jpa-3/src/test/java/com/baeldung/jpa/equality/EqualityUnitTest.java
diff --git a/persistence-modules/java-jpa-3/README.md b/persistence-modules/java-jpa-3/README.md
new file mode 100644
index 0000000000..01fdf05b53
--- /dev/null
+++ b/persistence-modules/java-jpa-3/README.md
@@ -0,0 +1,3 @@
+## JPA in Java
+
+This module contains articles about the Java Persistence API (JPA) in Java.
diff --git a/persistence-modules/java-jpa-3/pom.xml b/persistence-modules/java-jpa-3/pom.xml
new file mode 100644
index 0000000000..562f337215
--- /dev/null
+++ b/persistence-modules/java-jpa-3/pom.xml
@@ -0,0 +1,139 @@
+
+
+ 4.0.0
+ java-jpa-3
+ java-jpa-3
+
+
+ com.baeldung
+ persistence-modules
+ 1.0.0-SNAPSHOT
+
+
+
+
+ org.hibernate
+ hibernate-core
+ ${hibernate.version}
+
+
+ org.hibernate
+ hibernate-jpamodelgen
+ ${hibernate.version}
+
+
+ com.h2database
+ h2
+ ${h2.version}
+
+
+
+
+ javax.persistence
+ javax.persistence-api
+ ${javax.persistence-api.version}
+
+
+
+
+ org.eclipse.persistence
+ eclipselink
+ ${eclipselink.version}
+ runtime
+
+
+ org.postgresql
+ postgresql
+ ${postgres.version}
+ runtime
+
+
+ org.assertj
+ assertj-core
+ ${assertj.version}
+ test
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ ${maven-compiler-plugin.version}
+
+ -proc:none
+
+
+
+ org.bsc.maven
+ maven-processor-plugin
+ ${maven-processor-plugin.version}
+
+
+ process
+
+ process
+
+ generate-sources
+
+ target/metamodel
+
+ org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor
+
+
+
+
+
+
+ org.codehaus.mojo
+ build-helper-maven-plugin
+ ${build-helper-maven-plugin.version}
+
+
+ add-source
+ generate-sources
+
+ add-source
+
+
+
+
+
+
+
+
+
+
+
+ com.mysema.maven
+ apt-maven-plugin
+ 1.1.3
+
+
+
+ process
+
+
+ target/generated-sources/java
+ com.querydsl.apt.jpa.JPAAnnotationProcessor
+
+
+
+
+
+
+
+
+ 5.4.14.Final
+ 2.7.4
+ 42.2.5
+ 2.2
+ 3.11.1
+ 3.5.1
+ 3.3.3
+ 3.0.0
+
+
+
diff --git a/persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/equality/EqualByBusinessKey.java b/persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/equality/EqualByBusinessKey.java
new file mode 100644
index 0000000000..3e34f97d77
--- /dev/null
+++ b/persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/equality/EqualByBusinessKey.java
@@ -0,0 +1,54 @@
+package com.baeldung.jpa.equality;
+
+import javax.persistence.*;
+
+@Entity
+public class EqualByBusinessKey {
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.AUTO)
+ private Long id;
+
+ private String email;
+
+ public EqualByBusinessKey() {
+ }
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public String getEmail() {
+ return email;
+ }
+
+ public void setEmail(String email) {
+ this.email = email;
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((email == null) ? 0 : email.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (obj instanceof EqualByBusinessKey)
+ if (((EqualByBusinessKey) obj).getEmail() == getEmail())
+ return true;
+
+ return false;
+ }
+
+}
diff --git a/persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/equality/EqualById.java b/persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/equality/EqualById.java
new file mode 100644
index 0000000000..f29a152f3e
--- /dev/null
+++ b/persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/equality/EqualById.java
@@ -0,0 +1,54 @@
+package com.baeldung.jpa.equality;
+
+import javax.persistence.*;
+
+@Entity
+public class EqualById {
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.AUTO)
+ private Long id;
+
+ private String email;
+
+ public EqualById() {
+ }
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public String getEmail() {
+ return email;
+ }
+
+ public void setEmail(String email) {
+ this.email = email;
+ }
+
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((id == null) ? 0 : id.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (obj instanceof EqualById)
+ return ((EqualById) obj).getId() == getId();
+
+ return false;
+ }
+
+}
diff --git a/persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/equality/EqualByJavaDefault.java b/persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/equality/EqualByJavaDefault.java
new file mode 100644
index 0000000000..04a81865c6
--- /dev/null
+++ b/persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/equality/EqualByJavaDefault.java
@@ -0,0 +1,38 @@
+package com.baeldung.jpa.equality;
+
+import javax.persistence.*;
+
+@Entity
+public class EqualByJavaDefault implements Cloneable{
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.AUTO)
+ private Long id;
+
+ private String email;
+
+ public EqualByJavaDefault() {
+ }
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public String getEmail() {
+ return email;
+ }
+
+ public void setEmail(String email) {
+ this.email = email;
+ }
+
+ public Object clone() throws
+ CloneNotSupportedException
+ {
+ return super.clone();
+ }
+}
diff --git a/persistence-modules/java-jpa-3/src/main/resources/META-INF/persistence.xml b/persistence-modules/java-jpa-3/src/main/resources/META-INF/persistence.xml
new file mode 100644
index 0000000000..28a929f912
--- /dev/null
+++ b/persistence-modules/java-jpa-3/src/main/resources/META-INF/persistence.xml
@@ -0,0 +1,25 @@
+
+
+
+ org.hibernate.jpa.HibernatePersistenceProvider
+ com.baeldung.jpa.equality.EqualByJavaDefault
+ com.baeldung.jpa.equality.EqualById
+ com.baeldung.jpa.equality.EqualByBusinessKey
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/persistence-modules/java-jpa-3/src/main/resources/logback.xml b/persistence-modules/java-jpa-3/src/main/resources/logback.xml
new file mode 100644
index 0000000000..2527fea245
--- /dev/null
+++ b/persistence-modules/java-jpa-3/src/main/resources/logback.xml
@@ -0,0 +1,15 @@
+
+
+
+
+ %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} -
+ %msg%n
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/persistence-modules/java-jpa-3/src/test/java/com/baeldung/jpa/equality/EqualityUnitTest.java b/persistence-modules/java-jpa-3/src/test/java/com/baeldung/jpa/equality/EqualityUnitTest.java
new file mode 100644
index 0000000000..c672c9e460
--- /dev/null
+++ b/persistence-modules/java-jpa-3/src/test/java/com/baeldung/jpa/equality/EqualityUnitTest.java
@@ -0,0 +1,74 @@
+package com.baeldung.jpa.equality;
+
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
+
+import org.junit.Assert;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+public class EqualityUnitTest {
+
+ private static EntityManagerFactory factory;
+ private static EntityManager entityManager;
+
+ @BeforeClass
+ public static void setup() {
+ factory = Persistence.createEntityManagerFactory("jpa-h2-equality");
+ entityManager = factory.createEntityManager();
+ }
+
+ @Test
+ public void givenObjectBasedEquality_whenUsingEquals_thenEqualIsBasedOnInstance() throws CloneNotSupportedException {
+ EqualByJavaDefault object1 = new EqualByJavaDefault();
+ EqualByJavaDefault object2 = new EqualByJavaDefault();
+
+ object1.setEmail("test.user@domain.com");
+
+ entityManager.getTransaction().begin();
+ entityManager.persist(object1);
+ entityManager.getTransaction().commit();
+
+ object2 = (EqualByJavaDefault) object1.clone();
+
+ Assert.assertNotEquals(object1, object2);
+ Assert.assertEquals(object1.getId(), object2.getId());
+ Assert.assertEquals(object1.getEmail(), object2.getEmail());
+ }
+
+ @Test
+ public void givenIdBasedEquality_whenUsingEquals_thenEqualIsBasedOnId() {
+ EqualById object1 = new EqualById();
+ EqualById object2 = new EqualById();
+
+ object1.setEmail("test.user.1@domain.com");
+ object2.setEmail("test.user.2@domain.com");
+
+ entityManager.getTransaction().begin();
+ entityManager.persist(object1);
+ entityManager.getTransaction().commit();
+
+ object2.setId(object1.getId());
+
+ Assert.assertEquals(object1, object2);
+ Assert.assertEquals(object1.getId(), object2.getId());
+ Assert.assertNotEquals(object1.getEmail(), object2.getEmail());
+ }
+
+ @Test
+ public void givenBusinessKeyBasedEquality_whenUsingEquals_thenEqualIsBasedOnBusinessKey() {
+ EqualByBusinessKey object1 = new EqualByBusinessKey();
+ EqualByBusinessKey object2 = new EqualByBusinessKey();
+
+ object1.setEmail("test.user@test-domain.com");
+ object2.setEmail("test.user@test-domain.com");
+
+ entityManager.getTransaction().begin();
+ entityManager.persist(object1);
+ entityManager.getTransaction().commit();
+
+ Assert.assertEquals(object1, object2);
+ Assert.assertNotEquals(object1.getId(), object2.getId());
+ }
+}
\ No newline at end of file
From 1ba39d1b95e0d6984903a2f8755d2c1026e1fa7b Mon Sep 17 00:00:00 2001
From: andrebrowne <42154231+andrebrowne@users.noreply.github.com>
Date: Wed, 15 Jul 2020 21:16:31 -0400
Subject: [PATCH 5/9] Remove heagonal architecture
---
architecture/README.md | 3 --
architecture/pom.xml | 33 ------------
.../HexagonalArchitectureTaskApplication.java | 12 -----
.../application/task/AddNewDailyTask.java | 29 ----------
.../application/task/AddNewTask.java | 22 --------
.../application/task/GetTasks.java | 22 --------
.../commands/task/CreateTask.java | 7 ---
.../commands/task/GetAllTasks.java | 7 ---
.../architecture/domain/task/Task.java | 53 -------------------
.../domain/task/TaskRepository.java | 7 ---
.../architecture/domain/task/TaskService.java | 22 --------
.../framework/cli/StartupRunner.java | 24 ---------
.../http/task/TaskApiController.java | 42 ---------------
.../framework/http/task/TaskRequest.java | 28 ----------
14 files changed, 311 deletions(-)
delete mode 100644 architecture/README.md
delete mode 100644 architecture/pom.xml
delete mode 100644 architecture/src/main/java/com/baeldung/architecture/HexagonalArchitectureTaskApplication.java
delete mode 100644 architecture/src/main/java/com/baeldung/architecture/application/task/AddNewDailyTask.java
delete mode 100644 architecture/src/main/java/com/baeldung/architecture/application/task/AddNewTask.java
delete mode 100644 architecture/src/main/java/com/baeldung/architecture/application/task/GetTasks.java
delete mode 100644 architecture/src/main/java/com/baeldung/architecture/commands/task/CreateTask.java
delete mode 100644 architecture/src/main/java/com/baeldung/architecture/commands/task/GetAllTasks.java
delete mode 100644 architecture/src/main/java/com/baeldung/architecture/domain/task/Task.java
delete mode 100644 architecture/src/main/java/com/baeldung/architecture/domain/task/TaskRepository.java
delete mode 100644 architecture/src/main/java/com/baeldung/architecture/domain/task/TaskService.java
delete mode 100644 architecture/src/main/java/com/baeldung/architecture/framework/cli/StartupRunner.java
delete mode 100644 architecture/src/main/java/com/baeldung/architecture/framework/http/task/TaskApiController.java
delete mode 100644 architecture/src/main/java/com/baeldung/architecture/framework/http/task/TaskRequest.java
diff --git a/architecture/README.md b/architecture/README.md
deleted file mode 100644
index be093f25ed..0000000000
--- a/architecture/README.md
+++ /dev/null
@@ -1,3 +0,0 @@
-### Relevant articles
-
-- [A Quick and Practical Example of Hexagonal Architecture in Java](https://www.baeldung.com/a-quick-and-practical-example-of-hexagonal-architecture-in-java-3/)
diff --git a/architecture/pom.xml b/architecture/pom.xml
deleted file mode 100644
index 4ad104293e..0000000000
--- a/architecture/pom.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-
- 4.0.0
- com.baeldung.architecture
- architecture
- 0.0.1-SNAPSHOT
- architecture
- jar
- A Quick and Practical Example of Hexagonal Architecture in Java
-
-
- parent-boot-2
- com.baeldung
- 0.0.1-SNAPSHOT
- ../parent-boot-2
-
-
-
-
- org.springframework.boot
- spring-boot-starter-data-jpa
-
-
- com.h2database
- h2
- runtime
-
-
- org.springframework.boot
- spring-boot-starter-web
-
-
-
diff --git a/architecture/src/main/java/com/baeldung/architecture/HexagonalArchitectureTaskApplication.java b/architecture/src/main/java/com/baeldung/architecture/HexagonalArchitectureTaskApplication.java
deleted file mode 100644
index 69c6f4b276..0000000000
--- a/architecture/src/main/java/com/baeldung/architecture/HexagonalArchitectureTaskApplication.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package com.baeldung.architecture;
-
-import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-
-@SpringBootApplication
-public class HexagonalArchitectureTaskApplication {
- public static void main(String[] args) {
- SpringApplication.run(HexagonalArchitectureTaskApplication.class, args);
- }
-
-}
diff --git a/architecture/src/main/java/com/baeldung/architecture/application/task/AddNewDailyTask.java b/architecture/src/main/java/com/baeldung/architecture/application/task/AddNewDailyTask.java
deleted file mode 100644
index f9ee97542c..0000000000
--- a/architecture/src/main/java/com/baeldung/architecture/application/task/AddNewDailyTask.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package com.baeldung.architecture.application.task;
-
-import java.time.Instant;
-import java.time.temporal.ChronoUnit;
-
-import com.baeldung.architecture.commands.task.CreateTask;
-import com.baeldung.architecture.domain.task.Task;
-
-import org.springframework.stereotype.Component;
-
-@Component
-public class AddNewDailyTask implements CreateTask {
-
- private AddNewTask addNewTask;
-
- public AddNewDailyTask(AddNewTask addNewTask) {
- this.addNewTask = addNewTask;
- }
-
- @Override
- public void create(Task newTask) {
- Instant initialDueDate = newTask.getDueDate();
- String description = newTask.getDescription();
- for (int i = 1; i <= 5; i++) {
- Task task = new Task(initialDueDate.plus(i, ChronoUnit.DAYS), description);
- addNewTask.create(task);
- }
- }
-}
diff --git a/architecture/src/main/java/com/baeldung/architecture/application/task/AddNewTask.java b/architecture/src/main/java/com/baeldung/architecture/application/task/AddNewTask.java
deleted file mode 100644
index 70638378f9..0000000000
--- a/architecture/src/main/java/com/baeldung/architecture/application/task/AddNewTask.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package com.baeldung.architecture.application.task;
-
-import com.baeldung.architecture.domain.task.Task;
-import com.baeldung.architecture.domain.task.TaskService;
-import com.baeldung.architecture.commands.task.*;
-
-import org.springframework.stereotype.Component;
-
-@Component
-public class AddNewTask implements CreateTask {
-
- private TaskService taskService;
-
- public AddNewTask(TaskService taskService) {
- this.taskService = taskService;
- }
-
- @Override
- public void create(Task newTask) {
- taskService.createTask(newTask);
- }
-}
diff --git a/architecture/src/main/java/com/baeldung/architecture/application/task/GetTasks.java b/architecture/src/main/java/com/baeldung/architecture/application/task/GetTasks.java
deleted file mode 100644
index c876f7de85..0000000000
--- a/architecture/src/main/java/com/baeldung/architecture/application/task/GetTasks.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package com.baeldung.architecture.application.task;
-
-import com.baeldung.architecture.domain.task.Task;
-import com.baeldung.architecture.domain.task.TaskService;
-import com.baeldung.architecture.commands.task.*;
-
-import org.springframework.stereotype.Component;
-
-@Component
-public class GetTasks implements GetAllTasks {
-
- private TaskService taskService;
-
- public GetTasks(TaskService taskService) {
- this.taskService = taskService;
- }
-
- @Override
- public Iterable getAll() {
- return taskService.getAllTasks();
- }
-}
diff --git a/architecture/src/main/java/com/baeldung/architecture/commands/task/CreateTask.java b/architecture/src/main/java/com/baeldung/architecture/commands/task/CreateTask.java
deleted file mode 100644
index ec60868a22..0000000000
--- a/architecture/src/main/java/com/baeldung/architecture/commands/task/CreateTask.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package com.baeldung.architecture.commands.task;
-
-import com.baeldung.architecture.domain.task.Task;
-
-public interface CreateTask {
- public void create(Task newTask);
-}
diff --git a/architecture/src/main/java/com/baeldung/architecture/commands/task/GetAllTasks.java b/architecture/src/main/java/com/baeldung/architecture/commands/task/GetAllTasks.java
deleted file mode 100644
index c9aa1be5f8..0000000000
--- a/architecture/src/main/java/com/baeldung/architecture/commands/task/GetAllTasks.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package com.baeldung.architecture.commands.task;
-
-import com.baeldung.architecture.domain.task.Task;
-
-public interface GetAllTasks {
- public Iterable getAll();
-}
diff --git a/architecture/src/main/java/com/baeldung/architecture/domain/task/Task.java b/architecture/src/main/java/com/baeldung/architecture/domain/task/Task.java
deleted file mode 100644
index 240dc33571..0000000000
--- a/architecture/src/main/java/com/baeldung/architecture/domain/task/Task.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package com.baeldung.architecture.domain.task;
-
-import java.time.Instant;
-
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-
-@Entity
-public class Task {
- @Id
- @GeneratedValue(strategy=GenerationType.AUTO)
- private Long id;
- private Instant dueDate = Instant.now();
- private String description;
-
- public Task() {}
-
- public Task(Instant dueDate, String description) {
- this.dueDate = dueDate;
- this.description = description;
- }
-
- public Task(Long id, Instant dueDate, String description) {
- this(dueDate, description);
- this.id = id;
- }
-
- public Long getId() {
- return id;
- }
-
- public void setId(Long id) {
- this.id = id;
- }
-
- public Instant getDueDate() {
- return dueDate;
- }
-
- public void setDueDate(Instant dueDate) {
- this.dueDate = dueDate;
- }
-
- public String getDescription() {
- return description;
- }
-
- public void setDescription(String description) {
- this.description = description;
- }
-}
diff --git a/architecture/src/main/java/com/baeldung/architecture/domain/task/TaskRepository.java b/architecture/src/main/java/com/baeldung/architecture/domain/task/TaskRepository.java
deleted file mode 100644
index d896212714..0000000000
--- a/architecture/src/main/java/com/baeldung/architecture/domain/task/TaskRepository.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package com.baeldung.architecture.domain.task;
-
-import org.springframework.data.repository.CrudRepository;
-import org.springframework.stereotype.Repository;
-
-@Repository
-public interface TaskRepository extends CrudRepository {};
diff --git a/architecture/src/main/java/com/baeldung/architecture/domain/task/TaskService.java b/architecture/src/main/java/com/baeldung/architecture/domain/task/TaskService.java
deleted file mode 100644
index 11ef0f3e19..0000000000
--- a/architecture/src/main/java/com/baeldung/architecture/domain/task/TaskService.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package com.baeldung.architecture.domain.task;
-
-import org.springframework.stereotype.Service;
-
-@Service
-public class TaskService {
-
- private TaskRepository taskRepository;
-
- public TaskService(TaskRepository taskRepository) {
- this.taskRepository = taskRepository;
- }
-
- public void createTask(Task task) {
- taskRepository.save(task);
- }
-
- public Iterable getAllTasks() {
- return taskRepository.findAll();
- }
-
-}
diff --git a/architecture/src/main/java/com/baeldung/architecture/framework/cli/StartupRunner.java b/architecture/src/main/java/com/baeldung/architecture/framework/cli/StartupRunner.java
deleted file mode 100644
index 449bc9386e..0000000000
--- a/architecture/src/main/java/com/baeldung/architecture/framework/cli/StartupRunner.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package com.baeldung.architecture.framework.cli;
-
-import com.baeldung.architecture.application.task.AddNewDailyTask;
-import com.baeldung.architecture.domain.task.Task;
-
-import org.springframework.boot.ApplicationArguments;
-import org.springframework.boot.ApplicationRunner;
-import org.springframework.stereotype.Component;
-
-@Component
-public class StartupRunner implements ApplicationRunner {
-
- AddNewDailyTask addNewDailyTask;
-
- public StartupRunner(AddNewDailyTask addNewDailyTask) {
- this.addNewDailyTask = addNewDailyTask;
- }
- @Override
- public void run(ApplicationArguments args) throws Exception {
- Task task = new Task();
- task.setDescription("Startup Task");
- addNewDailyTask.create(task);
- }
-}
diff --git a/architecture/src/main/java/com/baeldung/architecture/framework/http/task/TaskApiController.java b/architecture/src/main/java/com/baeldung/architecture/framework/http/task/TaskApiController.java
deleted file mode 100644
index 87a8f5fe4b..0000000000
--- a/architecture/src/main/java/com/baeldung/architecture/framework/http/task/TaskApiController.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package com.baeldung.architecture.framework.http.task;
-
-import java.time.Instant;
-
-import com.baeldung.architecture.application.task.AddNewTask;
-import com.baeldung.architecture.application.task.GetTasks;
-import com.baeldung.architecture.domain.task.Task;
-
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-@RestController
-@RequestMapping("task")
-public class TaskApiController {
-
- private AddNewTask addNewTask;
- private GetTasks getTasks;
-
- public TaskApiController(
- AddNewTask addNewTask,
- GetTasks getTasks
- ) {
- this.addNewTask = addNewTask;
- this.getTasks = getTasks;
- }
-
- @GetMapping
- Iterable listTasks() {
- return getTasks.getAll();
- }
-
- @PostMapping(consumes = "application/json", produces = "application/json")
- void createTask(@RequestBody TaskRequest taskRequest) {
- Task task = new Task();
- task.setDescription(taskRequest.getDescription());
- task.setDueDate(Instant.parse(taskRequest.getDueDate()));
- addNewTask.create(task);
- }
-}
diff --git a/architecture/src/main/java/com/baeldung/architecture/framework/http/task/TaskRequest.java b/architecture/src/main/java/com/baeldung/architecture/framework/http/task/TaskRequest.java
deleted file mode 100644
index 70b98a32f9..0000000000
--- a/architecture/src/main/java/com/baeldung/architecture/framework/http/task/TaskRequest.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package com.baeldung.architecture.framework.http.task;
-
-import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.annotation.JsonInclude.Include;
-
-public class TaskRequest {
- @JsonInclude(Include.NON_NULL)
- private String description;
-
- @JsonInclude(Include.NON_NULL)
- private String dueDate;
-
- public String getDescription() {
- return description;
- }
-
- public void setDescription(String description) {
- this.description = description;
- }
-
- public String getDueDate() {
- return dueDate;
- }
-
- public void setDueDate(String dueDate) {
- this.dueDate = dueDate;
- }
-}
From eadd24ad5de2567d7dca6365715340b8c5258b05 Mon Sep 17 00:00:00 2001
From: andrebrowne <42154231+andrebrowne@users.noreply.github.com>
Date: Tue, 28 Jul 2020 18:03:57 -0400
Subject: [PATCH 6/9] Simplify hashcode example
---
.../java/com/baeldung/jpa/equality/EqualByBusinessKey.java | 5 +----
1 file changed, 1 insertion(+), 4 deletions(-)
diff --git a/persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/equality/EqualByBusinessKey.java b/persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/equality/EqualByBusinessKey.java
index 3e34f97d77..78ba1ad1e9 100644
--- a/persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/equality/EqualByBusinessKey.java
+++ b/persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/equality/EqualByBusinessKey.java
@@ -32,10 +32,7 @@ public class EqualByBusinessKey {
@Override
public int hashCode() {
- final int prime = 31;
- int result = 1;
- result = prime * result + ((email == null) ? 0 : email.hashCode());
- return result;
+ return java.util.Objects.hashCode(email);
}
@Override
From da07a30a00cf92b2b251714f56684dd4a94d57fa Mon Sep 17 00:00:00 2001
From: andrebrowne <42154231+andrebrowne@users.noreply.github.com>
Date: Tue, 28 Jul 2020 18:40:29 -0400
Subject: [PATCH 7/9] Remove metamodel plugin
---
persistence-modules/java-jpa-3/pom.xml | 20 --------------------
1 file changed, 20 deletions(-)
diff --git a/persistence-modules/java-jpa-3/pom.xml b/persistence-modules/java-jpa-3/pom.xml
index 562f337215..57791f474e 100644
--- a/persistence-modules/java-jpa-3/pom.xml
+++ b/persistence-modules/java-jpa-3/pom.xml
@@ -66,26 +66,6 @@
-proc:none
-
- org.bsc.maven
- maven-processor-plugin
- ${maven-processor-plugin.version}
-
-
- process
-
- process
-
- generate-sources
-
- target/metamodel
-
- org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor
-
-
-
-
-
org.codehaus.mojo
build-helper-maven-plugin
From d50a83197279a0fda143ac3f1bc66025c5873b42 Mon Sep 17 00:00:00 2001
From: andrebrowne <42154231+andrebrowne@users.noreply.github.com>
Date: Sat, 8 Aug 2020 21:05:32 -0400
Subject: [PATCH 8/9] BAEL-4077 Fixup styling
---
.../baeldung/jpa/equality/EqualByBusinessKey.java | 14 ++++++++------
.../java/com/baeldung/jpa/equality/EqualById.java | 13 +++++++------
.../baeldung/jpa/equality/EqualByJavaDefault.java | 4 +---
.../baeldung/jpa/equality/EqualityUnitTest.java | 2 +-
4 files changed, 17 insertions(+), 16 deletions(-)
diff --git a/persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/equality/EqualByBusinessKey.java b/persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/equality/EqualByBusinessKey.java
index 3e34f97d77..655db4e575 100644
--- a/persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/equality/EqualByBusinessKey.java
+++ b/persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/equality/EqualByBusinessKey.java
@@ -40,15 +40,17 @@ public class EqualByBusinessKey {
@Override
public boolean equals(Object obj) {
- if (this == obj)
+ if (this == obj) {
return true;
- if (obj == null)
+ }
+ if (obj == null) {
return false;
- if (obj instanceof EqualByBusinessKey)
- if (((EqualByBusinessKey) obj).getEmail() == getEmail())
+ }
+ if (obj instanceof EqualByBusinessKey) {
+ if (((EqualByBusinessKey) obj).getEmail() == getEmail()) {
return true;
-
+ }
+ }
return false;
}
-
}
diff --git a/persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/equality/EqualById.java b/persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/equality/EqualById.java
index f29a152f3e..cebfb5fcec 100644
--- a/persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/equality/EqualById.java
+++ b/persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/equality/EqualById.java
@@ -41,14 +41,15 @@ public class EqualById {
@Override
public boolean equals(Object obj) {
- if (this == obj)
+ if (this == obj) {
return true;
- if (obj == null)
+ }
+ if (obj == null) {
return false;
- if (obj instanceof EqualById)
- return ((EqualById) obj).getId() == getId();
-
+ }
+ if (obj instanceof EqualById) {
+ return ((EqualById) obj).getId().equals(getId());
+ }
return false;
}
-
}
diff --git a/persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/equality/EqualByJavaDefault.java b/persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/equality/EqualByJavaDefault.java
index 04a81865c6..b312845b61 100644
--- a/persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/equality/EqualByJavaDefault.java
+++ b/persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/equality/EqualByJavaDefault.java
@@ -30,9 +30,7 @@ public class EqualByJavaDefault implements Cloneable{
this.email = email;
}
- public Object clone() throws
- CloneNotSupportedException
- {
+ public Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
diff --git a/persistence-modules/java-jpa-3/src/test/java/com/baeldung/jpa/equality/EqualityUnitTest.java b/persistence-modules/java-jpa-3/src/test/java/com/baeldung/jpa/equality/EqualityUnitTest.java
index c672c9e460..03ac11b6fd 100644
--- a/persistence-modules/java-jpa-3/src/test/java/com/baeldung/jpa/equality/EqualityUnitTest.java
+++ b/persistence-modules/java-jpa-3/src/test/java/com/baeldung/jpa/equality/EqualityUnitTest.java
@@ -71,4 +71,4 @@ public class EqualityUnitTest {
Assert.assertEquals(object1, object2);
Assert.assertNotEquals(object1.getId(), object2.getId());
}
-}
\ No newline at end of file
+}
From 18d7fc0bdc5b9b6b7f3de538a0a91485008df700 Mon Sep 17 00:00:00 2001
From: andrebrowne <42154231+andrebrowne@users.noreply.github.com>
Date: Sat, 8 Aug 2020 21:05:32 -0400
Subject: [PATCH 9/9] BAEL-4077 Fixup styling
---
persistence-modules/java-jpa-3/pom.xml | 56 -------------------
.../jpa/equality/EqualByBusinessKey.java | 14 +++--
.../com/baeldung/jpa/equality/EqualById.java | 13 +++--
.../jpa/equality/EqualByJavaDefault.java | 4 +-
.../jpa/equality/EqualityUnitTest.java | 2 +-
5 files changed, 17 insertions(+), 72 deletions(-)
diff --git a/persistence-modules/java-jpa-3/pom.xml b/persistence-modules/java-jpa-3/pom.xml
index 562f337215..da18ae3046 100644
--- a/persistence-modules/java-jpa-3/pom.xml
+++ b/persistence-modules/java-jpa-3/pom.xml
@@ -66,62 +66,6 @@
-proc:none
-
- org.bsc.maven
- maven-processor-plugin
- ${maven-processor-plugin.version}
-
-
- process
-
- process
-
- generate-sources
-
- target/metamodel
-
- org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor
-
-
-
-
-
-
- org.codehaus.mojo
- build-helper-maven-plugin
- ${build-helper-maven-plugin.version}
-
-
- add-source
- generate-sources
-
- add-source
-
-
-
-
-
-
-
-
-
-
-
- com.mysema.maven
- apt-maven-plugin
- 1.1.3
-
-
-
- process
-
-
- target/generated-sources/java
- com.querydsl.apt.jpa.JPAAnnotationProcessor
-
-
-
-
diff --git a/persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/equality/EqualByBusinessKey.java b/persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/equality/EqualByBusinessKey.java
index 3e34f97d77..655db4e575 100644
--- a/persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/equality/EqualByBusinessKey.java
+++ b/persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/equality/EqualByBusinessKey.java
@@ -40,15 +40,17 @@ public class EqualByBusinessKey {
@Override
public boolean equals(Object obj) {
- if (this == obj)
+ if (this == obj) {
return true;
- if (obj == null)
+ }
+ if (obj == null) {
return false;
- if (obj instanceof EqualByBusinessKey)
- if (((EqualByBusinessKey) obj).getEmail() == getEmail())
+ }
+ if (obj instanceof EqualByBusinessKey) {
+ if (((EqualByBusinessKey) obj).getEmail() == getEmail()) {
return true;
-
+ }
+ }
return false;
}
-
}
diff --git a/persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/equality/EqualById.java b/persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/equality/EqualById.java
index f29a152f3e..cebfb5fcec 100644
--- a/persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/equality/EqualById.java
+++ b/persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/equality/EqualById.java
@@ -41,14 +41,15 @@ public class EqualById {
@Override
public boolean equals(Object obj) {
- if (this == obj)
+ if (this == obj) {
return true;
- if (obj == null)
+ }
+ if (obj == null) {
return false;
- if (obj instanceof EqualById)
- return ((EqualById) obj).getId() == getId();
-
+ }
+ if (obj instanceof EqualById) {
+ return ((EqualById) obj).getId().equals(getId());
+ }
return false;
}
-
}
diff --git a/persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/equality/EqualByJavaDefault.java b/persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/equality/EqualByJavaDefault.java
index 04a81865c6..b312845b61 100644
--- a/persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/equality/EqualByJavaDefault.java
+++ b/persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/equality/EqualByJavaDefault.java
@@ -30,9 +30,7 @@ public class EqualByJavaDefault implements Cloneable{
this.email = email;
}
- public Object clone() throws
- CloneNotSupportedException
- {
+ public Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
diff --git a/persistence-modules/java-jpa-3/src/test/java/com/baeldung/jpa/equality/EqualityUnitTest.java b/persistence-modules/java-jpa-3/src/test/java/com/baeldung/jpa/equality/EqualityUnitTest.java
index c672c9e460..03ac11b6fd 100644
--- a/persistence-modules/java-jpa-3/src/test/java/com/baeldung/jpa/equality/EqualityUnitTest.java
+++ b/persistence-modules/java-jpa-3/src/test/java/com/baeldung/jpa/equality/EqualityUnitTest.java
@@ -71,4 +71,4 @@ public class EqualityUnitTest {
Assert.assertEquals(object1, object2);
Assert.assertNotEquals(object1.getId(), object2.getId());
}
-}
\ No newline at end of file
+}