diff --git a/.gitignore b/.gitignore
index d68ab98349..7725bf202e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -89,6 +89,7 @@ spring-soap/src/main/java/com/baeldung/springsoap/gen/
/report-*.json
transaction.log
*-shell.log
+customers.xml
apache-cxf/cxf-aegis/baeldung.xml
testing-modules/report-*.json
diff --git a/akka-modules/akka-http/pom.xml b/akka-modules/akka-http/pom.xml
index 3af7c492ca..9372107fc9 100644
--- a/akka-modules/akka-http/pom.xml
+++ b/akka-modules/akka-http/pom.xml
@@ -36,7 +36,6 @@
-
10.0.11
2.5.11
diff --git a/annotations/annotation-processing/pom.xml b/annotations/annotation-processing/pom.xml
index 2a17242ee5..14bbc409e5 100644
--- a/annotations/annotation-processing/pom.xml
+++ b/annotations/annotation-processing/pom.xml
@@ -21,7 +21,6 @@
-
1.0-rc2
diff --git a/apache-httpclient-2/README.md b/apache-httpclient-2/README.md
index 45f1e41637..05bebfaacb 100644
--- a/apache-httpclient-2/README.md
+++ b/apache-httpclient-2/README.md
@@ -12,6 +12,5 @@ The "REST With Spring" Classes: http://bit.ly/restwithspring
- [Reading an HTTP Response Body as a String in Java](https://www.baeldung.com/java-http-response-body-as-string)
- [How To Get Cookies From the Apache HttpClient Response](https://www.baeldung.com/java-apache-httpclient-cookies)
- [Enabling Logging for Apache HttpClient](https://www.baeldung.com/apache-httpclient-enable-logging)
-- [Expand Shortened URLs with Apache HttpClient](https://www.baeldung.com/apache-httpclient-expand-url)
- [Apache HttpClient vs. CloseableHttpClient](https://www.baeldung.com/apache-httpclient-vs-closeablehttpclient)
- More articles: [[<-- prev]](../apache-httpclient)
diff --git a/apache-httpclient4/README.md b/apache-httpclient4/README.md
index dff63a5cc1..9c18e06243 100644
--- a/apache-httpclient4/README.md
+++ b/apache-httpclient4/README.md
@@ -9,6 +9,7 @@ This module contains articles about Apache HttpClient 4.5
- [Custom HTTP Header with the Apache HttpClient](https://www.baeldung.com/httpclient-custom-http-header)
- [Apache HttpClient vs. CloseableHttpClient](https://www.baeldung.com/apache-httpclient-vs-closeablehttpclient)
- [Expand Shortened URLs with Apache HttpClient](https://www.baeldung.com/apache-httpclient-expand-url)
+- [Retrying Requests using Apache HttpClient](https://www.baeldung.com/java-retrying-requests-using-apache-httpclient)
### Running the Tests
To run the live tests, use the command: mvn clean install -Plive
diff --git a/apache-httpclient4/pom.xml b/apache-httpclient4/pom.xml
index 1485c94c8c..e0bf9dd5f6 100644
--- a/apache-httpclient4/pom.xml
+++ b/apache-httpclient4/pom.xml
@@ -1,7 +1,7 @@
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
apache-httpclient4
0.1-SNAPSHOT
diff --git a/apache-httpclient4/src/test/java/com/baeldung/httpclient/retry/ApacheHttpClientRetryIntegrationTest.java b/apache-httpclient4/src/test/java/com/baeldung/httpclient/retry/ApacheHttpClientRetryIntegrationTest.java
new file mode 100644
index 0000000000..cfb51f058a
--- /dev/null
+++ b/apache-httpclient4/src/test/java/com/baeldung/httpclient/retry/ApacheHttpClientRetryIntegrationTest.java
@@ -0,0 +1,168 @@
+package com.baeldung.httpclient.retry;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+
+import java.io.IOException;
+import java.net.URI;
+import java.net.UnknownHostException;
+import java.util.Objects;
+
+import org.apache.http.HttpRequestInterceptor;
+import org.apache.http.HttpResponseInterceptor;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.client.methods.HttpPatch;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.client.methods.HttpPut;
+import org.apache.http.client.protocol.HttpClientContext;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.DefaultHttpRequestRetryHandler;
+import org.apache.http.impl.client.HttpClientBuilder;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+public class ApacheHttpClientRetryIntegrationTest {
+
+ private Integer requestCounter;
+ private CloseableHttpClient httpClient;
+
+ @BeforeEach
+ void setUp() {
+ requestCounter = 0;
+ }
+
+ @AfterEach
+ void tearDown() throws IOException {
+ if (httpClient != null) {
+ httpClient.close();
+ }
+ }
+
+ private void createDefaultApacheHttpClient() {
+ this.httpClient = HttpClientBuilder
+ .create()
+ .addInterceptorFirst((HttpRequestInterceptor) (httpRequest, httpContext) -> {
+ requestCounter++;
+ }).build();
+ }
+
+ private void createFailingHttpClient() {
+ this.httpClient = HttpClientBuilder
+ .create()
+ .addInterceptorFirst((HttpRequestInterceptor) (httpRequest, httpContext) -> requestCounter++)
+ .addInterceptorLast((HttpResponseInterceptor) (httpResponse, httpContext) -> {
+ throw new IOException();
+ })
+ .build();
+ }
+
+ private void createHttpClientWithRetryHandler() {
+ this.httpClient = HttpClientBuilder
+ .create()
+ .addInterceptorFirst((HttpRequestInterceptor) (httpRequest, httpContext) -> requestCounter++)
+ .addInterceptorLast((HttpResponseInterceptor) (httpRequest, httpContext) -> { throw new IOException(); })
+ .setRetryHandler(new DefaultHttpRequestRetryHandler(6, true))
+ .build();
+ }
+
+ private void createHttpClientWithCustomRetryHandler() {
+ this.httpClient = HttpClientBuilder
+ .create()
+ .addInterceptorFirst((HttpRequestInterceptor) (httpRequest, httpContext) -> requestCounter++)
+ .addInterceptorLast((HttpResponseInterceptor) (httpRequest, httpContext) -> { throw new IOException(); })
+ .setRetryHandler((exception, executionCount, context) -> {
+ if (executionCount < 5 && Objects.equals("GET", ((HttpClientContext) context).getRequest().getRequestLine().getMethod())) {
+ return true;
+ } else {
+ return false;
+ }
+ })
+ .build();
+ }
+
+ private void createHttpClientWithRetriesDisabled() {
+ this.httpClient = HttpClientBuilder
+ .create()
+ .addInterceptorFirst((HttpRequestInterceptor) (httpRequest, httpContext) -> requestCounter++)
+ .addInterceptorLast((HttpResponseInterceptor) (httpRequest, httpContext) -> { throw new IOException(); })
+ .disableAutomaticRetries()
+ .build();
+ }
+
+ @Test
+ public void givenDefaultConfiguration_whenReceivedIOException_thenRetriesPerformed() {
+ createFailingHttpClient();
+ assertThrows(IOException.class, () -> httpClient.execute(new HttpGet("https://httpstat.us/200")));
+ assertThat(requestCounter).isEqualTo(4);
+ }
+
+ @Test
+ public void givenDefaultConfiguration_whenDomainNameNotResolved_thenNoRetryApplied() {
+ createDefaultApacheHttpClient();
+ HttpGet request = new HttpGet(URI.create("http://domain.that.does.not.exist:80/api/v1"));
+
+ assertThrows(UnknownHostException.class, () -> httpClient.execute(request));
+ assertThat(requestCounter).isEqualTo(1);
+ }
+
+ @Test
+ public void givenDefaultConfiguration_whenGotInternalServerError_thenNoRetryLogicApplied() throws IOException {
+ createDefaultApacheHttpClient();
+ HttpGet request = new HttpGet(URI.create("https://httpstat.us/500"));
+
+ CloseableHttpResponse response = assertDoesNotThrow(() -> httpClient.execute(request));
+ assertThat(response.getStatusLine().getStatusCode()).isEqualTo(500);
+ assertThat(requestCounter).isEqualTo(1);
+ response.close();
+ }
+
+ @Test
+ public void givenDefaultConfiguration_whenHttpPatchRequest_thenRetryIsNotApplied() {
+ createFailingHttpClient();
+ HttpPatch request = new HttpPatch(URI.create("https://httpstat.us/500"));
+
+ assertThrows(IOException.class, () -> httpClient.execute(request));
+ assertThat(requestCounter).isEqualTo(1);
+ }
+
+ @Test
+ public void givenDefaultConfiguration_whenHttpPutRequest_thenRetryIsNotApplied() {
+ createFailingHttpClient();
+ HttpPut request = new HttpPut(URI.create("https://httpstat.us/500"));
+
+ assertThrows(IOException.class, () -> httpClient.execute(request));
+ assertThat(requestCounter).isEqualTo(1);
+ }
+
+ @Test
+ public void givenConfiguredRetryHandler_whenHttpPostRequest_thenRetriesPerformed() {
+ createHttpClientWithRetryHandler();
+
+ HttpPost request = new HttpPost(URI.create("https://httpstat.us/200"));
+
+ assertThrows(IOException.class, () -> httpClient.execute(request));
+ assertThat(requestCounter).isEqualTo(7);
+ }
+
+ @Test
+ public void givenCustomRetryHandler_whenUnknownHostException_thenRetryAnyway() {
+ createHttpClientWithCustomRetryHandler();
+
+ HttpGet request = new HttpGet(URI.create("https://domain.that.does.not.exist/200"));
+
+ assertThrows(IOException.class, () -> httpClient.execute(request));
+ assertThat(requestCounter).isEqualTo(5);
+ }
+
+ @Test
+ public void givenDisabledRetries_whenExecutedHttpRequestEndUpWithIOException_thenRetryIsNotApplied() {
+ createHttpClientWithRetriesDisabled();
+ HttpGet request = new HttpGet(URI.create("https://httpstat.us/200"));
+
+ assertThrows(IOException.class, () -> httpClient.execute(request));
+ assertThat(requestCounter).isEqualTo(1);
+ }
+}
diff --git a/apache-kafka/pom.xml b/apache-kafka/pom.xml
index 915583fed8..494bc94961 100644
--- a/apache-kafka/pom.xml
+++ b/apache-kafka/pom.xml
@@ -171,7 +171,8 @@
--add-opens java.base/java.time=ALL-UNNAMED
- --add-opens java.base/java.nio=ALL-UNNAMED
+ --add-opens
+ java.base/java.nio=ALL-UNNAMED
--add-opens java.base/java.util=ALL-UNNAMED
@@ -179,8 +180,6 @@
-
-
3.4.0
1.15.3
diff --git a/apache-libraries/src/test/java/com/baeldung/apache/beam/intro/WordCountUnitTest.java b/apache-libraries/src/test/java/com/baeldung/apache/beam/intro/WordCountIntegrationTest.java
similarity index 91%
rename from apache-libraries/src/test/java/com/baeldung/apache/beam/intro/WordCountUnitTest.java
rename to apache-libraries/src/test/java/com/baeldung/apache/beam/intro/WordCountIntegrationTest.java
index 77287066ac..5d51d8e5fa 100644
--- a/apache-libraries/src/test/java/com/baeldung/apache/beam/intro/WordCountUnitTest.java
+++ b/apache-libraries/src/test/java/com/baeldung/apache/beam/intro/WordCountIntegrationTest.java
@@ -7,7 +7,7 @@ import org.junit.Test;
import com.baeldung.apache.beam.intro.WordCount;
-public class WordCountUnitTest {
+public class WordCountIntegrationTest {
@Test
public void givenInputFile_whenWordCountRuns_thenJobFinishWithoutError() {
diff --git a/apache-spark/pom.xml b/apache-spark/pom.xml
index 9e61e1340d..b5e97ee03d 100644
--- a/apache-spark/pom.xml
+++ b/apache-spark/pom.xml
@@ -7,7 +7,6 @@
1.0-SNAPSHOT
apache-spark
jar
- http://maven.apache.org
com.baeldung
diff --git a/aws-modules/aws-lambda/shipping-tracker/ShippingFunction/pom.xml b/aws-modules/aws-lambda/shipping-tracker/ShippingFunction/pom.xml
index 24f2a76912..a60f934bad 100644
--- a/aws-modules/aws-lambda/shipping-tracker/ShippingFunction/pom.xml
+++ b/aws-modules/aws-lambda/shipping-tracker/ShippingFunction/pom.xml
@@ -2,7 +2,6 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
4.0.0
- com.baeldung
ShippingFunction
1.0
ShippingFunction
diff --git a/aws-modules/aws-lambda/todo-reminder/ToDoFunction/pom.xml b/aws-modules/aws-lambda/todo-reminder/ToDoFunction/pom.xml
index 0dd2e4d14a..5545154a5d 100644
--- a/aws-modules/aws-lambda/todo-reminder/ToDoFunction/pom.xml
+++ b/aws-modules/aws-lambda/todo-reminder/ToDoFunction/pom.xml
@@ -1,6 +1,6 @@
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
4.0.0
helloworld
ToDoFunction
diff --git a/axon/pom.xml b/axon/pom.xml
index 5c8f1d7a6c..5eed742aab 100644
--- a/axon/pom.xml
+++ b/axon/pom.xml
@@ -103,7 +103,8 @@
--add-opens java.base/java.util=ALL-UNNAMED
- --add-opens java.base/java.util.concurrent=ALL-UNNAMED
+ --add-opens
+ java.base/java.util.concurrent=ALL-UNNAMED
diff --git a/checker-plugin/pom.xml b/checker-plugin/pom.xml
index 28958db89d..e90dcf271e 100644
--- a/checker-plugin/pom.xml
+++ b/checker-plugin/pom.xml
@@ -7,7 +7,6 @@
1.0-SNAPSHOT
checker-plugin
jar
- http://maven.apache.org
com.baeldung
diff --git a/core-groovy-modules/core-groovy-2/pom.xml b/core-groovy-modules/core-groovy-2/pom.xml
index ca6a9a62c7..de750daf0f 100644
--- a/core-groovy-modules/core-groovy-2/pom.xml
+++ b/core-groovy-modules/core-groovy-2/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-groovy-2
- 1.0-SNAPSHOT
core-groovy-2
jar
@@ -153,14 +152,6 @@
-
-
- maven_central
- Maven Central
- https://repo.maven.apache.org/maven2/
-
-
-
1.1.3
3.4.2
diff --git a/core-groovy-modules/core-groovy-collections/pom.xml b/core-groovy-modules/core-groovy-collections/pom.xml
index 6d43ce7d18..08589f54e3 100644
--- a/core-groovy-modules/core-groovy-collections/pom.xml
+++ b/core-groovy-modules/core-groovy-collections/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-groovy-collections
- 1.0-SNAPSHOT
core-groovy-collections
jar
@@ -111,13 +110,4 @@
-
-
- maven_central
- Maven Central
- https://repo.maven.apache.org/maven2/
-
-
-
-
diff --git a/core-groovy-modules/core-groovy-strings/pom.xml b/core-groovy-modules/core-groovy-strings/pom.xml
index fac0f25219..ac68849431 100644
--- a/core-groovy-modules/core-groovy-strings/pom.xml
+++ b/core-groovy-modules/core-groovy-strings/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-groovy-strings
- 1.0-SNAPSHOT
core-groovy-strings
jar
@@ -101,12 +100,4 @@
-
-
- maven_central
- Maven Central
- https://repo.maven.apache.org/maven2/
-
-
-
diff --git a/core-groovy-modules/core-groovy/pom.xml b/core-groovy-modules/core-groovy/pom.xml
index cf6cca9e18..6668f62235 100644
--- a/core-groovy-modules/core-groovy/pom.xml
+++ b/core-groovy-modules/core-groovy/pom.xml
@@ -3,9 +3,7 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
-
core-groovy
- 1.0-SNAPSHOT
core-groovy
jar
@@ -102,12 +100,4 @@
-
-
- maven_central
- Maven Central
- https://repo.maven.apache.org/maven2/
-
-
-
diff --git a/core-java-modules/core-java-10/pom.xml b/core-java-modules/core-java-10/pom.xml
index e2ac8db919..7eccb098a0 100644
--- a/core-java-modules/core-java-10/pom.xml
+++ b/core-java-modules/core-java-10/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-10
- 0.1.0-SNAPSHOT
core-java-10
jar
diff --git a/core-java-modules/core-java-11-2/pom.xml b/core-java-modules/core-java-11-2/pom.xml
index 64a486b5c4..4647814048 100644
--- a/core-java-modules/core-java-11-2/pom.xml
+++ b/core-java-modules/core-java-11-2/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-11-2
- 0.1.0-SNAPSHOT
core-java-11-2
jar
diff --git a/core-java-modules/core-java-11-3/pom.xml b/core-java-modules/core-java-11-3/pom.xml
index ccccae5ba1..22db9e62ab 100644
--- a/core-java-modules/core-java-11-3/pom.xml
+++ b/core-java-modules/core-java-11-3/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-11-3
- 0.1.0-SNAPSHOT
core-java-11-3
jar
@@ -14,7 +13,7 @@
1.0.0-SNAPSHOT
../../pom.xml
-
+
com.google.code.gson
diff --git a/core-java-modules/core-java-11/pom.xml b/core-java-modules/core-java-11/pom.xml
index 28a218c400..d0c2c0acaa 100644
--- a/core-java-modules/core-java-11/pom.xml
+++ b/core-java-modules/core-java-11/pom.xml
@@ -4,10 +4,8 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-11
- 0.1.0-SNAPSHOT
core-java-11
jar
- http://maven.apache.org
com.baeldung
diff --git a/core-java-modules/core-java-12/pom.xml b/core-java-modules/core-java-12/pom.xml
index 9f95b1bc3f..ba6dfc62bc 100644
--- a/core-java-modules/core-java-12/pom.xml
+++ b/core-java-modules/core-java-12/pom.xml
@@ -4,10 +4,8 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-12
- 0.1.0-SNAPSHOT
core-java-12
jar
- http://maven.apache.org
com.baeldung
diff --git a/core-java-modules/core-java-13/pom.xml b/core-java-modules/core-java-13/pom.xml
index 9e42838971..11d6ee7007 100644
--- a/core-java-modules/core-java-13/pom.xml
+++ b/core-java-modules/core-java-13/pom.xml
@@ -3,12 +3,9 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
- com.baeldung
core-java-13
- 0.1.0-SNAPSHOT
core-java-13
jar
- http://maven.apache.org
com.baeldung
diff --git a/core-java-modules/core-java-14/pom.xml b/core-java-modules/core-java-14/pom.xml
index f78edd622a..9f48c0b8b2 100644
--- a/core-java-modules/core-java-14/pom.xml
+++ b/core-java-modules/core-java-14/pom.xml
@@ -6,7 +6,6 @@
core-java-14
core-java-14
jar
- http://maven.apache.org
com.baeldung
diff --git a/core-java-modules/core-java-15/pom.xml b/core-java-modules/core-java-15/pom.xml
index a4923054ac..059e2cc8f3 100644
--- a/core-java-modules/core-java-15/pom.xml
+++ b/core-java-modules/core-java-15/pom.xml
@@ -6,7 +6,6 @@
core-java-15
core-java-15
jar
- http://maven.apache.org
com.baeldung
diff --git a/core-java-modules/core-java-16/pom.xml b/core-java-modules/core-java-16/pom.xml
index a2c0d4855b..f8d287880a 100644
--- a/core-java-modules/core-java-16/pom.xml
+++ b/core-java-modules/core-java-16/pom.xml
@@ -4,10 +4,8 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-16
- 0.1.0-SNAPSHOT
core-java-16
jar
- http://maven.apache.org
com.baeldung
diff --git a/core-java-modules/core-java-17/pom.xml b/core-java-modules/core-java-17/pom.xml
index bc949d9050..e2d854be44 100644
--- a/core-java-modules/core-java-17/pom.xml
+++ b/core-java-modules/core-java-17/pom.xml
@@ -4,10 +4,8 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-17
- 0.1.0-SNAPSHOT
core-java-17
jar
- http://maven.apache.org
com.baeldung
diff --git a/core-java-modules/core-java-19/pom.xml b/core-java-modules/core-java-19/pom.xml
index 096b13e679..930b37391c 100644
--- a/core-java-modules/core-java-19/pom.xml
+++ b/core-java-modules/core-java-19/pom.xml
@@ -1,21 +1,17 @@
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
+ core-java-19
+ core-java-19
+
com.baeldung.core-java-modules
core-java-modules
0.0.1-SNAPSHOT
- core-java-19
-
-
- 19
- 19
- UTF-8
-
@@ -30,4 +26,10 @@
+
+ 19
+ 19
+ UTF-8
+
+
\ No newline at end of file
diff --git a/core-java-modules/core-java-19/src/main/java/com/baeldung/highcpu/Application.java b/core-java-modules/core-java-19/src/main/java/com/baeldung/highcpu/Application.java
new file mode 100644
index 0000000000..82162406b3
--- /dev/null
+++ b/core-java-modules/core-java-19/src/main/java/com/baeldung/highcpu/Application.java
@@ -0,0 +1,20 @@
+package com.baeldung.highcpu;
+
+import java.util.LinkedList;
+import java.util.List;
+import java.util.function.IntUnaryOperator;
+import java.util.stream.IntStream;
+
+public class Application {
+
+ static List generateList() {
+ return IntStream.range(0, 10000000).parallel().map(IntUnaryOperator.identity()).collect(LinkedList::new, List::add, List::addAll);
+ }
+
+ public static void main(String[] args) {
+ List list = generateList();
+ long start = System.nanoTime();
+ int value = list.get(9500000);
+ System.out.printf("Found value %d in %d nanos\n", value, (System.nanoTime() - start));
+ }
+}
diff --git a/core-java-modules/core-java-8-2/pom.xml b/core-java-modules/core-java-8-2/pom.xml
index 7db1e1ed4e..589e384613 100644
--- a/core-java-modules/core-java-8-2/pom.xml
+++ b/core-java-modules/core-java-8-2/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-8-2
- 0.1.0-SNAPSHOT
core-java-8-2
jar
diff --git a/core-java-modules/core-java-8-2/src/main/java/com/baeldung/helpervsutilityclasses/MyHelperClass.java b/core-java-modules/core-java-8-2/src/main/java/com/baeldung/helpervsutilityclasses/MyHelperClass.java
new file mode 100644
index 0000000000..40b58bf200
--- /dev/null
+++ b/core-java-modules/core-java-8-2/src/main/java/com/baeldung/helpervsutilityclasses/MyHelperClass.java
@@ -0,0 +1,40 @@
+package com.baeldung.helpervsutilityclasses;
+
+class MyHelperClass {
+ public double discount;
+ public MyHelperClass(double discount) {
+ if (discount > 0 && discount < 1) {
+ this.discount = discount;
+ }
+ }
+ public double discountedPrice(double price) {
+ return price - (price * discount);
+ }
+
+ public static int getMaxNumber(int[] numbers) {
+ if (numbers.length == 0) {
+ throw new IllegalArgumentException("Ensure array is not empty");
+ }
+ int max = numbers[0];
+ for (int i = 1; i < numbers.length; i++) {
+ if (numbers[i] > max) {
+ max = numbers[i];
+ }
+ }
+ return max;
+ }
+
+ public static int getMinNumber(int[] numbers) {
+ if (numbers.length == 0) {
+ throw new IllegalArgumentException("Ensure array is not empty");
+ }
+ int min = numbers[0];
+ for (int i = 1; i < numbers.length; i++) {
+ if (numbers[i] < min) {
+ min = numbers[i];
+ }
+ }
+ return min;
+ }
+
+}
diff --git a/core-java-modules/core-java-8-2/src/main/java/com/baeldung/helpervsutilityclasses/MyUtilityClass.java b/core-java-modules/core-java-8-2/src/main/java/com/baeldung/helpervsutilityclasses/MyUtilityClass.java
new file mode 100644
index 0000000000..1f0075995c
--- /dev/null
+++ b/core-java-modules/core-java-8-2/src/main/java/com/baeldung/helpervsutilityclasses/MyUtilityClass.java
@@ -0,0 +1,19 @@
+package com.baeldung.helpervsutilityclasses;
+
+public final class MyUtilityClass {
+
+ private MyUtilityClass(){}
+
+ public static String returnUpperCase(String stringInput) {
+ return stringInput.toUpperCase();
+ }
+
+ public static String returnLowerCase(String stringInput) {
+ return stringInput.toLowerCase();
+ }
+
+ public static String[] splitStringInput(String stringInput, String delimiter) {
+ return stringInput.split(delimiter);
+ }
+
+}
diff --git a/core-java-modules/core-java-8-2/src/test/java/com/baeldung/helpervsutilityclasses/MyHelperClassUnitTest.java b/core-java-modules/core-java-8-2/src/test/java/com/baeldung/helpervsutilityclasses/MyHelperClassUnitTest.java
new file mode 100644
index 0000000000..a0c1afea52
--- /dev/null
+++ b/core-java-modules/core-java-8-2/src/test/java/com/baeldung/helpervsutilityclasses/MyHelperClassUnitTest.java
@@ -0,0 +1,20 @@
+package com.baeldung.helpervsutilityclasses;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+import org.junit.jupiter.api.Test;
+
+class MyHelperClassUnitTest {
+
+ @Test
+ void whenCreatingHelperObject_thenHelperObjectShouldBeCreated() {
+ MyHelperClass myHelperClassObject = new MyHelperClass(0.10);
+ int[] numberArray = {15, 23, 66, 3, 51, 79};
+
+ assertNotNull(myHelperClassObject);
+
+ assertEquals(90, myHelperClassObject.discountedPrice(100.00));
+ assertEquals( 79, MyHelperClass.getMaxNumber(numberArray));
+ assertEquals(3, MyHelperClass.getMinNumber(numberArray));
+ }
+}
\ No newline at end of file
diff --git a/core-java-modules/core-java-8-2/src/test/java/com/baeldung/helpervsutilityclasses/MyUtilityClassUnitTest.java b/core-java-modules/core-java-8-2/src/test/java/com/baeldung/helpervsutilityclasses/MyUtilityClassUnitTest.java
new file mode 100644
index 0000000000..8b29f51959
--- /dev/null
+++ b/core-java-modules/core-java-8-2/src/test/java/com/baeldung/helpervsutilityclasses/MyUtilityClassUnitTest.java
@@ -0,0 +1,15 @@
+package com.baeldung.helpervsutilityclasses;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+import org.junit.jupiter.api.Test;
+
+class MyUtilityClassUnitTest {
+
+ @Test
+ void whenUsingUtilityMethods_thenAccessMethodsViaClassName(){
+ assertEquals( "INIUBONG", MyUtilityClass.returnUpperCase("iniubong"));
+ assertEquals("accra", MyUtilityClass.returnLowerCase("AcCrA"));
+ }
+
+}
\ No newline at end of file
diff --git a/core-java-modules/core-java-8-datetime-2/pom.xml b/core-java-modules/core-java-8-datetime-2/pom.xml
index 9e54b0ee12..ce349d9dc3 100644
--- a/core-java-modules/core-java-8-datetime-2/pom.xml
+++ b/core-java-modules/core-java-8-datetime-2/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-8-datetime-2
- ${project.parent.version}
core-java-8-datetime-2
jar
diff --git a/core-java-modules/core-java-8-datetime/pom.xml b/core-java-modules/core-java-8-datetime/pom.xml
index 01ec6c0b76..481b1a6a69 100644
--- a/core-java-modules/core-java-8-datetime/pom.xml
+++ b/core-java-modules/core-java-8-datetime/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-8-datetime
- ${project.parent.version}
core-java-8-datetime
jar
diff --git a/core-java-modules/core-java-8/pom.xml b/core-java-modules/core-java-8/pom.xml
index 89925bdbbb..fff7b7f2f9 100644
--- a/core-java-modules/core-java-8/pom.xml
+++ b/core-java-modules/core-java-8/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-8
- 0.1.0-SNAPSHOT
core-java-8
jar
diff --git a/core-java-modules/core-java-9-improvements/pom.xml b/core-java-modules/core-java-9-improvements/pom.xml
index 56d4ccff9f..f6f13ff409 100644
--- a/core-java-modules/core-java-9-improvements/pom.xml
+++ b/core-java-modules/core-java-9-improvements/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-9-improvements
- 0.2-SNAPSHOT
core-java-9-improvements
diff --git a/core-java-modules/core-java-9-jigsaw/pom.xml b/core-java-modules/core-java-9-jigsaw/pom.xml
index a26a88f4b0..70a2882234 100644
--- a/core-java-modules/core-java-9-jigsaw/pom.xml
+++ b/core-java-modules/core-java-9-jigsaw/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-9-jigsaw
- 0.2-SNAPSHOT
core-java-9-jigsaw
diff --git a/core-java-modules/core-java-9-new-features/pom.xml b/core-java-modules/core-java-9-new-features/pom.xml
index 78ffaff010..6821c9c340 100644
--- a/core-java-modules/core-java-9-new-features/pom.xml
+++ b/core-java-modules/core-java-9-new-features/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-9-new-features
- 0.2-SNAPSHOT
core-java-9-new-features
diff --git a/core-java-modules/core-java-9-streams/pom.xml b/core-java-modules/core-java-9-streams/pom.xml
index d3f81780d1..903194b3b3 100644
--- a/core-java-modules/core-java-9-streams/pom.xml
+++ b/core-java-modules/core-java-9-streams/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-9-streams
- 0.1.0-SNAPSHOT
core-java-9-streams
jar
diff --git a/core-java-modules/core-java-9/README.md b/core-java-modules/core-java-9/README.md
index 38965d88f1..bd7df0c8a6 100644
--- a/core-java-modules/core-java-9/README.md
+++ b/core-java-modules/core-java-9/README.md
@@ -5,7 +5,6 @@ This module contains articles about Java 9 core features
### Relevant Articles:
- [Method Handles in Java](https://www.baeldung.com/java-method-handles)
-- [Introduction to Chronicle Queue](https://www.baeldung.com/java-chronicle-queue)
- [Iterate Through a Range of Dates in Java](https://www.baeldung.com/java-iterate-date-range)
- [Initialize a HashMap in Java](https://www.baeldung.com/java-initialize-hashmap)
- [Immutable ArrayList in Java](https://www.baeldung.com/java-immutable-list)
diff --git a/core-java-modules/core-java-9/pom.xml b/core-java-modules/core-java-9/pom.xml
index 272af327cb..bcfdacdf1d 100644
--- a/core-java-modules/core-java-9/pom.xml
+++ b/core-java-modules/core-java-9/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-9
- 0.2-SNAPSHOT
core-java-9
diff --git a/core-java-modules/core-java-annotations/pom.xml b/core-java-modules/core-java-annotations/pom.xml
index a1f84ab563..6b1b9d802f 100644
--- a/core-java-modules/core-java-annotations/pom.xml
+++ b/core-java-modules/core-java-annotations/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-annotations
- 0.1.0-SNAPSHOT
core-java-annotations
jar
@@ -24,4 +23,12 @@
+
+
+ javax.annotation
+ javax.annotation-api
+ 1.3.2
+
+
+
\ No newline at end of file
diff --git a/core-java-modules/core-java-booleans/README.md b/core-java-modules/core-java-booleans/README.md
new file mode 100644
index 0000000000..fe7068c6f4
--- /dev/null
+++ b/core-java-modules/core-java-booleans/README.md
@@ -0,0 +1,6 @@
+## Core Java Booleans
+
+This module contains articles about Java Booleans.
+
+### Relevant Articles:
+- [Convert Boolean to String in Java](https://www.baeldung.com/java-convert-boolean-to-string)
diff --git a/core-java-modules/core-java-booleans/pom.xml b/core-java-modules/core-java-booleans/pom.xml
new file mode 100644
index 0000000000..3b0c28208f
--- /dev/null
+++ b/core-java-modules/core-java-booleans/pom.xml
@@ -0,0 +1,16 @@
+
+
+ 4.0.0
+ core-java-booleans
+ core-java-booleans
+ jar
+
+
+ com.baeldung.core-java-modules
+ core-java-modules
+ 0.0.1-SNAPSHOT
+
+
+
\ No newline at end of file
diff --git a/core-java-modules/core-java-booleans/src/test/java/com/baeldung/booleans/BooleanToStringUnitTest.java b/core-java-modules/core-java-booleans/src/test/java/com/baeldung/booleans/BooleanToStringUnitTest.java
new file mode 100644
index 0000000000..e20cc3508f
--- /dev/null
+++ b/core-java-modules/core-java-booleans/src/test/java/com/baeldung/booleans/BooleanToStringUnitTest.java
@@ -0,0 +1,48 @@
+package com.baeldung.booleans;
+
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+
+public class BooleanToStringUnitTest {
+ String optionToString(String optionName, boolean optionValue) {
+ return String.format("The option '%s' is %s.", optionName, optionValue ? "Enabled" : "Disabled");
+ }
+
+ @Test
+ void givenPrimitiveBoolean_whenConvertingUsingTernaryOperator_thenSuccess() {
+ boolean primitiveBoolean = true;
+ assertEquals("true", primitiveBoolean ? "true" : "false");
+
+ primitiveBoolean = false;
+ assertEquals("false", primitiveBoolean ? "true" : "false");
+
+ assertEquals("The option 'IgnoreWarnings' is Enabled.", optionToString("IgnoreWarnings", true));
+ }
+
+
+ @Test
+ void givenBooleanObject_whenConvertingUsingBooleanToString_thenSuccess() {
+ Boolean myBoolean = Boolean.TRUE;
+ assertEquals("true", myBoolean.toString());
+
+ myBoolean = Boolean.FALSE;
+ assertEquals("false", myBoolean.toString());
+
+ Boolean nullBoolean = null;
+ assertThrows(NullPointerException.class, () -> nullBoolean.toString());
+ }
+
+ @Test
+ void givenBooleanObject_whenConvertingUsingStringValueOf_thenSuccess() {
+ Boolean myBoolean = Boolean.TRUE;
+ assertEquals("true", String.valueOf(myBoolean));
+
+ myBoolean = Boolean.FALSE;
+ assertEquals("false", String.valueOf(myBoolean));
+
+ Boolean nullBoolean = null;
+ assertEquals("null", String.valueOf(nullBoolean));
+ }
+}
\ No newline at end of file
diff --git a/core-java-modules/core-java-char/pom.xml b/core-java-modules/core-java-char/pom.xml
index 7dc0923fb5..eb6cbee952 100644
--- a/core-java-modules/core-java-char/pom.xml
+++ b/core-java-modules/core-java-char/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-char
- 0.1.0-SNAPSHOT
core-java-char
jar
diff --git a/core-java-modules/core-java-collections-3/pom.xml b/core-java-modules/core-java-collections-3/pom.xml
index 6ef8e3c81a..373dc9db14 100644
--- a/core-java-modules/core-java-collections-3/pom.xml
+++ b/core-java-modules/core-java-collections-3/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-collections-3
- 0.1.0-SNAPSHOT
core-java-collections-3
jar
diff --git a/core-java-modules/core-java-collections-4/pom.xml b/core-java-modules/core-java-collections-4/pom.xml
index e88d5a6740..1a59411ecb 100644
--- a/core-java-modules/core-java-collections-4/pom.xml
+++ b/core-java-modules/core-java-collections-4/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-collections-4
- 0.1.0-SNAPSHOT
core-java-collections-4
jar
diff --git a/core-java-modules/core-java-collections-5/pom.xml b/core-java-modules/core-java-collections-5/pom.xml
index 67c9f7120c..6baecc2802 100644
--- a/core-java-modules/core-java-collections-5/pom.xml
+++ b/core-java-modules/core-java-collections-5/pom.xml
@@ -1,10 +1,9 @@
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-collections-5
- 0.0.1-SNAPSHOT
core-java-collections-5
jar
@@ -55,4 +54,5 @@
0.9.38
1.36
+
diff --git a/core-java-modules/core-java-collections-array-list/pom.xml b/core-java-modules/core-java-collections-array-list/pom.xml
index e3a115854c..ee0b102bb0 100644
--- a/core-java-modules/core-java-collections-array-list/pom.xml
+++ b/core-java-modules/core-java-collections-array-list/pom.xml
@@ -4,34 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-collections-array-list
- 0.1.0-SNAPSHOT
-
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
-
- ${maven-compiler-plugin.source}
- ${maven-compiler-plugin.target}
-
-
-
- org.apache.maven.plugins
- maven-surefire-plugin
- ${surefire.plugin.version}
-
-
- --add-opens java.base/java.util=ALL-UNNAMED
-
-
-
-
-
-
- 16
- 16
- 3.0.0-M3
-
core-java-collections-array-list
jar
@@ -55,4 +27,33 @@
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+ ${maven-compiler-plugin.source}
+ ${maven-compiler-plugin.target}
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+ ${surefire.plugin.version}
+
+
+ --add-opens java.base/java.util=ALL-UNNAMED
+
+
+
+
+
+
+
+ 16
+ 16
+ 3.0.0-M3
+
+
\ No newline at end of file
diff --git a/core-java-modules/core-java-collections-conversions-2/pom.xml b/core-java-modules/core-java-collections-conversions-2/pom.xml
index f6775a7a42..8cd0a6932b 100644
--- a/core-java-modules/core-java-collections-conversions-2/pom.xml
+++ b/core-java-modules/core-java-collections-conversions-2/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-collections-conversions-2
- 0.1.0-SNAPSHOT
core-java-collections-conversions-2
jar
diff --git a/core-java-modules/core-java-collections-conversions-2/src/main/java/com/baeldung/modelmapper/UserList.java b/core-java-modules/core-java-collections-conversions-2/src/main/java/com/baeldung/modelmapper/UserList.java
index 7b6bed807b..5907c159cb 100644
--- a/core-java-modules/core-java-collections-conversions-2/src/main/java/com/baeldung/modelmapper/UserList.java
+++ b/core-java-modules/core-java-collections-conversions-2/src/main/java/com/baeldung/modelmapper/UserList.java
@@ -9,6 +9,7 @@ import java.util.Collection;
*/
public class UserList {
+ public UserList() {}
private Collection users;
public Collection getUsers() {
diff --git a/core-java-modules/core-java-collections-conversions/pom.xml b/core-java-modules/core-java-collections-conversions/pom.xml
index 08a452da51..78e9847c0a 100644
--- a/core-java-modules/core-java-collections-conversions/pom.xml
+++ b/core-java-modules/core-java-collections-conversions/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-collections-conversions
- 0.1.0-SNAPSHOT
core-java-collections-conversions
jar
diff --git a/core-java-modules/core-java-collections-list-2/pom.xml b/core-java-modules/core-java-collections-list-2/pom.xml
index 59ab8c5f27..a305cdffc8 100644
--- a/core-java-modules/core-java-collections-list-2/pom.xml
+++ b/core-java-modules/core-java-collections-list-2/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-collections-list-2
- 0.1.0-SNAPSHOT
core-java-collections-list-2
jar
diff --git a/core-java-modules/core-java-collections-list-3/pom.xml b/core-java-modules/core-java-collections-list-3/pom.xml
index 912204bcc6..f01fe1f3b9 100644
--- a/core-java-modules/core-java-collections-list-3/pom.xml
+++ b/core-java-modules/core-java-collections-list-3/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-collections-list-3
- 0.1.0-SNAPSHOT
core-java-collections-list-3
jar
diff --git a/core-java-modules/core-java-collections-list-4/pom.xml b/core-java-modules/core-java-collections-list-4/pom.xml
index 964ea4f5a1..6d068298ec 100644
--- a/core-java-modules/core-java-collections-list-4/pom.xml
+++ b/core-java-modules/core-java-collections-list-4/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-collections-list-4
- 0.1.0-SNAPSHOT
core-java-collections-list-4
jar
diff --git a/core-java-modules/core-java-collections-list-5/pom.xml b/core-java-modules/core-java-collections-list-5/pom.xml
index 0807f7612c..b51dda4091 100644
--- a/core-java-modules/core-java-collections-list-5/pom.xml
+++ b/core-java-modules/core-java-collections-list-5/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-collections-list-5
- 0.1.0-SNAPSHOT
core-java-collections-list-5
jar
diff --git a/core-java-modules/core-java-collections-list/pom.xml b/core-java-modules/core-java-collections-list/pom.xml
index 0cc8828a0d..94abb334e0 100644
--- a/core-java-modules/core-java-collections-list/pom.xml
+++ b/core-java-modules/core-java-collections-list/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-collections-list
- 0.1.0-SNAPSHOT
core-java-collections-list
jar
diff --git a/core-java-modules/core-java-collections-list/src/test/java/com/baeldung/java8/Java8MaxMinUnitTest.java b/core-java-modules/core-java-collections-list/src/test/java/com/baeldung/java8/Java8MaxMinUnitTest.java
index c2cc39c685..e634fddab8 100644
--- a/core-java-modules/core-java-collections-list/src/test/java/com/baeldung/java8/Java8MaxMinUnitTest.java
+++ b/core-java-modules/core-java-collections-list/src/test/java/com/baeldung/java8/Java8MaxMinUnitTest.java
@@ -6,6 +6,7 @@ import com.baeldung.java_8_features.Person;
import org.junit.Test;
import java.util.Arrays;
+import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.NoSuchElementException;
@@ -71,4 +72,17 @@ public class Java8MaxMinUnitTest {
assertEquals(bugatti, maxBySpeed);
}
+
+ @Test
+ public void givenIntegerList_whenGetMinAndIndex_thenSuccess() {
+ final List listOfIntegers = Arrays.asList(11, 13, 9, 20, 7, 3, 30);
+ final Integer expectedMinValue = 3;
+ final Integer expectedMinIndex = 5;
+
+ Integer minValue = Collections.min(listOfIntegers);
+ Integer minIndex = listOfIntegers.indexOf(minValue);
+
+ assertEquals(minValue, expectedMinValue);
+ assertEquals(minIndex, expectedMinIndex);
+ }
}
diff --git a/core-java-modules/core-java-collections-maps-2/pom.xml b/core-java-modules/core-java-collections-maps-2/pom.xml
index 1e526ef892..15ca688ad2 100644
--- a/core-java-modules/core-java-collections-maps-2/pom.xml
+++ b/core-java-modules/core-java-collections-maps-2/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-collections-maps-2
- 0.1.0-SNAPSHOT
core-java-collections-maps-2
jar
diff --git a/core-java-modules/core-java-collections-maps-3/pom.xml b/core-java-modules/core-java-collections-maps-3/pom.xml
index a5bb6dc338..98a0d18fe9 100644
--- a/core-java-modules/core-java-collections-maps-3/pom.xml
+++ b/core-java-modules/core-java-collections-maps-3/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-collections-maps-3
- 0.1.0-SNAPSHOT
core-java-collections-maps-3
jar
diff --git a/core-java-modules/core-java-collections-maps-4/pom.xml b/core-java-modules/core-java-collections-maps-4/pom.xml
index a85e2cde2a..f1734b7379 100644
--- a/core-java-modules/core-java-collections-maps-4/pom.xml
+++ b/core-java-modules/core-java-collections-maps-4/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-collections-maps-4
- 0.1.0-SNAPSHOT
core-java-collections-maps-4
jar
diff --git a/core-java-modules/core-java-collections-maps-5/pom.xml b/core-java-modules/core-java-collections-maps-5/pom.xml
index f12e044b23..593ec5a8f6 100644
--- a/core-java-modules/core-java-collections-maps-5/pom.xml
+++ b/core-java-modules/core-java-collections-maps-5/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-collections-maps-5
- 0.1.0-SNAPSHOT
core-java-collections-maps-5
jar
diff --git a/core-java-modules/core-java-collections-maps-6/pom.xml b/core-java-modules/core-java-collections-maps-6/pom.xml
index 9910d08691..70a04c352b 100644
--- a/core-java-modules/core-java-collections-maps-6/pom.xml
+++ b/core-java-modules/core-java-collections-maps-6/pom.xml
@@ -1,17 +1,17 @@
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ 4.0.0
core-java-collections-maps-6
- 0.1.0-SNAPSHOT
core-java-collections-maps-6
jar
+
core-java-modules
com.baeldung.core-java-modules
0.0.1-SNAPSHOT
- 4.0.0
5.2.5.RELEASE
diff --git a/core-java-modules/core-java-collections-maps/pom.xml b/core-java-modules/core-java-collections-maps/pom.xml
index 3a1bf0d8a1..5e19117e08 100644
--- a/core-java-modules/core-java-collections-maps/pom.xml
+++ b/core-java-modules/core-java-collections-maps/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-collections-maps
- 0.1.0-SNAPSHOT
core-java-collections-maps
jar
diff --git a/core-java-modules/core-java-collections-set-2/pom.xml b/core-java-modules/core-java-collections-set-2/pom.xml
index b1aadb0c22..680c01d8ca 100644
--- a/core-java-modules/core-java-collections-set-2/pom.xml
+++ b/core-java-modules/core-java-collections-set-2/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-collections-set-2
- 0.0.1-SNAPSHOT
core-java-collections-set-2
jar
diff --git a/core-java-modules/core-java-collections-set/pom.xml b/core-java-modules/core-java-collections-set/pom.xml
index 0b6e324c78..e130837f1c 100644
--- a/core-java-modules/core-java-collections-set/pom.xml
+++ b/core-java-modules/core-java-collections-set/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-collections-set
- 0.1.0-SNAPSHOT
core-java-collections-set
jar
diff --git a/core-java-modules/core-java-collections/pom.xml b/core-java-modules/core-java-collections/pom.xml
index eab7a35584..be91492d06 100644
--- a/core-java-modules/core-java-collections/pom.xml
+++ b/core-java-modules/core-java-collections/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-collections
- 0.1.0-SNAPSHOT
core-java-collections
jar
diff --git a/core-java-modules/core-java-concurrency-2/pom.xml b/core-java-modules/core-java-concurrency-2/pom.xml
index c61f28a6b3..e373c829cc 100644
--- a/core-java-modules/core-java-concurrency-2/pom.xml
+++ b/core-java-modules/core-java-concurrency-2/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-concurrency-2
- 0.1.0-SNAPSHOT
core-java-concurrency-2
jar
diff --git a/core-java-modules/core-java-concurrency-advanced-2/pom.xml b/core-java-modules/core-java-concurrency-advanced-2/pom.xml
index 1f19dc8cca..5c96684311 100644
--- a/core-java-modules/core-java-concurrency-advanced-2/pom.xml
+++ b/core-java-modules/core-java-concurrency-advanced-2/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-concurrency-advanced-2
- 0.1.0-SNAPSHOT
core-java-concurrency-advanced-2
jar
diff --git a/core-java-modules/core-java-concurrency-advanced-2/src/test/java/com/baeldung/concurrent/prioritytaskexecution/PriorityJobSchedulerUnitTest.java b/core-java-modules/core-java-concurrency-advanced-2/src/test/java/com/baeldung/concurrent/prioritytaskexecution/PriorityJobSchedulerManualTest.java
similarity index 93%
rename from core-java-modules/core-java-concurrency-advanced-2/src/test/java/com/baeldung/concurrent/prioritytaskexecution/PriorityJobSchedulerUnitTest.java
rename to core-java-modules/core-java-concurrency-advanced-2/src/test/java/com/baeldung/concurrent/prioritytaskexecution/PriorityJobSchedulerManualTest.java
index 20e6a5ef5b..bd71cfc263 100644
--- a/core-java-modules/core-java-concurrency-advanced-2/src/test/java/com/baeldung/concurrent/prioritytaskexecution/PriorityJobSchedulerUnitTest.java
+++ b/core-java-modules/core-java-concurrency-advanced-2/src/test/java/com/baeldung/concurrent/prioritytaskexecution/PriorityJobSchedulerManualTest.java
@@ -2,7 +2,8 @@ package com.baeldung.concurrent.prioritytaskexecution;
import org.junit.Test;
-public class PriorityJobSchedulerUnitTest {
+//Converted to ManualTest due to thread sleep
+public class PriorityJobSchedulerManualTest {
private static final int POOL_SIZE = 1;
private static final int QUEUE_SIZE = 10;
diff --git a/core-java-modules/core-java-concurrency-advanced-3/pom.xml b/core-java-modules/core-java-concurrency-advanced-3/pom.xml
index 49a72112b4..7fa859c2d5 100644
--- a/core-java-modules/core-java-concurrency-advanced-3/pom.xml
+++ b/core-java-modules/core-java-concurrency-advanced-3/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-concurrency-advanced-3
- 0.1.0-SNAPSHOT
core-java-concurrency-advanced-3
jar
diff --git a/core-java-modules/core-java-concurrency-advanced-4/pom.xml b/core-java-modules/core-java-concurrency-advanced-4/pom.xml
index 5bd7ccfa07..2ffe19b13c 100644
--- a/core-java-modules/core-java-concurrency-advanced-4/pom.xml
+++ b/core-java-modules/core-java-concurrency-advanced-4/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-concurrency-advanced-4
- 0.1.0-SNAPSHOT
core-java-concurrency-advanced-4
jar
@@ -14,9 +13,6 @@
0.0.1-SNAPSHOT
-
-
-
core-java-concurrency-advanced-4
diff --git a/core-java-modules/core-java-concurrency-advanced/pom.xml b/core-java-modules/core-java-concurrency-advanced/pom.xml
index 3c726e1284..18cfc5371c 100644
--- a/core-java-modules/core-java-concurrency-advanced/pom.xml
+++ b/core-java-modules/core-java-concurrency-advanced/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-concurrency-advanced
- 0.1.0-SNAPSHOT
core-java-concurrency-advanced
jar
diff --git a/core-java-modules/core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/countdownlatch/Worker.java b/core-java-modules/core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/countdownlatch/Worker.java
index 389e25719b..d23f1faa69 100644
--- a/core-java-modules/core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/countdownlatch/Worker.java
+++ b/core-java-modules/core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/countdownlatch/Worker.java
@@ -1,9 +1,14 @@
package com.baeldung.concurrent.countdownlatch;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
import java.util.List;
import java.util.concurrent.CountDownLatch;
public class Worker implements Runnable {
+
+ private static Logger log = LoggerFactory.getLogger(Worker.class);
private final List outputScraper;
private final CountDownLatch countDownLatch;
@@ -15,7 +20,7 @@ public class Worker implements Runnable {
@Override
public void run() {
// Do some work
- System.out.println("Doing some logic");
+ log.debug("Doing some logic");
outputScraper.add("Counted down");
countDownLatch.countDown();
}
diff --git a/core-java-modules/core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/phaser/LongRunningAction.java b/core-java-modules/core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/phaser/LongRunningAction.java
index c022c02085..44f84ad77c 100644
--- a/core-java-modules/core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/phaser/LongRunningAction.java
+++ b/core-java-modules/core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/phaser/LongRunningAction.java
@@ -1,8 +1,13 @@
package com.baeldung.concurrent.phaser;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
import java.util.concurrent.Phaser;
class LongRunningAction implements Runnable {
+
+ private static Logger log = LoggerFactory.getLogger(LongRunningAction.class);
private String threadName;
private Phaser ph;
@@ -14,18 +19,18 @@ class LongRunningAction implements Runnable {
@Override
public void run() {
- System.out.println("This is phase " + ph.getPhase());
- System.out.println("Thread " + threadName + " before long running action");
+ log.info("This is phase {}", ph.getPhase());
+ log.info("Thread {} before long running action", threadName);
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
-
- System.out.println("Thread " + threadName + " action completed and waiting for others");
+
+ log.debug("Thread {} action completed and waiting for others", threadName);
ph.arriveAndAwaitAdvance();
- System.out.println("Thread " + threadName + " proceeding in phase " + ph.getPhase());
+ log.debug("Thread {} proceeding in phase {}", threadName, ph.getPhase());
ph.arriveAndDeregister();
}
diff --git a/core-java-modules/core-java-concurrency-advanced/src/test/java/com/baeldung/concurrent/phaser/PhaserUnitTest.java b/core-java-modules/core-java-concurrency-advanced/src/test/java/com/baeldung/concurrent/phaser/PhaserUnitTest.java
index 88c18b5149..384a1837c1 100644
--- a/core-java-modules/core-java-concurrency-advanced/src/test/java/com/baeldung/concurrent/phaser/PhaserUnitTest.java
+++ b/core-java-modules/core-java-concurrency-advanced/src/test/java/com/baeldung/concurrent/phaser/PhaserUnitTest.java
@@ -4,6 +4,9 @@ import org.junit.FixMethodOrder;
import org.junit.Test;
import org.junit.runners.MethodSorters;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Phaser;
@@ -13,6 +16,8 @@ import static junit.framework.TestCase.assertEquals;
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class PhaserUnitTest {
+ private static Logger log = LoggerFactory.getLogger(PhaserUnitTest.class);
+
@Test
public void givenPhaser_whenCoordinateWorksBetweenThreads_thenShouldCoordinateBetweenMultiplePhases() {
//given
@@ -26,19 +31,19 @@ public class PhaserUnitTest {
executorService.submit(new LongRunningAction("thread-3", ph));
//then
- System.out.println("Thread " + Thread.currentThread().getName() + " waiting for others");
+ log.debug("Thread {} waiting for others", Thread.currentThread().getName());
ph.arriveAndAwaitAdvance();
- System.out.println("Thread " + Thread.currentThread().getName() + " proceeding in phase " + ph.getPhase());
+ log.debug("Thread {} proceeding in phase {}", Thread.currentThread().getName(), ph.getPhase());
assertEquals(1, ph.getPhase());
//and
executorService.submit(new LongRunningAction("thread-4", ph));
executorService.submit(new LongRunningAction("thread-5", ph));
-
- System.out.println("Thread " + Thread.currentThread().getName() + " waiting for others");
+
+ log.debug("Thread {} waiting for others", Thread.currentThread().getName());
ph.arriveAndAwaitAdvance();
- System.out.println("Thread " + Thread.currentThread().getName() + " proceeding in phase " + ph.getPhase());
+ log.debug("Thread {} proceeding in phase {}", Thread.currentThread().getName(), ph.getPhase());
assertEquals(2, ph.getPhase());
diff --git a/core-java-modules/core-java-concurrency-advanced/src/test/resources/logback-test.xml b/core-java-modules/core-java-concurrency-advanced/src/test/resources/logback-test.xml
new file mode 100644
index 0000000000..56af2d397e
--- /dev/null
+++ b/core-java-modules/core-java-concurrency-advanced/src/test/resources/logback-test.xml
@@ -0,0 +1,19 @@
+
+
+
+
+ %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/core-java-modules/core-java-concurrency-basic-2/pom.xml b/core-java-modules/core-java-concurrency-basic-2/pom.xml
index 9ca12da7fb..0cdfd68f03 100644
--- a/core-java-modules/core-java-concurrency-basic-2/pom.xml
+++ b/core-java-modules/core-java-concurrency-basic-2/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-concurrency-basic-2
- 0.1.0-SNAPSHOT
core-java-concurrency-basic-2
jar
diff --git a/core-java-modules/core-java-concurrency-basic-3/pom.xml b/core-java-modules/core-java-concurrency-basic-3/pom.xml
index 7289877550..1983d3c163 100644
--- a/core-java-modules/core-java-concurrency-basic-3/pom.xml
+++ b/core-java-modules/core-java-concurrency-basic-3/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-concurrency-basic-3
- 0.1.0-SNAPSHOT
core-java-concurrency-basic-3
jar
@@ -14,6 +13,15 @@
0.0.1-SNAPSHOT
+
+
+ org.awaitility
+ awaitility
+ ${awaitility.version}
+ test
+
+
+
core-java-concurrency-basic-3
@@ -28,12 +36,4 @@
4.2.0
-
-
- org.awaitility
- awaitility
- ${awaitility.version}
- test
-
-
\ No newline at end of file
diff --git a/core-java-modules/core-java-concurrency-basic/pom.xml b/core-java-modules/core-java-concurrency-basic/pom.xml
index 1e3157291a..36d59f254c 100644
--- a/core-java-modules/core-java-concurrency-basic/pom.xml
+++ b/core-java-modules/core-java-concurrency-basic/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-concurrency-basic
- 0.1.0-SNAPSHOT
core-java-concurrency-basic
jar
diff --git a/core-java-modules/core-java-concurrency-collections-2/pom.xml b/core-java-modules/core-java-concurrency-collections-2/pom.xml
index 9a95662fae..a85721e474 100644
--- a/core-java-modules/core-java-concurrency-collections-2/pom.xml
+++ b/core-java-modules/core-java-concurrency-collections-2/pom.xml
@@ -3,7 +3,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-concurrency-collections-2
- 0.1.0-SNAPSHOT
core-java-concurrency-collections-2
jar
diff --git a/core-java-modules/core-java-concurrency-collections/pom.xml b/core-java-modules/core-java-concurrency-collections/pom.xml
index 8b8d2fe03b..a35da4ce49 100644
--- a/core-java-modules/core-java-concurrency-collections/pom.xml
+++ b/core-java-modules/core-java-concurrency-collections/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-concurrency-collections
- 0.1.0-SNAPSHOT
core-java-concurrency-collections
jar
diff --git a/core-java-modules/core-java-concurrency-simple/pom.xml b/core-java-modules/core-java-concurrency-simple/pom.xml
index 159a105035..a16df4fc97 100644
--- a/core-java-modules/core-java-concurrency-simple/pom.xml
+++ b/core-java-modules/core-java-concurrency-simple/pom.xml
@@ -3,7 +3,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-concurrency-simple
- 0.1.0-SNAPSHOT
core-java-concurrency-simple
jar
diff --git a/core-java-modules/core-java-console/pom.xml b/core-java-modules/core-java-console/pom.xml
index 200e2707dd..4debf9388b 100644
--- a/core-java-modules/core-java-console/pom.xml
+++ b/core-java-modules/core-java-console/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-console
- 0.1.0-SNAPSHOT
core-java-console
jar
diff --git a/core-java-modules/core-java-date-operations-1/pom.xml b/core-java-modules/core-java-date-operations-1/pom.xml
index c5d46723d8..5bfbb5bab0 100644
--- a/core-java-modules/core-java-date-operations-1/pom.xml
+++ b/core-java-modules/core-java-date-operations-1/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-date-operations-1
- ${project.parent.version}
core-java-date-operations-1
jar
diff --git a/core-java-modules/core-java-date-operations-2/pom.xml b/core-java-modules/core-java-date-operations-2/pom.xml
index 461ba70b62..c6a22a4166 100644
--- a/core-java-modules/core-java-date-operations-2/pom.xml
+++ b/core-java-modules/core-java-date-operations-2/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-date-operations-2
- ${project.parent.version}
core-java-date-operations-2
jar
diff --git a/core-java-modules/core-java-date-operations-3/README.md b/core-java-modules/core-java-date-operations-3/README.md
index 944ab4bd1b..0d36f9c8a2 100644
--- a/core-java-modules/core-java-date-operations-3/README.md
+++ b/core-java-modules/core-java-date-operations-3/README.md
@@ -5,4 +5,5 @@ This module contains articles about date operations in Java.
- [Create Date From Unix Timestamp in Java](https://www.baeldung.com/java-date-unix-timestamp)
- [Convert java.util.Date to java.sql.Date](https://www.baeldung.com/java-convert-util-date-to-sql)
+- [How to Determine Date of the First Day of the Week Using LocalDate in Java](https://www.baeldung.com/java-first-day-of-the-week)
- [[<-- Prev]](/core-java-modules/core-java-date-operations-2)
diff --git a/core-java-modules/core-java-date-operations-3/pom.xml b/core-java-modules/core-java-date-operations-3/pom.xml
index 8713139ba8..89c21a31c1 100644
--- a/core-java-modules/core-java-date-operations-3/pom.xml
+++ b/core-java-modules/core-java-date-operations-3/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-date-operations-3
- ${project.parent.version}
core-java-date-operations-3
jar
@@ -14,10 +13,4 @@
0.0.1-SNAPSHOT
-
-
-
-
-
-
\ No newline at end of file
diff --git a/core-java-modules/core-java-datetime-string-2/pom.xml b/core-java-modules/core-java-datetime-string-2/pom.xml
index 3ec9ccaac4..458fba25a2 100644
--- a/core-java-modules/core-java-datetime-string-2/pom.xml
+++ b/core-java-modules/core-java-datetime-string-2/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-datetime-string-2
- ${project.parent.version}
core-java-datetime-string-2
jar
diff --git a/core-java-modules/core-java-datetime-string/pom.xml b/core-java-modules/core-java-datetime-string/pom.xml
index 2b3c2edb02..3efb2fe728 100644
--- a/core-java-modules/core-java-datetime-string/pom.xml
+++ b/core-java-modules/core-java-datetime-string/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-datetime-string
- ${project.parent.version}
core-java-datetime-string
jar
@@ -20,7 +19,6 @@
commons-lang3
${commons-lang3.version}
-
commons-validator
commons-validator
diff --git a/core-java-modules/core-java-exceptions-2/pom.xml b/core-java-modules/core-java-exceptions-2/pom.xml
index 9103672cd4..8bf5605f09 100644
--- a/core-java-modules/core-java-exceptions-2/pom.xml
+++ b/core-java-modules/core-java-exceptions-2/pom.xml
@@ -5,8 +5,6 @@
core-java-exceptions-2
core-java-exceptions-2
jar
-
- http://maven.apache.org
com.baeldung.core-java-modules
diff --git a/core-java-modules/core-java-exceptions-3/pom.xml b/core-java-modules/core-java-exceptions-3/pom.xml
index 7eaa57edf1..6ef979b54a 100644
--- a/core-java-modules/core-java-exceptions-3/pom.xml
+++ b/core-java-modules/core-java-exceptions-3/pom.xml
@@ -3,9 +3,7 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
- com.baeldung.exceptions
core-java-exceptions-3
- 0.1.0-SNAPSHOT
core-java-exceptions-3
jar
diff --git a/core-java-modules/core-java-exceptions-4/pom.xml b/core-java-modules/core-java-exceptions-4/pom.xml
index e9eb1bf379..c41c782fcc 100644
--- a/core-java-modules/core-java-exceptions-4/pom.xml
+++ b/core-java-modules/core-java-exceptions-4/pom.xml
@@ -3,9 +3,7 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
- com.baeldung.exceptions
core-java-exceptions-4
- 0.1.0-SNAPSHOT
core-java-exceptions-4
jar
diff --git a/core-java-modules/core-java-exceptions/pom.xml b/core-java-modules/core-java-exceptions/pom.xml
index 866248b416..0bb6e86c76 100644
--- a/core-java-modules/core-java-exceptions/pom.xml
+++ b/core-java-modules/core-java-exceptions/pom.xml
@@ -3,9 +3,7 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
- com.baeldung.exceptions
core-java-exceptions
- 0.1.0-SNAPSHOT
core-java-exceptions
jar
diff --git a/core-java-modules/core-java-function/pom.xml b/core-java-modules/core-java-function/pom.xml
index ebc34aaf4b..e8b538ad24 100644
--- a/core-java-modules/core-java-function/pom.xml
+++ b/core-java-modules/core-java-function/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-function
- 0.1.0-SNAPSHOT
core-java-function
jar
diff --git a/core-java-modules/core-java-functional/pom.xml b/core-java-modules/core-java-functional/pom.xml
index 9ad47f8133..4b0bf9f730 100644
--- a/core-java-modules/core-java-functional/pom.xml
+++ b/core-java-modules/core-java-functional/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-functional
- 0.1.0-SNAPSHOT
core-java-functional
jar
diff --git a/core-java-modules/core-java-hex/pom.xml b/core-java-modules/core-java-hex/pom.xml
index afac1c4d66..71e6b15b2e 100644
--- a/core-java-modules/core-java-hex/pom.xml
+++ b/core-java-modules/core-java-hex/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-hex
- 0.1.0-SNAPSHOT
core-java-hex
jar
@@ -14,12 +13,4 @@
0.0.1-SNAPSHOT
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/core-java-modules/core-java-httpclient/pom.xml b/core-java-modules/core-java-httpclient/pom.xml
index 3df0447ff0..f3730d1b45 100644
--- a/core-java-modules/core-java-httpclient/pom.xml
+++ b/core-java-modules/core-java-httpclient/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-httpclient
- 0.1.0-SNAPSHOT
core-java-httpclient
jar
diff --git a/core-java-modules/core-java-io-2/pom.xml b/core-java-modules/core-java-io-2/pom.xml
index b5f43d5a94..8f4f2518fe 100644
--- a/core-java-modules/core-java-io-2/pom.xml
+++ b/core-java-modules/core-java-io-2/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-io-2
- 0.1.0-SNAPSHOT
core-java-io-2
jar
diff --git a/core-java-modules/core-java-io-3/pom.xml b/core-java-modules/core-java-io-3/pom.xml
index 4901133854..26ea301837 100644
--- a/core-java-modules/core-java-io-3/pom.xml
+++ b/core-java-modules/core-java-io-3/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-io-3
- 0.1.0-SNAPSHOT
core-java-io-3
jar
diff --git a/core-java-modules/core-java-io-4/pom.xml b/core-java-modules/core-java-io-4/pom.xml
index 2cc05698fc..30177e5c09 100644
--- a/core-java-modules/core-java-io-4/pom.xml
+++ b/core-java-modules/core-java-io-4/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-io-4
- 0.1.0-SNAPSHOT
core-java-io-4
jar
diff --git a/core-java-modules/core-java-io-4/src/test/resources/iostreams/TestFile.txt b/core-java-modules/core-java-io-4/src/test/resources/iostreams/TestFile.txt
new file mode 100644
index 0000000000..5dd01c177f
--- /dev/null
+++ b/core-java-modules/core-java-io-4/src/test/resources/iostreams/TestFile.txt
@@ -0,0 +1 @@
+Hello, world!
\ No newline at end of file
diff --git a/core-java-modules/core-java-io-apis-2/pom.xml b/core-java-modules/core-java-io-apis-2/pom.xml
index 70c3a87da2..5ad5528bad 100644
--- a/core-java-modules/core-java-io-apis-2/pom.xml
+++ b/core-java-modules/core-java-io-apis-2/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-io-apis-2
- 0.1.0-SNAPSHOT
core-java-io-apis-2
jar
diff --git a/core-java-modules/core-java-io-apis/pom.xml b/core-java-modules/core-java-io-apis/pom.xml
index fab2bff959..f9d404cd5b 100644
--- a/core-java-modules/core-java-io-apis/pom.xml
+++ b/core-java-modules/core-java-io-apis/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-io-apis
- 0.1.0-SNAPSHOT
core-java-io-apis
jar
diff --git a/core-java-modules/core-java-io-conversions-2/pom.xml b/core-java-modules/core-java-io-conversions-2/pom.xml
index 24708ad967..2c49bbfd81 100644
--- a/core-java-modules/core-java-io-conversions-2/pom.xml
+++ b/core-java-modules/core-java-io-conversions-2/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-io-conversions-2
- 0.1.0-SNAPSHOT
core-java-io-conversions-2
jar
diff --git a/core-java-modules/core-java-io-conversions/pom.xml b/core-java-modules/core-java-io-conversions/pom.xml
index 8d5a47a1ac..a44c352df2 100644
--- a/core-java-modules/core-java-io-conversions/pom.xml
+++ b/core-java-modules/core-java-io-conversions/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-io-conversions
- 0.1.0-SNAPSHOT
core-java-io-conversions
jar
diff --git a/core-java-modules/core-java-io/pom.xml b/core-java-modules/core-java-io/pom.xml
index e645534b46..ce072e6875 100644
--- a/core-java-modules/core-java-io/pom.xml
+++ b/core-java-modules/core-java-io/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-io
- 0.1.0-SNAPSHOT
core-java-io
jar
diff --git a/core-java-modules/core-java-jar/pom.xml b/core-java-modules/core-java-jar/pom.xml
index 0ce2414f1e..e4a43bdf1f 100644
--- a/core-java-modules/core-java-jar/pom.xml
+++ b/core-java-modules/core-java-jar/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-jar
- 0.1.0-SNAPSHOT
core-java-jar
jar
diff --git a/core-java-modules/core-java-jndi/pom.xml b/core-java-modules/core-java-jndi/pom.xml
index 752700c390..e48bec6622 100644
--- a/core-java-modules/core-java-jndi/pom.xml
+++ b/core-java-modules/core-java-jndi/pom.xml
@@ -3,9 +3,7 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
- com.baeldung.jndi
core-java-jndi
- 1.0-SNAPSHOT
core-java-jndi
diff --git a/core-java-modules/core-java-jvm-2/pom.xml b/core-java-modules/core-java-jvm-2/pom.xml
index 01628b0908..2ccc847a6f 100644
--- a/core-java-modules/core-java-jvm-2/pom.xml
+++ b/core-java-modules/core-java-jvm-2/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-jvm-2
- 0.1.0-SNAPSHOT
core-java-jvm-2
jar
@@ -27,9 +26,28 @@
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ ${maven-compiler-plugin.version}
+
+ ${maven.compiler.source}
+ ${maven.compiler.target}
+
+ --add-exports=java.base/jdk.internal.vm.annotation=ALL-UNNAMED
+
+
+
+
+
+
0.10
0.10.2
+ 11
+ 11
\ No newline at end of file
diff --git a/core-java-modules/core-java-jvm-2/src/test/java/com/baeldung/memlayout/MemoryLayoutUnitTest.java b/core-java-modules/core-java-jvm-2/src/test/java/com/baeldung/memlayout/MemoryLayoutUnitTest.java
index 2f226d7657..760115877e 100644
--- a/core-java-modules/core-java-jvm-2/src/test/java/com/baeldung/memlayout/MemoryLayoutUnitTest.java
+++ b/core-java-modules/core-java-jvm-2/src/test/java/com/baeldung/memlayout/MemoryLayoutUnitTest.java
@@ -3,7 +3,8 @@ package com.baeldung.memlayout;
import org.junit.Test;
import org.openjdk.jol.info.ClassLayout;
import org.openjdk.jol.vm.VM;
-import sun.misc.Contended;
+
+import jdk.internal.vm.annotation.Contended;
public class MemoryLayoutUnitTest {
diff --git a/core-java-modules/core-java-jvm-3/pom.xml b/core-java-modules/core-java-jvm-3/pom.xml
index cb2d8b0b85..78f4201c94 100644
--- a/core-java-modules/core-java-jvm-3/pom.xml
+++ b/core-java-modules/core-java-jvm-3/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-jvm-3
- 0.1.0-SNAPSHOT
core-java-jvm-3
jar
@@ -14,7 +13,4 @@
0.0.1-SNAPSHOT
-
-
-
\ No newline at end of file
diff --git a/core-java-modules/core-java-jvm/pom.xml b/core-java-modules/core-java-jvm/pom.xml
index d26c72323f..52bdf8bc5d 100644
--- a/core-java-modules/core-java-jvm/pom.xml
+++ b/core-java-modules/core-java-jvm/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-jvm
- 0.1.0-SNAPSHOT
core-java-jvm
jar
@@ -30,13 +29,6 @@
esapi
${esapi.version}
-
- com.sun
- tools
- ${sun.tools.version}
- system
- ${java.home}/../lib/tools.jar
-
org.ow2.asm
asm
@@ -176,9 +168,8 @@
3.27.0-GA
- 1.8.0
0.10
- 8.0.1
+ 9.4
6.5.0
diff --git a/core-java-modules/core-java-jvm/src/main/java/com/baeldung/classloader/PrintClassLoader.java b/core-java-modules/core-java-jvm/src/main/java/com/baeldung/classloader/PrintClassLoader.java
index 09ee68bf6e..cd7000b419 100644
--- a/core-java-modules/core-java-jvm/src/main/java/com/baeldung/classloader/PrintClassLoader.java
+++ b/core-java-modules/core-java-jvm/src/main/java/com/baeldung/classloader/PrintClassLoader.java
@@ -1,13 +1,7 @@
package com.baeldung.classloader;
-import com.sun.javafx.util.Logging;
+import java.sql.DriverManager;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.net.URLConnection;
import java.util.ArrayList;
public class PrintClassLoader {
@@ -15,7 +9,7 @@ public class PrintClassLoader {
public void printClassLoaders() throws ClassNotFoundException {
System.out.println("Classloader of this class:" + PrintClassLoader.class.getClassLoader());
- System.out.println("Classloader of Logging:" + Logging.class.getClassLoader());
+ System.out.println("Classloader of DriverManager:" + DriverManager.class.getClassLoader());
System.out.println("Classloader of ArrayList:" + ArrayList.class.getClassLoader());
}
diff --git a/core-java-modules/core-java-jvm/src/test/java/com/baeldung/bytecode/ViewBytecodeUnitTest.java b/core-java-modules/core-java-jvm/src/test/java/com/baeldung/bytecode/ViewBytecodeUnitTest.java
index 5b0fdf26d4..2a7366c322 100644
--- a/core-java-modules/core-java-jvm/src/test/java/com/baeldung/bytecode/ViewBytecodeUnitTest.java
+++ b/core-java-modules/core-java-jvm/src/test/java/com/baeldung/bytecode/ViewBytecodeUnitTest.java
@@ -33,7 +33,7 @@ public class ViewBytecodeUnitTest {
JavaClass objectClazz = Repository.lookupClass("java.lang.Object");
assertEquals(objectClazz.getClassName(), "java.lang.Object");
- assertEquals(objectClazz.getMethods().length, 14);
+ assertEquals(objectClazz.getMethods().length, 12);
assertTrue(objectClazz.toString().contains("public class java.lang.Object"));
}
@@ -43,7 +43,7 @@ public class ViewBytecodeUnitTest {
ClassFile cf = cp.get("java.lang.Object").getClassFile();
assertEquals(cf.getName(), "java.lang.Object");
- assertEquals(cf.getMethods().size(), 14);
+ assertEquals(cf.getMethods().size(), 12);
}
}
diff --git a/core-java-modules/core-java-lambdas/pom.xml b/core-java-modules/core-java-lambdas/pom.xml
index f1e61ab8bf..a7fc5355d7 100644
--- a/core-java-modules/core-java-lambdas/pom.xml
+++ b/core-java-modules/core-java-lambdas/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-lambdas
- 0.1.0-SNAPSHOT
core-java-lambdas
jar
diff --git a/core-java-modules/core-java-lang-2/pom.xml b/core-java-modules/core-java-lang-2/pom.xml
index 4a89a22577..22055cf252 100644
--- a/core-java-modules/core-java-lang-2/pom.xml
+++ b/core-java-modules/core-java-lang-2/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-lang-2
- 0.1.0-SNAPSHOT
core-java-lang-2
jar
diff --git a/core-java-modules/core-java-lang-2/src/test/java/com/baeldung/headlessmode/HeadlessModeUnitTest.java b/core-java-modules/core-java-lang-2/src/test/java/com/baeldung/headlessmode/HeadlessModeUnitTest.java
index a17c1600f3..d64d8c16da 100644
--- a/core-java-modules/core-java-lang-2/src/test/java/com/baeldung/headlessmode/HeadlessModeUnitTest.java
+++ b/core-java-modules/core-java-lang-2/src/test/java/com/baeldung/headlessmode/HeadlessModeUnitTest.java
@@ -3,13 +3,12 @@ package com.baeldung.headlessmode;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
-import java.awt.Canvas;
-import java.awt.Font;
-import java.awt.FontMetrics;
-import java.awt.Frame;
-import java.awt.GraphicsEnvironment;
-import java.awt.HeadlessException;
+import java.awt.*;
import java.awt.image.BufferedImage;
+import java.awt.image.ColorModel;
+import java.awt.image.ComponentColorModel;
+import java.awt.image.DataBuffer;
+import java.awt.image.WritableRaster;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
@@ -58,7 +57,7 @@ public class HeadlessModeUnitTest {
boolean result = false;
try (InputStream inStream = HeadlessModeUnitTest.class.getResourceAsStream(IN_FILE); FileOutputStream outStream = new FileOutputStream(OUT_FILE)) {
BufferedImage inputImage = ImageIO.read(inStream);
- result = ImageIO.write(inputImage, FORMAT, outStream);
+ result = ImageIO.write(removeAlphaChannel(inputImage), FORMAT, outStream);
}
assertThat(result).isTrue();
@@ -84,4 +83,10 @@ public class HeadlessModeUnitTest {
assertThat(FlexibleApp.iAmFlexible()).isEqualTo(FlexibleApp.HEADED);
}
+ private BufferedImage removeAlphaChannel(BufferedImage inputImage) {
+ final WritableRaster raster = inputImage.getRaster();
+ final WritableRaster newRaster = raster.createWritableChild(0, 0, inputImage.getWidth(), inputImage.getHeight(), 0, 0, new int[]{0, 1, 2});
+ ColorModel newCM = new ComponentColorModel(inputImage.getColorModel().getColorSpace(), false, false, Transparency.OPAQUE, DataBuffer.TYPE_BYTE);
+ return new BufferedImage(newCM, newRaster, false, null);
+ }
}
diff --git a/core-java-modules/core-java-lang-3/pom.xml b/core-java-modules/core-java-lang-3/pom.xml
index 331d91dff6..f29fa6494a 100644
--- a/core-java-modules/core-java-lang-3/pom.xml
+++ b/core-java-modules/core-java-lang-3/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-lang-3
- 0.1.0-SNAPSHOT
core-java-lang-3
jar
diff --git a/core-java-modules/core-java-lang-4/pom.xml b/core-java-modules/core-java-lang-4/pom.xml
index de67ddf55a..6977621a0e 100644
--- a/core-java-modules/core-java-lang-4/pom.xml
+++ b/core-java-modules/core-java-lang-4/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-lang-4
- 0.1.0-SNAPSHOT
core-java-lang-4
jar
diff --git a/core-java-modules/core-java-lang-5/pom.xml b/core-java-modules/core-java-lang-5/pom.xml
index e3130632fb..8e95fc4405 100644
--- a/core-java-modules/core-java-lang-5/pom.xml
+++ b/core-java-modules/core-java-lang-5/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-lang-5
- 0.1.0-SNAPSHOT
core-java-lang-5
jar
@@ -13,12 +12,6 @@
core-java-modules
0.0.1-SNAPSHOT
-
-
- 3.12.0
- 0.10.2
-
-
core-java-lang-5
@@ -29,4 +22,10 @@
+
+
+ 3.12.0
+ 0.10.2
+
+
\ No newline at end of file
diff --git a/core-java-modules/core-java-lang-math-2/pom.xml b/core-java-modules/core-java-lang-math-2/pom.xml
index e6ead53350..223c791d35 100644
--- a/core-java-modules/core-java-lang-math-2/pom.xml
+++ b/core-java-modules/core-java-lang-math-2/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-lang-math-2
- 0.0.1-SNAPSHOT
core-java-lang-math-2
diff --git a/core-java-modules/core-java-lang-math-3/pom.xml b/core-java-modules/core-java-lang-math-3/pom.xml
index 38cb6dfa17..9cd3673df3 100644
--- a/core-java-modules/core-java-lang-math-3/pom.xml
+++ b/core-java-modules/core-java-lang-math-3/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-lang-math-3
- 0.0.1-SNAPSHOT
core-java-lang-math-3
diff --git a/core-java-modules/core-java-lang-math/pom.xml b/core-java-modules/core-java-lang-math/pom.xml
index 37550b67d8..551e5db1d5 100644
--- a/core-java-modules/core-java-lang-math/pom.xml
+++ b/core-java-modules/core-java-lang-math/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-lang-math
- 0.1.0-SNAPSHOT
core-java-lang-math
jar
diff --git a/core-java-modules/core-java-lang-operators-2/pom.xml b/core-java-modules/core-java-lang-operators-2/pom.xml
index 9d925c553a..4170f9f6a0 100644
--- a/core-java-modules/core-java-lang-operators-2/pom.xml
+++ b/core-java-modules/core-java-lang-operators-2/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-lang-operators-2
- 0.1.0-SNAPSHOT
core-java-lang-operators-2
jar
diff --git a/core-java-modules/core-java-lang-operators/pom.xml b/core-java-modules/core-java-lang-operators/pom.xml
index c61fb81354..1815d01dcc 100644
--- a/core-java-modules/core-java-lang-operators/pom.xml
+++ b/core-java-modules/core-java-lang-operators/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-lang-operators
- 0.1.0-SNAPSHOT
core-java-lang-operators
jar
diff --git a/core-java-modules/core-java-lang-syntax-2/pom.xml b/core-java-modules/core-java-lang-syntax-2/pom.xml
index fdb0503174..bae5f0b6bd 100644
--- a/core-java-modules/core-java-lang-syntax-2/pom.xml
+++ b/core-java-modules/core-java-lang-syntax-2/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-lang-syntax-2
- 0.1.0-SNAPSHOT
core-java-lang-syntax-2
jar
diff --git a/core-java-modules/core-java-lang-syntax/pom.xml b/core-java-modules/core-java-lang-syntax/pom.xml
index 7cdbc40fbc..005bdc73cc 100644
--- a/core-java-modules/core-java-lang-syntax/pom.xml
+++ b/core-java-modules/core-java-lang-syntax/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-lang-syntax
- 0.1.0-SNAPSHOT
core-java-lang-syntax
jar
diff --git a/core-java-modules/core-java-lang/pom.xml b/core-java-modules/core-java-lang/pom.xml
index 4989c6a5a7..27cf0ac276 100644
--- a/core-java-modules/core-java-lang/pom.xml
+++ b/core-java-modules/core-java-lang/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-lang
- 0.1.0-SNAPSHOT
core-java-lang
jar
diff --git a/core-java-modules/core-java-locale/README.md b/core-java-modules/core-java-locale/README.md
new file mode 100644
index 0000000000..744b5e760f
--- /dev/null
+++ b/core-java-modules/core-java-locale/README.md
@@ -0,0 +1,6 @@
+ Core Java Locale
+
+### Relevant Articles:
+
+- [A Guide to the ResourceBundle](http://www.baeldung.com/java-resourcebundle)
+
diff --git a/core-java-modules/core-java-locale/pom.xml b/core-java-modules/core-java-locale/pom.xml
new file mode 100644
index 0000000000..f493d572a1
--- /dev/null
+++ b/core-java-modules/core-java-locale/pom.xml
@@ -0,0 +1,20 @@
+
+
+ 4.0.0
+ core-java-locale
+ 0.1.0-SNAPSHOT
+ core-java-locale
+ jar
+
+
+ com.baeldung.core-java-modules
+ core-java-modules
+ 0.0.1-SNAPSHOT
+
+
+
+
+
+
\ No newline at end of file
diff --git a/core-java-modules/core-java/src/main/java/com/baeldung/resourcebundle/ExampleControl.java b/core-java-modules/core-java-locale/src/main/java/com/baeldung/resourcebundle/ExampleControl.java
similarity index 100%
rename from core-java-modules/core-java/src/main/java/com/baeldung/resourcebundle/ExampleControl.java
rename to core-java-modules/core-java-locale/src/main/java/com/baeldung/resourcebundle/ExampleControl.java
diff --git a/core-java-modules/core-java/src/main/java/com/baeldung/resourcebundle/ExampleResource.java b/core-java-modules/core-java-locale/src/main/java/com/baeldung/resourcebundle/ExampleResource.java
similarity index 100%
rename from core-java-modules/core-java/src/main/java/com/baeldung/resourcebundle/ExampleResource.java
rename to core-java-modules/core-java-locale/src/main/java/com/baeldung/resourcebundle/ExampleResource.java
diff --git a/core-java-modules/core-java/src/main/java/com/baeldung/resourcebundle/ExampleResource_pl.java b/core-java-modules/core-java-locale/src/main/java/com/baeldung/resourcebundle/ExampleResource_pl.java
similarity index 100%
rename from core-java-modules/core-java/src/main/java/com/baeldung/resourcebundle/ExampleResource_pl.java
rename to core-java-modules/core-java-locale/src/main/java/com/baeldung/resourcebundle/ExampleResource_pl.java
diff --git a/core-java-modules/core-java/src/main/java/com/baeldung/resourcebundle/ExampleResource_pl_PL.java b/core-java-modules/core-java-locale/src/main/java/com/baeldung/resourcebundle/ExampleResource_pl_PL.java
similarity index 100%
rename from core-java-modules/core-java/src/main/java/com/baeldung/resourcebundle/ExampleResource_pl_PL.java
rename to core-java-modules/core-java-locale/src/main/java/com/baeldung/resourcebundle/ExampleResource_pl_PL.java
diff --git a/core-java-modules/core-java/src/main/resources/resourcebundle/resource.properties b/core-java-modules/core-java-locale/src/main/resources/resourcebundle/resource.properties
similarity index 100%
rename from core-java-modules/core-java/src/main/resources/resourcebundle/resource.properties
rename to core-java-modules/core-java-locale/src/main/resources/resourcebundle/resource.properties
diff --git a/core-java-modules/core-java/src/main/resources/resourcebundle/resource_en.properties b/core-java-modules/core-java-locale/src/main/resources/resourcebundle/resource_en.properties
similarity index 100%
rename from core-java-modules/core-java/src/main/resources/resourcebundle/resource_en.properties
rename to core-java-modules/core-java-locale/src/main/resources/resourcebundle/resource_en.properties
diff --git a/core-java-modules/core-java/src/main/resources/resourcebundle/resource_pl_PL.properties b/core-java-modules/core-java-locale/src/main/resources/resourcebundle/resource_pl_PL.properties
similarity index 100%
rename from core-java-modules/core-java/src/main/resources/resourcebundle/resource_pl_PL.properties
rename to core-java-modules/core-java-locale/src/main/resources/resourcebundle/resource_pl_PL.properties
diff --git a/core-java-modules/core-java/src/test/java/com/baeldung/resourcebundle/ExampleResourceUnitTest.java b/core-java-modules/core-java-locale/src/test/java/com/baeldung/resourcebundle/ExampleResourceUnitTest.java
similarity index 100%
rename from core-java-modules/core-java/src/test/java/com/baeldung/resourcebundle/ExampleResourceUnitTest.java
rename to core-java-modules/core-java-locale/src/test/java/com/baeldung/resourcebundle/ExampleResourceUnitTest.java
diff --git a/core-java-modules/core-java/src/test/java/com/baeldung/resourcebundle/PropertyResourceUnitTest.java b/core-java-modules/core-java-locale/src/test/java/com/baeldung/resourcebundle/PropertyResourceUnitTest.java
similarity index 100%
rename from core-java-modules/core-java/src/test/java/com/baeldung/resourcebundle/PropertyResourceUnitTest.java
rename to core-java-modules/core-java-locale/src/test/java/com/baeldung/resourcebundle/PropertyResourceUnitTest.java
diff --git a/core-java-modules/core-java-networking-4/pom.xml b/core-java-modules/core-java-networking-4/pom.xml
index a3694cfea8..5fca4a1cab 100644
--- a/core-java-modules/core-java-networking-4/pom.xml
+++ b/core-java-modules/core-java-networking-4/pom.xml
@@ -14,7 +14,6 @@
-
commons-validator
commons-validator
@@ -25,7 +24,6 @@
jsoup
${jsoup.version}
-
diff --git a/core-java-modules/core-java-networking/pom.xml b/core-java-modules/core-java-networking/pom.xml
index 9974134eae..19c620198d 100644
--- a/core-java-modules/core-java-networking/pom.xml
+++ b/core-java-modules/core-java-networking/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-networking
- 0.1.0-SNAPSHOT
core-java-networking
jar
diff --git a/core-java-modules/core-java-nio-2/pom.xml b/core-java-modules/core-java-nio-2/pom.xml
index eb56c2bf68..e35b70cfc7 100644
--- a/core-java-modules/core-java-nio-2/pom.xml
+++ b/core-java-modules/core-java-nio-2/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-nio-2
- 0.1.0-SNAPSHOT
core-java-nio-2
jar
diff --git a/core-java-modules/core-java-nio/pom.xml b/core-java-modules/core-java-nio/pom.xml
index 9e1c529a65..35fef82df5 100644
--- a/core-java-modules/core-java-nio/pom.xml
+++ b/core-java-modules/core-java-nio/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-nio
- 0.1.0-SNAPSHOT
core-java-nio
jar
diff --git a/core-java-modules/core-java-nio/src/main/java/com/baeldung/lines/NumberOfLineFinder.java b/core-java-modules/core-java-nio/src/main/java/com/baeldung/lines/NumberOfLineFinder.java
index b355295dab..f5d5fb2b4f 100644
--- a/core-java-modules/core-java-nio/src/main/java/com/baeldung/lines/NumberOfLineFinder.java
+++ b/core-java-modules/core-java-nio/src/main/java/com/baeldung/lines/NumberOfLineFinder.java
@@ -37,7 +37,7 @@ public class NumberOfLineFinder {
int lines = 0;
try (LineNumberReader reader = new LineNumberReader(new FileReader(fileName))) {
reader.skip(Integer.MAX_VALUE);
- lines = reader.getLineNumber() + 1;
+ lines = reader.getLineNumber();
} catch (IOException ioe) {
ioe.printStackTrace();
}
diff --git a/core-java-modules/core-java-nio/src/test/java/com/baeldung/creationdate/CreationDateResolverUnitTest.java b/core-java-modules/core-java-nio/src/test/java/com/baeldung/creationdate/CreationDateResolverUnitTest.java
index 5402852c74..5e7929859d 100644
--- a/core-java-modules/core-java-nio/src/test/java/com/baeldung/creationdate/CreationDateResolverUnitTest.java
+++ b/core-java-modules/core-java-nio/src/test/java/com/baeldung/creationdate/CreationDateResolverUnitTest.java
@@ -21,9 +21,11 @@ public class CreationDateResolverUnitTest {
final Instant response = creationDateResolver.resolveCreationTimeWithBasicAttributes(path);
- assertTrue(Instant
- .now()
- .isAfter(response));
+ Optional.of(response).ifPresent((value) -> {
+ assertTrue(Instant
+ .now()
+ .isAfter(value));
+ });
}
diff --git a/core-java-modules/core-java-numbers-2/pom.xml b/core-java-modules/core-java-numbers-2/pom.xml
index ac3843607e..46e0fa47b4 100644
--- a/core-java-modules/core-java-numbers-2/pom.xml
+++ b/core-java-modules/core-java-numbers-2/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-numbers-2
- 0.1.0-SNAPSHOT
core-java-numbers-2
jar
diff --git a/core-java-modules/core-java-numbers-3/src/test/java/com/baeldung/formatNumber/FormatNumberUnitTest.java b/core-java-modules/core-java-numbers-3/src/test/java/com/baeldung/formatNumber/FormatNumberUnitTest.java
index 4f0358c6a2..6d78426a56 100644
--- a/core-java-modules/core-java-numbers-3/src/test/java/com/baeldung/formatNumber/FormatNumberUnitTest.java
+++ b/core-java-modules/core-java-numbers-3/src/test/java/com/baeldung/formatNumber/FormatNumberUnitTest.java
@@ -75,8 +75,8 @@ public class FormatNumberUnitTest {
public void givenCurrency_whenFormatNumberCurrencyWithChosenLocalisation_thenGetExpectedResult() {
double value = 23_500;
assertThat(currencyWithChosenLocalisation(value, new Locale("en", "US"))).isEqualTo("$23,500.00");
- assertThat(currencyWithChosenLocalisation(value, new Locale("zh", "CN"))).isEqualTo("¥23,500.00");
- assertThat(currencyWithChosenLocalisation(value, new Locale("pl", "PL"))).isEqualTo("23 500 zł");
+ assertThat(currencyWithChosenLocalisation(value, new Locale("zh", "CN"))).isEqualTo("¥23,500.00");
+ assertThat(currencyWithChosenLocalisation(value, new Locale("pl", "PL"))).isEqualTo("23 500,00 zł");
}
}
diff --git a/core-java-modules/core-java-numbers-6/README.md b/core-java-modules/core-java-numbers-6/README.md
new file mode 100644
index 0000000000..2c0b0554c4
--- /dev/null
+++ b/core-java-modules/core-java-numbers-6/README.md
@@ -0,0 +1,2 @@
+### Relevant Articles:
+- [Java Program to Calculate Pi](https://www.baeldung.com/java-monte-carlo-compute-pi)
diff --git a/core-java-modules/core-java-numbers-6/pom.xml b/core-java-modules/core-java-numbers-6/pom.xml
new file mode 100644
index 0000000000..0f78f41b9f
--- /dev/null
+++ b/core-java-modules/core-java-numbers-6/pom.xml
@@ -0,0 +1,25 @@
+
+ 4.0.0
+ core-java-numbers-6
+ core-java-numbers-6
+ jar
+
+
+ com.baeldung.core-java-modules
+ core-java-modules
+ 0.0.1-SNAPSHOT
+
+
+
+ core-java-numbers-6
+
+
+ src/main/resources
+ true
+
+
+
+
+
\ No newline at end of file
diff --git a/core-java-modules/core-java-numbers-6/src/test/java/com/baeldung/pi/PiProgramUnitTest.java b/core-java-modules/core-java-numbers-6/src/test/java/com/baeldung/pi/PiProgramUnitTest.java
new file mode 100644
index 0000000000..d47942a517
--- /dev/null
+++ b/core-java-modules/core-java-numbers-6/src/test/java/com/baeldung/pi/PiProgramUnitTest.java
@@ -0,0 +1,31 @@
+package com.baeldung.pi;
+
+import static org.junit.Assert.*;
+
+import java.util.Random;
+import org.junit.Test;
+
+public class PiProgramUnitTest {
+
+ @Test
+ public void givenPiCalculator_whenCalculatePiWithOneMillionPoints_thenEstimatedPiIsWithinTolerance() {
+ int totalPoints = 1000000;
+ int insideCircle = 0;
+
+ Random random = new Random();
+
+ for (long i = 0; i < totalPoints; i++) {
+ double x = random.nextDouble() * 2 - 1;
+ double y = random.nextDouble() * 2 - 1;
+
+ if (x * x + y * y <= 1) {
+ insideCircle++;
+ }
+
+ }
+ double pi = 4.0 * insideCircle / totalPoints;
+
+ assertEquals(Math.PI, pi, 0.01);
+ }
+
+}
diff --git a/core-java-modules/core-java-numbers/pom.xml b/core-java-modules/core-java-numbers/pom.xml
index 4b2cae8ee9..38def238e8 100644
--- a/core-java-modules/core-java-numbers/pom.xml
+++ b/core-java-modules/core-java-numbers/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-numbers
- 0.1.0-SNAPSHOT
core-java-numbers
jar
diff --git a/core-java-modules/core-java-optional/pom.xml b/core-java-modules/core-java-optional/pom.xml
index 08441f6cee..eeefed867e 100644
--- a/core-java-modules/core-java-optional/pom.xml
+++ b/core-java-modules/core-java-optional/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-optional
- 0.1.0-SNAPSHOT
core-java-optional
jar
diff --git a/core-java-modules/core-java-os/pom.xml b/core-java-modules/core-java-os/pom.xml
index ef29e435a5..d4ee34b8b7 100644
--- a/core-java-modules/core-java-os/pom.xml
+++ b/core-java-modules/core-java-os/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-os
- 0.1.0-SNAPSHOT
core-java-os
jar
diff --git a/core-java-modules/core-java-perf/pom.xml b/core-java-modules/core-java-perf/pom.xml
index f6f3ef795c..c21fc94ec1 100644
--- a/core-java-modules/core-java-perf/pom.xml
+++ b/core-java-modules/core-java-perf/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-perf
- 0.1.0-SNAPSHOT
core-java-perf
jar
diff --git a/core-java-modules/core-java-reflection-2/pom.xml b/core-java-modules/core-java-reflection-2/pom.xml
index ee3eeee734..c7a4981533 100644
--- a/core-java-modules/core-java-reflection-2/pom.xml
+++ b/core-java-modules/core-java-reflection-2/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-reflection-2
- 0.1.0-SNAPSHOT
core-java-reflection-2
jar
diff --git a/core-java-modules/core-java-reflection-private-constructor/pom.xml b/core-java-modules/core-java-reflection-private-constructor/pom.xml
index b53aa2c61b..aee7815e23 100644
--- a/core-java-modules/core-java-reflection-private-constructor/pom.xml
+++ b/core-java-modules/core-java-reflection-private-constructor/pom.xml
@@ -1,10 +1,9 @@
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-reflection-private-constructor
- 0.1.0-SNAPSHOT
core-java-reflection-private-constructor
jar
diff --git a/core-java-modules/core-java-reflection/pom.xml b/core-java-modules/core-java-reflection/pom.xml
index f6ee08dbda..a836ee4a22 100644
--- a/core-java-modules/core-java-reflection/pom.xml
+++ b/core-java-modules/core-java-reflection/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-reflection
- 0.1.0-SNAPSHOT
core-java-reflection
jar
diff --git a/core-java-modules/core-java-regex-2/pom.xml b/core-java-modules/core-java-regex-2/pom.xml
index ae9385e63c..ddfba35cb2 100644
--- a/core-java-modules/core-java-regex-2/pom.xml
+++ b/core-java-modules/core-java-regex-2/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-regex-2
- 0.1.0-SNAPSHOT
core-java-regex-2
jar
diff --git a/core-java-modules/core-java-regex/pom.xml b/core-java-modules/core-java-regex/pom.xml
index 93f3ae3cdb..00b8107c57 100644
--- a/core-java-modules/core-java-regex/pom.xml
+++ b/core-java-modules/core-java-regex/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-regex
- 0.1.0-SNAPSHOT
core-java-regex
jar
diff --git a/core-java-modules/core-java-security-2/pom.xml b/core-java-modules/core-java-security-2/pom.xml
index 7a354ee9e2..0fc121c070 100644
--- a/core-java-modules/core-java-security-2/pom.xml
+++ b/core-java-modules/core-java-security-2/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-security-2
- 0.1.0-SNAPSHOT
core-java-security-2
jar
diff --git a/core-java-modules/core-java-security-3/pom.xml b/core-java-modules/core-java-security-3/pom.xml
index 3cd546e697..fef8b53289 100644
--- a/core-java-modules/core-java-security-3/pom.xml
+++ b/core-java-modules/core-java-security-3/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-security-3
- 0.1.0-SNAPSHOT
core-java-security-3
jar
diff --git a/core-java-modules/core-java-security-algorithms/classpath b/core-java-modules/core-java-security-algorithms/classpath
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/core-java-modules/core-java-security-algorithms/pom.xml b/core-java-modules/core-java-security-algorithms/pom.xml
index 967ddc103e..0dde9f861a 100644
--- a/core-java-modules/core-java-security-algorithms/pom.xml
+++ b/core-java-modules/core-java-security-algorithms/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-security-algorithms
- 0.1.0-SNAPSHOT
core-java-security-algorithms
jar
@@ -25,7 +24,6 @@
bcprov-jdk15on
${bouncycastle.version}
-
javax.xml.bind
jaxb-api
diff --git a/core-java-modules/core-java-security/pom.xml b/core-java-modules/core-java-security/pom.xml
index b36de5ac4c..921017b080 100644
--- a/core-java-modules/core-java-security/pom.xml
+++ b/core-java-modules/core-java-security/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-security
- 0.1.0-SNAPSHOT
core-java-security
jar
diff --git a/core-java-modules/core-java-serialization/pom.xml b/core-java-modules/core-java-serialization/pom.xml
index c82ae9d1d6..04144fb27f 100644
--- a/core-java-modules/core-java-serialization/pom.xml
+++ b/core-java-modules/core-java-serialization/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-serialization
- 0.1.0-SNAPSHOT
core-java-serialization
jar
diff --git a/core-java-modules/core-java-streams-2/pom.xml b/core-java-modules/core-java-streams-2/pom.xml
index c8fa83c55a..9725497b04 100644
--- a/core-java-modules/core-java-streams-2/pom.xml
+++ b/core-java-modules/core-java-streams-2/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-streams-2
- 1.0
core-java-streams-2
jar
diff --git a/core-java-modules/core-java-streams-3/pom.xml b/core-java-modules/core-java-streams-3/pom.xml
index 3074a647ff..9c657119b5 100644
--- a/core-java-modules/core-java-streams-3/pom.xml
+++ b/core-java-modules/core-java-streams-3/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-streams-3
- 0.1.0-SNAPSHOT
core-java-streams-3
jar
diff --git a/core-java-modules/core-java-streams-4/README.md b/core-java-modules/core-java-streams-4/README.md
index c6717ec5fe..4175fb1f70 100644
--- a/core-java-modules/core-java-streams-4/README.md
+++ b/core-java-modules/core-java-streams-4/README.md
@@ -10,3 +10,4 @@
- [Understanding the Difference Between Stream.of() and IntStream.range()](https://www.baeldung.com/java-stream-of-and-intstream-range)
- [Check if Object Is an Array in Java](https://www.baeldung.com/java-check-if-object-is-an-array)
- [Mapping an Array of Integers to Strings Using Java Streams](https://www.baeldung.com/java-stream-integer-array-to-strings)
+- [Difference Between parallelStream() and stream().parallel() in Java](https://www.baeldung.com/java-parallelstream-vs-stream-parallel)
diff --git a/core-java-modules/core-java-streams-4/pom.xml b/core-java-modules/core-java-streams-4/pom.xml
index 46c0f3f7e1..fe791ebd42 100644
--- a/core-java-modules/core-java-streams-4/pom.xml
+++ b/core-java-modules/core-java-streams-4/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-streams-4
- 0.1.0-SNAPSHOT
core-java-streams-4
jar
diff --git a/core-java-modules/core-java-streams-collect/pom.xml b/core-java-modules/core-java-streams-collect/pom.xml
index c60cf2ab93..e81598017c 100644
--- a/core-java-modules/core-java-streams-collect/pom.xml
+++ b/core-java-modules/core-java-streams-collect/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-streams-4
- 0.1.0-SNAPSHOT
core-java-streams-collect
jar
@@ -35,7 +34,6 @@
-
3.23.1
diff --git a/core-java-modules/core-java-streams-maps/pom.xml b/core-java-modules/core-java-streams-maps/pom.xml
index 06cc9ceef6..66e1fedd87 100644
--- a/core-java-modules/core-java-streams-maps/pom.xml
+++ b/core-java-modules/core-java-streams-maps/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-streams-maps
- 0.1.0-SNAPSHOT
core-java-streams-maps
jar
diff --git a/core-java-modules/core-java-streams/pom.xml b/core-java-modules/core-java-streams/pom.xml
index a6bb827e77..b0794829c2 100644
--- a/core-java-modules/core-java-streams/pom.xml
+++ b/core-java-modules/core-java-streams/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-streams
- 0.1.0-SNAPSHOT
core-java-streams
jar
@@ -15,7 +14,6 @@
-
org.openjdk.jmh
jmh-core
diff --git a/core-java-modules/core-java-string-algorithms-2/pom.xml b/core-java-modules/core-java-string-algorithms-2/pom.xml
index 5af187abc2..3fdb022a4b 100644
--- a/core-java-modules/core-java-string-algorithms-2/pom.xml
+++ b/core-java-modules/core-java-string-algorithms-2/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-string-algorithms-2
- 0.1.0-SNAPSHOT
core-java-string-algorithms-2
jar
diff --git a/core-java-modules/core-java-string-algorithms-3/pom.xml b/core-java-modules/core-java-string-algorithms-3/pom.xml
index 147ea22375..74a9486ec0 100644
--- a/core-java-modules/core-java-string-algorithms-3/pom.xml
+++ b/core-java-modules/core-java-string-algorithms-3/pom.xml
@@ -3,7 +3,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-string-algorithms-3
- 0.1.0-SNAPSHOT
core-java-string-algorithms-3
jar
diff --git a/core-java-modules/core-java-string-algorithms/pom.xml b/core-java-modules/core-java-string-algorithms/pom.xml
index 84f3b61f84..10d28feb2f 100644
--- a/core-java-modules/core-java-string-algorithms/pom.xml
+++ b/core-java-modules/core-java-string-algorithms/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-string-algorithms
- 0.1.0-SNAPSHOT
core-java-string-algorithms
jar
diff --git a/core-java-modules/core-java-string-apis-2/pom.xml b/core-java-modules/core-java-string-apis-2/pom.xml
index ba983d7593..db97b85748 100644
--- a/core-java-modules/core-java-string-apis-2/pom.xml
+++ b/core-java-modules/core-java-string-apis-2/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-string-apis-2
- 0.0.1-SNAPSHOT
core-java-string-apis-2
jar
diff --git a/core-java-modules/core-java-string-apis/pom.xml b/core-java-modules/core-java-string-apis/pom.xml
index 6a382c3c57..5d7737228c 100644
--- a/core-java-modules/core-java-string-apis/pom.xml
+++ b/core-java-modules/core-java-string-apis/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-string-apis
- 0.1.0-SNAPSHOT
core-java-string-apis
jar
diff --git a/core-java-modules/core-java-string-conversions-2/pom.xml b/core-java-modules/core-java-string-conversions-2/pom.xml
index e424ef3083..90463271b8 100644
--- a/core-java-modules/core-java-string-conversions-2/pom.xml
+++ b/core-java-modules/core-java-string-conversions-2/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-string-conversions-2
- 0.1.0-SNAPSHOT
core-java-string-conversions-2
jar
diff --git a/core-java-modules/core-java-string-conversions/pom.xml b/core-java-modules/core-java-string-conversions/pom.xml
index f10ae401b3..b87431cd0b 100644
--- a/core-java-modules/core-java-string-conversions/pom.xml
+++ b/core-java-modules/core-java-string-conversions/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-string-conversions
- 0.1.0-SNAPSHOT
core-java-string-conversions
jar
@@ -44,6 +43,7 @@
61.1
+ -Djava.locale.providers=COMPAT
\ No newline at end of file
diff --git a/core-java-modules/core-java-string-conversions/src/main/java/com/baeldung/stringtoint/StringToIntConverter.java b/core-java-modules/core-java-string-conversions/src/main/java/com/baeldung/stringtoint/StringToIntConverter.java
new file mode 100644
index 0000000000..03d77c2aea
--- /dev/null
+++ b/core-java-modules/core-java-string-conversions/src/main/java/com/baeldung/stringtoint/StringToIntConverter.java
@@ -0,0 +1,52 @@
+package com.baeldung.stringtoint;
+
+import java.util.Optional;
+import org.apache.commons.lang3.math.NumberUtils;
+
+public class StringToIntConverter {
+
+ private StringToIntConverter() {
+ }
+
+ public static Integer convertStringToIntUsingIntegerParseInt(String input){
+ try {
+ return Integer.parseInt(input);
+ } catch (NumberFormatException e) {
+ // log or handle the error
+ return Integer.MIN_VALUE;
+ }
+ }
+
+ public static Integer convertStringToIntUsingIntegerValueOf(String input){
+ try {
+ return Integer.valueOf(input);
+ } catch (NumberFormatException e) {
+ // log or handle the error
+ return Integer.MIN_VALUE;
+ }
+ }
+
+ public static Integer convertStringToIntUsingIntegerDecode(String input){
+ try {
+ return Integer.decode(input);
+ } catch (Exception e) {
+ // log or handle the error
+ return Integer.MIN_VALUE;
+ }
+ }
+
+ public static Integer convertStringToIntUsingOptional(String input){
+ Optional parsedInt;
+ try {
+ parsedInt = Optional.of(Integer.parseInt(input));
+ } catch (Exception e) {
+ // log or handle the error
+ parsedInt = Optional.empty();
+ }
+ return parsedInt.orElse(Integer.MIN_VALUE);
+ }
+
+ public static int convertStringToIntUsingNumberUtils(String input){
+ return NumberUtils.toInt(input, Integer.MIN_VALUE);
+ }
+}
diff --git a/core-java-modules/core-java-string-conversions/src/test/java/com/baeldung/datetostring/DateToStringFormatterUnitTest.java b/core-java-modules/core-java-string-conversions/src/test/java/com/baeldung/datetostring/DateToStringFormatterUnitTest.java
index 221900fb0e..c4fb84713c 100644
--- a/core-java-modules/core-java-string-conversions/src/test/java/com/baeldung/datetostring/DateToStringFormatterUnitTest.java
+++ b/core-java-modules/core-java-string-conversions/src/test/java/com/baeldung/datetostring/DateToStringFormatterUnitTest.java
@@ -1,7 +1,6 @@
package com.baeldung.datetostring;
-import org.junit.BeforeClass;
-import org.junit.Test;
+import static org.junit.Assert.assertEquals;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
@@ -14,7 +13,8 @@ import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;
-import static org.junit.Assert.assertEquals;
+import org.junit.BeforeClass;
+import org.junit.Test;
public class DateToStringFormatterUnitTest {
diff --git a/core-java-modules/core-java-string-conversions/src/test/java/com/baeldung/stringtoint/StringToIntConverterUnitTest.java b/core-java-modules/core-java-string-conversions/src/test/java/com/baeldung/stringtoint/StringToIntConverterUnitTest.java
new file mode 100644
index 0000000000..2bfb4db161
--- /dev/null
+++ b/core-java-modules/core-java-string-conversions/src/test/java/com/baeldung/stringtoint/StringToIntConverterUnitTest.java
@@ -0,0 +1,53 @@
+package com.baeldung.stringtoint;
+
+import java.util.Arrays;
+import java.util.List;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+class StringToIntConverterUnitTest {
+
+ @Test
+ void whenConvertingIntToString_thenInvalidCasesReturnIntegerMinValue() {
+ List testData = Arrays.asList(
+ new TestData("", Integer.MIN_VALUE),
+ new TestData(null, Integer.MIN_VALUE),
+ new TestData("23,56", Integer.MIN_VALUE),
+ new TestData("2147483648", Integer.MIN_VALUE),
+ new TestData("-2147483649", Integer.MIN_VALUE),
+ new TestData("hello", Integer.MIN_VALUE)
+ );
+ testData.forEach(data -> {
+ Assertions.assertEquals(data.expectedOutput, StringToIntConverter.convertStringToIntUsingIntegerParseInt(data.input));
+ Assertions.assertEquals(data.expectedOutput, StringToIntConverter.convertStringToIntUsingIntegerValueOf(data.input));
+ Assertions.assertEquals(data.expectedOutput, StringToIntConverter.convertStringToIntUsingOptional(data.input));
+ Assertions.assertEquals(data.expectedOutput, StringToIntConverter.convertStringToIntUsingIntegerDecode(data.input));
+ Assertions.assertEquals(data.expectedOutput, StringToIntConverter.convertStringToIntUsingNumberUtils(data.input));
+ });
+ }
+
+ @Test
+ void whenConvertingIntToString_thenValidCasesReturnUnboxedInt() {
+ List testData = Arrays.asList(
+ new TestData("23", 23),
+ new TestData("-23", -23)
+ );
+ testData.forEach(data -> {
+ Assertions.assertEquals(data.expectedOutput, StringToIntConverter.convertStringToIntUsingIntegerParseInt(data.input));
+ Assertions.assertEquals(data.expectedOutput, StringToIntConverter.convertStringToIntUsingIntegerValueOf(data.input));
+ Assertions.assertEquals(data.expectedOutput, StringToIntConverter.convertStringToIntUsingOptional(data.input));
+ Assertions.assertEquals(data.expectedOutput, StringToIntConverter.convertStringToIntUsingNumberUtils(data.input));
+ Assertions.assertEquals(data.expectedOutput, StringToIntConverter.convertStringToIntUsingIntegerDecode(data.input));
+ });
+ }
+
+ public static class TestData{
+ String input;
+ Integer expectedOutput;
+
+ TestData(String input, Integer expectedOutput){
+ this.input = input;
+ this.expectedOutput = expectedOutput;
+ }
+ }
+}
\ No newline at end of file
diff --git a/core-java-modules/core-java-string-operations-2/pom.xml b/core-java-modules/core-java-string-operations-2/pom.xml
index 92bfa6b2d8..c6debc4f71 100644
--- a/core-java-modules/core-java-string-operations-2/pom.xml
+++ b/core-java-modules/core-java-string-operations-2/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-string-operations-2
- 0.1.0-SNAPSHOT
core-java-string-operations-2
jar
diff --git a/core-java-modules/core-java-string-operations-3/pom.xml b/core-java-modules/core-java-string-operations-3/pom.xml
index 19b3d57ffd..39167271fa 100644
--- a/core-java-modules/core-java-string-operations-3/pom.xml
+++ b/core-java-modules/core-java-string-operations-3/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-string-operations-3
- 0.1.0-SNAPSHOT
core-java-string-operations-3
jar
diff --git a/core-java-modules/core-java-string-operations-4/pom.xml b/core-java-modules/core-java-string-operations-4/pom.xml
index 0f1e377d18..cc755cf470 100644
--- a/core-java-modules/core-java-string-operations-4/pom.xml
+++ b/core-java-modules/core-java-string-operations-4/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-string-operations-4
- 0.1.0-SNAPSHOT
core-java-string-operations-4
jar
diff --git a/core-java-modules/core-java-string-operations-5/pom.xml b/core-java-modules/core-java-string-operations-5/pom.xml
index efb32c73b9..2a2a353984 100644
--- a/core-java-modules/core-java-string-operations-5/pom.xml
+++ b/core-java-modules/core-java-string-operations-5/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-string-operations-5
- 0.1.0-SNAPSHOT
core-java-string-operations-5
jar
diff --git a/core-java-modules/core-java-string-operations/pom.xml b/core-java-modules/core-java-string-operations/pom.xml
index 20e4df3ba3..577736a324 100644
--- a/core-java-modules/core-java-string-operations/pom.xml
+++ b/core-java-modules/core-java-string-operations/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-string-operations
- 0.1.0-SNAPSHOT
core-java-string-operations
jar
@@ -15,6 +14,11 @@
+
+ javax.xml.bind
+ jaxb-api
+ 2.4.0-b180725.0427
+
org.apache.commons
commons-lang3
diff --git a/core-java-modules/core-java-strings/pom.xml b/core-java-modules/core-java-strings/pom.xml
index 2cc35dad5f..e3cdb3c666 100644
--- a/core-java-modules/core-java-strings/pom.xml
+++ b/core-java-modules/core-java-strings/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-strings
- 0.1.0-SNAPSHOT
core-java-strings
jar
diff --git a/core-java-modules/core-java-sun/pom.xml b/core-java-modules/core-java-sun/pom.xml
index e959932235..c9427f66a3 100644
--- a/core-java-modules/core-java-sun/pom.xml
+++ b/core-java-modules/core-java-sun/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-sun
- 0.1.0-SNAPSHOT
core-java-sun
jar
diff --git a/core-java-modules/core-java-time-measurements/pom.xml b/core-java-modules/core-java-time-measurements/pom.xml
index ac5fb3a5e6..7b2bc31ebb 100644
--- a/core-java-modules/core-java-time-measurements/pom.xml
+++ b/core-java-modules/core-java-time-measurements/pom.xml
@@ -3,9 +3,7 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
- com.baeldung.exception.numberformat
core-java-time-measurements
- 0.0.1-SNAPSHOT
core-java-time-measurements
jar
diff --git a/core-java-modules/core-java-uuid/README.md b/core-java-modules/core-java-uuid/README.md
index 0a77c36acd..4438c9a770 100644
--- a/core-java-modules/core-java-uuid/README.md
+++ b/core-java-modules/core-java-uuid/README.md
@@ -4,3 +4,4 @@
- [Generating Alphanumeric UUID String in Java](https://www.baeldung.com/java-generate-alphanumeric-uuid)
- [Guide to UUID in Java](http://www.baeldung.com/java-uuid)
- [Validate UUID String in Java](https://www.baeldung.com/java-validate-uuid-string)
+- [Generate the Same UUID From a String in Java](https://www.baeldung.com/java-generate-same-uuid-from-string)
diff --git a/core-java-modules/core-java-uuid/pom.xml b/core-java-modules/core-java-uuid/pom.xml
index 7d851292f5..b97db174b4 100644
--- a/core-java-modules/core-java-uuid/pom.xml
+++ b/core-java-modules/core-java-uuid/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-uuid
- 0.1.0-SNAPSHOT
core-java-uuid
jar
diff --git a/core-java-modules/core-java-uuid/src/test/java/com/baeldung/uuid/UUIDFromStringUnitTest.java b/core-java-modules/core-java-uuid/src/test/java/com/baeldung/uuid/UUIDFromStringUnitTest.java
new file mode 100644
index 0000000000..381d8715d5
--- /dev/null
+++ b/core-java-modules/core-java-uuid/src/test/java/com/baeldung/uuid/UUIDFromStringUnitTest.java
@@ -0,0 +1,62 @@
+package com.baeldung.uuid;
+
+import org.junit.jupiter.api.Test;
+
+import java.util.UUID;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+public class UUIDFromStringUnitTest {
+ @Test
+ void whenStringInUUIDFormat_thenFromStringWorks() {
+ String inputStr = "bbcc4621-d88f-4a94-ae2f-b38072bf5087";
+
+ UUID uuid = UUID.fromString(inputStr);
+ UUID uuid2 = UUID.fromString(inputStr);
+ UUID uuid3 = UUID.fromString(inputStr);
+
+ assertEquals(inputStr, uuid.toString());
+
+ assertEquals(uuid, uuid2);
+ assertEquals(uuid, uuid3);
+
+ }
+
+ @Test
+ void whenStringNotInUUIDFormat_thenFromStringRaisesException() {
+ String inputStr = "I am not a standard UUID representation.";
+ assertThrows(IllegalArgumentException.class, () -> UUID.fromString(inputStr));
+ }
+
+ @Test
+ void whenStringInFreeFormat_thenNameUUIDFromBytesWorks() {
+ String inputStr = "I am not a standard UUID representation.";
+
+ UUID uuid = UUID.nameUUIDFromBytes(inputStr.getBytes());
+ UUID uuid2 = UUID.nameUUIDFromBytes(inputStr.getBytes());
+ UUID uuid3 = UUID.nameUUIDFromBytes(inputStr.getBytes());
+
+ assertTrue(uuid != null);
+
+ assertEquals(uuid, uuid2);
+ assertEquals(uuid, uuid3);
+
+ assertEquals(3, uuid.version());
+ }
+
+ @Test
+ void whenStringInFreeFormat_thenGenerateVer5UUIDWorks() {
+ String inputStr = "I am not a standard UUID representation.";
+
+ UUID uuid = UUIDGenerator.generateType5UUID(inputStr);
+ UUID uuid2 = UUIDGenerator.generateType5UUID(inputStr);
+ UUID uuid3 = UUIDGenerator.generateType5UUID(inputStr);
+
+ assertEquals(5, uuid.version());
+
+ assertTrue(uuid != null);
+
+ assertEquals(uuid, uuid2);
+ assertEquals(uuid, uuid3);
+ }
+}
\ No newline at end of file
diff --git a/core-java-modules/core-java/README.md b/core-java-modules/core-java/README.md
index 087c5d356e..f29d6abd7c 100644
--- a/core-java-modules/core-java/README.md
+++ b/core-java-modules/core-java/README.md
@@ -6,6 +6,5 @@
- [Java Money and the Currency API](http://www.baeldung.com/java-money-and-currency)
- [Compiling Java *.class Files with javac](http://www.baeldung.com/javac)
- [Introduction to Javadoc](http://www.baeldung.com/javadoc)
-- [A Guide to the ResourceBundle](http://www.baeldung.com/java-resourcebundle)
- [Merging java.util.Properties Objects](https://www.baeldung.com/java-merging-properties)
- [Illegal Character Compilation Error](https://www.baeldung.com/java-illegal-character-error)
diff --git a/core-java-modules/core-java/pom.xml b/core-java-modules/core-java/pom.xml
index 87abe6c007..552999702e 100644
--- a/core-java-modules/core-java/pom.xml
+++ b/core-java-modules/core-java/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java
- 0.1.0-SNAPSHOT
core-java
jar
diff --git a/core-java-modules/pom.xml b/core-java-modules/pom.xml
index f2db98dbfb..c5dbdca299 100644
--- a/core-java-modules/pom.xml
+++ b/core-java-modules/pom.xml
@@ -16,9 +16,21 @@
- core-java
- core-java-8
- core-java-8-2
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
core-java-annotations
core-java-arrays-sorting
core-java-arrays-guides
@@ -26,6 +38,7 @@
core-java-arrays-convert
core-java-arrays-operations-basic
core-java-arrays-operations-advanced
+ core-java-booleans
core-java-char
core-java-collections
core-java-collections-2
@@ -33,7 +46,6 @@
core-java-collections-4
core-java-collections-5
core-java-collections-conversions
- core-java-collections-conversions-2
core-java-collections-set-2
core-java-collections-list
core-java-collections-list-2
@@ -52,11 +64,9 @@
core-java-concurrency-collections
core-java-concurrency-collections-2
core-java-console
- core-java-8-datetime-2
core-java-datetime-string-2
core-java-date-operations-2
core-java-date-operations-3
- core-java-8-datetime
core-java-exceptions
core-java-exceptions-2
core-java-exceptions-3
@@ -77,14 +87,12 @@
core-java-jvm-2
core-java-jvm-3
core-java-lambdas
- core-java-lang
core-java-lang-2
core-java-lang-3
core-java-lang-4
core-java-lang-5
core-java-lang-math
core-java-lang-math-2
- core-java-lang-math-3
core-java-lang-oop-constructors
core-java-lang-oop-patterns
core-java-lang-oop-generics
@@ -98,31 +106,26 @@
core-java-lang-operators-2
core-java-lang-syntax
core-java-lang-syntax-2
+ core-java-locale
core-java-networking
core-java-networking-2
core-java-networking-4
core-java-nio
- core-java-nio-2
core-java-numbers
core-java-numbers-2
core-java-numbers-3
core-java-numbers-4
core-java-numbers-5
- core-java-numbers-conversions
+ core-java-numbers-6
core-java-optional
core-java-perf
core-java-reflection
core-java-reflection-2
- core-java-security
core-java-security-2
core-java-security-3
- core-java-serialization
core-java-security-algorithms
core-java-streams
- core-java-streams-2
core-java-streams-3
- core-java-streams-maps
- core-java-streams-collect
core-java-string-algorithms
core-java-string-algorithms-2
core-java-string-apis
@@ -131,7 +134,6 @@
core-java-string-conversions-2
core-java-string-operations
core-java-string-operations-2
- core-java-sun
core-java-regex
core-java-regex-2
core-java-uuid
diff --git a/core-java-modules/pre-jpms/pom.xml b/core-java-modules/pre-jpms/pom.xml
index cd4bd0faa3..67bc913767 100644
--- a/core-java-modules/pre-jpms/pom.xml
+++ b/core-java-modules/pre-jpms/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
pre-jpms
- 0.0.1-SNAPSHOT
pre-jpms
jar
@@ -15,6 +14,11 @@
+
+ javax.xml.bind
+ jaxb-api
+ 2.4.0-b180725.0427
+
org.slf4j
slf4j-api
@@ -32,6 +36,9 @@
${source.version}
${target.version}
+
+ --add-exports=java.base/com.sun.crypto.provider=ALL-UNNAMED
+
@@ -72,8 +79,8 @@
3.1.1
3.8.0
- 1.8
- 1.8
+ 11
+ 11
\ No newline at end of file
diff --git a/core-java-modules/pre-jpms/src/main/java/com/baeldung/prejpms/App.java b/core-java-modules/pre-jpms/src/main/java/com/baeldung/prejpms/App.java
index 1afaae30e4..a69e0555c6 100644
--- a/core-java-modules/pre-jpms/src/main/java/com/baeldung/prejpms/App.java
+++ b/core-java-modules/pre-jpms/src/main/java/com/baeldung/prejpms/App.java
@@ -1,19 +1,18 @@
package com.baeldung.prejpms;
import java.io.StringWriter;
+import java.lang.StackWalker.Option;
+import java.lang.StackWalker.StackFrame;
+import com.sun.crypto.provider.SunJCE;
+import java.util.Base64;
+import java.util.concurrent.atomic.AtomicInteger;
import javax.xml.bind.JAXBContext;
-import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import com.sun.crypto.provider.SunJCE;
-
-import sun.misc.BASE64Encoder;
-import sun.reflect.Reflection;
-
public class App {
private static final Logger LOGGER = LoggerFactory.getLogger(App.class);
@@ -37,14 +36,14 @@ public class App {
private static void getCallStackClassNames() {
try {
StringBuffer sbStack = new StringBuffer();
- int i = 0;
- Class> caller = Reflection.getCallerClass(i++);
- do {
- sbStack.append(i + ".")
- .append(caller.getName())
- .append("\n");
- caller = Reflection.getCallerClass(i++);
- } while (caller != null);
+ AtomicInteger i = new AtomicInteger(0);
+ StackWalker.getInstance((Option.RETAIN_CLASS_REFERENCE))
+ .walk(s -> s.map(StackFrame::getDeclaringClass)
+ .map(e -> {
+ i.getAndIncrement();
+ return e.getName();
+ }))
+ .forEach(name -> sbStack.append(String.format("%d. %s \n", i.get(), name)));
LOGGER.info("2. Call Stack:\n{}", sbStack);
} catch (Throwable e) {
LOGGER.error(e.toString());
@@ -54,7 +53,7 @@ public class App {
private static void getXmlFromObject(Book book) {
try {
Marshaller marshallerObj = JAXBContext.newInstance(Book.class)
- .createMarshaller();
+ .createMarshaller();
marshallerObj.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
StringWriter sw = new StringWriter();
@@ -68,7 +67,8 @@ public class App {
private static void getBase64EncodedString(String inputString) {
try {
- String encodedString = new BASE64Encoder().encode(inputString.getBytes());
+ String encodedString = new String(Base64.getEncoder()
+ .encode(inputString.getBytes()));
LOGGER.info("4. Base Encoded String: {}", encodedString);
} catch (Throwable e) {
LOGGER.error(e.toString());
diff --git a/couchbase/pom.xml b/couchbase/pom.xml
index 095bda3610..823b33ee29 100644
--- a/couchbase/pom.xml
+++ b/couchbase/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
couchbase
- 0.1-SNAPSHOT
couchbase
jar
Couchbase Tutorials
diff --git a/custom-pmd/pom.xml b/custom-pmd/pom.xml
index 38a5e30404..8097d4fefa 100644
--- a/custom-pmd/pom.xml
+++ b/custom-pmd/pom.xml
@@ -8,7 +8,6 @@
0.0.1
custom-pmd
jar
- http://maven.apache.org
com.baeldung
diff --git a/data-structures/pom.xml b/data-structures/pom.xml
index cba602878f..aeadfcefc3 100644
--- a/data-structures/pom.xml
+++ b/data-structures/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
data-structures
- 0.0.1-SNAPSHOT
data-structures
@@ -13,13 +12,6 @@
1.0.0-SNAPSHOT
-
-
- github.release.repo
- https://raw.github.com/bulldog2011/bulldog-repo/master/repo/releases/
-
-
-
com.leansoft
@@ -39,6 +31,13 @@
+
+
+ github.release.repo
+ https://raw.github.com/bulldog2011/bulldog-repo/master/repo/releases/
+
+
+
0.7.0
diff --git a/ddd/pom.xml b/ddd/pom.xml
index 6128bb1cd9..443b2b5148 100644
--- a/ddd/pom.xml
+++ b/ddd/pom.xml
@@ -3,7 +3,6 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
- com.baeldung.ddd
ddd
ddd
jar
diff --git a/deeplearning4j/pom.xml b/deeplearning4j/pom.xml
index 01bac93214..875d8cdf85 100644
--- a/deeplearning4j/pom.xml
+++ b/deeplearning4j/pom.xml
@@ -3,9 +3,7 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
4.0.0
- com.baeldung.deeplearning4j
deeplearning4j
- 1.0-SNAPSHOT
deeplearning4j
jar
diff --git a/dependency-exclusion/core-java-exclusions/pom.xml b/dependency-exclusion/core-java-exclusions/pom.xml
index cf1b36656d..69701a2ead 100644
--- a/dependency-exclusion/core-java-exclusions/pom.xml
+++ b/dependency-exclusion/core-java-exclusions/pom.xml
@@ -1,10 +1,9 @@
+ xmlns="http://maven.apache.org/POM/4.0.0"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
core-java-exclusions
- 0.0.0-SNAPSHOT
core-java-exclusions
jar
@@ -14,34 +13,6 @@
0.0.1-SNAPSHOT
-
-
-
- org.apache.maven.plugins
- maven-surefire-plugin
- ${surefire-version}
-
- alphabetical
- 1
-
-
- junit
- false
-
-
-
-
-
-
- org.apache.maven.surefire
- surefire-junit47
- dummy
-
-
-
-
-
-
junit
@@ -50,4 +21,32 @@
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+ ${surefire-version}
+
+ alphabetical
+ 1
+
+
+ junit
+ false
+
+
+
+
+
+
+ org.apache.maven.surefire
+ surefire-junit47
+ dummy
+
+
+
+
+
+
diff --git a/dependency-exclusion/dummy-surefire-junit47/pom.xml b/dependency-exclusion/dummy-surefire-junit47/pom.xml
index 5859ddbe72..7332d8deb1 100644
--- a/dependency-exclusion/dummy-surefire-junit47/pom.xml
+++ b/dependency-exclusion/dummy-surefire-junit47/pom.xml
@@ -1,7 +1,7 @@
+ xmlns="http://maven.apache.org/POM/4.0.0"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
org.apache.maven.surefire
surefire-junit47
diff --git a/dependeny-exclusion/core-java-exclusions/pom.xml b/dependeny-exclusion/core-java-exclusions/pom.xml
deleted file mode 100644
index cf1f6d1e1b..0000000000
--- a/dependeny-exclusion/core-java-exclusions/pom.xml
+++ /dev/null
@@ -1,53 +0,0 @@
-
-
- 4.0.0
- core-java-exclusions
- 0.0.0-SNAPSHOT
- core-java-exclusions
- jar
-
-
- com.baeldung.dependency-exclusion
- dependency-exclusion
- 0.0.1-SNAPSHOT
-
-
-
-
-
- org.apache.maven.plugins
- maven-surefire-plugin
- ${surefire-version}
-
- alphabetical
- 1
-
-
- junit
- false
-
-
-
-
-
-
- org.apache.maven.surefire
- surefire-junit47
- dummy
-
-
-
-
-
-
-
-
- junit
- junit
- test
-
-
-
-
diff --git a/dependeny-exclusion/core-java-exclusions/src/test/java/com/sample/project/tests/ExcludeDirectDependencyUnitTest.java b/dependeny-exclusion/core-java-exclusions/src/test/java/com/sample/project/tests/ExcludeDirectDependencyUnitTest.java
deleted file mode 100644
index ed2400f9ac..0000000000
--- a/dependeny-exclusion/core-java-exclusions/src/test/java/com/sample/project/tests/ExcludeDirectDependencyUnitTest.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package com.sample.project.tests;
-
-import static org.junit.Assert.assertTrue;
-
-import org.junit.Test;
-
-public class ExcludeDirectDependencyUnitTest {
- @Test
- public void basicUnitTest() {
- assertTrue(true);
- }
-}
diff --git a/dependeny-exclusion/dummy-surefire-junit47/pom.xml b/dependeny-exclusion/dummy-surefire-junit47/pom.xml
deleted file mode 100644
index 5859ddbe72..0000000000
--- a/dependeny-exclusion/dummy-surefire-junit47/pom.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
- 4.0.0
- org.apache.maven.surefire
- surefire-junit47
- dummy
-
diff --git a/dependeny-exclusion/pom.xml b/dependeny-exclusion/pom.xml
deleted file mode 100644
index ac83cc161a..0000000000
--- a/dependeny-exclusion/pom.xml
+++ /dev/null
@@ -1,71 +0,0 @@
-
-
- 4.0.0
- com.baeldung.dependency-exclusion
- dependency-exclusion
- dependency-exclusion
- pom
-
-
- com.baeldung
- parent-java
- 0.0.1-SNAPSHOT
- ../parent-java
-
-
-
- 2.22.2
-
-
-
- dummy-surefire-junit47
- core-java-exclusions
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
- 3.7.0
-
- 1.8
- 1.8
-
- -parameters
-
-
-
-
- org.apache.maven.plugins
- maven-surefire-plugin
- ${surefire-version}
-
- 1
-
-
-
- org.apache.maven.surefire
- surefire-junit-platform
- ${surefire-version}
-
-
-
-
-
-
-
-
-
-
- junit
- junit
- 4.13
-
-
-
-
-
diff --git a/di-modules/guice/pom.xml b/di-modules/guice/pom.xml
index a28dbe5297..d0d2876fc8 100644
--- a/di-modules/guice/pom.xml
+++ b/di-modules/guice/pom.xml
@@ -3,7 +3,6 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
- com.baeldung.examples.guice
guice
guice
jar
diff --git a/discord4j/pom.xml b/discord4j/pom.xml
index 3ea85c05c7..086adebee5 100644
--- a/discord4j/pom.xml
+++ b/discord4j/pom.xml
@@ -3,9 +3,7 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
- com.baeldung
discord4j
- 0.0.1-SNAPSHOT
discord4j
Demo Discord bot using Discord4J + Spring Boot
diff --git a/disruptor/pom.xml b/disruptor/pom.xml
index c2f9cf34b0..75e783e935 100644
--- a/disruptor/pom.xml
+++ b/disruptor/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
disruptor
- 0.1.0-SNAPSHOT
disruptor
jar
diff --git a/docker-modules/docker-caching/multi-module-caching/pom.xml b/docker-modules/docker-caching/multi-module-caching/pom.xml
index 94a370453c..1fdd6173bc 100644
--- a/docker-modules/docker-caching/multi-module-caching/pom.xml
+++ b/docker-modules/docker-caching/multi-module-caching/pom.xml
@@ -1,7 +1,7 @@
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
com.baeldung
multi-module-caching
diff --git a/docker-modules/docker-caching/single-module-caching/pom.xml b/docker-modules/docker-caching/single-module-caching/pom.xml
index 4a4e53f1d3..a388c7563f 100644
--- a/docker-modules/docker-caching/single-module-caching/pom.xml
+++ b/docker-modules/docker-caching/single-module-caching/pom.xml
@@ -1,7 +1,7 @@
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
com.baeldung
single-module-caching
diff --git a/docker-modules/docker-compose-2/pom.xml b/docker-modules/docker-compose-2/pom.xml
index 851742309d..3a94ee3901 100644
--- a/docker-modules/docker-compose-2/pom.xml
+++ b/docker-modules/docker-compose-2/pom.xml
@@ -1,7 +1,7 @@
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
docker-compose-2
Demo project for Spring Boot and Docker - Module docker-compose-2
diff --git a/docker-modules/docker-containers/pom.xml b/docker-modules/docker-containers/pom.xml
index 42c2d403e4..79bf0aee72 100644
--- a/docker-modules/docker-containers/pom.xml
+++ b/docker-modules/docker-containers/pom.xml
@@ -5,7 +5,6 @@
4.0.0
com.baeldung.docker
docker-containers
- 0.0.1-SNAPSHOT
Demo project for Spring Boot
diff --git a/docker-modules/pom.xml b/docker-modules/pom.xml
index 1a87fa5d1c..b4c5240718 100644
--- a/docker-modules/pom.xml
+++ b/docker-modules/pom.xml
@@ -3,9 +3,7 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
- com.baeldung
docker-modules
- 1.0.0-SNAPSHOT
docker-modules
pom
diff --git a/dozer/pom.xml b/dozer/pom.xml
index 840763445c..66f4ee8227 100644
--- a/dozer/pom.xml
+++ b/dozer/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
4.0.0
dozer
- 1.0
dozer
diff --git a/ethereum/pom.xml b/ethereum/pom.xml
index 6c1a0e900f..8dc25427d9 100644
--- a/ethereum/pom.xml
+++ b/ethereum/pom.xml
@@ -1,7 +1,7 @@
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
com.baeldung.ethereum
ethereum
@@ -113,7 +113,8 @@
test
${spring.boot.version}
-
+
junit
junit
@@ -195,4 +196,5 @@
2.0.4.RELEASE
3.1
+
\ No newline at end of file
diff --git a/feign/README.md b/feign/README.md
index 3e733448fb..074ce1cbd2 100644
--- a/feign/README.md
+++ b/feign/README.md
@@ -6,10 +6,4 @@ This module contains articles about Feign
- [Intro to Feign](https://www.baeldung.com/intro-to-feign)
- [Retrying Feign Calls](https://www.baeldung.com/feign-retry)
-- [Setting Request Headers Using Feign](https://www.baeldung.com/java-feign-request-headers)
-- [File Upload With Open Feign](https://www.baeldung.com/java-feign-file-upload)
-- [Feign Logging Configuration](https://www.baeldung.com/java-feign-logging)
-- [Retrieve Original Message From Feign ErrorDecoder](https://www.baeldung.com/feign-retrieve-original-message)
-- [RequestLine with Feign Client](https://www.baeldung.com/feign-requestline)
-- [Propagating Exceptions With OpenFeign and Spring](https://www.baeldung.com/spring-openfeign-propagate-exception)
-- [Post form-url-encoded Data with Spring Cloud Feign](https://www.baeldung.com/spring-cloud-post-form-url-encoded-data)
+- [Setting Request Headers Using Feign](https://www.baeldung.com/java-feign-request-headers)
\ No newline at end of file
diff --git a/feign/pom.xml b/feign/pom.xml
index f39adec607..edb55e7da5 100644
--- a/feign/pom.xml
+++ b/feign/pom.xml
@@ -3,7 +3,6 @@
xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
- com.baeldung.feign
feign
feign
@@ -69,11 +68,6 @@
feign-form-spring
${feign.form.spring.version}
-
- org.springframework.cloud
- spring-cloud-starter-openfeign
- ${spring.cloud.openfeign.version}
-
com.github.tomakehurst
wiremock-jre8
diff --git a/feign/src/main/java/com/baeldung/core/ExampleApplication.java b/feign/src/main/java/com/baeldung/core/ExampleApplication.java
index 391e808ede..881265d5ba 100644
--- a/feign/src/main/java/com/baeldung/core/ExampleApplication.java
+++ b/feign/src/main/java/com/baeldung/core/ExampleApplication.java
@@ -2,10 +2,8 @@ package com.baeldung.core;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.cloud.openfeign.EnableFeignClients;
@SpringBootApplication
-@EnableFeignClients
public class ExampleApplication {
public static void main(String[] args) {
diff --git a/feign/src/main/java/com/baeldung/core/fileupload/config/ExceptionMessage.java b/feign/src/main/java/com/baeldung/core/fileupload/config/ExceptionMessage.java
deleted file mode 100644
index 8301705ca6..0000000000
--- a/feign/src/main/java/com/baeldung/core/fileupload/config/ExceptionMessage.java
+++ /dev/null
@@ -1,55 +0,0 @@
-package com.baeldung.core.fileupload.config;
-
-public class ExceptionMessage {
- private String timestamp;
- private int status;
- private String error;
- private String message;
- private String path;
-
- public String getTimestamp() {
- return timestamp;
- }
-
- public void setTimestamp(String timestamp) {
- this.timestamp = timestamp;
- }
-
- public int getStatus() {
- return status;
- }
-
- public void setStatus(int status) {
- this.status = status;
- }
-
- public String getError() {
- return error;
- }
-
- public void setError(String error) {
- this.error = error;
- }
-
- public String getMessage() {
- return message;
- }
-
- public void setMessage(String message) {
- this.message = message;
- }
-
- public String getPath() {
- return path;
- }
-
- public void setPath(String path) {
- this.path = path;
- }
-
- @Override
- public String toString() {
- return "ExceptionMessage [timestamp=" + timestamp + ", status=" + status + ", error=" + error + ", message=" + message + ", path=" + path + "]";
- }
-
-}
diff --git a/feign/src/main/java/com/baeldung/core/fileupload/config/FeignSupportConfig.java b/feign/src/main/java/com/baeldung/core/fileupload/config/FeignSupportConfig.java
deleted file mode 100644
index c8c9eb1acc..0000000000
--- a/feign/src/main/java/com/baeldung/core/fileupload/config/FeignSupportConfig.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package com.baeldung.core.fileupload.config;
-
-import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
-import org.springframework.cloud.openfeign.support.SpringEncoder;
-import org.springframework.context.annotation.Bean;
-import org.springframework.web.client.RestTemplate;
-
-import feign.codec.Encoder;
-import feign.codec.ErrorDecoder;
-import feign.form.spring.SpringFormEncoder;
-
-public class FeignSupportConfig {
- @Bean
- public Encoder multipartFormEncoder() {
- return new SpringFormEncoder(new SpringEncoder(() -> new HttpMessageConverters(new RestTemplate().getMessageConverters())));
- }
-
- @Bean
- public ErrorDecoder errorDecoder() {
- return new RetreiveMessageErrorDecoder();
- }
-}
diff --git a/feign/src/main/java/com/baeldung/core/fileupload/config/RetreiveMessageErrorDecoder.java b/feign/src/main/java/com/baeldung/core/fileupload/config/RetreiveMessageErrorDecoder.java
deleted file mode 100644
index fc2c8da0ed..0000000000
--- a/feign/src/main/java/com/baeldung/core/fileupload/config/RetreiveMessageErrorDecoder.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package com.baeldung.core.fileupload.config;
-
-import java.io.IOException;
-import java.io.InputStream;
-
-import com.baeldung.core.exception.BadRequestException;
-import com.baeldung.core.exception.NotFoundException;
-import com.fasterxml.jackson.databind.ObjectMapper;
-
-import feign.Response;
-import feign.codec.ErrorDecoder;
-
-public class RetreiveMessageErrorDecoder implements ErrorDecoder {
- private final ErrorDecoder errorDecoder = new Default();
-
- @Override
- public Exception decode(String methodKey, Response response) {
- ExceptionMessage message;
- try (InputStream bodyIs = response.body()
- .asInputStream()) {
- ObjectMapper mapper = new ObjectMapper();
- message = mapper.readValue(bodyIs, ExceptionMessage.class);
- } catch (IOException e) {
- return new Exception(e.getMessage());
- }
- switch (response.status()) {
- case 400:
- return new BadRequestException(message.getMessage() != null ? message.getMessage() : "Bad Request");
- case 404:
- return new NotFoundException(message.getMessage() != null ? message.getMessage() : "Not found");
- default:
- return errorDecoder.decode(methodKey, response);
- }
- }
-}
diff --git a/feign/src/main/java/com/baeldung/core/fileupload/service/UploadResource.java b/feign/src/main/java/com/baeldung/core/fileupload/service/UploadResource.java
deleted file mode 100644
index 9d3d173cd4..0000000000
--- a/feign/src/main/java/com/baeldung/core/fileupload/service/UploadResource.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package com.baeldung.core.fileupload.service;
-
-import org.springframework.web.multipart.MultipartFile;
-
-import feign.Headers;
-import feign.Param;
-import feign.RequestLine;
-import feign.Response;
-
-public interface UploadResource {
-
- @RequestLine("POST /upload-file")
- @Headers("Content-Type: multipart/form-data")
- Response uploadFile(@Param("file") MultipartFile file);
-
-}
\ No newline at end of file
diff --git a/feign/src/main/java/com/baeldung/core/fileupload/service/UploadService.java b/feign/src/main/java/com/baeldung/core/fileupload/service/UploadService.java
deleted file mode 100644
index 5176ddf0fa..0000000000
--- a/feign/src/main/java/com/baeldung/core/fileupload/service/UploadService.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package com.baeldung.core.fileupload.service;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.web.multipart.MultipartFile;
-
-import feign.Feign;
-import feign.Response;
-import feign.form.spring.SpringFormEncoder;
-
-@Service
-public class UploadService {
- private static final String HTTP_FILE_UPLOAD_URL = "http://localhost:8081";
-
- @Autowired
- private UploadClient client;
-
- public boolean uploadFileWithManualClient(MultipartFile file) {
- UploadResource fileUploadResource = Feign.builder().encoder(new SpringFormEncoder())
- .target(UploadResource.class, HTTP_FILE_UPLOAD_URL);
- Response response = fileUploadResource.uploadFile(file);
- return response.status() == 200;
- }
-
- public String uploadFile(MultipartFile file) {
- return client.fileUpload(file);
- }
-
- public String uploadFileError(MultipartFile file) {
- return client.fileUpload(file);
- }
-}
\ No newline at end of file
diff --git a/feign/src/test/java/com/baeldung/core/OpenFeignFileUploadLiveTest.java b/feign/src/test/java/com/baeldung/core/OpenFeignFileUploadLiveTest.java
deleted file mode 100644
index f9dc8b13ed..0000000000
--- a/feign/src/test/java/com/baeldung/core/OpenFeignFileUploadLiveTest.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package com.baeldung.core;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-
-import org.apache.commons.io.IOUtils;
-import org.junit.Assert;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.mock.web.MockMultipartFile;
-import org.springframework.test.context.junit4.SpringRunner;
-import org.springframework.web.multipart.MultipartFile;
-
-import com.baeldung.core.fileupload.service.UploadService;
-
-@RunWith(SpringRunner.class)
-@SpringBootTest(classes = ExampleApplication.class)
-public class OpenFeignFileUploadLiveTest {
-
- @Autowired
- private UploadService uploadService;
-
- private static String FILE_NAME = "fileupload.txt";
-
- @Test
- public void whenFeignBuilder_thenFileUploadSuccess() throws IOException {
- ClassLoader classloader = Thread.currentThread().getContextClassLoader();
- File file = new File(classloader.getResource(FILE_NAME).getFile());
- Assert.assertTrue(file.exists());
- FileInputStream input = new FileInputStream(file);
- MultipartFile multipartFile = new MockMultipartFile("file", file.getName(), "text/plain",
- IOUtils.toByteArray(input));
- Assert.assertTrue(uploadService.uploadFileWithManualClient(multipartFile));
- }
-
- @Test
- public void whenAnnotatedFeignClient_thenFileUploadSuccess() throws IOException {
- ClassLoader classloader = Thread.currentThread().getContextClassLoader();
- File file = new File(classloader.getResource(FILE_NAME).getFile());
- Assert.assertTrue(file.exists());
- FileInputStream input = new FileInputStream(file);
- MultipartFile multipartFile = new MockMultipartFile("file", file.getName(), "text/plain",
- IOUtils.toByteArray(input));
- String uploadFile = uploadService.uploadFile(multipartFile);
- Assert.assertNotNull(uploadFile);
- }
-}
diff --git a/gcp-firebase/pom.xml b/gcp-firebase/pom.xml
index c563099ad6..10a899f370 100644
--- a/gcp-firebase/pom.xml
+++ b/gcp-firebase/pom.xml
@@ -1,48 +1,51 @@
-
- 4.0.0
+
+ 4.0.0
+ gcp-firebase
+
com.baeldung
parent-boot-2
0.0.1-SNAPSHOT
../parent-boot-2
- gcp-firebase
-
-
- 9.1.1
-
-
-
- com.google.firebase
- firebase-admin
- ${firebase-admin.version}
-
-
-
-
- org.springframework.boot
- spring-boot-starter-web
-
-
- org.springframework.boot
- spring-boot-starter-test
- test
-
-
- org.springframework.boot
- spring-boot-configuration-processor
- true
-
-
-
-
-
-
-
- org.springframework.boot
- spring-boot-maven-plugin
-
-
-
+
+
+ com.google.firebase
+ firebase-admin
+ ${firebase-admin.version}
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+ org.springframework.boot
+ spring-boot-configuration-processor
+ true
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+
+
+ 9.1.1
+
+
\ No newline at end of file
diff --git a/gcp-firebase/src/main/resources/firebase-service-account.json b/gcp-firebase/src/main/resources/firebase-service-account.json
index ed5afa9f13..cd87ff6bda 100644
--- a/gcp-firebase/src/main/resources/firebase-service-account.json
+++ b/gcp-firebase/src/main/resources/firebase-service-account.json
@@ -1,10 +1,10 @@
{
"type": "service_account",
- "project_id": "tutorials-2cdfb",
- "private_key_id": "d9f6a684d6814f85ed2d0490585eb7bf590f983a",
- "private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDdJWTeGT2eBFo+\nXxzT9xFJYPtyawTAj0K1rVUNlWNUwj3zszK6P2sAsrpI2Rz1klwQ9aDz9i3+Opxv\n7UZ3pOzur6S58JnoswtNs6BZ9P7oeggLJJC6MPjioxwh8jLLIGMgdVtC2/iPYW3r\nGzurWlwkM8M8DyCgNq7KKJcx44pGcyy16ZGCYiijuTEmK6R+WHJTTyICzRFu3Org\nuHGlZUs/G4E76p10HanoFX2AIS/fDEEMP2DXBB73yoCal5GuvMY9yZWxnvV65Y5z\nGveY3NDB9EESbO2AAhDvHekWT17uWhymtO5N3gM8da48J9d51tVzi0D/NIPZnF0u\nTS64uxK3AgMBAAECggEAYuEQa7oPcfLyQscWRbRH1250n2E4e7zSkBcTW4J7Km+7\ncZajTOGEP4iqgF4Lc8XgQnkBYXOmdvDP97+47VAh3EtOtRDeUEyV9kUlonNH8rx1\nkj3kNEwnTHav4oG/slEl4WJ3zro6NinTEvdXQ7OgVVOLrPP6m4g3uQ5TJCxgLEUI\nTd3Hs3cg3P71mzEqfBF4NmGVmC1ea5lXFELd6giJJMvL7g+O2w22/fquGWOrreAM\ncj/G2Xv9/vmzeb9yzbgGxqCJyY6vspmd90fQLUu7bxkEY5/PPc6Zk8qay4AdEn47\nkL6hnJiR8H1wMCzV2RTUKE7ospriNVdBilXgxm9IMQKBgQD1TmF0Bg85zvXmEKBa\nLBhbc3xTtM7DOgKs+pI12sYDKwgL/QKEI/TKkYXua0aVGiQWc2Bk2/0sYhO6aB2f\n6AN1ZUrf4PRM8c53jebChc7beVLSjWI8Tx+kE+0t8864OwvELYZUzP35oSx3RdJD\nE/CvqBM7NQfJwx2Mw2VJK/YRGQKBgQDmyWLm/IWitehkITw6xMQpkkFs2m4Joq3A\nJvAyri58TRkw/7rqWaIxb5Wcy/7BOvjDN8PZNTHh4ZvhQiHpn7NGUks2/ULnWxUB\nWAA9YbeO9PNHJfZ6PjD2FSvwOXHj+vVkWt2GCXT8pDGYM2ImqXon85Oe3OH/h+N5\nktO9taesTwKBgQCSdPGKK/P7N61oZpTWQW1pbFHWSCUKOiBO1mtk6/E9AvwS7EQM\nUMteBfRInJPPgYP6Q3hRv2YwkX3l1TOavRMTjB5f/BbfuZ7jkj0r9mfCcXUZcIAu\nMa9abus0fFP3eolT3zpMdvdLiwbZTz5x/f29YkPZHZhAxdVmrWJThYOsQQKBgBDu\nZVsc25D8V3hBF/IXzWxfVn1t6PS8ApM+SBDvxmlIHrkBiez3dna6APfn32C9utJX\nnP6qcGZp7s2v1F0XYkeecfYuzmG6xOe8VQgryxOp1M87ccG2HlFvbDHLhRd8qdQa\n9nWG7BY81Yac/m5nsJaNwB6/hbUBeybIJtCcKxjxAoGBAJ3y+QSFb4AYmxLFtmMA\nklOvlT+r70w4RV/z4SEO1gjWEh9IozNSXknl5Q/8Zh9IVm3+/qYap//IzEv9JUc3\nv4+HlpZu0trxTpvRWWjPqVr3ssxRdiFLC0LCLEk4rzqWLBVyzJm8uHVIF9Inv8PE\naudInvdbnfAWi60+1Wi8u0Co\n-----END PRIVATE KEY-----\n",
- "client_email": "firebase-adminsdk-2afzd@tutorials-2cdfb.iam.gserviceaccount.com",
- "client_id": "111111112074248894669",
+ "project_id": "REPLACE WITH VALID PROJECT ID",
+ "private_key_id": "REPLACE WITH VALID PRIVATE KEY ID",
+ "private_key": "REPLACE WITH VALID PRIVATE KEY",
+ "client_email": "REPLACE WITH VALID CLIENT EMAIL",
+ "client_id": "REPLACE WITH VALID CLIENT ID",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://oauth2.googleapis.com/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
diff --git a/geotools/pom.xml b/geotools/pom.xml
index f17b4cc5da..61682ae0f5 100644
--- a/geotools/pom.xml
+++ b/geotools/pom.xml
@@ -4,10 +4,8 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
geotools
- 0.0.1-SNAPSHOT
geotools
jar
- http://maven.apache.org
com.baeldung
@@ -15,14 +13,6 @@
1.0.0-SNAPSHOT
-
-
- osgeo-release
- OSGeo Repository
- https://repo.osgeo.org/repository/release/
-
-
-
org.geotools
@@ -41,6 +31,14 @@
+
+
+ osgeo-release
+ OSGeo Repository
+ https://repo.osgeo.org/repository/release/
+
+
+
28.1
28.1
diff --git a/google-cloud/pom.xml b/google-cloud/pom.xml
index 72b9647bc8..8bb535f12a 100644
--- a/google-cloud/pom.xml
+++ b/google-cloud/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
google-cloud
- 0.1-SNAPSHOT
google-cloud
jar
Google Cloud Tutorials
@@ -24,7 +23,6 @@
org.projectlombok
lombok
-
${lombok.version}
provided
diff --git a/graphql-modules/graphql-dgs/pom.xml b/graphql-modules/graphql-dgs/pom.xml
index 051785b4b8..313e598130 100644
--- a/graphql-modules/graphql-dgs/pom.xml
+++ b/graphql-modules/graphql-dgs/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
graphql-dgs
- 1.0
graphql-dgs
diff --git a/graphql-modules/graphql-java/pom.xml b/graphql-modules/graphql-java/pom.xml
index 01b7a4fbc3..88f2beb574 100644
--- a/graphql-modules/graphql-java/pom.xml
+++ b/graphql-modules/graphql-java/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
graphql-java
- 1.0
graphql-java
@@ -13,21 +12,6 @@
1.0.0-SNAPSHOT
-
-
- jitpack.io
- https://jitpack.io
-
-
-
- false
-
- central
- Central Repository
- https://repo.maven.apache.org/maven2
-
-
-
com.graphql-java
@@ -143,6 +127,13 @@
+
+
+ jitpack.io
+ https://jitpack.io
+
+
+
11.0
5.2.4
diff --git a/graphql-modules/graphql-spqr-boot-starter/pom.xml b/graphql-modules/graphql-spqr-boot-starter/pom.xml
index 6cb1d74329..fd9ebc0224 100644
--- a/graphql-modules/graphql-spqr-boot-starter/pom.xml
+++ b/graphql-modules/graphql-spqr-boot-starter/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
graphql-spqr-boot-starter
- 1.0
graphql-spqr-boot-starter
diff --git a/graphql-modules/graphql-spqr/pom.xml b/graphql-modules/graphql-spqr/pom.xml
index d845d1ac8a..756930f2ac 100644
--- a/graphql-modules/graphql-spqr/pom.xml
+++ b/graphql-modules/graphql-spqr/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
graphql-spqr
- 1.0
graphql-spqr
diff --git a/graphql-modules/pom.xml b/graphql-modules/pom.xml
index a42400b7cc..4b43cbffde 100644
--- a/graphql-modules/pom.xml
+++ b/graphql-modules/pom.xml
@@ -5,7 +5,6 @@
4.0.0
com.baeldung.graphql
graphql-modules
- 1.0.0-SNAPSHOT
graphql-modules
pom
diff --git a/grpc/pom.xml b/grpc/pom.xml
index 40d35183dc..fed1e801f2 100644
--- a/grpc/pom.xml
+++ b/grpc/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
grpc
- 0.0.1-SNAPSHOT
grpc
jar
diff --git a/guava-modules/guava-18/pom.xml b/guava-modules/guava-18/pom.xml
index 8f5108bff1..873555bf24 100644
--- a/guava-modules/guava-18/pom.xml
+++ b/guava-modules/guava-18/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
guava-18
- 0.1.0-SNAPSHOT
guava-18
diff --git a/guava-modules/guava-19/pom.xml b/guava-modules/guava-19/pom.xml
index ba85fe0ae8..9a40677e08 100644
--- a/guava-modules/guava-19/pom.xml
+++ b/guava-modules/guava-19/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
guava-19
- 0.1.0-SNAPSHOT
guava-19
diff --git a/guava-modules/guava-21/pom.xml b/guava-modules/guava-21/pom.xml
index 9e791bfe23..a26176ba0b 100644
--- a/guava-modules/guava-21/pom.xml
+++ b/guava-modules/guava-21/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
guava-21
- 1.0-SNAPSHOT
guava-21
diff --git a/guava-modules/guava-collections-list/pom.xml b/guava-modules/guava-collections-list/pom.xml
index 6863b4011c..a07f34e56c 100644
--- a/guava-modules/guava-collections-list/pom.xml
+++ b/guava-modules/guava-collections-list/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
guava-collections-list
- 0.1.0-SNAPSHOT
guava-collections-list
diff --git a/guava-modules/guava-collections-map/pom.xml b/guava-modules/guava-collections-map/pom.xml
index 04beaa13a1..6b73e8c29a 100644
--- a/guava-modules/guava-collections-map/pom.xml
+++ b/guava-modules/guava-collections-map/pom.xml
@@ -5,7 +5,6 @@
4.0.0
com.baeldung.guava
guava-collections-map
- 0.1.0-SNAPSHOT
guava-collections-map
diff --git a/guava-modules/guava-collections-set/pom.xml b/guava-modules/guava-collections-set/pom.xml
index 49bfc46ee2..ffd6c80a3e 100644
--- a/guava-modules/guava-collections-set/pom.xml
+++ b/guava-modules/guava-collections-set/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
guava-collections-set
- 0.1.0-SNAPSHOT
guava-collections-set
diff --git a/guava-modules/guava-collections/pom.xml b/guava-modules/guava-collections/pom.xml
index 8dc052db75..e016b1c547 100644
--- a/guava-modules/guava-collections/pom.xml
+++ b/guava-modules/guava-collections/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
guava-collections
- 0.1.0-SNAPSHOT
guava-collections
diff --git a/guava-modules/guava-core/pom.xml b/guava-modules/guava-core/pom.xml
index dd68fef43a..6c4f76356f 100644
--- a/guava-modules/guava-core/pom.xml
+++ b/guava-modules/guava-core/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
guava-core
- 0.1.0-SNAPSHOT
guava-core
diff --git a/guava-modules/guava-io/pom.xml b/guava-modules/guava-io/pom.xml
index 2ea91c5e4f..367533139e 100644
--- a/guava-modules/guava-io/pom.xml
+++ b/guava-modules/guava-io/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
guava-io
- 0.1.0-SNAPSHOT
guava-io
diff --git a/guava-modules/guava-utilities/pom.xml b/guava-modules/guava-utilities/pom.xml
index ab849072a5..407a44587e 100644
--- a/guava-modules/guava-utilities/pom.xml
+++ b/guava-modules/guava-utilities/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
guava-utilities
- 0.1.0-SNAPSHOT
guava-utilities
diff --git a/hazelcast/pom.xml b/hazelcast/pom.xml
index 694563790f..4742f213e5 100644
--- a/hazelcast/pom.xml
+++ b/hazelcast/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
hazelcast
- 0.0.1-SNAPSHOT
hazelcast
diff --git a/httpclient-simple/pom.xml b/httpclient-simple/pom.xml
index eea056477c..a6049432ce 100644
--- a/httpclient-simple/pom.xml
+++ b/httpclient-simple/pom.xml
@@ -1,10 +1,9 @@
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
httpclient-simple
- 0.1-SNAPSHOT
httpclient-simple
war
diff --git a/hystrix/pom.xml b/hystrix/pom.xml
index 639d4eba02..007c2e237b 100644
--- a/hystrix/pom.xml
+++ b/hystrix/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
4.0.0
hystrix
- 1.0
hystrix
diff --git a/image-processing/pom.xml b/image-processing/pom.xml
index 3780ecfd33..2a2b92ca48 100644
--- a/image-processing/pom.xml
+++ b/image-processing/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
image-processing
- 1.0-SNAPSHOT
image-processing
diff --git a/jackson-modules/jackson-annotations/pom.xml b/jackson-modules/jackson-annotations/pom.xml
index 4bb9341e43..e2d5e1e607 100644
--- a/jackson-modules/jackson-annotations/pom.xml
+++ b/jackson-modules/jackson-annotations/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
jackson-annotations
- 0.0.1-SNAPSHOT
jackson-annotations
diff --git a/jackson-modules/jackson-conversions-2/pom.xml b/jackson-modules/jackson-conversions-2/pom.xml
index 1c6d2fc002..457045b460 100644
--- a/jackson-modules/jackson-conversions-2/pom.xml
+++ b/jackson-modules/jackson-conversions-2/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
jackson-conversions-2
- 0.0.1-SNAPSHOT
jackson-conversions-2
diff --git a/jackson-modules/jackson-conversions/pom.xml b/jackson-modules/jackson-conversions/pom.xml
index 9218f209ac..e0990ed34f 100644
--- a/jackson-modules/jackson-conversions/pom.xml
+++ b/jackson-modules/jackson-conversions/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
jackson-conversions
- 0.0.1-SNAPSHOT
jackson-conversions
@@ -24,6 +23,11 @@
jackson-datatype-jsr310
${jackson.version}
+
+ com.fasterxml.jackson.core
+ jackson-databind
+ ${jackson.version}
+
diff --git a/jackson-modules/jackson-conversions/src/main/java/com/baeldung/jackson/map/Fruit.java b/jackson-modules/jackson-conversions/src/main/java/com/baeldung/jackson/map/Fruit.java
new file mode 100644
index 0000000000..49e45f2161
--- /dev/null
+++ b/jackson-modules/jackson-conversions/src/main/java/com/baeldung/jackson/map/Fruit.java
@@ -0,0 +1,21 @@
+package com.baeldung.jackson.map;
+
+import com.fasterxml.jackson.annotation.JsonKey;
+import com.fasterxml.jackson.annotation.JsonValue;
+
+public class Fruit {
+ public String variety;
+
+ @JsonKey
+ public String name;
+
+ public Fruit(String variety, String name) {
+ this.variety = variety;
+ this.name = name;
+ }
+
+ @JsonValue
+ public String getFullName() {
+ return this.variety + " " + this.name;
+ }
+}
diff --git a/jackson-modules/jackson-conversions/src/test/java/com/baeldung/jackson/map/MapWithJsonKeyValueUnitTest.java b/jackson-modules/jackson-conversions/src/test/java/com/baeldung/jackson/map/MapWithJsonKeyValueUnitTest.java
new file mode 100644
index 0000000000..87c425fe96
--- /dev/null
+++ b/jackson-modules/jackson-conversions/src/test/java/com/baeldung/jackson/map/MapWithJsonKeyValueUnitTest.java
@@ -0,0 +1,48 @@
+package com.baeldung.jackson.map;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+public class MapWithJsonKeyValueUnitTest {
+ private static final Fruit FRUIT1 = new Fruit("Alphonso", "Mango");
+ private static final Fruit FRUIT2 = new Fruit("Black", "Grapes");
+ private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
+
+ @Test
+ public void givenObject_WhenSerialize_ThenUseJsonValueForSerialization() throws JsonProcessingException {
+ String serializedValueForFruit1 = OBJECT_MAPPER.writeValueAsString(FRUIT1);
+ Assertions.assertEquals("\"Alphonso Mango\"", serializedValueForFruit1);
+ String serializedValueForFruit2 = OBJECT_MAPPER.writeValueAsString(FRUIT2);
+ Assertions.assertEquals("\"Black Grapes\"", serializedValueForFruit2);
+ }
+
+ @Test
+ public void givenMapWithObjectKeys_WhenSerialize_ThenUseJsonKeyForSerialization() throws JsonProcessingException {
+ // Given
+ Map selectionByFruit = new HashMap<>();
+ selectionByFruit.put(FRUIT1, "Hagrid");
+ selectionByFruit.put(FRUIT2, "Hercules");
+ // When
+ String serializedValue = OBJECT_MAPPER.writeValueAsString(selectionByFruit);
+ // Then
+ Assertions.assertEquals("{\"Mango\":\"Hagrid\",\"Grapes\":\"Hercules\"}", serializedValue);
+ }
+
+ @Test
+ public void givenMapWithObjectValues_WhenSerialize_ThenUseJsonValueForSerialization() throws JsonProcessingException {
+ // Given
+ Map selectionByPerson = new HashMap<>();
+ selectionByPerson.put("Hagrid", FRUIT1);
+ selectionByPerson.put("Hercules", FRUIT2);
+ // When
+ String serializedValue = OBJECT_MAPPER.writeValueAsString(selectionByPerson);
+ // Then
+ Assertions.assertEquals("{\"Hagrid\":\"Alphonso Mango\",\"Hercules\":\"Black Grapes\"}", serializedValue);
+ }
+}
diff --git a/jackson-modules/jackson-core/README.md b/jackson-modules/jackson-core/README.md
index 0aa3dc5aef..d34a9e8bf7 100644
--- a/jackson-modules/jackson-core/README.md
+++ b/jackson-modules/jackson-core/README.md
@@ -14,3 +14,4 @@ The "REST With Spring" Classes: http://bit.ly/restwithspring
- [Inheritance with Jackson](https://www.baeldung.com/jackson-inheritance)
- [Working with Tree Model Nodes in Jackson](https://www.baeldung.com/jackson-json-node-tree-model)
- [Get all the Keys in a JSON String Using JsonNode](https://www.baeldung.com/java-jsonnode-get-keys)
+- [Difference Between asText() and toString() in JsonNode](https://www.baeldung.com/java-jsonnode-astext-vs-tostring)
diff --git a/jackson-modules/jackson-core/pom.xml b/jackson-modules/jackson-core/pom.xml
index f3edffc07c..4eccd4d8f8 100644
--- a/jackson-modules/jackson-core/pom.xml
+++ b/jackson-modules/jackson-core/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
jackson-core
- 0.0.1-SNAPSHOT
jackson-core
diff --git a/jackson-modules/jackson-core/src/main/java/com/baeldung/jackson/deserialization/jsongeneric/JsonResponse.java b/jackson-modules/jackson-core/src/main/java/com/baeldung/jackson/deserialization/jsongeneric/JsonResponse.java
new file mode 100644
index 0000000000..14f6b3f8ad
--- /dev/null
+++ b/jackson-modules/jackson-core/src/main/java/com/baeldung/jackson/deserialization/jsongeneric/JsonResponse.java
@@ -0,0 +1,14 @@
+package com.baeldung.jackson.deserialization.jsongeneric;
+
+public class JsonResponse {
+
+ private T result;
+
+ public T getResult() {
+ return result;
+ }
+
+ public void setResult(T result) {
+ this.result = result;
+ }
+}
diff --git a/jackson-modules/jackson-core/src/main/java/com/baeldung/jackson/deserialization/jsongeneric/User.java b/jackson-modules/jackson-core/src/main/java/com/baeldung/jackson/deserialization/jsongeneric/User.java
new file mode 100644
index 0000000000..1efb3af7f9
--- /dev/null
+++ b/jackson-modules/jackson-core/src/main/java/com/baeldung/jackson/deserialization/jsongeneric/User.java
@@ -0,0 +1,33 @@
+package com.baeldung.jackson.deserialization.jsongeneric;
+
+public class User {
+
+ private Long id;
+ private String firstName;
+ private String lastName;
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public String getFirstName() {
+ return firstName;
+ }
+
+ public void setFirstName(String firstName) {
+ this.firstName = firstName;
+ }
+
+ public String getLastName() {
+ return lastName;
+ }
+
+ public void setLastName(String lastName) {
+ this.lastName = lastName;
+ }
+}
+
diff --git a/jackson-modules/jackson-core/src/test/java/com/baeldung/jackson/deserialization/jsongeneric/GenericTypeDeserializerUnitTest.java b/jackson-modules/jackson-core/src/test/java/com/baeldung/jackson/deserialization/jsongeneric/GenericTypeDeserializerUnitTest.java
new file mode 100644
index 0000000000..24baeb7f1f
--- /dev/null
+++ b/jackson-modules/jackson-core/src/test/java/com/baeldung/jackson/deserialization/jsongeneric/GenericTypeDeserializerUnitTest.java
@@ -0,0 +1,40 @@
+package com.baeldung.jackson.deserialization.jsongeneric;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.JavaType;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.junit.jupiter.api.Test;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+class GenericTypeDeserializerUnitTest {
+
+ ObjectMapper objectMapper = new ObjectMapper();
+
+ @Test
+ void givenJsonObject_whenDeserializeIntoGenericTypeByTypeReference_thenCorrect() throws JsonProcessingException {
+ String json = "{\"result\":{\"id\":1,\"firstName\":\"John\",\"lastName\":\"Lewis\"}}";
+
+ TypeReference> typeRef = new TypeReference>() {};
+ JsonResponse jsonResponse = objectMapper.readValue(json, typeRef);
+ User user = jsonResponse.getResult();
+
+ assertThat(user.getId()).isEqualTo(1);
+ assertThat(user.getFirstName()).isEqualTo("John");
+ assertThat(user.getLastName()).isEqualTo("Lewis");
+ }
+
+ @Test
+ void givenJsonObject_whenDeserializeIntoGenericTypeByJavaType_thenCorrect() throws JsonProcessingException {
+ String json = "{\"result\":{\"id\":1,\"firstName\":\"John\",\"lastName\":\"Lewis\"}}";
+
+ JavaType javaType = objectMapper.getTypeFactory().constructParametricType(JsonResponse.class, User.class);
+ JsonResponse jsonResponse = objectMapper.readValue(json, javaType);
+ User user = jsonResponse.getResult();
+
+ assertThat(user.getId()).isEqualTo(1);
+ assertThat(user.getFirstName()).isEqualTo("John");
+ assertThat(user.getLastName()).isEqualTo("Lewis");
+ }
+}
\ No newline at end of file
diff --git a/jackson-modules/jackson-custom-conversions/README.md b/jackson-modules/jackson-custom-conversions/README.md
index 68e9a6d50d..2f45a2f43b 100644
--- a/jackson-modules/jackson-custom-conversions/README.md
+++ b/jackson-modules/jackson-custom-conversions/README.md
@@ -7,3 +7,4 @@ This module contains articles about Jackson custom conversions.
- [Getting Started with Custom Deserialization in Jackson](https://www.baeldung.com/jackson-deserialization)
- [Serialize Only Fields that meet a Custom Criteria with Jackson](https://www.baeldung.com/jackson-serialize-field-custom-criteria)
- [Calling Default Serializer from Custom Serializer in Jackson](https://www.baeldung.com/jackson-call-default-serializer-from-custom-serializer)
+- [OffsetDateTime Serialization With Jackson](https://www.baeldung.com/java-jackson-offsetdatetime)
diff --git a/jackson-modules/jackson-custom-conversions/pom.xml b/jackson-modules/jackson-custom-conversions/pom.xml
index 79af962eec..31e460511a 100644
--- a/jackson-modules/jackson-custom-conversions/pom.xml
+++ b/jackson-modules/jackson-custom-conversions/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
jackson-custom-conversions
- 0.0.1-SNAPSHOT
jackson-custom-conversions
diff --git a/jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/offsetdatetime/Main.java b/jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/offsetdatetime/Main.java
new file mode 100644
index 0000000000..eb82c3c4c8
--- /dev/null
+++ b/jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/offsetdatetime/Main.java
@@ -0,0 +1,50 @@
+package com.baeldung.offsetdatetime;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationFeature;
+import com.fasterxml.jackson.databind.module.SimpleModule;
+import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
+
+import java.time.OffsetDateTime;
+
+public class Main {
+ public static void main(String[] args) throws JsonProcessingException {
+ System.out.println(serializeUser());
+ System.out.println(customSerialize());
+ System.out.println(customDeserialize());
+ }
+
+ static String serializeUser() throws JsonProcessingException {
+ ObjectMapper objectMapper = new ObjectMapper();
+ objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
+ objectMapper.registerModule(new JavaTimeModule());
+
+ User user = new User();
+ user.setCreatedAt(OffsetDateTime.parse("2021-09-30T15:30:00+01:00"));
+
+ return objectMapper.writeValueAsString(user);
+ }
+
+ static String customSerialize() throws JsonProcessingException {
+ ObjectMapper objectMapper = new ObjectMapper();
+
+ objectMapper.registerModule(new SimpleModule().addSerializer(OffsetDateTime.class, new OffsetDateTimeSerializer()));
+
+ User user = new User();
+ user.setCreatedAt(OffsetDateTime.parse("2021-09-30T15:30:00+01:00"));
+
+ return objectMapper.writeValueAsString(user);
+ }
+
+ static String customDeserialize() throws JsonProcessingException {
+ ObjectMapper objectMapper = new ObjectMapper();
+
+ objectMapper.registerModule(new SimpleModule().addDeserializer(OffsetDateTime.class, new OffsetDateTimeDeserializer()));
+
+ String jsonString = "{\"createdAt\":\"30-09-2021 15:30:00 +01:00\"}";
+ User returnedUser = objectMapper.readValue(jsonString, User.class);
+
+ return returnedUser.getCreatedAt().toString();
+ }
+}
diff --git a/jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/offsetdatetime/OffsetDateTimeDeserializer.java b/jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/offsetdatetime/OffsetDateTimeDeserializer.java
new file mode 100644
index 0000000000..a76d598b8f
--- /dev/null
+++ b/jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/offsetdatetime/OffsetDateTimeDeserializer.java
@@ -0,0 +1,24 @@
+package com.baeldung.offsetdatetime;
+
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.databind.DeserializationContext;
+import com.fasterxml.jackson.databind.JsonDeserializer;
+
+import java.io.IOException;
+import java.time.OffsetDateTime;
+import java.time.format.DateTimeFormatter;
+
+public class OffsetDateTimeDeserializer extends JsonDeserializer {
+ private static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter
+ .ofPattern("dd-MM-yyyy HH:mm:ss XXX");
+
+ @Override
+ public OffsetDateTime deserialize(JsonParser jsonParser, DeserializationContext deserializationContext)
+ throws IOException {
+ String dateAsString = jsonParser.getText();
+ if (dateAsString == null) {
+ throw new IOException("OffsetDateTime argument is null.");
+ }
+ return OffsetDateTime.parse(dateAsString, DATE_TIME_FORMATTER);
+ }
+}
\ No newline at end of file
diff --git a/jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/offsetdatetime/OffsetDateTimeSerializer.java b/jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/offsetdatetime/OffsetDateTimeSerializer.java
new file mode 100644
index 0000000000..8821f37e8e
--- /dev/null
+++ b/jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/offsetdatetime/OffsetDateTimeSerializer.java
@@ -0,0 +1,23 @@
+package com.baeldung.offsetdatetime;
+
+import com.fasterxml.jackson.core.JsonGenerator;
+import com.fasterxml.jackson.databind.JsonSerializer;
+import com.fasterxml.jackson.databind.SerializerProvider;
+
+import java.io.IOException;
+import java.time.OffsetDateTime;
+import java.time.format.DateTimeFormatter;
+
+public class OffsetDateTimeSerializer extends JsonSerializer {
+ private static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter
+ .ofPattern("dd-MM-yyyy HH:mm:ss XXX");
+
+ @Override
+ public void serialize(OffsetDateTime value, JsonGenerator jsonGenerator, SerializerProvider serializerProvider)
+ throws IOException {
+ if (value == null) {
+ throw new IOException("OffsetDateTime argument is null.");
+ }
+ jsonGenerator.writeString(DATE_TIME_FORMATTER.format(value));
+ }
+}
\ No newline at end of file
diff --git a/jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/offsetdatetime/User.java b/jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/offsetdatetime/User.java
new file mode 100644
index 0000000000..44978cac87
--- /dev/null
+++ b/jackson-modules/jackson-custom-conversions/src/main/java/com/baeldung/offsetdatetime/User.java
@@ -0,0 +1,18 @@
+package com.baeldung.offsetdatetime;
+
+import java.time.OffsetDateTime;
+
+public class User {
+ private OffsetDateTime createdAt;
+
+ public User() {
+ }
+
+ public OffsetDateTime getCreatedAt() {
+ return createdAt;
+ }
+
+ public void setCreatedAt(OffsetDateTime createdAt) {
+ this.createdAt = createdAt;
+ }
+}
\ No newline at end of file
diff --git a/jackson-modules/jackson-custom-conversions/src/test/java/com/baeldung/offsetdatetime/MainUnitTest.java b/jackson-modules/jackson-custom-conversions/src/test/java/com/baeldung/offsetdatetime/MainUnitTest.java
new file mode 100644
index 0000000000..553adc8fdf
--- /dev/null
+++ b/jackson-modules/jackson-custom-conversions/src/test/java/com/baeldung/offsetdatetime/MainUnitTest.java
@@ -0,0 +1,23 @@
+package com.baeldung.offsetdatetime;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+class MainUnitTest {
+
+ @Test
+ void givenUser_whenSerialized_thenCreatedDateIsSerialized() throws JsonProcessingException {
+ Assertions.assertEquals("{\"createdAt\":\"2021-09-30T15:30:00+01:00\"}", Main.serializeUser());
+ }
+
+ @Test
+ void givenUser_whenCustomSerialized_thenCreatedDateIsSerialized() throws JsonProcessingException {
+ Assertions.assertEquals("{\"createdAt\":\"30-09-2021 15:30:00 +01:00\"}", Main.customSerialize());
+ }
+
+ @Test
+ void givenUser_whenCustomDeserialized_thenCreatedDateIsDeserialized() throws JsonProcessingException {
+ Assertions.assertEquals("2021-09-30T15:30+01:00", Main.customDeserialize());
+ }
+}
\ No newline at end of file
diff --git a/jackson-modules/jackson-exceptions/pom.xml b/jackson-modules/jackson-exceptions/pom.xml
index a24a0ab4b7..e19ef4f883 100644
--- a/jackson-modules/jackson-exceptions/pom.xml
+++ b/jackson-modules/jackson-exceptions/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
jackson-exceptions
- 0.0.1-SNAPSHOT
jackson-exceptions
diff --git a/jackson-modules/pom.xml b/jackson-modules/pom.xml
index 4163d1912f..531d5628f7 100644
--- a/jackson-modules/pom.xml
+++ b/jackson-modules/pom.xml
@@ -24,11 +24,6 @@
-
- com.fasterxml.jackson.core
- jackson-databind
- ${jackson.version}
-
com.fasterxml.jackson.dataformat
diff --git a/jackson-simple/pom.xml b/jackson-simple/pom.xml
index f71cb1ffbf..6569324586 100644
--- a/jackson-simple/pom.xml
+++ b/jackson-simple/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
jackson-simple
- 0.0.1-SNAPSHOT
jackson-simple
diff --git a/jackson-simple/src/main/java/com/baeldung/jackson/annotation/GeneralBean.java b/jackson-simple/src/main/java/com/baeldung/jackson/annotation/GeneralBean.java
new file mode 100644
index 0000000000..a8333f54ae
--- /dev/null
+++ b/jackson-simple/src/main/java/com/baeldung/jackson/annotation/GeneralBean.java
@@ -0,0 +1,26 @@
+package com.baeldung.jackson.annotation;
+
+import com.fasterxml.jackson.annotation.JsonValue;
+
+public class GeneralBean {
+ Integer id;
+
+ @JsonValue
+ String name;
+
+ public GeneralBean() {
+ }
+
+ public GeneralBean(Integer id, String name) {
+ this.id = id;
+ this.name = name;
+ }
+
+ public Integer getId() {
+ return id;
+ }
+
+ public String getName() {
+ return name;
+ }
+}
diff --git a/jackson-simple/src/main/java/com/baeldung/jackson/annotation/PriorityEnum.java b/jackson-simple/src/main/java/com/baeldung/jackson/annotation/PriorityEnum.java
new file mode 100644
index 0000000000..ed74052ede
--- /dev/null
+++ b/jackson-simple/src/main/java/com/baeldung/jackson/annotation/PriorityEnum.java
@@ -0,0 +1,16 @@
+package com.baeldung.jackson.annotation;
+
+import com.fasterxml.jackson.annotation.JsonValue;
+
+public enum PriorityEnum {
+
+ LOW(0), MEDIUM(1), HIGH(3);
+
+ @JsonValue
+ private int level;
+
+ PriorityEnum(int level) {
+ this.level = level;
+ }
+
+}
diff --git a/jackson-simple/src/main/java/com/baeldung/jackson/annotation/dtos/withEnum/TypeEnumWithValue.java b/jackson-simple/src/main/java/com/baeldung/jackson/annotation/dtos/withEnum/TypeEnumWithValue.java
new file mode 100644
index 0000000000..2c8718dfd8
--- /dev/null
+++ b/jackson-simple/src/main/java/com/baeldung/jackson/annotation/dtos/withEnum/TypeEnumWithValue.java
@@ -0,0 +1,23 @@
+package com.baeldung.jackson.annotation.dtos.withEnum;
+
+import com.fasterxml.jackson.annotation.JsonValue;
+
+public enum TypeEnumWithValue {
+ TYPE1(1, "Type A"), TYPE2(2, "Type 2");
+
+ private Integer id;
+
+ @JsonValue
+ private String name;
+
+
+ TypeEnumWithValue(int id, String name) {
+ this.id = id;
+ this.name = name;
+ }
+
+ //@JsonValue
+ public String getName() {
+ return name;
+ }
+}
diff --git a/jackson-simple/src/test/java/com/baeldung/jackson/annotation/JacksonAnnotationUnitTest.java b/jackson-simple/src/test/java/com/baeldung/jackson/annotation/JacksonAnnotationUnitTest.java
index bbbb79b0a8..57ef231825 100644
--- a/jackson-simple/src/test/java/com/baeldung/jackson/annotation/JacksonAnnotationUnitTest.java
+++ b/jackson-simple/src/test/java/com/baeldung/jackson/annotation/JacksonAnnotationUnitTest.java
@@ -20,10 +20,12 @@ import com.baeldung.jackson.annotation.bidirection.UserWithIdentity;
import com.baeldung.jackson.annotation.bidirection.UserWithRef;
import com.baeldung.jackson.annotation.date.EventWithFormat;
import com.baeldung.jackson.annotation.date.EventWithSerializer;
+import com.baeldung.jackson.annotation.dtos.withEnum.TypeEnumWithValue;
import com.baeldung.jackson.annotation.ignore.MyMixInForIgnoreType;
import com.baeldung.jackson.annotation.dtos.withEnum.DistanceEnumWithValue;
import com.baeldung.jackson.annotation.exception.UserWithRoot;
import com.baeldung.jackson.annotation.exception.UserWithRootNamespace;
+import com.baeldung.jackson.annotation.ignore.MyMixInForIgnoreType;
import com.baeldung.jackson.annotation.jsonview.Item;
import com.baeldung.jackson.annotation.jsonview.Views;
import com.fasterxml.jackson.core.JsonProcessingException;
@@ -95,6 +97,14 @@ public class JacksonAnnotationUnitTest {
assertThat(enumAsString, is("1609.34"));
}
+
+ @Test
+ public void whenSerializingFieldUsingJsonValue_thenCorrect() throws IOException {
+ final String enumAsString = new ObjectMapper().writeValueAsString(PriorityEnum.HIGH);
+
+ assertEquals("3", enumAsString);
+ }
+
@Test
public void whenSerializingUsingJsonSerialize_thenCorrect() throws JsonProcessingException, ParseException {
final SimpleDateFormat df = new SimpleDateFormat("dd-MM-yyyy hh:mm:ss");
@@ -107,6 +117,19 @@ public class JacksonAnnotationUnitTest {
assertThat(result, containsString(toParse));
}
+ @Test
+ public void whenSerializingUsingJsonValueAnnotatedField_thenCorrect() throws JsonProcessingException {
+ final String enumValue = new ObjectMapper().writeValueAsString(TypeEnumWithValue.TYPE1);
+ assertThat(enumValue, is("\"Type A\""));
+ }
+
+ @Test
+ public void whenSerializingUsingJsonValueAnnotatedFieldInPojo_thenCorrect() throws JsonProcessingException {
+ GeneralBean bean1 = new GeneralBean(1, "Bean 1");
+ final String bean1AsString = new ObjectMapper().writeValueAsString(bean1);
+ assertThat(bean1AsString, is("\"Bean 1\""));
+ }
+
// ========================= Deserializing annotations ============================
@Test
@@ -118,6 +141,7 @@ public class JacksonAnnotationUnitTest {
assertEquals("My bean", bean.name);
}
+
@Test
public void whenDeserializingUsingJsonInject_thenCorrect() throws IOException {
final String json = "{\"name\":\"My bean\"}";
@@ -161,6 +185,23 @@ public class JacksonAnnotationUnitTest {
assertEquals("20-12-2014 02:30:00", df.format(event.eventDate));
}
+ @Test
+ public void whenDeserializingUsingJsonValue_thenCorrect() throws JsonProcessingException {
+ final String str = "\"Type A\"";
+ TypeEnumWithValue te = new ObjectMapper().readerFor(TypeEnumWithValue.class)
+ .readValue(str);
+ assertThat(te, is(TypeEnumWithValue.TYPE1));
+ }
+
+ @Test(expected = Exception.class)
+ public void whenDeserializingUsingJsonValueAnnotatedFieldInPojo_thenGetException() throws JsonProcessingException {
+ GeneralBean bean1 = new GeneralBean(1, "Bean 1");
+ final String bean1AsString = new ObjectMapper().writeValueAsString(bean1);
+ GeneralBean bean = new ObjectMapper().readerFor(GeneralBean.class)
+ .readValue(bean1AsString);
+ assertThat(bean.getName(), is(bean1.getName()));
+ }
+
// ========================= Inclusion annotations ============================
@Test
@@ -399,7 +440,5 @@ public class JacksonAnnotationUnitTest {
*/
}
-
-
}
diff --git a/java-blockchain/pom.xml b/java-blockchain/pom.xml
index 2279a7ceff..d45d2bf573 100644
--- a/java-blockchain/pom.xml
+++ b/java-blockchain/pom.xml
@@ -5,7 +5,6 @@
4.0.0
com.baeldung.blockchain
java-blockchain
- 0.1.0-SNAPSHOT
java-blockchain
jar
diff --git a/java-jdi/pom.xml b/java-jdi/pom.xml
index a8716de4ee..b4c11c1bfe 100644
--- a/java-jdi/pom.xml
+++ b/java-jdi/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
java-jdi
- 0.1.0-SNAPSHOT
java-jdi
jar
diff --git a/java-panama/pom.xml b/java-panama/pom.xml
index 8453a38abd..7c6b420eeb 100644
--- a/java-panama/pom.xml
+++ b/java-panama/pom.xml
@@ -1,49 +1,48 @@
-
- ${project.model.version}
+
+ ${project.model.version}
+ com.baeldung.java.panama
+ java-panama
+ ${project.version}
+ java-panama
+ jar
- com.baeldung.java.panama
- java-panama
- ${project.version}
- jar
+
+
+ org.junit.jupiter
+ junit-jupiter
+ ${junit.jupiter.version}
+ test
+
+
- java-panama
- https://maven.apache.org
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ ${maven.compiler.version}
+
+ ${maven.compiler.source}
+ ${maven.compiler.target}
+
+ --add-opens=java.base/java.lang.foreign=ALL-UNNAMED
+ --enable-preview
+
+
+
+
+
-
- 4.0.0
- UTF-8
- 1.0
- 19
- 19
- 3.10.1
- 5.9.0
-
+
+ 4.0.0
+ UTF-8
+ 1.0
+ 19
+ 19
+ 3.10.1
+ 5.9.0
+
-
-
- org.junit.jupiter
- junit-jupiter
- ${junit.jupiter.version}
- test
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
- ${maven.compiler.version}
-
- ${maven.compiler.source}
- ${maven.compiler.target}
-
- --add-opens=java.base/java.lang.foreign=ALL-UNNAMED
- --enable-preview
-
-
-
-
-
diff --git a/java-rmi/pom.xml b/java-rmi/pom.xml
index fee5107423..2256883f84 100644
--- a/java-rmi/pom.xml
+++ b/java-rmi/pom.xml
@@ -5,7 +5,6 @@
4.0.0
com.baeldung.rmi
java-rmi
- 1.0-SNAPSHOT
java-rmi
jar
diff --git a/java-websocket/pom.xml b/java-websocket/pom.xml
index 41c1b251c0..7c5c006aa9 100644
--- a/java-websocket/pom.xml
+++ b/java-websocket/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
4.0.0
java-websocket
- 0.0.1-SNAPSHOT
java-websocket
war
diff --git a/javax-sound/pom.xml b/javax-sound/pom.xml
index dcd08cbcb8..6652022a40 100644
--- a/javax-sound/pom.xml
+++ b/javax-sound/pom.xml
@@ -5,7 +5,6 @@
4.0.0
com.baeldung.javax-sound
javax-sound
- 1.0-SNAPSHOT
javax-sound
jar
diff --git a/javax-validation-advanced/pom.xml b/javax-validation-advanced/pom.xml
index 39da166071..7709f37883 100644
--- a/javax-validation-advanced/pom.xml
+++ b/javax-validation-advanced/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
javax-validation-advanced
- 0.1-SNAPSHOT
javax-validation-advanced
diff --git a/javaxval-2/pom.xml b/javaxval-2/pom.xml
index 5c311e10f8..1b1c4929c8 100644
--- a/javaxval-2/pom.xml
+++ b/javaxval-2/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
javaxval-2
- 0.1-SNAPSHOT
javaxval-2
diff --git a/javaxval/pom.xml b/javaxval/pom.xml
index 1feed71abb..78f37c20d9 100644
--- a/javaxval/pom.xml
+++ b/javaxval/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
javaxval
- 0.1-SNAPSHOT
javaxval
@@ -46,7 +45,7 @@
test
-
+
diff --git a/jaxb/pom.xml b/jaxb/pom.xml
index a7f0324bc0..ac448d2d62 100644
--- a/jaxb/pom.xml
+++ b/jaxb/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
jaxb
- 0.0.1-SNAPSHOT
jaxb
diff --git a/jenkins-modules/jenkins-jobs/README.md b/jenkins-modules/jenkins-jobs/README.md
index f58761997e..e6de0d57e0 100644
--- a/jenkins-modules/jenkins-jobs/README.md
+++ b/jenkins-modules/jenkins-jobs/README.md
@@ -4,3 +4,4 @@
- [Jenkins Pipeline – Change to Another Folder](https://www.baeldung.com/ops/jenkins-pipeline-change-to-another-folder)
- [How to Stop a Zombie Job on Jenkins Without Restarting the Server?](https://www.baeldung.com/ops/stop-zombie-job-on-jenkins-without-restarting-the-server)
- [Running Stages in Parallel With Jenkins Workflow / Pipeline](https://www.baeldung.com/ops/running-stages-in-parallel-jenkins-workflow-pipeline)
+- [Skip a Stage in a Jenkins Pipeline](https://www.baeldung.com/ops/jenkins-pipeline-skip-stage)
diff --git a/jenkins-modules/jenkins-jobs/skip-stage-job/skip-function-script b/jenkins-modules/jenkins-jobs/skip-stage-job/skip-function-script
new file mode 100644
index 0000000000..62163d6301
--- /dev/null
+++ b/jenkins-modules/jenkins-jobs/skip-stage-job/skip-function-script
@@ -0,0 +1,32 @@
+pipeline {
+ agent any
+ parameters {
+ booleanParam(name: 'skip_test', defaultValue: false, description: 'Set to true to skip the test stage')
+ }
+ stages {
+ stage('Build') {
+ steps {
+ sh 'echo "Building the application"'
+ }
+ }
+ stage('Test') {
+ steps {
+ execute_stage('Test', params.skip_test)
+ }
+ }
+ stage('Deploy') {
+ steps {
+ sh 'echo "Deploying the application"'
+ }
+ }
+ }
+}
+
+def execute_stage(stage_name, skip) {
+ stage(stage_name) {
+ if(skip) {
+ echo "Skipping ${stage_name} stage"
+ return
+ }
+ // Add steps to test the application
+ }
diff --git a/jenkins-modules/jenkins-jobs/skip-stage-job/skip-input-script b/jenkins-modules/jenkins-jobs/skip-stage-job/skip-input-script
new file mode 100644
index 0000000000..ba5560578a
--- /dev/null
+++ b/jenkins-modules/jenkins-jobs/skip-stage-job/skip-input-script
@@ -0,0 +1,29 @@
+pipeline {
+ agent any
+ stages {
+ stage('Build') {
+ steps {
+ sh 'echo "Building the application"'
+ // Add steps to build the application
+ }
+ }
+ stage('Test') {
+ steps {
+ input message: 'Do you want to skip the test stage?', ok: 'Yes', parameters: [booleanParam(name: 'skip_test', defaultValue: false)], timeout: time(minutes: 5))
+ script {
+ if(params.skip_test) {
+ sh 'echo "Testing the application"'
+ return
+ }
+ }
+ // Add steps to test the application
+ }
+ }
+ stage('Deploy') {
+ steps {
+ sh 'echo "Deploying the application"'
+ // Add steps to deploy the application
+ }
+ }
+ }
+}
diff --git a/jenkins-modules/jenkins-jobs/skip-stage-job/skip-when-script b/jenkins-modules/jenkins-jobs/skip-stage-job/skip-when-script
new file mode 100644
index 0000000000..0b62a819e1
--- /dev/null
+++ b/jenkins-modules/jenkins-jobs/skip-stage-job/skip-when-script
@@ -0,0 +1,27 @@
+pipeline {
+ agent any
+ parameters {
+ booleanParam(name: 'skip_test', defaultValue: false, description: 'Set to true to skip the test stage')
+ }
+ stages {
+ stage('Build') {
+ steps {
+ sh 'echo "Building application"'
+ // Add build steps here
+ }
+ }
+ stage('Test') {
+ when { expression { params.skip_test != true } }
+ steps {
+ sh 'echo "Testing application"'
+ // Add test steps here
+ }
+ }
+ stage('Deploy') {
+ steps {
+ sh 'echo "Deploying application"'
+ // Add deployment steps here
+ }
+ }
+ }
+}
diff --git a/jenkins-modules/plugins/pom.xml b/jenkins-modules/plugins/pom.xml
index 7f88382e22..42add1664e 100644
--- a/jenkins-modules/plugins/pom.xml
+++ b/jenkins-modules/plugins/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
4.0.0
plugins
- 1.0-SNAPSHOT
plugins
hpi
A sample Jenkins Hello World plugin
diff --git a/jersey/pom.xml b/jersey/pom.xml
index 9a212c6da1..005fa85077 100644
--- a/jersey/pom.xml
+++ b/jersey/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
jersey
- 0.0.1-SNAPSHOT
jersey
war
diff --git a/jersey/src/test/java/com/baeldung/jersey/server/EchoHeadersUnitTest.java b/jersey/src/test/java/com/baeldung/jersey/server/EchoHeadersIntegrationTest.java
similarity index 99%
rename from jersey/src/test/java/com/baeldung/jersey/server/EchoHeadersUnitTest.java
rename to jersey/src/test/java/com/baeldung/jersey/server/EchoHeadersIntegrationTest.java
index 96b5dfb260..e6f06383db 100644
--- a/jersey/src/test/java/com/baeldung/jersey/server/EchoHeadersUnitTest.java
+++ b/jersey/src/test/java/com/baeldung/jersey/server/EchoHeadersIntegrationTest.java
@@ -16,7 +16,7 @@ import static org.junit.jupiter.api.Assertions.assertNotNull;
import jakarta.ws.rs.core.Application;
import jakarta.ws.rs.core.Response;
-public class EchoHeadersUnitTest extends JerseyTest {
+public class EchoHeadersIntegrationTest extends JerseyTest {
private static final String SIMPLE_HEADER_KEY = "my-header-key";
private static final String SIMPLE_HEADER_VALUE = "my-header-value";
diff --git a/jetbrains/pom.xml b/jetbrains/pom.xml
index a10fd3b913..ec46dc54f0 100644
--- a/jetbrains/pom.xml
+++ b/jetbrains/pom.xml
@@ -7,7 +7,6 @@
1.0-SNAPSHOT
jetbrains
jar
- http://maven.apache.org
com.baeldung
diff --git a/jgit/pom.xml b/jgit/pom.xml
index 91881fbec8..1b0d82e4d7 100644
--- a/jgit/pom.xml
+++ b/jgit/pom.xml
@@ -4,10 +4,8 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
jgit
- 1.0-SNAPSHOT
jgit
jar
- http://maven.apache.org
com.baeldung
@@ -15,14 +13,6 @@
1.0.0-SNAPSHOT
-
-
- jgit-repository
- https://repo.eclipse.org/content/groups/releases/
-
-
-
-
org.eclipse.jgit
@@ -36,6 +26,12 @@
+
+
+ jgit-repository
+ https://repo.eclipse.org/content/groups/releases/
+
+
4.5.0.201609210915-r
diff --git a/jib/pom.xml b/jib/pom.xml
index bbc9a3c623..2bdaa258f5 100644
--- a/jib/pom.xml
+++ b/jib/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
jib
- 0.1-SNAPSHOT
jib
diff --git a/jmeter/pom.xml b/jmeter/pom.xml
index 33cd56032e..5f4105d282 100644
--- a/jmeter/pom.xml
+++ b/jmeter/pom.xml
@@ -50,13 +50,13 @@
jmeter-maven-plugin
${jmeter-maven-plugin.version}
-
-
- configuration
-
- configure
-
-
+
+
+ configuration
+
+ configure
+
+
jmeter-tests
@@ -72,10 +72,6 @@
-
- 3.7.0
-
-
dashboard
@@ -167,4 +163,8 @@
+
+ 3.7.0
+
+
\ No newline at end of file
diff --git a/jmh/pom.xml b/jmh/pom.xml
index 61f62efd5a..5b98d59002 100644
--- a/jmh/pom.xml
+++ b/jmh/pom.xml
@@ -4,10 +4,8 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
4.0.0
jmh
- 1.0-SNAPSHOT
jmh
jar
- http://maven.apache.org
com.baeldung
@@ -20,12 +18,12 @@
org.openjdk.jmh
jmh-core
- ${jmh-core.version}
+ 1.36
org.openjdk.jmh
jmh-generator-annprocess
- ${jmh-generator.version}
+ 1.36
org.openjdk.jol
@@ -36,6 +34,15 @@
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+
+ --add-exports=java.base/jdk.internal.vm.annotation=ALL-UNNAMED
+
+
+
org.apache.maven.plugins
maven-jar-plugin
@@ -76,9 +83,10 @@
- 3.0.2
- 0.10
- 3.2.0
+ 3.3.0
+ 0.17
+ 3.5.0
+ 3.11.0
\ No newline at end of file
diff --git a/jmh/src/main/java/com/baeldung/falsesharing/Striped64.java b/jmh/src/main/java/com/baeldung/falsesharing/Striped64.java
index 71c34a9de3..1cb55f3f4e 100644
--- a/jmh/src/main/java/com/baeldung/falsesharing/Striped64.java
+++ b/jmh/src/main/java/com/baeldung/falsesharing/Striped64.java
@@ -88,7 +88,7 @@ abstract class Striped64 extends Number {
* JVM intrinsics note: It would be possible to use a release-only
* form of CAS here, if it were provided.
*/
- @sun.misc.Contended static final class Cell {
+ @jdk.internal.vm.annotation.Contended static final class Cell {
volatile long value;
Cell(long x) { value = x; }
final boolean cas(long cmp, long val) {
diff --git a/jsf/pom.xml b/jsf/pom.xml
index 4e17540557..81030537fb 100644
--- a/jsf/pom.xml
+++ b/jsf/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
jsf
- 0.1-SNAPSHOT
jsf
war
@@ -79,7 +78,7 @@
3.0.0
3.3.1
-
+
1.3.1
diff --git a/json-modules/gson/pom.xml b/json-modules/gson/pom.xml
index faa8a48297..ecfbaa7be4 100644
--- a/json-modules/gson/pom.xml
+++ b/json-modules/gson/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
gson
- 0.1-SNAPSHOT
gson
diff --git a/json-modules/json-path/pom.xml b/json-modules/json-path/pom.xml
index e467ee9557..88b81dfc68 100644
--- a/json-modules/json-path/pom.xml
+++ b/json-modules/json-path/pom.xml
@@ -4,7 +4,6 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
json-path
- 0.0.1-SNAPSHOT
json-path
diff --git a/json-modules/json/pom.xml b/json-modules/json/pom.xml
index 06e67288c5..bf6a511a9d 100644
--- a/json-modules/json/pom.xml
+++ b/json-modules/json/pom.xml
@@ -5,7 +5,6 @@
4.0.0
org.baeldung
json
- 0.0.1-SNAPSHOT
json
diff --git a/jws/pom.xml b/jws/pom.xml
index 3d2f67c691..8c14a16cff 100644
--- a/jws/pom.xml
+++ b/jws/pom.xml
@@ -3,9 +3,7 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
4.0.0
- com.example
jws
- 0.0.1-SNAPSHOT
jws
war
diff --git a/libraries-4/pom.xml b/libraries-4/pom.xml
index 7d19f6d504..87e618ee5b 100644
--- a/libraries-4/pom.xml
+++ b/libraries-4/pom.xml
@@ -99,6 +99,16 @@
javax.el
${glassfish.web.version}
+
+ org.openjfx
+ javafx-controls
+ ${javafx.version}
+
+
+ org.openjfx
+ javafx-fxml
+ ${javafx.version}
+
@@ -118,6 +128,7 @@
3.0.0
2.2.4
1.2.0
+ 19
\ No newline at end of file
diff --git a/libraries-5/pom.xml b/libraries-5/pom.xml
index fa1f232d1c..c98a66c094 100644
--- a/libraries-5/pom.xml
+++ b/libraries-5/pom.xml
@@ -139,7 +139,7 @@
4.3.8.RELEASE
2.12
2.5.11
- 0.6.5
+ 0.8.1
3.0.14
2.5.5
3.0.2
diff --git a/libraries-6/README.md b/libraries-6/README.md
index 8ef60b2e54..bbebcbc1e0 100644
--- a/libraries-6/README.md
+++ b/libraries-6/README.md
@@ -12,8 +12,8 @@ Remember, for advanced libraries like [Jackson](/jackson) and [JUnit](/testing-m
- [Guide to Resilience4j](https://www.baeldung.com/resilience4j)
- [Implementing a FTP-Client in Java](https://www.baeldung.com/java-ftp-client)
- [Introduction to Functional Java](https://www.baeldung.com/java-functional-library)
-- [A Guide to the Reflections Library](https://www.baeldung.com/reflections-library)
- [Introduction to Protonpack](https://www.baeldung.com/java-protonpack)
+- [Guide to Simple Binary Encoding](https://www.baeldung.com/java-sbe)
- [Java-R Integration](https://www.baeldung.com/java-r-integration)
- [Using libphonenumber to Validate Phone Numbers](https://www.baeldung.com/java-libphonenumber)
- [Apache Commons Collections vs Google Guava](https://www.baeldung.com/apache-commons-collections-vs-guava)
diff --git a/libraries-6/pom.xml b/libraries-6/pom.xml
index 3b932f2bd2..234fa1349e 100644
--- a/libraries-6/pom.xml
+++ b/libraries-6/pom.xml
@@ -53,12 +53,6 @@
${mockftpserver.version}
test
-
-
- org.reflections
- reflections
- ${reflections.version}
-
org.apache.commons
commons-lang3
@@ -106,6 +100,11 @@
modelmapper
${org.modelmapper.version}
+
+ org.agrona
+ agrona
+ 1.17.1
+
@@ -119,6 +118,60 @@
+
+ org.codehaus.mojo
+ exec-maven-plugin
+ 1.6.0
+
+
+ generate-sources
+
+ java
+
+
+
+
+ false
+ true
+ uk.co.real_logic.sbe.SbeTool
+
+
+ sbe.output.dir
+ ${project.build.directory}/generated-sources/java
+
+
+
+ ${project.basedir}/src/main/resources/schema.xml
+
+ ${project.build.directory}/generated-sources/java
+
+
+
+ uk.co.real-logic
+ sbe-tool
+ 1.27.0
+
+
+
+
+ org.codehaus.mojo
+ build-helper-maven-plugin
+ 3.0.0
+
+
+ add-source
+ generate-sources
+
+ add-source
+
+
+
+ ${project.build.directory}/generated-sources/java/
+
+
+
+
+
org.apache.maven.plugins
maven-compiler-plugin
@@ -137,7 +190,6 @@
1.10.0
- 0.9.11
2.7.1
4.8.1
0.12.1
diff --git a/libraries-7/src/main/java/com/baeldung/sbe/MarketData.java b/libraries-6/src/main/java/com/baeldung/sbe/MarketData.java
similarity index 100%
rename from libraries-7/src/main/java/com/baeldung/sbe/MarketData.java
rename to libraries-6/src/main/java/com/baeldung/sbe/MarketData.java
diff --git a/libraries-7/src/main/java/com/baeldung/sbe/MarketDataSource.java b/libraries-6/src/main/java/com/baeldung/sbe/MarketDataSource.java
similarity index 100%
rename from libraries-7/src/main/java/com/baeldung/sbe/MarketDataSource.java
rename to libraries-6/src/main/java/com/baeldung/sbe/MarketDataSource.java
diff --git a/libraries-7/src/main/java/com/baeldung/sbe/MarketDataStreamServer.java b/libraries-6/src/main/java/com/baeldung/sbe/MarketDataStreamServer.java
similarity index 100%
rename from libraries-7/src/main/java/com/baeldung/sbe/MarketDataStreamServer.java
rename to libraries-6/src/main/java/com/baeldung/sbe/MarketDataStreamServer.java
diff --git a/libraries-7/src/main/java/com/baeldung/sbe/MarketDataUtil.java b/libraries-6/src/main/java/com/baeldung/sbe/MarketDataUtil.java
similarity index 100%
rename from libraries-7/src/main/java/com/baeldung/sbe/MarketDataUtil.java
rename to libraries-6/src/main/java/com/baeldung/sbe/MarketDataUtil.java
diff --git a/libraries-7/src/main/resources/schema.xml b/libraries-6/src/main/resources/schema.xml
similarity index 100%
rename from libraries-7/src/main/resources/schema.xml
rename to libraries-6/src/main/resources/schema.xml
diff --git a/libraries-6/src/test/java/com/baeldung/r/FastRMeanUnitTest.java b/libraries-6/src/test/java/com/baeldung/r/FastRMeanUnitTest.java
index 4e7426b75a..2412bb751b 100644
--- a/libraries-6/src/test/java/com/baeldung/r/FastRMeanUnitTest.java
+++ b/libraries-6/src/test/java/com/baeldung/r/FastRMeanUnitTest.java
@@ -1,5 +1,6 @@
package com.baeldung.r;
+
import org.junit.Assert;
import org.junit.Ignore;
import org.junit.Test;
diff --git a/libraries-7/src/test/java/com/baeldung/test/EncodeDecodeMarketDataUnitTest.java b/libraries-6/src/test/java/com/baeldung/test/EncodeDecodeMarketDataUnitTest.java
similarity index 100%
rename from libraries-7/src/test/java/com/baeldung/test/EncodeDecodeMarketDataUnitTest.java
rename to libraries-6/src/test/java/com/baeldung/test/EncodeDecodeMarketDataUnitTest.java
diff --git a/libraries-7/pom.xml b/libraries-7/pom.xml
deleted file mode 100644
index 67cc2326eb..0000000000
--- a/libraries-7/pom.xml
+++ /dev/null
@@ -1,81 +0,0 @@
-
-
- 4.0.0
- libraries-7
-
-
- parent-modules
- com.baeldung
- 1.0.0-SNAPSHOT
-
-
-
-
- org.agrona
- agrona
- 1.17.1
-
-
-
-
-
-
- org.codehaus.mojo
- exec-maven-plugin
- 1.6.0
-
-
- generate-sources
-
- java
-
-
-
-
- false
- true
- uk.co.real_logic.sbe.SbeTool
-
-
- sbe.output.dir
- ${project.build.directory}/generated-sources/java
-
-
-
- ${project.basedir}/src/main/resources/schema.xml
-
- ${project.build.directory}/generated-sources/java
-
-
-
- uk.co.real-logic
- sbe-tool
- 1.27.0
-
-
-
-
- org.codehaus.mojo
- build-helper-maven-plugin
- 3.0.0
-
-
- add-source
- generate-sources
-
- add-source
-
-
-
- ${project.build.directory}/generated-sources/java/
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/libraries-apache-commons-io/pom.xml b/libraries-apache-commons-io/pom.xml
index 7cac50a8e2..ca5cc4574d 100644
--- a/libraries-apache-commons-io/pom.xml
+++ b/libraries-apache-commons-io/pom.xml
@@ -23,6 +23,11 @@
commons-io
${commons-io.version}
+
+ org.projectlombok
+ lombok
+ ${lombok.version}
+
diff --git a/libraries-apache-commons-io/src/test/java/com/baeldung/commons/io/CommonsIOUnitTest.java b/libraries-apache-commons-io/src/test/java/com/baeldung/commons/io/CommonsIOUnitTest.java
index 7481e5a1a3..ce98e8026e 100644
--- a/libraries-apache-commons-io/src/test/java/com/baeldung/commons/io/CommonsIOUnitTest.java
+++ b/libraries-apache-commons-io/src/test/java/com/baeldung/commons/io/CommonsIOUnitTest.java
@@ -22,6 +22,9 @@ import java.io.FilterOutputStream;
import java.io.IOException;
import java.nio.charset.Charset;
+import lombok.extern.slf4j.Slf4j;
+
+@Slf4j
public class CommonsIOUnitTest {
@Test
@@ -47,9 +50,9 @@ public class CommonsIOUnitTest {
String extension = FilenameUtils.getExtension(path);
String baseName = FilenameUtils.getBaseName(path);
- System.out.println("full path" + fullPath);
- System.out.println("Extension" + extension);
- System.out.println("Base name" + baseName);
+ log.debug("full path: " + fullPath);
+ log.debug("Extension: " + extension);
+ log.debug("Base name: " + baseName);
}
@Test
diff --git a/libraries-apache-commons-io/src/test/resources/logback-test.xml b/libraries-apache-commons-io/src/test/resources/logback-test.xml
new file mode 100644
index 0000000000..499cc828a2
--- /dev/null
+++ b/libraries-apache-commons-io/src/test/resources/logback-test.xml
@@ -0,0 +1,12 @@
+
+
+
+
+ %d{yyyy-MM-dd HH:mm:ss} | %-5p | [%thread] %logger{5}:%L - %msg%n
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/libraries-data-db/pom.xml b/libraries-data-db/pom.xml
index 6c72a4902c..55fd990a80 100644
--- a/libraries-data-db/pom.xml
+++ b/libraries-data-db/pom.xml
@@ -43,7 +43,7 @@
org.datanucleus
datanucleus-api-jdo
- ${datanucleus.version}
+ ${datanucleus-api.version}
org.datanucleus
@@ -135,6 +135,11 @@
org.projectlombok
lombok
+
+ io.ebean
+ ebean-api
+ ${ebean.version}
+
@@ -270,15 +275,16 @@
18.1.0
3.0.0
1.8
- 5.0
- 5.1.1
- 5.0.2
- 5.0.4
- 3.2.0-m7
- 3.4.5
- 11.22.4
- 1.4.2.Final
- 1.15.3
+ 6.1
+ 6.0.3
+ 6.0.1
+ 6.0.0-release
+ 6.0.1
+ 3.2.1
+ 5.0.1
+ 13.15.2
+ 2.1.3.Final
+ 1.17.6
\ No newline at end of file
diff --git a/libraries-data-db/src/main/java/com/baeldung/libraries/ebean/app/App.java b/libraries-data-db/src/main/java/com/baeldung/libraries/ebean/app/App.java
index 9c59cbb8c0..e26f01c2f8 100644
--- a/libraries-data-db/src/main/java/com/baeldung/libraries/ebean/app/App.java
+++ b/libraries-data-db/src/main/java/com/baeldung/libraries/ebean/app/App.java
@@ -1,12 +1,13 @@
package com.baeldung.libraries.ebean.app;
+import java.util.Arrays;
+
import com.baeldung.libraries.ebean.model.Address;
import com.baeldung.libraries.ebean.model.Customer;
-import io.ebean.Ebean;
-import io.ebean.EbeanServer;
-import io.ebean.annotation.Transactional;
-import java.util.Arrays;
+import io.ebean.DB;
+import io.ebean.Database;
+import io.ebean.annotation.Transactional;
public class App {
@@ -20,7 +21,7 @@ public class App {
public static void insertAndDeleteInsideTransaction() {
Customer c1 = getCustomer();
- EbeanServer server = Ebean.getDefaultServer();
+ Database server = DB.getDefault();
server.save(c1);
Customer foundC1 = server.find(Customer.class, c1.getId());
server.delete(foundC1);
@@ -31,16 +32,16 @@ public class App {
Address a1 = new Address("5, Wide Street", null, "New York");
Customer c1 = new Customer("John Wide", a1);
- EbeanServer server = Ebean.getDefaultServer();
+ Database server = DB.getDefault();
server.save(c1);
c1.setName("Jane Wide");
c1.setAddress(null);
server.save(c1);
- Customer foundC1 = Ebean.find(Customer.class, c1.getId());
+ Customer foundC1 = DB.find(Customer.class, c1.getId());
- Ebean.delete(foundC1);
+ DB.delete(foundC1);
}
public static void queryCustomers() {
@@ -53,16 +54,16 @@ public class App {
Address a3 = new Address("3, Big Street", null, "San Jose");
Customer c3 = new Customer("Big Bob", a3);
- Ebean.saveAll(Arrays.asList(c1, c2, c3));
+ DB.saveAll(Arrays.asList(c1, c2, c3));
- Customer customer = Ebean.find(Customer.class)
+ Customer customer = DB.find(Customer.class)
.select("name")
.fetch("address", "city")
.where()
.eq("city", "San Jose")
.findOne();
- Ebean.deleteAll(Arrays.asList(c1, c2, c3));
+ DB.deleteAll(Arrays.asList(c1, c2, c3));
}
private static Customer getCustomer() {
diff --git a/libraries-data-db/src/main/java/com/baeldung/libraries/ebean/app/App2.java b/libraries-data-db/src/main/java/com/baeldung/libraries/ebean/app/App2.java
index c604f2cc25..4018c3c4ff 100644
--- a/libraries-data-db/src/main/java/com/baeldung/libraries/ebean/app/App2.java
+++ b/libraries-data-db/src/main/java/com/baeldung/libraries/ebean/app/App2.java
@@ -1,15 +1,15 @@
package com.baeldung.libraries.ebean.app;
-import io.ebean.EbeanServer;
-import io.ebean.EbeanServerFactory;
-import io.ebean.config.ServerConfig;
-
import java.util.Properties;
+import io.ebean.Database;
+import io.ebean.DatabaseFactory;
+import io.ebean.config.DatabaseConfig;
+
public class App2 {
public static void main(String[] args) {
- ServerConfig cfg = new ServerConfig();
+ DatabaseConfig cfg = new DatabaseConfig();
cfg.setDefaultServer(true);
Properties properties = new Properties();
properties.put("ebean.db.ddl.generate", "true");
@@ -19,8 +19,6 @@ public class App2 {
properties.put("datasource.db.databaseUrl", "jdbc:h2:mem:app2");
properties.put("datasource.db.databaseDriver", "org.h2.Driver");
cfg.loadFromProperties(properties);
- EbeanServer server = EbeanServerFactory.create(cfg);
-
+ Database server = DatabaseFactory.create(cfg);
}
-
}
diff --git a/libraries-data-db/src/main/java/com/baeldung/libraries/jdo/GuideToJDO.java b/libraries-data-db/src/main/java/com/baeldung/libraries/jdo/GuideToJDO.java
index 99b0a4bef7..2385c16e47 100644
--- a/libraries-data-db/src/main/java/com/baeldung/libraries/jdo/GuideToJDO.java
+++ b/libraries-data-db/src/main/java/com/baeldung/libraries/jdo/GuideToJDO.java
@@ -45,7 +45,7 @@ public class GuideToJDO {
pumd = new PersistenceUnitMetaData("dynamic-unit", "RESOURCE_LOCAL", null);
pumd.addClassName("com.baeldung.libraries.jdo.Product");
- pumd.setExcludeUnlistedClasses();
+ pumd.setExcludeUnlistedClasses(true);
pumd.addProperty("javax.jdo.option.ConnectionDriverName", "org.h2.Driver");
pumd.addProperty("javax.jdo.option.ConnectionURL", "jdbc:h2:mem:mypersistence");
pumd.addProperty("javax.jdo.option.ConnectionUserName", "sa");
@@ -57,7 +57,7 @@ public class GuideToJDO {
public void CreateXMLProperties() {
pumdXML = new PersistenceUnitMetaData("dynamic-unit", "RESOURCE_LOCAL", null);
pumdXML.addClassName("com.baeldung.libraries.jdo.ProductXML");
- pumdXML.setExcludeUnlistedClasses();
+ pumdXML.setExcludeUnlistedClasses(true);
pumdXML.addProperty("javax.jdo.option.ConnectionURL", "xml:file:myPersistence.xml");
pumdXML.addProperty("datanucleus.autoCreateSchema", "true");
}
diff --git a/libraries-data-db/src/test/java/com/baeldung/libraries/jdo/GuideToJDOIntegrationTest.java b/libraries-data-db/src/test/java/com/baeldung/libraries/jdo/GuideToJDOIntegrationTest.java
index 1c15a4f087..5872eba537 100644
--- a/libraries-data-db/src/test/java/com/baeldung/libraries/jdo/GuideToJDOIntegrationTest.java
+++ b/libraries-data-db/src/test/java/com/baeldung/libraries/jdo/GuideToJDOIntegrationTest.java
@@ -18,7 +18,7 @@ public class GuideToJDOIntegrationTest {
public void givenProduct_WhenNewThenPerformTransaction() {
PersistenceUnitMetaData pumd = new PersistenceUnitMetaData("dynamic-unit", "RESOURCE_LOCAL", null);
pumd.addClassName("com.baeldung.libraries.jdo.Product");
- pumd.setExcludeUnlistedClasses();
+ pumd.setExcludeUnlistedClasses(true);
pumd.addProperty("javax.jdo.option.ConnectionDriverName", "org.h2.Driver");
pumd.addProperty("javax.jdo.option.ConnectionURL", "jdbc:h2:mem:mypersistence");
pumd.addProperty("javax.jdo.option.ConnectionUserName", "sa");
@@ -53,7 +53,7 @@ public class GuideToJDOIntegrationTest {
public void givenProduct_WhenQueryThenExist() {
PersistenceUnitMetaData pumd = new PersistenceUnitMetaData("dynamic-unit", "RESOURCE_LOCAL", null);
pumd.addClassName("com.baeldung.libraries.jdo.Product");
- pumd.setExcludeUnlistedClasses();
+ pumd.setExcludeUnlistedClasses(true);
pumd.addProperty("javax.jdo.option.ConnectionDriverName", "org.h2.Driver");
pumd.addProperty("javax.jdo.option.ConnectionURL", "jdbc:h2:mem:mypersistence");
pumd.addProperty("javax.jdo.option.ConnectionUserName", "sa");
diff --git a/libraries-data-db/src/test/java/com/baeldung/libraries/ormlite/ORMLiteIntegrationTest.java b/libraries-data-db/src/test/java/com/baeldung/libraries/ormlite/ORMLiteIntegrationTest.java
index 139e52632a..58c757d8a5 100644
--- a/libraries-data-db/src/test/java/com/baeldung/libraries/ormlite/ORMLiteIntegrationTest.java
+++ b/libraries-data-db/src/test/java/com/baeldung/libraries/ormlite/ORMLiteIntegrationTest.java
@@ -80,6 +80,8 @@ public class ORMLiteIntegrationTest {
wrappedIterable.forEach(lib -> {
System.out.println(lib.getName());
});
+ } catch (Exception e) {
+ throw new RuntimeException(e);
}
}
@@ -162,7 +164,7 @@ public class ORMLiteIntegrationTest {
}
@AfterClass
- public static void tearDown() throws SQLException, IOException {
+ public static void tearDown() throws Exception {
connectionSource.close();
}
}
diff --git a/libraries-7/README.md b/libraries-jdk8/README.md
similarity index 73%
rename from libraries-7/README.md
rename to libraries-jdk8/README.md
index 6f0a7d2505..fa2126c89a 100644
--- a/libraries-7/README.md
+++ b/libraries-jdk8/README.md
@@ -1,4 +1,4 @@
-## Libraries-7
+## Libraries-jdk8
This module contains articles about various Java libraries.
These are small libraries that are relatively easy to use and do not require any separate module of their own.
@@ -8,5 +8,7 @@ The code examples related to different libraries are each in their own module.
Remember, for advanced libraries like [Jackson](/jackson) and [JUnit](/testing-modules) we already have separate modules. Please make sure to have a look at the existing modules in such cases.
### Relevant articles
-- [Guide to Simple Binary Encoding](https://www.baeldung.com/java-sbe)
+- [Introduction to Chronicle Queue](https://www.baeldung.com/java-chronicle-queue)
+- [A Guide to the Reflections Library](https://www.baeldung.com/reflections-library)
+
- More articles [[<-- prev]](/libraries-6)
diff --git a/libraries-jdk8/pom.xml b/libraries-jdk8/pom.xml
new file mode 100644
index 0000000000..31582e0bdd
--- /dev/null
+++ b/libraries-jdk8/pom.xml
@@ -0,0 +1,40 @@
+
+
+ 4.0.0
+ libraries-jdk8
+
+
+ parent-modules
+ com.baeldung
+ 1.0.0-SNAPSHOT
+
+
+
+
+
+ org.reflections
+ reflections
+ ${reflections.version}
+
+
+
+ net.openhft
+ chronicle
+ ${chronicle.version}
+
+
+ com.sun.java
+ tools
+
+
+
+
+
+
+ 0.9.11
+ 3.6.4
+
+
+
\ No newline at end of file
diff --git a/libraries/src/main/java/com/baeldung/chronicle/queue/ChronicleQueue.java b/libraries-jdk8/src/main/java/com/baeldung/chronicle/queue/ChronicleQueue.java
similarity index 100%
rename from libraries/src/main/java/com/baeldung/chronicle/queue/ChronicleQueue.java
rename to libraries-jdk8/src/main/java/com/baeldung/chronicle/queue/ChronicleQueue.java
diff --git a/libraries-6/src/main/java/com/baeldung/reflections/ReflectionsApp.java b/libraries-jdk8/src/main/java/reflections/ReflectionsApp.java
similarity index 91%
rename from libraries-6/src/main/java/com/baeldung/reflections/ReflectionsApp.java
rename to libraries-jdk8/src/main/java/reflections/ReflectionsApp.java
index 4f5b6dd183..39d0fafb10 100644
--- a/libraries-6/src/main/java/com/baeldung/reflections/ReflectionsApp.java
+++ b/libraries-jdk8/src/main/java/reflections/ReflectionsApp.java
@@ -1,4 +1,4 @@
-package com.baeldung.reflections;
+package reflections;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
@@ -30,14 +30,14 @@ public class ReflectionsApp {
}
public Set getDateDeprecatedMethods() {
- Reflections reflections = new Reflections(java.util.Date.class, new MethodAnnotationsScanner());
+ Reflections reflections = new Reflections(Date.class, new MethodAnnotationsScanner());
Set deprecatedMethodsSet = reflections.getMethodsAnnotatedWith(Deprecated.class);
return deprecatedMethodsSet;
}
@SuppressWarnings("rawtypes")
public Set getDateDeprecatedConstructors() {
- Reflections reflections = new Reflections(java.util.Date.class, new MethodAnnotationsScanner());
+ Reflections reflections = new Reflections(Date.class, new MethodAnnotationsScanner());
Set constructorsSet = reflections.getConstructorsAnnotatedWith(Deprecated.class);
return constructorsSet;
}
diff --git a/libraries/src/test/java/com/baeldung/chronicle/queue/ChronicleQueueIntegrationTest.java b/libraries-jdk8/src/test/java/com/baeldung/chronicle/queue/ChronicleQueueIntegrationTest.java
similarity index 95%
rename from libraries/src/test/java/com/baeldung/chronicle/queue/ChronicleQueueIntegrationTest.java
rename to libraries-jdk8/src/test/java/com/baeldung/chronicle/queue/ChronicleQueueIntegrationTest.java
index 00e9500318..7e0bcb7d33 100644
--- a/libraries/src/test/java/com/baeldung/chronicle/queue/ChronicleQueueIntegrationTest.java
+++ b/libraries-jdk8/src/test/java/com/baeldung/chronicle/queue/ChronicleQueueIntegrationTest.java
@@ -8,6 +8,8 @@ import java.nio.file.Files;
import org.junit.Test;
+import com.baeldung.chronicle.queue.ChronicleQueue;
+
import net.openhft.chronicle.Chronicle;
import net.openhft.chronicle.ChronicleQueueBuilder;
import net.openhft.chronicle.ExcerptTailer;
@@ -15,6 +17,7 @@ import net.openhft.chronicle.tools.ChronicleTools;
public class ChronicleQueueIntegrationTest {
+// @Ignore
@Test
public void givenSetOfValues_whenWriteToQueue_thenWriteSuccesfully() throws IOException {
File queueDir = Files.createTempDirectory("chronicle-queue").toFile();
diff --git a/libraries-6/src/test/java/com/baeldung/reflections/ReflectionsUnitTest.java b/libraries-jdk8/src/test/java/reflections/ReflectionsUnitTest.java
similarity index 97%
rename from libraries-6/src/test/java/com/baeldung/reflections/ReflectionsUnitTest.java
rename to libraries-jdk8/src/test/java/reflections/ReflectionsUnitTest.java
index b86094b6f4..5104855208 100644
--- a/libraries-6/src/test/java/com/baeldung/reflections/ReflectionsUnitTest.java
+++ b/libraries-jdk8/src/test/java/reflections/ReflectionsUnitTest.java
@@ -1,4 +1,4 @@
-package com.baeldung.reflections;
+package reflections;
import static org.junit.jupiter.api.Assertions.assertFalse;
diff --git a/libraries/pom.xml b/libraries/pom.xml
index 7bef56deb0..2ab345c469 100644
--- a/libraries/pom.xml
+++ b/libraries/pom.xml
@@ -64,7 +64,7 @@
org.datanucleus
datanucleus-api-jdo
- ${datanucleus.version}
+ ${datanucleus-api.version}
org.datanucleus
@@ -86,17 +86,7 @@
datanucleus-jdo-query
${datanucleus-jdo-query.version}
-
- net.openhft
- chronicle
- ${chronicle.version}
-
-
- com.sun.java
- tools
-
-
-
+
org.springframework
spring-web
@@ -180,6 +170,23 @@
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+
+
+ --add-exports=java.base/jdk.internal.ref=ALL-UNNAMED
+ --add-exports=java.base/sun.nio.ch=ALL-UNNAMED
+ --add-exports=jdk.unsupported/sun.misc=ALL-UNNAMED
+ --add-exports=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED
+ --add-opens=jdk.compiler/com.sun.tools.javac=ALL-UNNAMED
+ --add-opens=java.base/java.lang=ALL-UNNAMED
+ --add-opens=java.base/java.lang.reflect=ALL-UNNAMED
+ --add-opens=java.base/java.io=ALL-UNNAMED
+ --add-opens=java.base/java.util=ALL-UNNAMED
+
+
+
org.datanucleus
@@ -273,16 +280,16 @@
1.15
1.23.0
0.9.4.0006L
- 3.2.0-m7
- 5.1.1
- 5.0.2
+ 3.2.1
+ 6.0.3
+ 6.0.1
+ 6.0.0-release
5.0.0-release
- 5.0.2
- 3.6.4
+ 6.0.1
4.3.8.RELEASE
3.0.3
2.3.0
- 3.21.0-GA
+ 3.29.2-GA
0.9.12
3.0.2
3.6
diff --git a/logging-modules/log4j2/pom.xml b/logging-modules/log4j2/pom.xml
index 50c7114556..9fa58769b2 100644
--- a/logging-modules/log4j2/pom.xml
+++ b/logging-modules/log4j2/pom.xml
@@ -68,46 +68,19 @@
none
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+
+
+ json
+ ${java.io.tmpdir}/${maven.build.timestamp}/logfile.json
+
+
+
-
-
- integration-lite-first
-
-
-
- org.apache.maven.plugins
- maven-surefire-plugin
-
-
- integration-test
-
- test
-
-
-
- **/*ManualTest.java
- **/*LiveTest.java
-
-
- **/*IntegrationTest.java
- **/*IntTest.java
-
-
-
-
-
-
- json
- ${java.io.tmpdir}/${maven.build.timestamp}/logfile.json
-
-
-
-
-
-
-
2.9.0
diff --git a/logging-modules/log4j2/src/test/java/com/baeldung/logging/log4j2/tests/CustomLoggingIntegrationTest.java b/logging-modules/log4j2/src/test/java/com/baeldung/logging/log4j2/tests/CustomLoggingIntegrationTest.java
index 3e94e4e430..06fbb33b9d 100644
--- a/logging-modules/log4j2/src/test/java/com/baeldung/logging/log4j2/tests/CustomLoggingIntegrationTest.java
+++ b/logging-modules/log4j2/src/test/java/com/baeldung/logging/log4j2/tests/CustomLoggingIntegrationTest.java
@@ -21,7 +21,7 @@ import com.baeldung.logging.log4j2.tests.jdbc.ConnectionFactory;
@RunWith(JUnit4.class)
public class CustomLoggingIntegrationTest {
-
+
private static String logFilePath = System.getProperty("logging.folder.path");
@BeforeClass
@@ -34,7 +34,7 @@ public class CustomLoggingIntegrationTest {
}
@Test
- public void givenLoggerWithDefaultConfig_whenLogToConsole_thanOK() throws Exception {
+ public void givenLoggerWithDefaultConfig_whenLogToConsole_thenOK() throws Exception {
Logger logger = LogManager.getLogger(getClass());
Exception e = new RuntimeException("This is only a test!");
@@ -43,7 +43,7 @@ public class CustomLoggingIntegrationTest {
}
@Test
- public void givenLoggerWithConsoleConfig_whenLogToConsoleInColors_thanOK() throws Exception {
+ public void givenLoggerWithConsoleConfig_whenLogToConsoleInColors_thenOK() throws Exception {
Logger logger = LogManager.getLogger("CONSOLE_PATTERN_APPENDER_MARKER");
Exception e = new RuntimeException("This is only a test!");
@@ -56,7 +56,7 @@ public class CustomLoggingIntegrationTest {
}
@Test
- public void givenLoggerWithConsoleConfig_whenFilterByMarker_thanOK() throws Exception {
+ public void givenLoggerWithConsoleConfig_whenFilterByMarker_thenOK() throws Exception {
Logger logger = LogManager.getLogger("CONSOLE_PATTERN_APPENDER_MARKER");
Marker appError = MarkerManager.getMarker("APP_ERROR");
Marker connectionTrace = MarkerManager.getMarker("CONN_TRACE");
@@ -66,7 +66,7 @@ public class CustomLoggingIntegrationTest {
}
@Test
- public void givenLoggerWithConsoleConfig_whenFilterByThreadContext_thanOK() throws Exception {
+ public void givenLoggerWithConsoleConfig_whenFilterByThreadContext_thenOK() throws Exception {
Logger logger = LogManager.getLogger("CONSOLE_PATTERN_APPENDER_THREAD_CONTEXT");
ThreadContext.put("userId", "1000");
logger.info("This is a log-visible user login. Maybe from an admin account?");
@@ -75,7 +75,7 @@ public class CustomLoggingIntegrationTest {
}
@Test
- public void givenLoggerWithAsyncConfig_whenLogToJsonFile_thanOK() throws Exception {
+ public void givenLoggerWithAsyncConfig_whenLogToJsonFile_thenOK() throws Exception {
Logger logger = LogManager.getLogger("ASYNC_JSON_FILE_APPENDER");
final int count = 88;
@@ -90,7 +90,7 @@ public class CustomLoggingIntegrationTest {
}
@Test
- public void givenLoggerWithFailoverConfig_whenLog_thanOK() throws Exception {
+ public void givenLoggerWithFailoverConfig_whenLog_thenOK() throws Exception {
Logger logger = LogManager.getLogger("FAIL_OVER_SYSLOG_APPENDER");
Exception e = new RuntimeException("This is only a test!");
@@ -103,7 +103,7 @@ public class CustomLoggingIntegrationTest {
}
@Test
- public void givenLoggerWithJdbcConfig_whenLogToDataSource_thanOK() throws Exception {
+ public void givenLoggerWithJdbcConfig_whenLogToDataSource_thenOK() throws Exception {
Logger logger = LogManager.getLogger("JDBC_APPENDER");
final int count = 88;
@@ -122,7 +122,7 @@ public class CustomLoggingIntegrationTest {
}
@Test
- public void givenLoggerWithRollingFileConfig_whenLogToXMLFile_thanOK() throws Exception {
+ public void givenLoggerWithRollingFileConfig_whenLogToXMLFile_thenOK() throws Exception {
Logger logger = LogManager.getLogger("XML_ROLLING_FILE_APPENDER");
final int count = 88;
diff --git a/logging-modules/log4j2/src/test/resources/log4j2.xml b/logging-modules/log4j2/src/test/resources/log4j2.xml
index 050e0aa705..6516d9884c 100644
--- a/logging-modules/log4j2/src/test/resources/log4j2.xml
+++ b/logging-modules/log4j2/src/test/resources/log4j2.xml
@@ -1,5 +1,5 @@
-
-
+
diff --git a/lombok-modules/lombok-2/README.md b/lombok-modules/lombok-2/README.md
index d3b1287346..55149c0312 100644
--- a/lombok-modules/lombok-2/README.md
+++ b/lombok-modules/lombok-2/README.md
@@ -9,4 +9,5 @@ This module contains articles about Project Lombok.
- [Lombok Using @With Annotations](https://www.baeldung.com/lombok-with-annotations)
- [Lombok’s @ToString Annotation](https://www.baeldung.com/lombok-tostring)
- [Jackson’s Deserialization With Lombok](https://www.baeldung.com/java-jackson-deserialization-lombok)
+- [Constructor Injection in Spring with Lombok](https://www.baeldung.com/spring-injection-lombok)
- More articles: [[<-- prev]](../lombok)
diff --git a/lombok-modules/lombok-2/pom.xml b/lombok-modules/lombok-2/pom.xml
index 0a7ad27ad6..b805e6a31e 100644
--- a/lombok-modules/lombok-2/pom.xml
+++ b/lombok-modules/lombok-2/pom.xml
@@ -25,6 +25,10 @@
jackson-databind
${jackson.version}
+
+ org.springframework.boot
+ spring-boot-starter-web
+
\ No newline at end of file
diff --git a/spring-core-4/src/main/java/com/baeldung/lombok/ApologizeService.java b/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/ApologizeService.java
similarity index 100%
rename from spring-core-4/src/main/java/com/baeldung/lombok/ApologizeService.java
rename to lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/ApologizeService.java
diff --git a/spring-core-4/src/main/java/com/baeldung/lombok/FarewellService.java b/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/FarewellService.java
similarity index 100%
rename from spring-core-4/src/main/java/com/baeldung/lombok/FarewellService.java
rename to lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/FarewellService.java
diff --git a/spring-core-4/src/main/java/com/baeldung/lombok/GreetingService.java b/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/GreetingService.java
similarity index 100%
rename from spring-core-4/src/main/java/com/baeldung/lombok/GreetingService.java
rename to lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/GreetingService.java
diff --git a/spring-core-4/src/main/java/com/baeldung/lombok/ThankingService.java b/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/ThankingService.java
similarity index 100%
rename from spring-core-4/src/main/java/com/baeldung/lombok/ThankingService.java
rename to lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/ThankingService.java
diff --git a/spring-core-4/src/main/java/com/baeldung/lombok/Translator.java b/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/Translator.java
similarity index 100%
rename from spring-core-4/src/main/java/com/baeldung/lombok/Translator.java
rename to lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/Translator.java
diff --git a/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/accessors/model/BasicAccount.java b/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/accessors/model/BasicAccount.java
deleted file mode 100644
index a9332735c7..0000000000
--- a/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/accessors/model/BasicAccount.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package com.baeldung.lombok.accessors.model;
-
-import java.math.BigDecimal;
-
-public class BasicAccount {
- private String name;
- private BigDecimal balance;
-
- public BigDecimal getBalance() {
- return this.balance;
- }
-
- public void setBalance(BigDecimal newBalance) {
- this.balance = newBalance;
- }
-
- public String getName() {
- return this.name;
- }
-
- public void setName(String accountName) {
- this.name = accountName;
- }
-}
diff --git a/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/accessors/model/FinalAccount.java b/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/accessors/model/FinalAccount.java
new file mode 100644
index 0000000000..72e712d246
--- /dev/null
+++ b/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/accessors/model/FinalAccount.java
@@ -0,0 +1,15 @@
+package com.baeldung.lombok.accessors.model;
+
+import lombok.Getter;
+import lombok.Setter;
+import lombok.experimental.Accessors;
+
+import java.math.BigDecimal;
+
+@Accessors(makeFinal = true)
+@Getter
+@Setter
+public class FinalAccount {
+ private String name;
+ private BigDecimal balance;
+}
\ No newline at end of file
diff --git a/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/accessors/model/FinalChainedFluentAccount.java b/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/accessors/model/FinalChainedFluentAccount.java
new file mode 100644
index 0000000000..4951f370e7
--- /dev/null
+++ b/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/accessors/model/FinalChainedFluentAccount.java
@@ -0,0 +1,15 @@
+package com.baeldung.lombok.accessors.model;
+
+import lombok.Getter;
+import lombok.Setter;
+import lombok.experimental.Accessors;
+
+import java.math.BigDecimal;
+
+@Accessors(makeFinal = true, fluent = true, chain = true)
+@Getter
+@Setter
+public class FinalChainedFluentAccount {
+ private String name;
+ private BigDecimal balance;
+}
\ No newline at end of file
diff --git a/spring-core-4/src/test/java/com/baeldung/lombok/ApologizeServiceAutowiringIntegrationTest.java b/lombok-modules/lombok-2/src/test/java/com/baeldung/lombok/ApologizeServiceAutowiringIntegrationTest.java
similarity index 100%
rename from spring-core-4/src/test/java/com/baeldung/lombok/ApologizeServiceAutowiringIntegrationTest.java
rename to lombok-modules/lombok-2/src/test/java/com/baeldung/lombok/ApologizeServiceAutowiringIntegrationTest.java
diff --git a/spring-core-4/src/test/java/com/baeldung/lombok/ApologizeServiceIntegrationTest.java b/lombok-modules/lombok-2/src/test/java/com/baeldung/lombok/ApologizeServiceIntegrationTest.java
similarity index 100%
rename from spring-core-4/src/test/java/com/baeldung/lombok/ApologizeServiceIntegrationTest.java
rename to lombok-modules/lombok-2/src/test/java/com/baeldung/lombok/ApologizeServiceIntegrationTest.java
diff --git a/spring-core-4/src/test/java/com/baeldung/lombok/FarewellAutowiringIntegrationTest.java b/lombok-modules/lombok-2/src/test/java/com/baeldung/lombok/FarewellAutowiringIntegrationTest.java
similarity index 100%
rename from spring-core-4/src/test/java/com/baeldung/lombok/FarewellAutowiringIntegrationTest.java
rename to lombok-modules/lombok-2/src/test/java/com/baeldung/lombok/FarewellAutowiringIntegrationTest.java
diff --git a/spring-core-4/src/test/java/com/baeldung/lombok/FarewellServiceIntegrationTest.java b/lombok-modules/lombok-2/src/test/java/com/baeldung/lombok/FarewellServiceIntegrationTest.java
similarity index 100%
rename from spring-core-4/src/test/java/com/baeldung/lombok/FarewellServiceIntegrationTest.java
rename to lombok-modules/lombok-2/src/test/java/com/baeldung/lombok/FarewellServiceIntegrationTest.java
diff --git a/spring-core-4/src/test/java/com/baeldung/lombok/GreetingServiceIntegrationTest.java b/lombok-modules/lombok-2/src/test/java/com/baeldung/lombok/GreetingServiceIntegrationTest.java
similarity index 100%
rename from spring-core-4/src/test/java/com/baeldung/lombok/GreetingServiceIntegrationTest.java
rename to lombok-modules/lombok-2/src/test/java/com/baeldung/lombok/GreetingServiceIntegrationTest.java
diff --git a/spring-core-4/src/test/java/com/baeldung/lombok/TestConfig.java b/lombok-modules/lombok-2/src/test/java/com/baeldung/lombok/TestConfig.java
similarity index 100%
rename from spring-core-4/src/test/java/com/baeldung/lombok/TestConfig.java
rename to lombok-modules/lombok-2/src/test/java/com/baeldung/lombok/TestConfig.java
diff --git a/spring-core-4/src/test/java/com/baeldung/lombok/ThankingServiceAutowiringIntegrationTest.java b/lombok-modules/lombok-2/src/test/java/com/baeldung/lombok/ThankingServiceAutowiringIntegrationTest.java
similarity index 100%
rename from spring-core-4/src/test/java/com/baeldung/lombok/ThankingServiceAutowiringIntegrationTest.java
rename to lombok-modules/lombok-2/src/test/java/com/baeldung/lombok/ThankingServiceAutowiringIntegrationTest.java
diff --git a/spring-core-4/src/test/java/com/baeldung/lombok/ThankingServiceIntegrationTest.java b/lombok-modules/lombok-2/src/test/java/com/baeldung/lombok/ThankingServiceIntegrationTest.java
similarity index 100%
rename from spring-core-4/src/test/java/com/baeldung/lombok/ThankingServiceIntegrationTest.java
rename to lombok-modules/lombok-2/src/test/java/com/baeldung/lombok/ThankingServiceIntegrationTest.java
diff --git a/lombok-modules/lombok-2/src/test/java/com/baeldung/lombok/accessors/AccessorsUnitTest.java b/lombok-modules/lombok-2/src/test/java/com/baeldung/lombok/accessors/AccessorsUnitTest.java
index 04f38bfc32..a1f54d6b4a 100644
--- a/lombok-modules/lombok-2/src/test/java/com/baeldung/lombok/accessors/AccessorsUnitTest.java
+++ b/lombok-modules/lombok-2/src/test/java/com/baeldung/lombok/accessors/AccessorsUnitTest.java
@@ -1,26 +1,36 @@
package com.baeldung.lombok.accessors;
-import com.baeldung.lombok.accessors.model.*;
+import com.baeldung.lombok.accessors.model.ChainedAccount;
+import com.baeldung.lombok.accessors.model.ChainedFluentAccount;
+import com.baeldung.lombok.accessors.model.FinalAccount;
+import com.baeldung.lombok.accessors.model.FinalChainedFluentAccount;
+import com.baeldung.lombok.accessors.model.FluentAccount;
+import com.baeldung.lombok.accessors.model.PrefixedAccount;
+import com.baeldung.lombok.accessors.model.PrefixedFluentAccount;
+import com.baeldung.lombok.accessors.model.StandardAccount;
import org.junit.Test;
+import java.lang.reflect.Modifier;
import java.math.BigDecimal;
+import java.util.Arrays;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
public class AccessorsUnitTest {
@Test
- public void givenBasicAccount_thenUseBasicAccessors() {
- BasicAccount account = new BasicAccount();
- account.setName("Basic Accessors");
+ public void whenStandardAccount_thenHaveStandardAccessors() {
+ StandardAccount account = new StandardAccount();
+ account.setName("Standard Accessors");
account.setBalance(BigDecimal.TEN);
- assertEquals("Basic Accessors", account.getName());
+ assertEquals("Standard Accessors", account.getName());
assertEquals(BigDecimal.TEN, account.getBalance());
}
@Test
- public void givenFluentAccount_thenUseFluentAccessors() {
+ public void whenFluentAccount_thenHaveFluentAccessors() {
FluentAccount account = new FluentAccount();
account.name("Fluent Account");
account.balance(BigDecimal.TEN);
@@ -30,7 +40,7 @@ public class AccessorsUnitTest {
}
@Test
- public void givenChainedAccount_thenUseChainedAccessors() {
+ public void whenChainedAccount_thenHaveChainedAccessors() {
ChainedAccount account = new ChainedAccount();
account.setName("Chained Account").setBalance(BigDecimal.TEN);
@@ -39,7 +49,7 @@ public class AccessorsUnitTest {
}
@Test
- public void givenChainedFluentAccount_thenUseChainedFluentAccessors() {
+ public void whenChainedFluentAccount_thenHaveChainedFluentAccessors() {
ChainedFluentAccount account = new ChainedFluentAccount()
.name("Fluent Account")
.balance(BigDecimal.TEN);
@@ -49,7 +59,7 @@ public class AccessorsUnitTest {
}
@Test
- public void givenPrefixedAccount_thenRemovePrefixFromAccessors() {
+ public void whenPrefixedAccount_thenRemovePrefixFromAccessors() {
PrefixedAccount account = new PrefixedAccount();
account.setName("Prefixed Fields");
account.setBalance(BigDecimal.TEN);
@@ -61,7 +71,7 @@ public class AccessorsUnitTest {
}
@Test
- public void givenPrefixedFluentAccount_thenRemovePrefixFromAccessors() {
+ public void whenPrefixedFluentAccount_thenRemovePrefixFromAccessors() {
PrefixedFluentAccount account = new PrefixedFluentAccount();
account
.name("Prefixed Fluent Fields")
@@ -71,4 +81,38 @@ public class AccessorsUnitTest {
assertEquals(BigDecimal.TEN, account.balance());
}
-}
+ @Test
+ public void whenFinalAccount_thenHaveFinalAccessors() {
+ FinalAccount account = new FinalAccount();
+ account.setName("Final Account");
+ account.setBalance(BigDecimal.TEN);
+
+ assertEquals("Final Account", account.getName());
+ assertEquals(BigDecimal.TEN, account.getBalance());
+
+ //verify if all getters and setters are final methods
+ boolean getterSettersAreFinal = Arrays.stream(FinalAccount.class.getMethods())
+ .filter(method -> method.getName().matches("^(get|set)(Name|Balance)$"))
+ .allMatch(method -> Modifier.isFinal(method.getModifiers()));
+ assertTrue(getterSettersAreFinal);
+
+ }
+
+ @Test
+ public void whenFinalChainedFluentAccount_thenHaveFinalAccessors() {
+ FinalChainedFluentAccount account = new FinalChainedFluentAccount();
+ account
+ .name("Final Chained Fluent Account")
+ .balance(BigDecimal.TEN);
+
+ assertEquals("Final Chained Fluent Account", account.name());
+ assertEquals(BigDecimal.TEN, account.balance());
+
+ //verify if all getters and setters are final methods
+ boolean getterSettersAreFinal = Arrays.stream(FinalAccount.class.getMethods())
+ .filter(method -> method.getName().matches("^(name|balance)$"))
+ .allMatch(method -> Modifier.isFinal(method.getModifiers()));
+ assertTrue(getterSettersAreFinal);
+ }
+
+}
\ No newline at end of file
diff --git a/mapstruct/src/main/java/com/baeldung/dto/ArticleDTO.java b/mapstruct/src/main/java/com/baeldung/dto/ArticleDTO.java
new file mode 100644
index 0000000000..708167de94
--- /dev/null
+++ b/mapstruct/src/main/java/com/baeldung/dto/ArticleDTO.java
@@ -0,0 +1,12 @@
+package com.baeldung.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class ArticleDTO {
+ private int id;
+ private String name;
+ private PersonDTO author;
+}
diff --git a/mapstruct/src/main/java/com/baeldung/entity/Article.java b/mapstruct/src/main/java/com/baeldung/entity/Article.java
new file mode 100644
index 0000000000..4aff8f4166
--- /dev/null
+++ b/mapstruct/src/main/java/com/baeldung/entity/Article.java
@@ -0,0 +1,12 @@
+package com.baeldung.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class Article {
+ private int id;
+ private String name;
+ private Person author;
+}
diff --git a/mapstruct/src/main/java/com/baeldung/mapper/ArticleMapper.java b/mapstruct/src/main/java/com/baeldung/mapper/ArticleMapper.java
new file mode 100644
index 0000000000..b5b47f6b3b
--- /dev/null
+++ b/mapstruct/src/main/java/com/baeldung/mapper/ArticleMapper.java
@@ -0,0 +1,20 @@
+package com.baeldung.mapper;
+
+import com.baeldung.dto.ArticleDTO;
+import com.baeldung.dto.PersonDTO;
+import com.baeldung.entity.Article;
+import com.baeldung.entity.Person;
+import org.mapstruct.Mapper;
+import org.mapstruct.factory.Mappers;
+
+@Mapper
+public interface ArticleMapper {
+
+ ArticleMapper INSTANCE = Mappers.getMapper(ArticleMapper.class);
+
+ ArticleDTO articleToArticleDto(Article article);
+
+ default PersonDTO personToPersonDto(Person person) {
+ return Mappers.getMapper(PersonMapper.class).personToPersonDTO(person);
+ }
+}
diff --git a/mapstruct/src/main/java/com/baeldung/mapper/ArticleUsingPersonMapper.java b/mapstruct/src/main/java/com/baeldung/mapper/ArticleUsingPersonMapper.java
new file mode 100644
index 0000000000..c1ea0797ed
--- /dev/null
+++ b/mapstruct/src/main/java/com/baeldung/mapper/ArticleUsingPersonMapper.java
@@ -0,0 +1,16 @@
+package com.baeldung.mapper;
+
+import com.baeldung.dto.ArticleDTO;
+import com.baeldung.dto.PersonDTO;
+import com.baeldung.entity.Article;
+import com.baeldung.entity.Person;
+import org.mapstruct.Mapper;
+import org.mapstruct.factory.Mappers;
+
+@Mapper(uses = PersonMapper.class)
+public interface ArticleUsingPersonMapper {
+
+ ArticleUsingPersonMapper INSTANCE = Mappers.getMapper(ArticleUsingPersonMapper.class);
+
+ ArticleDTO articleToArticleDto(Article article);
+}
diff --git a/mapstruct/src/test/java/com/baeldung/mapper/ArticleMapperUnitTest.java b/mapstruct/src/test/java/com/baeldung/mapper/ArticleMapperUnitTest.java
new file mode 100644
index 0000000000..2470915a01
--- /dev/null
+++ b/mapstruct/src/test/java/com/baeldung/mapper/ArticleMapperUnitTest.java
@@ -0,0 +1,49 @@
+package com.baeldung.mapper;
+
+import com.baeldung.dto.ArticleDTO;
+import com.baeldung.dto.CarDTO;
+import com.baeldung.entity.Article;
+import com.baeldung.entity.Car;
+import com.baeldung.entity.Person;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+
+public class ArticleMapperUnitTest {
+
+ @Test
+ public void givenArticle_whenMaps_thenProducesCorrectDto() {
+
+ Article entity = new Article();
+ entity.setId(1);
+ entity.setName("Mapstruct Mapping");
+ Person author = new Person();
+ author.setId("1");
+ author.setName("John");
+ entity.setAuthor(author);
+
+ ArticleDTO articleDTO = ArticleMapper.INSTANCE.articleToArticleDto(entity);
+
+ assertEquals(articleDTO.getId(), entity.getId());
+ assertEquals(articleDTO.getName(), entity.getName());
+ assertEquals(articleDTO.getAuthor().getName(), entity.getAuthor().getName());
+ }
+
+ @Test
+ public void givenArticle_whenMapsWithUses_thenProducesCorrectDto() {
+
+ Article entity = new Article();
+ entity.setId(1);
+ entity.setName("Mapstruct Mapping");
+ Person author = new Person();
+ author.setId("1");
+ author.setName("John");
+ entity.setAuthor(author);
+
+ ArticleDTO articleDTO = ArticleUsingPersonMapper.INSTANCE.articleToArticleDto(entity);
+
+ assertEquals(articleDTO.getId(), entity.getId());
+ assertEquals(articleDTO.getName(), entity.getName());
+ assertEquals(articleDTO.getAuthor().getName(), entity.getAuthor().getName());
+ }
+}
diff --git a/messaging-modules/apache-camel/README.md b/messaging-modules/apache-camel/README.md
new file mode 100644
index 0000000000..6196893adc
--- /dev/null
+++ b/messaging-modules/apache-camel/README.md
@@ -0,0 +1,9 @@
+## Apache Camel
+
+This module contains articles about Apache Camel
+
+### Relevant Articles
+
+- [Introduction To Apache Camel](http://www.baeldung.com/apache-camel-intro)
+- [Unmarshalling a JSON Array Using camel-jackson](https://www.baeldung.com/java-camel-jackson-json-array)
+
diff --git a/messaging-modules/apache-camel/pom.xml b/messaging-modules/apache-camel/pom.xml
new file mode 100644
index 0000000000..bb20f178aa
--- /dev/null
+++ b/messaging-modules/apache-camel/pom.xml
@@ -0,0 +1,46 @@
+
+
+ 4.0.0
+ org.baeldung.apache.camel
+ apache-camel
+ apache-camel
+ jar
+ http://maven.apache.org
+
+
+ com.baeldung
+ messaging-modules
+ 0.0.1-SNAPSHOT
+
+
+
+
+ org.apache.camel
+ camel-core
+ ${env.camel.version}
+
+
+ org.apache.camel
+ camel-spring-javaconfig
+ ${env.camel.version}
+
+
+ org.apache.camel
+ camel-jackson
+ ${env.camel.version}
+
+
+ org.apache.camel
+ camel-test
+ ${env.camel.version}
+ test
+
+
+
+
+ 3.14.7
+
+
+
\ No newline at end of file
diff --git a/messaging-modules/spring-apache-camel/src/main/java/com/baeldung/camel/apache/file/FileProcessor.java b/messaging-modules/apache-camel/src/main/java/com/baeldung/camel/apache/file/FileProcessor.java
similarity index 100%
rename from messaging-modules/spring-apache-camel/src/main/java/com/baeldung/camel/apache/file/FileProcessor.java
rename to messaging-modules/apache-camel/src/main/java/com/baeldung/camel/apache/file/FileProcessor.java
diff --git a/messaging-modules/spring-apache-camel/src/main/java/com/baeldung/camel/apache/file/FileRouter.java b/messaging-modules/apache-camel/src/main/java/com/baeldung/camel/apache/file/FileRouter.java
similarity index 100%
rename from messaging-modules/spring-apache-camel/src/main/java/com/baeldung/camel/apache/file/FileRouter.java
rename to messaging-modules/apache-camel/src/main/java/com/baeldung/camel/apache/file/FileRouter.java
diff --git a/messaging-modules/spring-apache-camel/src/main/java/com/baeldung/camel/apache/jackson/Fruit.java b/messaging-modules/apache-camel/src/main/java/com/baeldung/camel/apache/jackson/Fruit.java
similarity index 100%
rename from messaging-modules/spring-apache-camel/src/main/java/com/baeldung/camel/apache/jackson/Fruit.java
rename to messaging-modules/apache-camel/src/main/java/com/baeldung/camel/apache/jackson/Fruit.java
diff --git a/messaging-modules/spring-apache-camel/src/main/java/com/baeldung/camel/apache/jackson/FruitList.java b/messaging-modules/apache-camel/src/main/java/com/baeldung/camel/apache/jackson/FruitList.java
similarity index 100%
rename from messaging-modules/spring-apache-camel/src/main/java/com/baeldung/camel/apache/jackson/FruitList.java
rename to messaging-modules/apache-camel/src/main/java/com/baeldung/camel/apache/jackson/FruitList.java
diff --git a/messaging-modules/spring-apache-camel/src/main/resources/camel-context-test.xml b/messaging-modules/apache-camel/src/main/resources/camel-context-test.xml
similarity index 100%
rename from messaging-modules/spring-apache-camel/src/main/resources/camel-context-test.xml
rename to messaging-modules/apache-camel/src/main/resources/camel-context-test.xml
diff --git a/messaging-modules/apache-camel/src/main/resources/logback.xml b/messaging-modules/apache-camel/src/main/resources/logback.xml
new file mode 100644
index 0000000000..7d900d8ea8
--- /dev/null
+++ b/messaging-modules/apache-camel/src/main/resources/logback.xml
@@ -0,0 +1,13 @@
+
+
+
+
+ %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/messaging-modules/spring-apache-camel/src/test/java/com/apache/baeldung/camel/jackson/FruitArrayJacksonUnmarshalUnitTest.java b/messaging-modules/apache-camel/src/test/java/com/apache/baeldung/camel/jackson/FruitArrayJacksonUnmarshalUnitTest.java
similarity index 100%
rename from messaging-modules/spring-apache-camel/src/test/java/com/apache/baeldung/camel/jackson/FruitArrayJacksonUnmarshalUnitTest.java
rename to messaging-modules/apache-camel/src/test/java/com/apache/baeldung/camel/jackson/FruitArrayJacksonUnmarshalUnitTest.java
diff --git a/messaging-modules/spring-apache-camel/src/test/java/com/apache/baeldung/camel/jackson/FruitListJacksonUnmarshalUnitTest.java b/messaging-modules/apache-camel/src/test/java/com/apache/baeldung/camel/jackson/FruitListJacksonUnmarshalUnitTest.java
similarity index 100%
rename from messaging-modules/spring-apache-camel/src/test/java/com/apache/baeldung/camel/jackson/FruitListJacksonUnmarshalUnitTest.java
rename to messaging-modules/apache-camel/src/test/java/com/apache/baeldung/camel/jackson/FruitListJacksonUnmarshalUnitTest.java
diff --git a/messaging-modules/spring-apache-camel/src/test/java/com/apache/camel/file/processor/FileProcessorIntegrationTest.java b/messaging-modules/apache-camel/src/test/java/com/apache/camel/file/processor/FileProcessorIntegrationTest.java
similarity index 100%
rename from messaging-modules/spring-apache-camel/src/test/java/com/apache/camel/file/processor/FileProcessorIntegrationTest.java
rename to messaging-modules/apache-camel/src/test/java/com/apache/camel/file/processor/FileProcessorIntegrationTest.java
diff --git a/messaging-modules/spring-apache-camel/src/test/resources/json/fruit-array.json b/messaging-modules/apache-camel/src/test/resources/json/fruit-array.json
similarity index 100%
rename from messaging-modules/spring-apache-camel/src/test/resources/json/fruit-array.json
rename to messaging-modules/apache-camel/src/test/resources/json/fruit-array.json
diff --git a/messaging-modules/spring-apache-camel/src/test/resources/json/fruit-list.json b/messaging-modules/apache-camel/src/test/resources/json/fruit-list.json
similarity index 100%
rename from messaging-modules/spring-apache-camel/src/test/resources/json/fruit-list.json
rename to messaging-modules/apache-camel/src/test/resources/json/fruit-list.json
diff --git a/messaging-modules/pom.xml b/messaging-modules/pom.xml
index f843b0fe11..47e0730148 100644
--- a/messaging-modules/pom.xml
+++ b/messaging-modules/pom.xml
@@ -15,6 +15,7 @@
+ apache-camel
jgroups
rabbitmq
spring-amqp
diff --git a/messaging-modules/spring-apache-camel/README.md b/messaging-modules/spring-apache-camel/README.md
index 535c61cbef..66079d4e83 100644
--- a/messaging-modules/spring-apache-camel/README.md
+++ b/messaging-modules/spring-apache-camel/README.md
@@ -4,10 +4,8 @@ This module contains articles about Spring with Apache Camel
### Relevant Articles
-- [Introduction To Apache Camel](http://www.baeldung.com/apache-camel-intro)
- [Integration Patterns With Apache Camel](http://www.baeldung.com/camel-integration-patterns)
- [Using Apache Camel with Spring](http://www.baeldung.com/spring-apache-camel-tutorial)
-- [Unmarshalling a JSON Array Using camel-jackson](https://www.baeldung.com/java-camel-jackson-json-array)
- [Apache Camel with Spring Boot](https://www.baeldung.com/apache-camel-spring-boot)
- [Apache Camel Routes Testing in Spring Boot](https://www.baeldung.com/spring-boot-apache-camel-routes-testing)
- [Apache Camel Conditional Routing](https://www.baeldung.com/spring-apache-camel-conditional-routing)
diff --git a/messaging-modules/spring-apache-camel/pom.xml b/messaging-modules/spring-apache-camel/pom.xml
index ec7557666c..65533d7649 100644
--- a/messaging-modules/spring-apache-camel/pom.xml
+++ b/messaging-modules/spring-apache-camel/pom.xml
@@ -47,17 +47,6 @@
camel-spring-javaconfig
${env.camel.version}
-
- org.apache.camel
- camel-jackson
- ${env.camel.version}
-
-
- org.apache.camel
- camel-test
- ${env.camel.version}
- test
-
org.apache.camel.springboot
camel-servlet-starter
diff --git a/osgi/pom.xml b/osgi/pom.xml
index 3fa2dcdf02..ecc8758ef9 100644
--- a/osgi/pom.xml
+++ b/osgi/pom.xml
@@ -67,6 +67,17 @@
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ ${maven-compiler-plugin.version}
+
+ ${maven.compiler.source}
+ ${maven.compiler.target}
+
+
+
@@ -84,6 +95,8 @@
1.1
6.0.0
3.3.0
+ 11
+ 11
\ No newline at end of file
diff --git a/patterns-modules/design-patterns-behavioral/src/main/java/com/baeldung/templatemethod/model/HighEndComputerBuilder.java b/patterns-modules/design-patterns-behavioral/src/main/java/com/baeldung/templatemethod/model/HighEndComputerBuilder.java
index 2ee6f93f9b..e06f1291a6 100644
--- a/patterns-modules/design-patterns-behavioral/src/main/java/com/baeldung/templatemethod/model/HighEndComputerBuilder.java
+++ b/patterns-modules/design-patterns-behavioral/src/main/java/com/baeldung/templatemethod/model/HighEndComputerBuilder.java
@@ -1,5 +1,8 @@
package com.baeldung.templatemethod.model;
+import lombok.extern.slf4j.Slf4j;
+
+@Slf4j
public class HighEndComputerBuilder extends ComputerBuilder {
@Override
@@ -11,7 +14,7 @@ public class HighEndComputerBuilder extends ComputerBuilder {
public void setupMotherboard() {
motherboardSetupStatus.add("Screwing the high-end motherboard to the case.");
motherboardSetupStatus.add("Pluging in the power supply connectors.");
- motherboardSetupStatus.forEach(step -> System.out.println(step));
+ motherboardSetupStatus.forEach(step -> log.debug(step));
}
@Override
diff --git a/patterns-modules/design-patterns-behavioral/src/main/java/com/baeldung/templatemethod/model/StandardComputerBuilder.java b/patterns-modules/design-patterns-behavioral/src/main/java/com/baeldung/templatemethod/model/StandardComputerBuilder.java
index da2c2e9b2d..f5b953c830 100644
--- a/patterns-modules/design-patterns-behavioral/src/main/java/com/baeldung/templatemethod/model/StandardComputerBuilder.java
+++ b/patterns-modules/design-patterns-behavioral/src/main/java/com/baeldung/templatemethod/model/StandardComputerBuilder.java
@@ -1,5 +1,8 @@
package com.baeldung.templatemethod.model;
-
+
+import lombok.extern.slf4j.Slf4j;
+
+@Slf4j
public class StandardComputerBuilder extends ComputerBuilder {
@Override
@@ -11,7 +14,7 @@ public class StandardComputerBuilder extends ComputerBuilder {
public void setupMotherboard() {
motherboardSetupStatus.add("Screwing the standard motherboard to the case.");
motherboardSetupStatus.add("Pluging in the power supply connectors.");
- motherboardSetupStatus.forEach(step -> System.out.println(step));
+ motherboardSetupStatus.forEach(step -> log.debug(step));
}
@Override
diff --git a/patterns-modules/design-patterns-behavioral/src/test/resources/logback-test.xml b/patterns-modules/design-patterns-behavioral/src/test/resources/logback-test.xml
new file mode 100644
index 0000000000..499cc828a2
--- /dev/null
+++ b/patterns-modules/design-patterns-behavioral/src/test/resources/logback-test.xml
@@ -0,0 +1,12 @@
+
+
+
+
+ %d{yyyy-MM-dd HH:mm:ss} | %-5p | [%thread] %logger{5}:%L - %msg%n
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/persistence-modules/activejdbc/pom.xml b/persistence-modules/activejdbc/pom.xml
index 5fdf27a679..a661fc3abb 100644
--- a/persistence-modules/activejdbc/pom.xml
+++ b/persistence-modules/activejdbc/pom.xml
@@ -74,9 +74,9 @@
- 2.0
+ 3.4-j11
development.test,development
- 5.1.34
+ 8.0.32
\ No newline at end of file
diff --git a/persistence-modules/activejdbc/src/main/java/com/baeldung/ActiveJDBCApp.java b/persistence-modules/activejdbc/src/main/java/com/baeldung/ActiveJDBCApp.java
index 8906d3e759..ea600b9721 100644
--- a/persistence-modules/activejdbc/src/main/java/com/baeldung/ActiveJDBCApp.java
+++ b/persistence-modules/activejdbc/src/main/java/com/baeldung/ActiveJDBCApp.java
@@ -4,6 +4,7 @@ package com.baeldung;
import com.baeldung.model.Employee;
import com.baeldung.model.Role;
import org.javalite.activejdbc.Base;
+import org.javalite.activejdbc.DB;
import org.javalite.activejdbc.LazyList;
import org.javalite.activejdbc.Model;
@@ -11,8 +12,7 @@ public class ActiveJDBCApp
{
public static void main( String[] args )
{
- try {
- Base.open();
+ try(final DB open = Base.open()) {
ActiveJDBCApp app = new ActiveJDBCApp();
app.create();
app.update();
diff --git a/persistence-modules/core-java-persistence/pom.xml b/persistence-modules/core-java-persistence/pom.xml
index 5cc1df483f..e8add07fbf 100644
--- a/persistence-modules/core-java-persistence/pom.xml
+++ b/persistence-modules/core-java-persistence/pom.xml
@@ -52,14 +52,21 @@
spring-boot-starter
${springframework.boot.spring-boot-starter.version}
+
+ mysql
+ mysql-connector-java
+ ${mysql-connector.version}
+ runtime
+
- 2.4.0
- 3.2.0
- 0.9.5.2
- 1.5.8.RELEASE
- 4.3.4.RELEASE
+ 2.9.0
+ 5.0.1
+ 0.9.5.5
+ 3.0.4
+ 6.0.6
+ 8.0.32
\ No newline at end of file
diff --git a/persistence-modules/core-java-persistence/src/main/java/com/baeldung/jdbcmetadata/DatabaseConfig.java b/persistence-modules/core-java-persistence/src/main/java/com/baeldung/jdbcmetadata/DatabaseConfig.java
index 8ad689041e..44cfc75a2b 100644
--- a/persistence-modules/core-java-persistence/src/main/java/com/baeldung/jdbcmetadata/DatabaseConfig.java
+++ b/persistence-modules/core-java-persistence/src/main/java/com/baeldung/jdbcmetadata/DatabaseConfig.java
@@ -1,13 +1,14 @@
package com.baeldung.jdbcmetadata;
-import org.apache.log4j.Logger;
-
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
public class DatabaseConfig {
- private static final Logger LOG = Logger.getLogger(DatabaseConfig.class);
+ private static final Logger LOG = LoggerFactory.getLogger(DatabaseConfig.class);
private Connection connection;
@@ -17,7 +18,7 @@ public class DatabaseConfig {
String url = "jdbc:h2:mem:testdb";
connection = DriverManager.getConnection(url, "sa", "");
} catch (ClassNotFoundException | SQLException e) {
- LOG.error(e);
+ LOG.error(e.getMessage());
}
}
@@ -35,7 +36,7 @@ public class DatabaseConfig {
connection.createStatement().executeUpdate("create table CUSTOMER (ID int primary key auto_increment, NAME VARCHAR(45))");
connection.createStatement().executeUpdate("create table CUST_ADDRESS (ID VARCHAR(36), CUST_ID int, ADDRESS VARCHAR(45), FOREIGN KEY (CUST_ID) REFERENCES CUSTOMER(ID))");
} catch (SQLException e) {
- LOG.error(e);
+ LOG.error(e.getMessage());
}
}
@@ -43,7 +44,7 @@ public class DatabaseConfig {
try {
connection.createStatement().executeUpdate("CREATE VIEW CUSTOMER_VIEW AS SELECT * FROM CUSTOMER");
} catch (SQLException e) {
- LOG.error(e);
+ LOG.error(e.getMessage());
}
}
}
diff --git a/persistence-modules/core-java-persistence/src/main/java/com/baeldung/jdbcmetadata/JdbcMetadataApplication.java b/persistence-modules/core-java-persistence/src/main/java/com/baeldung/jdbcmetadata/JdbcMetadataApplication.java
index 591a14f3b5..f85f227381 100644
--- a/persistence-modules/core-java-persistence/src/main/java/com/baeldung/jdbcmetadata/JdbcMetadataApplication.java
+++ b/persistence-modules/core-java-persistence/src/main/java/com/baeldung/jdbcmetadata/JdbcMetadataApplication.java
@@ -1,12 +1,13 @@
package com.baeldung.jdbcmetadata;
-import org.apache.log4j.Logger;
-
import java.sql.SQLException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
public class JdbcMetadataApplication {
- private static final Logger LOG = Logger.getLogger(JdbcMetadataApplication.class);
+ private static final Logger LOG = LoggerFactory.getLogger(JdbcMetadataApplication.class);
public static void main(String[] args) {
DatabaseConfig databaseConfig = new DatabaseConfig();
diff --git a/persistence-modules/core-java-persistence/src/main/java/com/baeldung/jdbcrowset/DatabaseConfiguration.java b/persistence-modules/core-java-persistence/src/main/java/com/baeldung/jdbcrowset/DatabaseConfiguration.java
index 9cfcff468e..a53c82d3da 100644
--- a/persistence-modules/core-java-persistence/src/main/java/com/baeldung/jdbcrowset/DatabaseConfiguration.java
+++ b/persistence-modules/core-java-persistence/src/main/java/com/baeldung/jdbcrowset/DatabaseConfiguration.java
@@ -5,10 +5,6 @@ import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
-import javax.sql.rowset.JdbcRowSet;
-import javax.sql.rowset.RowSetFactory;
-import javax.sql.rowset.RowSetProvider;
-
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.Configuration;
diff --git a/persistence-modules/core-java-persistence/src/main/java/com/baeldung/jdbcrowset/JdbcRowsetApplication.java b/persistence-modules/core-java-persistence/src/main/java/com/baeldung/jdbcrowset/JdbcRowsetApplication.java
index 72c462ac42..163b3a3b58 100644
--- a/persistence-modules/core-java-persistence/src/main/java/com/baeldung/jdbcrowset/JdbcRowsetApplication.java
+++ b/persistence-modules/core-java-persistence/src/main/java/com/baeldung/jdbcrowset/JdbcRowsetApplication.java
@@ -7,8 +7,6 @@ import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
-import com.sun.rowset.*;
-
import javax.sql.rowset.CachedRowSet;
import javax.sql.rowset.FilteredRowSet;
import javax.sql.rowset.JdbcRowSet;
@@ -25,7 +23,7 @@ public class JdbcRowsetApplication {
public static void main(String[] args) throws Exception {
SpringApplication.run(JdbcRowsetApplication.class, args);
- Statement stmt = null;
+ Statement stmt;
try {
Connection conn = DatabaseConfiguration.geth2Connection();
@@ -41,8 +39,7 @@ public class JdbcRowsetApplication {
DatabaseConfiguration.initDatabase(stmt);
// JdbcRowSet Example
String sql = "SELECT * FROM customers";
- JdbcRowSet jdbcRS;
- jdbcRS = new JdbcRowSetImpl(conn);
+ JdbcRowSet jdbcRS = RowSetProvider.newFactory().createJdbcRowSet();
jdbcRS.setType(ResultSet.TYPE_SCROLL_INSENSITIVE);
jdbcRS.setCommand(sql);
jdbcRS.execute();
@@ -58,7 +55,8 @@ public class JdbcRowsetApplication {
String username = "sa";
String password = "";
String url = "jdbc:h2:mem:testdb";
- CachedRowSet crs = new CachedRowSetImpl();
+ RowSetFactory aFactory = RowSetProvider.newFactory();
+ CachedRowSet crs = aFactory.createCachedRowSet();
crs.setUsername(username);
crs.setPassword(password);
crs.setUrl(url);
@@ -74,7 +72,7 @@ public class JdbcRowsetApplication {
}
// WebRowSet example
- WebRowSet wrs = new WebRowSetImpl();
+ WebRowSet wrs = RowSetProvider.newFactory().createWebRowSet();
wrs.setUsername(username);
wrs.setPassword(password);
wrs.setUrl(url);
@@ -84,14 +82,14 @@ public class JdbcRowsetApplication {
wrs.writeXml(ostream);
// JoinRowSet example
- CachedRowSetImpl customers = new CachedRowSetImpl();
+ CachedRowSet customers = aFactory.createCachedRowSet();
customers.setUsername(username);
customers.setPassword(password);
customers.setUrl(url);
customers.setCommand(sql);
customers.execute();
- CachedRowSetImpl associates = new CachedRowSetImpl();
+ CachedRowSet associates = aFactory.createCachedRowSet();
associates.setUsername(username);
associates.setPassword(password);
associates.setUrl(url);
@@ -99,7 +97,7 @@ public class JdbcRowsetApplication {
associates.setCommand(associatesSQL);
associates.execute();
- JoinRowSet jrs = new JoinRowSetImpl();
+ JoinRowSet jrs = RowSetProvider.newFactory().createJoinRowSet();
final String ID = "id";
final String NAME = "name";
jrs.addRowSet(customers, ID);
diff --git a/persistence-modules/core-java-persistence/src/test/java/com/baeldung/jdbcrowset/JdbcRowSetLiveTest.java b/persistence-modules/core-java-persistence/src/test/java/com/baeldung/jdbcrowset/JdbcRowSetLiveTest.java
index ebfb4df102..2b2b35c423 100644
--- a/persistence-modules/core-java-persistence/src/test/java/com/baeldung/jdbcrowset/JdbcRowSetLiveTest.java
+++ b/persistence-modules/core-java-persistence/src/test/java/com/baeldung/jdbcrowset/JdbcRowSetLiveTest.java
@@ -19,11 +19,6 @@ import javax.sql.rowset.WebRowSet;
import org.junit.Before;
import org.junit.Test;
-import com.sun.rowset.CachedRowSetImpl;
-import com.sun.rowset.JdbcRowSetImpl;
-import com.sun.rowset.JoinRowSetImpl;
-import com.sun.rowset.WebRowSetImpl;
-
public class JdbcRowSetLiveTest {
Statement stmt = null;
String username = "sa";
@@ -51,9 +46,10 @@ public class JdbcRowSetLiveTest {
public void createJdbcRowSet_SelectCustomers_ThenCorrect() throws Exception {
String sql = "SELECT * FROM customers";
- JdbcRowSet jdbcRS;
- Connection conn = DatabaseConfiguration.geth2Connection();
- jdbcRS = new JdbcRowSetImpl(conn);
+ JdbcRowSet jdbcRS = RowSetProvider.newFactory().createJdbcRowSet();
+ jdbcRS.setUrl("jdbc:h2:mem:testdb");
+ jdbcRS.setUsername("sa");
+ jdbcRS.setPassword("");
jdbcRS.setType(ResultSet.TYPE_SCROLL_INSENSITIVE);
jdbcRS.setCommand(sql);
jdbcRS.execute();
@@ -71,7 +67,7 @@ public class JdbcRowSetLiveTest {
@Test
public void createCachedRowSet_DeleteRecord_ThenCorrect() throws Exception {
- CachedRowSet crs = new CachedRowSetImpl();
+ CachedRowSet crs = RowSetProvider.newFactory().createCachedRowSet();
crs.setUsername(username);
crs.setPassword(password);
crs.setUrl(url);
@@ -91,7 +87,7 @@ public class JdbcRowSetLiveTest {
@Test
public void createWebRowSet_SelectCustomers_WritetoXML_ThenCorrect() throws SQLException, IOException {
- WebRowSet wrs = new WebRowSetImpl();
+ WebRowSet wrs = RowSetProvider.newFactory().createWebRowSet();
wrs.setUsername(username);
wrs.setPassword(password);
wrs.setUrl(url);
@@ -105,14 +101,14 @@ public class JdbcRowSetLiveTest {
@Test
public void createCachedRowSets_DoJoinRowSet_ThenCorrect() throws Exception {
- CachedRowSetImpl customers = new CachedRowSetImpl();
+ CachedRowSet customers = RowSetProvider.newFactory().createCachedRowSet();
customers.setUsername(username);
customers.setPassword(password);
customers.setUrl(url);
customers.setCommand(sql);
customers.execute();
- CachedRowSetImpl associates = new CachedRowSetImpl();
+ CachedRowSet associates = RowSetProvider.newFactory().createCachedRowSet();
associates.setUsername(username);
associates.setPassword(password);
associates.setUrl(url);
@@ -120,7 +116,7 @@ public class JdbcRowSetLiveTest {
associates.setCommand(associatesSQL);
associates.execute();
- JoinRowSet jrs = new JoinRowSetImpl();
+ JoinRowSet jrs = RowSetProvider.newFactory().createJoinRowSet();
final String ID = "id";
final String NAME = "name";
jrs.addRowSet(customers, ID);
diff --git a/persistence-modules/core-java-persistence/src/test/java/com/baeldung/spring/jdbc/JdbcLiveTest.java b/persistence-modules/core-java-persistence/src/test/java/com/baeldung/spring/jdbc/JdbcLiveTest.java
index c13f94f12a..fe00ca28dc 100644
--- a/persistence-modules/core-java-persistence/src/test/java/com/baeldung/spring/jdbc/JdbcLiveTest.java
+++ b/persistence-modules/core-java-persistence/src/test/java/com/baeldung/spring/jdbc/JdbcLiveTest.java
@@ -1,9 +1,10 @@
package com.baeldung.spring.jdbc;
-import org.apache.log4j.Logger;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import java.sql.CallableStatement;
import java.sql.Connection;
@@ -24,7 +25,7 @@ import static org.junit.Assert.assertTrue;
public class JdbcLiveTest {
- private static final Logger LOG = Logger.getLogger(JdbcLiveTest.class);
+ private static final Logger LOG = LoggerFactory.getLogger(JdbcLiveTest.class);
private Connection con;
diff --git a/persistence-modules/core-java-persistence/src/test/java/com/baeldung/spring/jdbc/ResultSetLiveTest.java b/persistence-modules/core-java-persistence/src/test/java/com/baeldung/spring/jdbc/ResultSetLiveTest.java
index 853e78a68d..c77e314141 100644
--- a/persistence-modules/core-java-persistence/src/test/java/com/baeldung/spring/jdbc/ResultSetLiveTest.java
+++ b/persistence-modules/core-java-persistence/src/test/java/com/baeldung/spring/jdbc/ResultSetLiveTest.java
@@ -13,7 +13,6 @@ import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
-import org.apache.log4j.Logger;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.FixMethodOrder;
@@ -25,8 +24,6 @@ import junit.framework.Assert;
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class ResultSetLiveTest {
- private static final Logger logger = Logger.getLogger(ResultSetLiveTest.class);
-
private final Employee expectedEmployee1 = new Employee(1, "John", 1000.0, "Developer");
private final Employee updatedEmployee1 = new Employee(1, "John", 1100.0, "Developer");
diff --git a/persistence-modules/hbase/pom.xml b/persistence-modules/hbase/pom.xml
index e38b73e137..3e6cfe27be 100644
--- a/persistence-modules/hbase/pom.xml
+++ b/persistence-modules/hbase/pom.xml
@@ -33,7 +33,7 @@
- 1.3.1
+ 2.5.3
\ No newline at end of file
diff --git a/persistence-modules/hbase/src/main/java/com/baeldung/hbase/HbaseClientExample.java b/persistence-modules/hbase/src/main/java/com/baeldung/hbase/HbaseClientExample.java
index 5546f15e36..3a137a6019 100644
--- a/persistence-modules/hbase/src/main/java/com/baeldung/hbase/HbaseClientExample.java
+++ b/persistence-modules/hbase/src/main/java/com/baeldung/hbase/HbaseClientExample.java
@@ -1,7 +1,5 @@
package com.baeldung.hbase;
-
-import com.google.protobuf.ServiceException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.hbase.HBaseConfiguration;
@@ -13,11 +11,11 @@ import java.io.IOException;
//install hbase locally & hbase master start
public class HbaseClientExample {
- public static void main(String[] args) throws IOException, ServiceException {
+ public static void main(String[] args) throws IOException {
new HbaseClientExample().connect();
}
- private void connect() throws IOException, ServiceException {
+ private void connect() throws IOException {
Configuration config = HBaseConfiguration.create();
String path = this.getClass().getClassLoader().getResource("hbase-site.xml").getPath();
@@ -25,7 +23,7 @@ public class HbaseClientExample {
config.addResource(new Path(path));
try {
- HBaseAdmin.checkHBaseAvailable(config);
+ HBaseAdmin.available(config);
} catch (MasterNotRunningException e) {
System.out.println("HBase is not running." + e.getMessage());
return;
diff --git a/persistence-modules/hibernate-annotations/README.md b/persistence-modules/hibernate-annotations/README.md
index 9b68579151..a03fb7e8e3 100644
--- a/persistence-modules/hibernate-annotations/README.md
+++ b/persistence-modules/hibernate-annotations/README.md
@@ -10,3 +10,4 @@ This module contains articles about Annotations used in Hibernate.
- [Hibernate @WhereJoinTable Annotation](https://www.baeldung.com/hibernate-wherejointable)
- [Usage of the Hibernate @LazyCollection Annotation](https://www.baeldung.com/hibernate-lazycollection)
- [@Immutable in Hibernate](https://www.baeldung.com/hibernate-immutable)
+- [Hibernate @CreationTimestamp and @UpdateTimestamp](https://www.baeldung.com/hibernate-creationtimestamp-updatetimestamp)
diff --git a/persistence-modules/hibernate-annotations/src/main/java/com/baeldung/hibernate/creationupdatetimestamp/model/Book.java b/persistence-modules/hibernate-annotations/src/main/java/com/baeldung/hibernate/creationupdatetimestamp/model/Book.java
new file mode 100644
index 0000000000..0677b46690
--- /dev/null
+++ b/persistence-modules/hibernate-annotations/src/main/java/com/baeldung/hibernate/creationupdatetimestamp/model/Book.java
@@ -0,0 +1,57 @@
+package com.baeldung.hibernate.creationupdatetimestamp.model;
+
+import java.time.Instant;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+import org.hibernate.annotations.CreationTimestamp;
+import org.hibernate.annotations.UpdateTimestamp;
+
+@Entity
+public class Book {
+ @Id
+ @GeneratedValue
+ private Long id;
+ private String title;
+ @CreationTimestamp
+ private Instant createdOn;
+ @UpdateTimestamp
+ private Instant lastUpdatedOn;
+
+ public Book() {
+ }
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public String getTitle() {
+ return title;
+ }
+
+ public void setTitle(String title) {
+ this.title = title;
+ }
+
+ public Instant getCreatedOn() {
+ return createdOn;
+ }
+
+ public void setCreatedOn(Instant createdOn) {
+ this.createdOn = createdOn;
+ }
+
+ public Instant getLastUpdatedOn() {
+ return lastUpdatedOn;
+ }
+
+ public void setLastUpdatedOn(Instant lastUpdatedOn) {
+ this.lastUpdatedOn = lastUpdatedOn;
+ }
+}
diff --git a/persistence-modules/hibernate-annotations/src/test/java/com/baeldung/hibernate/creationupdatetimestamp/HibernateCreationUpdateTimestampIntegrationTest.java b/persistence-modules/hibernate-annotations/src/test/java/com/baeldung/hibernate/creationupdatetimestamp/HibernateCreationUpdateTimestampIntegrationTest.java
new file mode 100644
index 0000000000..f309e9e22f
--- /dev/null
+++ b/persistence-modules/hibernate-annotations/src/test/java/com/baeldung/hibernate/creationupdatetimestamp/HibernateCreationUpdateTimestampIntegrationTest.java
@@ -0,0 +1,116 @@
+package com.baeldung.hibernate.creationupdatetimestamp;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+
+import java.time.Instant;
+
+import org.h2.Driver;
+import org.hibernate.Session;
+import org.hibernate.SessionFactory;
+import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
+import org.hibernate.cfg.Configuration;
+import org.hibernate.dialect.H2Dialect;
+import org.hibernate.service.ServiceRegistry;
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+
+import com.baeldung.hibernate.creationupdatetimestamp.model.Book;
+
+class HibernateCreationUpdateTimestampIntegrationTest {
+
+ private static SessionFactory sessionFactory;
+
+ private Session session;
+
+ @BeforeAll
+ public static void beforeTests() {
+ Configuration configuration = new Configuration().addAnnotatedClass(Book.class)
+ .setProperty("hibernate.dialect", H2Dialect.class.getName())
+ .setProperty("hibernate.connection.driver_class", Driver.class.getName())
+ .setProperty("hibernate.connection.url", "jdbc:h2:mem:test")
+ .setProperty("hibernate.connection.username", "sa")
+ .setProperty("hibernate.connection.password", "")
+ .setProperty("hibernate.hbm2ddl.auto", "update");
+
+ ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties())
+ .build();
+
+ sessionFactory = configuration.buildSessionFactory(serviceRegistry);
+ }
+
+ @Test
+ void whenCreatingEntity_ThenCreatedOnIsSet() {
+ session = sessionFactory.openSession();
+ session.beginTransaction();
+ Book book = new Book();
+
+ session.save(book);
+ session.getTransaction()
+ .commit();
+ session.close();
+
+ assertNotNull(book.getCreatedOn());
+ }
+
+ @Test
+ void whenCreatingEntity_ThenCreatedOnAndLastUpdatedOnAreBothSet() {
+ session = sessionFactory.openSession();
+ session.beginTransaction();
+ Book book = new Book();
+
+ session.save(book);
+ session.getTransaction()
+ .commit();
+ session.close();
+
+ assertNotNull(book.getCreatedOn());
+ assertNotNull(book.getLastUpdatedOn());
+ }
+
+ @Test
+ void whenCreatingEntity_ThenCreatedOnAndLastUpdatedOnAreNotEqual() {
+ session = sessionFactory.openSession();
+ session.beginTransaction();
+ Book book = new Book();
+
+ session.save(book);
+ session.getTransaction()
+ .commit();
+ session.close();
+
+ assertNotEquals(book.getCreatedOn(), book.getLastUpdatedOn());
+ }
+
+ @Test
+ void whenUpdatingEntity_ThenLastUpdatedOnIsUpdatedAndCreatedOnStaysTheSame() {
+ session = sessionFactory.openSession();
+ session.beginTransaction();
+ Book book = new Book();
+ session.save(book);
+ session.flush();
+ Instant createdOnAfterCreation = book.getCreatedOn();
+ Instant lastUpdatedOnAfterCreation = book.getLastUpdatedOn();
+
+ String newName = "newName";
+ book.setTitle(newName);
+ session.getTransaction()
+ .commit();
+ session.close();
+ Instant createdOnAfterUpdate = book.getCreatedOn();
+ Instant lastUpdatedOnAfterUpdate = book.getLastUpdatedOn();
+
+ assertEquals(newName, book.getTitle());
+ assertNotNull(createdOnAfterUpdate);
+ assertNotNull(lastUpdatedOnAfterUpdate);
+ assertEquals(createdOnAfterCreation, createdOnAfterUpdate);
+ assertNotEquals(lastUpdatedOnAfterCreation, lastUpdatedOnAfterUpdate);
+ }
+
+ @AfterAll
+ static void afterTests() {
+ sessionFactory.close();
+ }
+}
diff --git a/persistence-modules/hibernate-exceptions/pom.xml b/persistence-modules/hibernate-exceptions/pom.xml
index 4bef688715..670ff4cdb8 100644
--- a/persistence-modules/hibernate-exceptions/pom.xml
+++ b/persistence-modules/hibernate-exceptions/pom.xml
@@ -24,11 +24,6 @@
hibernate-core
${hibernate.version}
-
- javax.xml.bind
- jaxb-api
- ${jaxb.version}
-
com.h2database
h2
@@ -37,8 +32,7 @@
- 2.4.0
- 2.3.0
+ 2.7.1
2.1.214
diff --git a/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/entitynotfoundexception/Category.java b/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/entitynotfoundexception/Category.java
index 25d31d50c7..cab06ae9cf 100644
--- a/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/entitynotfoundexception/Category.java
+++ b/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/entitynotfoundexception/Category.java
@@ -1,6 +1,6 @@
package com.baeldung.hibernate.entitynotfoundexception;
-import javax.persistence.*;
+import jakarta.persistence.*;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
diff --git a/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/entitynotfoundexception/Item.java b/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/entitynotfoundexception/Item.java
index 3abed00eb8..2d07178aaf 100644
--- a/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/entitynotfoundexception/Item.java
+++ b/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/entitynotfoundexception/Item.java
@@ -1,9 +1,6 @@
package com.baeldung.hibernate.entitynotfoundexception;
-import org.hibernate.annotations.NotFound;
-import org.hibernate.annotations.NotFoundAction;
-
-import javax.persistence.*;
+import jakarta.persistence.*;
import java.io.Serializable;
@Entity
diff --git a/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/entitynotfoundexception/User.java b/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/entitynotfoundexception/User.java
index d89047195c..8351c5df96 100644
--- a/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/entitynotfoundexception/User.java
+++ b/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/entitynotfoundexception/User.java
@@ -1,7 +1,7 @@
package com.baeldung.hibernate.entitynotfoundexception;
-import javax.persistence.Entity;
-import javax.persistence.Id;
+import jakarta.persistence.Entity;
+import jakarta.persistence.Id;
@Entity
public class User {
diff --git a/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/detachedentity/entity/Comment.java b/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/detachedentity/entity/Comment.java
index 4a3e9739e2..e73adfef6b 100644
--- a/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/detachedentity/entity/Comment.java
+++ b/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/detachedentity/entity/Comment.java
@@ -1,10 +1,10 @@
package com.baeldung.hibernate.exception.detachedentity.entity;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.ManyToOne;
+import jakarta.persistence.Entity;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.GenerationType;
+import jakarta.persistence.Id;
+import jakarta.persistence.ManyToOne;
@Entity
public class Comment {
diff --git a/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/detachedentity/entity/Post.java b/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/detachedentity/entity/Post.java
index 7d95b41948..155a1bfe69 100644
--- a/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/detachedentity/entity/Post.java
+++ b/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/detachedentity/entity/Post.java
@@ -1,9 +1,9 @@
package com.baeldung.hibernate.exception.detachedentity.entity;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
+import jakarta.persistence.Entity;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.GenerationType;
+import jakarta.persistence.Id;
@Entity
public class Post {
diff --git a/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/lazyinitialization/entity/Role.java b/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/lazyinitialization/entity/Role.java
index c15e674c52..5e613004a3 100644
--- a/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/lazyinitialization/entity/Role.java
+++ b/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/lazyinitialization/entity/Role.java
@@ -1,11 +1,11 @@
package com.baeldung.hibernate.exception.lazyinitialization.entity;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.Table;
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.GenerationType;
+import jakarta.persistence.Id;
+import jakarta.persistence.Table;
@Entity
@Table(name = "role")
diff --git a/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/lazyinitialization/entity/User.java b/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/lazyinitialization/entity/User.java
index 5bd7e00801..ffae05c0a0 100644
--- a/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/lazyinitialization/entity/User.java
+++ b/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/lazyinitialization/entity/User.java
@@ -3,14 +3,14 @@ package com.baeldung.hibernate.exception.lazyinitialization.entity;
import java.util.HashSet;
import java.util.Set;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.OneToMany;
-import javax.persistence.Table;
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.GenerationType;
+import jakarta.persistence.Id;
+import jakarta.persistence.JoinColumn;
+import jakarta.persistence.OneToMany;
+import jakarta.persistence.Table;
@Entity
@Table(name = "user")
diff --git a/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/persistentobject/entity/Article.java b/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/persistentobject/entity/Article.java
index 3c9c7c5b31..eb697334ae 100644
--- a/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/persistentobject/entity/Article.java
+++ b/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/persistentobject/entity/Article.java
@@ -1,10 +1,10 @@
package com.baeldung.hibernate.exception.persistentobject.entity;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.ManyToOne;
+import jakarta.persistence.Entity;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.GenerationType;
+import jakarta.persistence.Id;
+import jakarta.persistence.ManyToOne;
@Entity
public class Article {
diff --git a/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/persistentobject/entity/Author.java b/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/persistentobject/entity/Author.java
index fa6aaa9abe..f8dcb82b7e 100644
--- a/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/persistentobject/entity/Author.java
+++ b/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/persistentobject/entity/Author.java
@@ -2,12 +2,11 @@ package com.baeldung.hibernate.exception.persistentobject.entity;
import java.util.List;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.OneToMany;
-import javax.persistence.OneToOne;
+import jakarta.persistence.Entity;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.GenerationType;
+import jakarta.persistence.Id;
+import jakarta.persistence.OneToMany;
import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
diff --git a/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/persistentobject/entity/Book.java b/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/persistentobject/entity/Book.java
index 342da27c77..986c7f061f 100644
--- a/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/persistentobject/entity/Book.java
+++ b/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/persistentobject/entity/Book.java
@@ -1,11 +1,10 @@
package com.baeldung.hibernate.exception.persistentobject.entity;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.GenerationType;
+import jakarta.persistence.Id;
@Entity
public class Book {
diff --git a/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/transientobject/entity/Address.java b/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/transientobject/entity/Address.java
index e450fc3c18..8d1208e036 100644
--- a/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/transientobject/entity/Address.java
+++ b/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/transientobject/entity/Address.java
@@ -1,18 +1,12 @@
package com.baeldung.hibernate.exception.transientobject.entity;
-import java.io.Serializable;
-import java.util.HashSet;
-import java.util.Set;
-
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.OneToMany;
-import javax.persistence.OneToOne;
-import javax.persistence.Table;
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.GenerationType;
+import jakarta.persistence.Id;
+import jakarta.persistence.OneToOne;
+import jakarta.persistence.Table;
@Entity
@Table(name = "address")
diff --git a/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/transientobject/entity/Author.java b/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/transientobject/entity/Author.java
index f1a88daa36..271e810002 100644
--- a/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/transientobject/entity/Author.java
+++ b/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/transientobject/entity/Author.java
@@ -3,15 +3,14 @@ package com.baeldung.hibernate.exception.transientobject.entity;
import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.ManyToMany;
-import javax.persistence.ManyToOne;
-import javax.persistence.Table;
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.GenerationType;
+import jakarta.persistence.Id;
+import jakarta.persistence.JoinColumn;
+import jakarta.persistence.ManyToMany;
+import jakarta.persistence.Table;
import java.util.HashSet;
import java.util.Set;
diff --git a/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/transientobject/entity/Book.java b/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/transientobject/entity/Book.java
index 91728430ea..0734cccff1 100644
--- a/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/transientobject/entity/Book.java
+++ b/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/transientobject/entity/Book.java
@@ -4,15 +4,14 @@ package com.baeldung.hibernate.exception.transientobject.entity;
import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.ManyToMany;
-import javax.persistence.OneToMany;
-import javax.persistence.Table;
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.GenerationType;
+import jakarta.persistence.Id;
+import jakarta.persistence.JoinColumn;
+import jakarta.persistence.ManyToMany;
+import jakarta.persistence.Table;
import java.util.HashSet;
import java.util.Set;
diff --git a/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/transientobject/entity/Department.java b/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/transientobject/entity/Department.java
index 4b8fa69964..5bd9a109ab 100644
--- a/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/transientobject/entity/Department.java
+++ b/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/transientobject/entity/Department.java
@@ -1,13 +1,13 @@
package com.baeldung.hibernate.exception.transientobject.entity;
-import javax.persistence.CascadeType;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.OneToMany;
-import javax.persistence.Table;
+import jakarta.persistence.CascadeType;
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.GenerationType;
+import jakarta.persistence.Id;
+import jakarta.persistence.OneToMany;
+import jakarta.persistence.Table;
import java.util.HashSet;
import java.util.Set;
diff --git a/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/transientobject/entity/Employee.java b/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/transientobject/entity/Employee.java
index 56443cce70..6a2ec8b938 100644
--- a/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/transientobject/entity/Employee.java
+++ b/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/transientobject/entity/Employee.java
@@ -4,15 +4,14 @@ package com.baeldung.hibernate.exception.transientobject.entity;
import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.FetchType;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.ManyToOne;
-import javax.persistence.Table;
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.GenerationType;
+import jakarta.persistence.Id;
+import jakarta.persistence.JoinColumn;
+import jakarta.persistence.ManyToOne;
+import jakarta.persistence.Table;
@Entity
@Table(name = "employee")
diff --git a/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/transientobject/entity/User.java b/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/transientobject/entity/User.java
index eff1a88b51..cf56afd8b9 100644
--- a/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/transientobject/entity/User.java
+++ b/persistence-modules/hibernate-exceptions/src/main/java/com/baeldung/hibernate/exception/transientobject/entity/User.java
@@ -1,19 +1,14 @@
package com.baeldung.hibernate.exception.transientobject.entity;
-import java.io.Serializable;
-import java.util.HashSet;
-import java.util.Set;
-
-import javax.persistence.CascadeType;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.OneToMany;
-import javax.persistence.OneToOne;
-import javax.persistence.Table;
+import jakarta.persistence.CascadeType;
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.GenerationType;
+import jakarta.persistence.Id;
+import jakarta.persistence.JoinColumn;
+import jakarta.persistence.OneToOne;
+import jakarta.persistence.Table;
@Entity
@Table(name = "user")
diff --git a/persistence-modules/hibernate-exceptions/src/test/java/com/baeldung/hibernate/entitynotfoundexception/EntityNotFoundExceptionIntegrationTest.java b/persistence-modules/hibernate-exceptions/src/test/java/com/baeldung/hibernate/entitynotfoundexception/EntityNotFoundExceptionIntegrationTest.java
index bcb4e3eb95..f339afd536 100644
--- a/persistence-modules/hibernate-exceptions/src/test/java/com/baeldung/hibernate/entitynotfoundexception/EntityNotFoundExceptionIntegrationTest.java
+++ b/persistence-modules/hibernate-exceptions/src/test/java/com/baeldung/hibernate/entitynotfoundexception/EntityNotFoundExceptionIntegrationTest.java
@@ -4,10 +4,10 @@ import org.junit.After;
import org.junit.Before;
import org.junit.Test;
-import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
-import javax.persistence.EntityNotFoundException;
-import javax.persistence.Persistence;
+import jakarta.persistence.EntityManager;
+import jakarta.persistence.EntityManagerFactory;
+import jakarta.persistence.EntityNotFoundException;
+import jakarta.persistence.Persistence;
import java.io.IOException;
public class EntityNotFoundExceptionIntegrationTest {
diff --git a/persistence-modules/hibernate-exceptions/src/test/java/com/baeldung/hibernate/exception/detachedentity/DetachedEntityUnitTest.java b/persistence-modules/hibernate-exceptions/src/test/java/com/baeldung/hibernate/exception/detachedentity/DetachedEntityUnitTest.java
index afb0efae77..c10b319319 100644
--- a/persistence-modules/hibernate-exceptions/src/test/java/com/baeldung/hibernate/exception/detachedentity/DetachedEntityUnitTest.java
+++ b/persistence-modules/hibernate-exceptions/src/test/java/com/baeldung/hibernate/exception/detachedentity/DetachedEntityUnitTest.java
@@ -3,13 +3,12 @@ package com.baeldung.hibernate.exception.detachedentity;
import com.baeldung.hibernate.exception.detachedentity.entity.Comment;
import com.baeldung.hibernate.exception.detachedentity.entity.Post;
-import org.assertj.core.api.Assertions;
import org.hibernate.Session;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
-import javax.persistence.PersistenceException;
+import jakarta.persistence.PersistenceException;
import java.util.List;
@@ -43,7 +42,7 @@ public class DetachedEntityUnitTest {
assertThatThrownBy(() -> session.persist(detachedPost))
.isInstanceOf(PersistenceException.class)
- .hasMessageContaining("org.hibernate.PersistentObjectException: detached entity passed to persist");
+ .hasMessageContaining("`org.hibernate.PersistentObjectException` to JPA `PersistenceException` : detached entity passed to persist");
}
@Test
@@ -72,7 +71,7 @@ public class DetachedEntityUnitTest {
assertThatThrownBy(() -> session.persist(detachedPost))
.isInstanceOf(PersistenceException.class)
- .hasMessageContaining("org.hibernate.PersistentObjectException: detached entity passed to persist");
+ .hasMessageContaining("`org.hibernate.PersistentObjectException` to JPA `PersistenceException` : detached entity passed to persist");
}
@Test
diff --git a/persistence-modules/hibernate-jpa/pom.xml b/persistence-modules/hibernate-jpa/pom.xml
index f742290884..086e487eb9 100644
--- a/persistence-modules/hibernate-jpa/pom.xml
+++ b/persistence-modules/hibernate-jpa/pom.xml
@@ -83,11 +83,13 @@
- 5.3.7.Final
- 8.0.13
- 2.2.3
- 2.1.7.RELEASE
- 1.4.200
+ 6.1.7.Final
+ 8.0.32
+ 2.6.0
+ 3.0.4
+ 2.1.214
+ 2.0.7
+ 1.4.6
\ No newline at end of file
diff --git a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/converters/PersonNameConverter.java b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/converters/PersonNameConverter.java
index 506e674984..ec0e2f2e2c 100644
--- a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/converters/PersonNameConverter.java
+++ b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/converters/PersonNameConverter.java
@@ -1,7 +1,7 @@
package com.baeldung.hibernate.converters;
-import javax.persistence.AttributeConverter;
-import javax.persistence.Converter;
+import jakarta.persistence.AttributeConverter;
+import jakarta.persistence.Converter;
import com.baeldung.hibernate.pojo.PersonName;
diff --git a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/entities/Department.java b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/entities/Department.java
index ff94f4f849..39e69a2b1c 100644
--- a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/entities/Department.java
+++ b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/entities/Department.java
@@ -2,7 +2,7 @@ package com.baeldung.hibernate.entities;
import java.util.List;
-import javax.persistence.*;
+import jakarta.persistence.*;
@Entity
public class Department {
diff --git a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/entities/DeptEmployee.java b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/entities/DeptEmployee.java
index 6510e70650..38519644c5 100644
--- a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/entities/DeptEmployee.java
+++ b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/entities/DeptEmployee.java
@@ -1,13 +1,13 @@
package com.baeldung.hibernate.entities;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.ManyToOne;
+import jakarta.persistence.Entity;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.GenerationType;
+import jakarta.persistence.Id;
+import jakarta.persistence.ManyToOne;
@org.hibernate.annotations.NamedQueries({ @org.hibernate.annotations.NamedQuery(name = "DeptEmployee_FindByEmployeeNumber", query = "from DeptEmployee where employeeNumber = :employeeNo"),
- @org.hibernate.annotations.NamedQuery(name = "DeptEmployee_FindAllByDesgination", query = "from DeptEmployee where designation = :designation"),
+ @org.hibernate.annotations.NamedQuery(name = "DeptEmployee_FindAllByDesgination", query = "from DeptEmployee where employeeNumber = :employeeNumber"),
@org.hibernate.annotations.NamedQuery(name = "DeptEmployee_UpdateEmployeeDepartment", query = "Update DeptEmployee set department = :newDepartment where employeeNumber = :employeeNo"),
@org.hibernate.annotations.NamedQuery(name = "DeptEmployee_FindAllByDepartment", query = "from DeptEmployee where department = :department", timeout = 1, fetchSize = 10) })
@org.hibernate.annotations.NamedNativeQueries({ @org.hibernate.annotations.NamedNativeQuery(name = "DeptEmployee_FindByEmployeeName", query = "select * from deptemployee emp where name=:name", resultClass = DeptEmployee.class),
diff --git a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/entitymanager/getreference/Game.java b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/entitymanager/getreference/Game.java
index 1de8de0327..5a6f9c7c6c 100644
--- a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/entitymanager/getreference/Game.java
+++ b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/entitymanager/getreference/Game.java
@@ -1,7 +1,7 @@
package com.baeldung.hibernate.entitymanager.getreference;
-import javax.persistence.Entity;
-import javax.persistence.Id;
+import jakarta.persistence.Entity;
+import jakarta.persistence.Id;
@Entity
public class Game {
diff --git a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/entitymanager/getreference/Player.java b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/entitymanager/getreference/Player.java
index 459a3a00ad..6e62aeda45 100644
--- a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/entitymanager/getreference/Player.java
+++ b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/entitymanager/getreference/Player.java
@@ -1,8 +1,8 @@
package com.baeldung.hibernate.entitymanager.getreference;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.ManyToOne;
+import jakarta.persistence.Entity;
+import jakarta.persistence.Id;
+import jakarta.persistence.ManyToOne;
@Entity
public class Player {
diff --git a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/jpabootstrap/application/Application.java b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/jpabootstrap/application/Application.java
index b547a60b06..6263df4237 100644
--- a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/jpabootstrap/application/Application.java
+++ b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/jpabootstrap/application/Application.java
@@ -2,7 +2,7 @@ package com.baeldung.hibernate.jpabootstrap.application;
import com.baeldung.hibernate.jpabootstrap.config.JpaEntityManagerFactory;
import com.baeldung.hibernate.jpabootstrap.entities.User;
-import javax.persistence.EntityManager;
+import jakarta.persistence.EntityManager;
public class Application {
@@ -24,8 +24,7 @@ public class Application {
}
private static class EntityManagerHolder {
- private static final EntityManager ENTITY_MANAGER = new JpaEntityManagerFactory(
- new Class[]{User.class}).getEntityManager();
+ private static final EntityManager ENTITY_MANAGER = new JpaEntityManagerFactory(new Class[]{User.class}).getEntityManager();
}
public static EntityManager getJpaEntityManager() {
diff --git a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/jpabootstrap/config/HibernatePersistenceUnitInfo.java b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/jpabootstrap/config/HibernatePersistenceUnitInfo.java
index 3852b44b64..af01ea630c 100644
--- a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/jpabootstrap/config/HibernatePersistenceUnitInfo.java
+++ b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/jpabootstrap/config/HibernatePersistenceUnitInfo.java
@@ -6,11 +6,11 @@ import java.util.Collections;
import java.util.List;
import java.util.Properties;
import javax.sql.DataSource;
-import javax.persistence.SharedCacheMode;
-import javax.persistence.ValidationMode;
-import javax.persistence.spi.ClassTransformer;
-import javax.persistence.spi.PersistenceUnitInfo;
-import javax.persistence.spi.PersistenceUnitTransactionType;
+import jakarta.persistence.SharedCacheMode;
+import jakarta.persistence.ValidationMode;
+import jakarta.persistence.spi.ClassTransformer;
+import jakarta.persistence.spi.PersistenceUnitInfo;
+import jakarta.persistence.spi.PersistenceUnitTransactionType;
import org.hibernate.jpa.HibernatePersistenceProvider;
public class HibernatePersistenceUnitInfo implements PersistenceUnitInfo {
diff --git a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/jpabootstrap/config/JpaEntityManagerFactory.java b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/jpabootstrap/config/JpaEntityManagerFactory.java
index bc1932af6f..e115727d67 100644
--- a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/jpabootstrap/config/JpaEntityManagerFactory.java
+++ b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/jpabootstrap/config/JpaEntityManagerFactory.java
@@ -7,10 +7,10 @@ import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.stream.Collectors;
-import javax.persistence.EntityManager;
+import jakarta.persistence.EntityManager;
import javax.sql.DataSource;
-import javax.persistence.EntityManagerFactory;
-import javax.persistence.spi.PersistenceUnitInfo;
+import jakarta.persistence.EntityManagerFactory;
+import jakarta.persistence.spi.PersistenceUnitInfo;
import org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl;
import org.hibernate.jpa.boot.internal.PersistenceUnitInfoDescriptor;
diff --git a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/jpabootstrap/entities/User.java b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/jpabootstrap/entities/User.java
index 86ca1dfa19..43c99f8d96 100644
--- a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/jpabootstrap/entities/User.java
+++ b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/jpabootstrap/entities/User.java
@@ -1,10 +1,10 @@
package com.baeldung.hibernate.jpabootstrap.entities;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.Table;
+import jakarta.persistence.Entity;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.GenerationType;
+import jakarta.persistence.Id;
+import jakarta.persistence.Table;
@Entity
@Table(name = "users")
diff --git a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/jpacriteriabuilder/service/EmployeeSearchServiceImpl.java b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/jpacriteriabuilder/service/EmployeeSearchServiceImpl.java
index e79168a451..9a3216b5eb 100644
--- a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/jpacriteriabuilder/service/EmployeeSearchServiceImpl.java
+++ b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/jpacriteriabuilder/service/EmployeeSearchServiceImpl.java
@@ -2,13 +2,13 @@ package com.baeldung.hibernate.jpacriteriabuilder.service;
import java.util.List;
-import javax.persistence.EntityManager;
-import javax.persistence.TypedQuery;
-import javax.persistence.criteria.CriteriaBuilder;
-import javax.persistence.criteria.CriteriaBuilder.In;
-import javax.persistence.criteria.CriteriaQuery;
-import javax.persistence.criteria.Root;
-import javax.persistence.criteria.Subquery;
+import jakarta.persistence.EntityManager;
+import jakarta.persistence.TypedQuery;
+import jakarta.persistence.criteria.CriteriaBuilder;
+import jakarta.persistence.criteria.CriteriaBuilder.In;
+import jakarta.persistence.criteria.CriteriaQuery;
+import jakarta.persistence.criteria.Root;
+import jakarta.persistence.criteria.Subquery;
import com.baeldung.hibernate.entities.Department;
import com.baeldung.hibernate.entities.DeptEmployee;
diff --git a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/onetoone/foreignkeybased/Address.java b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/onetoone/foreignkeybased/Address.java
index e05eb46030..0c3238cf98 100644
--- a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/onetoone/foreignkeybased/Address.java
+++ b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/onetoone/foreignkeybased/Address.java
@@ -1,12 +1,12 @@
package com.baeldung.hibernate.onetoone.foreignkeybased;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.OneToOne;
-import javax.persistence.Table;
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.GenerationType;
+import jakarta.persistence.Id;
+import jakarta.persistence.OneToOne;
+import jakarta.persistence.Table;
@Entity
@Table(name = "address")
diff --git a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/onetoone/foreignkeybased/User.java b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/onetoone/foreignkeybased/User.java
index dda972f29c..14c2a0a28c 100644
--- a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/onetoone/foreignkeybased/User.java
+++ b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/onetoone/foreignkeybased/User.java
@@ -1,14 +1,14 @@
package com.baeldung.hibernate.onetoone.foreignkeybased;
-import javax.persistence.CascadeType;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.OneToOne;
-import javax.persistence.Table;
+import jakarta.persistence.CascadeType;
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.GenerationType;
+import jakarta.persistence.Id;
+import jakarta.persistence.JoinColumn;
+import jakarta.persistence.OneToOne;
+import jakarta.persistence.Table;
@Entity
@Table(name = "users")
diff --git a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/onetoone/jointablebased/Employee.java b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/onetoone/jointablebased/Employee.java
index a0bc101b9f..fc8b9eefec 100644
--- a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/onetoone/jointablebased/Employee.java
+++ b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/onetoone/jointablebased/Employee.java
@@ -1,15 +1,15 @@
package com.baeldung.hibernate.onetoone.jointablebased;
-import javax.persistence.CascadeType;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.JoinTable;
-import javax.persistence.OneToOne;
-import javax.persistence.Table;
+import jakarta.persistence.CascadeType;
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.GenerationType;
+import jakarta.persistence.Id;
+import jakarta.persistence.JoinColumn;
+import jakarta.persistence.JoinTable;
+import jakarta.persistence.OneToOne;
+import jakarta.persistence.Table;
@Entity
@Table(name = "employee")
diff --git a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/onetoone/jointablebased/WorkStation.java b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/onetoone/jointablebased/WorkStation.java
index f530611f6e..0834b9f9d7 100644
--- a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/onetoone/jointablebased/WorkStation.java
+++ b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/onetoone/jointablebased/WorkStation.java
@@ -1,13 +1,13 @@
package com.baeldung.hibernate.onetoone.jointablebased;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.OneToOne;
-import javax.persistence.Table;
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.GenerationType;
+import jakarta.persistence.Id;
+import jakarta.persistence.OneToOne;
+import jakarta.persistence.Table;
@Entity
@Table(name = "workstation")
diff --git a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/onetoone/sharedkeybased/Address.java b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/onetoone/sharedkeybased/Address.java
index e70c62e77b..d738b900bc 100644
--- a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/onetoone/sharedkeybased/Address.java
+++ b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/onetoone/sharedkeybased/Address.java
@@ -1,12 +1,12 @@
package com.baeldung.hibernate.onetoone.sharedkeybased;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.MapsId;
-import javax.persistence.OneToOne;
-import javax.persistence.Table;
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.Id;
+import jakarta.persistence.JoinColumn;
+import jakarta.persistence.MapsId;
+import jakarta.persistence.OneToOne;
+import jakarta.persistence.Table;
@Entity
@Table(name = "address")
diff --git a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/onetoone/sharedkeybased/User.java b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/onetoone/sharedkeybased/User.java
index 605671a149..8ce767eaf7 100644
--- a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/onetoone/sharedkeybased/User.java
+++ b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/onetoone/sharedkeybased/User.java
@@ -1,15 +1,15 @@
package com.baeldung.hibernate.onetoone.sharedkeybased;
-import javax.persistence.CascadeType;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.OneToOne;
-import javax.persistence.PrimaryKeyJoinColumn;
-import javax.persistence.Table;
+import jakarta.persistence.CascadeType;
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.GenerationType;
+import jakarta.persistence.Id;
+import jakarta.persistence.OneToOne;
+import jakarta.persistence.PrimaryKeyJoinColumn;
+import jakarta.persistence.Table;
@Entity
@Table(name = "users")
diff --git a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/optimisticlocking/OptimisticLockingCourse.java b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/optimisticlocking/OptimisticLockingCourse.java
index 1af3e3e21b..b8212a049d 100644
--- a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/optimisticlocking/OptimisticLockingCourse.java
+++ b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/optimisticlocking/OptimisticLockingCourse.java
@@ -1,6 +1,6 @@
package com.baeldung.hibernate.optimisticlocking;
-import javax.persistence.*;
+import jakarta.persistence.*;
@Entity
public class OptimisticLockingCourse {
diff --git a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/optimisticlocking/OptimisticLockingStudent.java b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/optimisticlocking/OptimisticLockingStudent.java
index b79212ae8d..22f11e37fb 100644
--- a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/optimisticlocking/OptimisticLockingStudent.java
+++ b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/optimisticlocking/OptimisticLockingStudent.java
@@ -1,6 +1,6 @@
package com.baeldung.hibernate.optimisticlocking;
-import javax.persistence.*;
+import jakarta.persistence.*;
import java.util.List;
@Entity
diff --git a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/pessimisticlocking/Address.java b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/pessimisticlocking/Address.java
index c889cb6127..7c6d20df40 100644
--- a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/pessimisticlocking/Address.java
+++ b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/pessimisticlocking/Address.java
@@ -1,6 +1,6 @@
package com.baeldung.hibernate.pessimisticlocking;
-import javax.persistence.Embeddable;
+import jakarta.persistence.Embeddable;
@Embeddable
public class Address {
diff --git a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/pessimisticlocking/Customer.java b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/pessimisticlocking/Customer.java
index cb73cbc958..9f36e3b308 100644
--- a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/pessimisticlocking/Customer.java
+++ b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/pessimisticlocking/Customer.java
@@ -1,6 +1,6 @@
package com.baeldung.hibernate.pessimisticlocking;
-import javax.persistence.*;
+import jakarta.persistence.*;
import java.util.List;
@Entity
diff --git a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/pessimisticlocking/Individual.java b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/pessimisticlocking/Individual.java
index e491c09eb5..b954c9fdb2 100644
--- a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/pessimisticlocking/Individual.java
+++ b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/pessimisticlocking/Individual.java
@@ -1,9 +1,9 @@
package com.baeldung.hibernate.pessimisticlocking;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.Inheritance;
-import javax.persistence.InheritanceType;
+import jakarta.persistence.Entity;
+import jakarta.persistence.Id;
+import jakarta.persistence.Inheritance;
+import jakarta.persistence.InheritanceType;
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
diff --git a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/pessimisticlocking/PessimisticLockingCourse.java b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/pessimisticlocking/PessimisticLockingCourse.java
index aea7d5fc87..012f3d1d39 100644
--- a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/pessimisticlocking/PessimisticLockingCourse.java
+++ b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/pessimisticlocking/PessimisticLockingCourse.java
@@ -1,6 +1,6 @@
package com.baeldung.hibernate.pessimisticlocking;
-import javax.persistence.*;
+import jakarta.persistence.*;
@Entity
public class PessimisticLockingCourse {
diff --git a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/pessimisticlocking/PessimisticLockingEmployee.java b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/pessimisticlocking/PessimisticLockingEmployee.java
index a1328cbdad..e5b00f3800 100644
--- a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/pessimisticlocking/PessimisticLockingEmployee.java
+++ b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/pessimisticlocking/PessimisticLockingEmployee.java
@@ -1,6 +1,6 @@
package com.baeldung.hibernate.pessimisticlocking;
-import javax.persistence.Entity;
+import jakarta.persistence.Entity;
import java.math.BigDecimal;
@Entity
diff --git a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/pessimisticlocking/PessimisticLockingStudent.java b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/pessimisticlocking/PessimisticLockingStudent.java
index e6c5f476b4..c5634ebc24 100644
--- a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/pessimisticlocking/PessimisticLockingStudent.java
+++ b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/pessimisticlocking/PessimisticLockingStudent.java
@@ -1,6 +1,6 @@
package com.baeldung.hibernate.pessimisticlocking;
-import javax.persistence.*;
+import jakarta.persistence.*;
import java.util.List;
@Entity
diff --git a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/pojo/Movie.java b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/pojo/Movie.java
index 5fae7f6a97..7aeadd4501 100644
--- a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/pojo/Movie.java
+++ b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/pojo/Movie.java
@@ -1,8 +1,8 @@
package com.baeldung.hibernate.pojo;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.Table;
+import jakarta.persistence.Entity;
+import jakarta.persistence.Id;
+import jakarta.persistence.Table;
@Entity
@Table(name = "MOVIE")
diff --git a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/pojo/Person.java b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/pojo/Person.java
index 390a5954ed..d0c8b8aa2f 100644
--- a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/pojo/Person.java
+++ b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/pojo/Person.java
@@ -1,9 +1,9 @@
package com.baeldung.hibernate.pojo;
-import javax.persistence.Convert;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
+import jakarta.persistence.Convert;
+import jakarta.persistence.Entity;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.Id;
import com.baeldung.hibernate.converters.PersonNameConverter;
diff --git a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/pojo/Post.java b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/pojo/Post.java
index 25e51e35d0..66a68367d7 100644
--- a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/pojo/Post.java
+++ b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/pojo/Post.java
@@ -1,9 +1,9 @@
package com.baeldung.hibernate.pojo;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.Table;
+import jakarta.persistence.Entity;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.Id;
+import jakarta.persistence.Table;
@Entity
@Table(name = "posts")
diff --git a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/pojo/Student.java b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/pojo/Student.java
index 9b26c117eb..263908a5fc 100644
--- a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/pojo/Student.java
+++ b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/pojo/Student.java
@@ -1,9 +1,9 @@
package com.baeldung.hibernate.pojo;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
+import jakarta.persistence.Entity;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.GenerationType;
+import jakarta.persistence.Id;
@Entity
public class Student {
diff --git a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/serializable/Account.java b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/serializable/Account.java
index b051809ee5..7070f21c45 100644
--- a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/serializable/Account.java
+++ b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/serializable/Account.java
@@ -1,9 +1,9 @@
package com.baeldung.hibernate.serializable;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.ManyToOne;
+import jakarta.persistence.Entity;
+import jakarta.persistence.Id;
+import jakarta.persistence.JoinColumn;
+import jakarta.persistence.ManyToOne;
@Entity
public class Account {
diff --git a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/serializable/Email.java b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/serializable/Email.java
index 11e7c6f159..4ba902281a 100644
--- a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/serializable/Email.java
+++ b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/serializable/Email.java
@@ -1,7 +1,7 @@
package com.baeldung.hibernate.serializable;
-import javax.persistence.Entity;
-import javax.persistence.Id;
+import jakarta.persistence.Entity;
+import jakarta.persistence.Id;
import java.io.Serializable;
@Entity
diff --git a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/serializable/User.java b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/serializable/User.java
index e7820fe52f..267155b4db 100644
--- a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/serializable/User.java
+++ b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/serializable/User.java
@@ -1,7 +1,7 @@
package com.baeldung.hibernate.serializable;
-import javax.persistence.EmbeddedId;
-import javax.persistence.Entity;
+import jakarta.persistence.EmbeddedId;
+import jakarta.persistence.Entity;
@Entity
public class User {
diff --git a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/serializable/UserId.java b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/serializable/UserId.java
index 7d3d382f67..6fcbeafdd0 100644
--- a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/serializable/UserId.java
+++ b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/serializable/UserId.java
@@ -1,6 +1,6 @@
package com.baeldung.hibernate.serializable;
-import javax.persistence.Embeddable;
+import jakarta.persistence.Embeddable;
import java.io.Serializable;
@Embeddable
diff --git a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/persistencecontext/entity/User.java b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/persistencecontext/entity/User.java
index 7252ac46f5..afdbf067c3 100644
--- a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/persistencecontext/entity/User.java
+++ b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/persistencecontext/entity/User.java
@@ -1,9 +1,9 @@
package com.baeldung.persistencecontext.entity;
-import javax.persistence.Entity;
-import javax.persistence.Id;
+import jakarta.persistence.Entity;
+import jakarta.persistence.Id;
-@Entity
+@Entity(name = "users")
public class User {
@Id
diff --git a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/persistencecontext/service/ExtendedPersistenceContextUserService.java b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/persistencecontext/service/ExtendedPersistenceContextUserService.java
index ef25aac69f..7ad6aae745 100644
--- a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/persistencecontext/service/ExtendedPersistenceContextUserService.java
+++ b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/persistencecontext/service/ExtendedPersistenceContextUserService.java
@@ -1,15 +1,15 @@
package com.baeldung.persistencecontext.service;
-import javax.persistence.EntityManager;
-import javax.persistence.PersistenceContext;
-import javax.persistence.PersistenceContextType;
-import javax.transaction.Transactional;
+import jakarta.persistence.EntityManager;
+import jakarta.persistence.PersistenceContext;
+import jakarta.persistence.PersistenceContextType;
+import jakarta.transaction.Transactional;
-import org.springframework.stereotype.Component;
+import org.springframework.stereotype.Service;
import com.baeldung.persistencecontext.entity.User;
-@Component
+@Service
public class ExtendedPersistenceContextUserService {
@PersistenceContext(type = PersistenceContextType.EXTENDED)
diff --git a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/persistencecontext/service/TransctionPersistenceContextUserService.java b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/persistencecontext/service/TransctionPersistenceContextUserService.java
index 481defcf08..6b9fd1f14c 100644
--- a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/persistencecontext/service/TransctionPersistenceContextUserService.java
+++ b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/persistencecontext/service/TransctionPersistenceContextUserService.java
@@ -1,20 +1,20 @@
package com.baeldung.persistencecontext.service;
-import javax.persistence.EntityManager;
-import javax.persistence.PersistenceContext;
-import javax.transaction.Transactional;
+import jakarta.persistence.EntityManager;
+import jakarta.persistence.PersistenceContext;
+import jakarta.transaction.Transactional;
-import org.springframework.stereotype.Component;
+import org.springframework.stereotype.Service;
import com.baeldung.persistencecontext.entity.User;
-@Component
+@Service
public class TransctionPersistenceContextUserService {
@PersistenceContext
private EntityManager entityManager;
-
+
@Transactional
public User insertWithTransaction(User user) {
entityManager.persist(user);
diff --git a/persistence-modules/hibernate-jpa/src/main/resources/META-INF/persistence.xml b/persistence-modules/hibernate-jpa/src/main/resources/META-INF/persistence.xml
index 12b41a4973..1669413289 100644
--- a/persistence-modules/hibernate-jpa/src/main/resources/META-INF/persistence.xml
+++ b/persistence-modules/hibernate-jpa/src/main/resources/META-INF/persistence.xml
@@ -8,12 +8,13 @@
com.baeldung.hibernate.pojo.Movie
true
-
+
-
-
-
-
+
+
+
+
+
@@ -34,10 +35,14 @@
-
-
-
-
+
+
+
+
+
+
+
+
@@ -57,16 +62,20 @@
-
-
-
-
-
+
+
+
+
+
-
-
-
-
+
+
+
+
+
+
+
+
@@ -87,16 +96,20 @@
-
-
-
-
-
+
+
+
+
+
-
-
-
-
+
+
+
+
+
+
+
+
@@ -113,10 +126,16 @@
-
-
-
-
+
+
+
+
+
+
+
+
+
+
diff --git a/persistence-modules/hibernate-jpa/src/test/java/com/baeldung/hibernate/entitymanager/getreference/GetReferenceH2IntegrationTest.java b/persistence-modules/hibernate-jpa/src/test/java/com/baeldung/hibernate/entitymanager/getreference/GetReferenceH2IntegrationTest.java
index e8e6aeed7c..02744c8ee5 100644
--- a/persistence-modules/hibernate-jpa/src/test/java/com/baeldung/hibernate/entitymanager/getreference/GetReferenceH2IntegrationTest.java
+++ b/persistence-modules/hibernate-jpa/src/test/java/com/baeldung/hibernate/entitymanager/getreference/GetReferenceH2IntegrationTest.java
@@ -5,9 +5,9 @@ import ch.qos.logback.classic.Logger;
import org.junit.jupiter.api.*;
import org.slf4j.LoggerFactory;
-import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
-import javax.persistence.Persistence;
+import jakarta.persistence.EntityManager;
+import jakarta.persistence.EntityManagerFactory;
+import jakarta.persistence.Persistence;
import java.io.ByteArrayOutputStream;
import java.io.OutputStream;
import java.io.PrintStream;
@@ -87,8 +87,8 @@ public class GetReferenceH2IntegrationTest {
});
StringBuilder expected = new StringBuilder();
- expected.append("Hibernate: select game0_.id as id1_0_0_, game0_.name as name2_0_0_ from Game game0_ where game0_.id=?\n");
- expected.append("Hibernate: update Game set name=? where id=?\n");
+ expected.append("Hibernate: select g1_0.id,g1_0.name from Game g1_0 where g1_0.id=?" + System.lineSeparator());
+ expected.append("Hibernate: update Game set name=? where id=?" + System.lineSeparator());
assertEquals(expected.toString(), output.toString());
}
@@ -104,8 +104,8 @@ public class GetReferenceH2IntegrationTest {
});
StringBuilder expected = new StringBuilder();
- expected.append("Hibernate: select game0_.id as id1_0_0_, game0_.name as name2_0_0_ from Game game0_ where game0_.id=?\n");
- expected.append("Hibernate: update Game set name=? where id=?\n");
+ expected.append("Hibernate: select g1_0.id,g1_0.name from Game g1_0 where g1_0.id=?" + System.lineSeparator());
+ expected.append("Hibernate: update Game set name=? where id=?" + System.lineSeparator());
assertEquals(expected.toString(), output.toString());
}
@@ -120,10 +120,9 @@ public class GetReferenceH2IntegrationTest {
StringBuilder expected = new StringBuilder();
expected.append("Hibernate: select ");
- expected.append("player0_.id as id1_1_0_, player0_.game_id as game_id3_1_0_, ");
- expected.append("player0_.name as name2_1_0_, game1_.id as id1_0_1_, game1_.name as name2_0_1_ ");
- expected.append("from Player player0_ left outer join Game game1_ on player0_.game_id=game1_.id where player0_.id=?\n");
- expected.append("Hibernate: delete from Player where id=?\n");
+ expected.append("p1_0.id,g1_0.id,g1_0.name,p1_0.name ");
+ expected.append("from Player p1_0 left join Game g1_0 on g1_0.id=p1_0.game_id where p1_0.id=?" + System.lineSeparator());
+ expected.append("Hibernate: delete from Player where id=?" + System.lineSeparator());
assertEquals(expected.toString(), output.toString());
}
@@ -138,10 +137,9 @@ public class GetReferenceH2IntegrationTest {
StringBuilder expected = new StringBuilder();
expected.append("Hibernate: select ");
- expected.append("player0_.id as id1_1_0_, player0_.game_id as game_id3_1_0_, ");
- expected.append("player0_.name as name2_1_0_, game1_.id as id1_0_1_, game1_.name as name2_0_1_ ");
- expected.append("from Player player0_ left outer join Game game1_ on player0_.game_id=game1_.id where player0_.id=?\n");
- expected.append("Hibernate: delete from Player where id=?\n");
+ expected.append("p1_0.id,g1_0.id,g1_0.name,p1_0.name ");
+ expected.append("from Player p1_0 left join Game g1_0 on g1_0.id=p1_0.game_id where p1_0.id=?" + System.lineSeparator());
+ expected.append("Hibernate: delete from Player where id=?" + System.lineSeparator());
assertEquals(expected.toString(), output.toString());
}
@@ -159,12 +157,11 @@ public class GetReferenceH2IntegrationTest {
}));
StringBuilder expected = new StringBuilder();
- expected.append("Hibernate: select game0_.id as id1_0_0_, game0_.name as name2_0_0_ from Game game0_ where game0_.id=?\n");
+ expected.append("Hibernate: select g1_0.id,g1_0.name from Game g1_0 where g1_0.id=?" + System.lineSeparator());
expected.append("Hibernate: select ");
- expected.append("player0_.id as id1_1_0_, player0_.game_id as game_id3_1_0_, ");
- expected.append("player0_.name as name2_1_0_, game1_.id as id1_0_1_, game1_.name as name2_0_1_ ");
- expected.append("from Player player0_ left outer join Game game1_ on player0_.game_id=game1_.id where player0_.id=?\n");
- expected.append("Hibernate: update Player set game_id=?, name=? where id=?\n");
+ expected.append("p1_0.id,g1_0.id,g1_0.name,p1_0.name ");
+ expected.append("from Player p1_0 left join Game g1_0 on g1_0.id=p1_0.game_id where p1_0.id=?" + System.lineSeparator());
+ expected.append("Hibernate: update Player set game_id=?, name=? where id=?" + System.lineSeparator());
assertEquals(expected.toString(), output.toString());
}
@@ -183,10 +180,9 @@ public class GetReferenceH2IntegrationTest {
StringBuilder expected = new StringBuilder();
expected.append("Hibernate: select ");
- expected.append("player0_.id as id1_1_0_, player0_.game_id as game_id3_1_0_, ");
- expected.append("player0_.name as name2_1_0_, game1_.id as id1_0_1_, game1_.name as name2_0_1_ ");
- expected.append("from Player player0_ left outer join Game game1_ on player0_.game_id=game1_.id where player0_.id=?\n");
- expected.append("Hibernate: update Player set game_id=?, name=? where id=?\n");
+ expected.append("p1_0.id,g1_0.id,g1_0.name,p1_0.name ");
+ expected.append("from Player p1_0 left join Game g1_0 on g1_0.id=p1_0.game_id where p1_0.id=?" + System.lineSeparator());
+ expected.append("Hibernate: update Player set game_id=?, name=? where id=?" + System.lineSeparator());
assertEquals(expected.toString(), output.toString());
}
diff --git a/persistence-modules/hibernate-jpa/src/test/java/com/baeldung/hibernate/entitymanager/getreference/GetReferenceMySQLManualTest.java b/persistence-modules/hibernate-jpa/src/test/java/com/baeldung/hibernate/entitymanager/getreference/GetReferenceMySQLManualTest.java
index 2b7c5e8119..29be19dd68 100644
--- a/persistence-modules/hibernate-jpa/src/test/java/com/baeldung/hibernate/entitymanager/getreference/GetReferenceMySQLManualTest.java
+++ b/persistence-modules/hibernate-jpa/src/test/java/com/baeldung/hibernate/entitymanager/getreference/GetReferenceMySQLManualTest.java
@@ -5,9 +5,9 @@ import ch.qos.logback.classic.Logger;
import org.junit.jupiter.api.*;
import org.slf4j.LoggerFactory;
-import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
-import javax.persistence.Persistence;
+import jakarta.persistence.EntityManager;
+import jakarta.persistence.EntityManagerFactory;
+import jakarta.persistence.Persistence;
import java.io.ByteArrayOutputStream;
import java.io.OutputStream;
import java.io.PrintStream;
diff --git a/persistence-modules/hibernate-jpa/src/test/java/com/baeldung/hibernate/entitymanager/getreference/GetReferencePostgreSQLManualTest.java b/persistence-modules/hibernate-jpa/src/test/java/com/baeldung/hibernate/entitymanager/getreference/GetReferencePostgreSQLManualTest.java
index 17f6b10b8a..20a0bca6f1 100644
--- a/persistence-modules/hibernate-jpa/src/test/java/com/baeldung/hibernate/entitymanager/getreference/GetReferencePostgreSQLManualTest.java
+++ b/persistence-modules/hibernate-jpa/src/test/java/com/baeldung/hibernate/entitymanager/getreference/GetReferencePostgreSQLManualTest.java
@@ -5,9 +5,9 @@ import ch.qos.logback.classic.Logger;
import org.junit.jupiter.api.*;
import org.slf4j.LoggerFactory;
-import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
-import javax.persistence.Persistence;
+import jakarta.persistence.EntityManager;
+import jakarta.persistence.EntityManagerFactory;
+import jakarta.persistence.Persistence;
import java.io.ByteArrayOutputStream;
import java.io.OutputStream;
import java.io.PrintStream;
diff --git a/persistence-modules/hibernate-jpa/src/test/java/com/baeldung/hibernate/jpacriteriabuilder/EmployeeSearchServiceIntegrationTest.java b/persistence-modules/hibernate-jpa/src/test/java/com/baeldung/hibernate/jpacriteriabuilder/EmployeeSearchServiceIntegrationTest.java
index 2b12734a10..d9bffcfc08 100644
--- a/persistence-modules/hibernate-jpa/src/test/java/com/baeldung/hibernate/jpacriteriabuilder/EmployeeSearchServiceIntegrationTest.java
+++ b/persistence-modules/hibernate-jpa/src/test/java/com/baeldung/hibernate/jpacriteriabuilder/EmployeeSearchServiceIntegrationTest.java
@@ -9,7 +9,7 @@ import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
-import javax.persistence.EntityManager;
+import jakarta.persistence.EntityManager;
import org.hibernate.HibernateException;
import org.hibernate.Session;
@@ -81,7 +81,7 @@ public class EmployeeSearchServiceIntegrationTest {
@Test
public final void givenCriteriaQuery_whenSearchedUsingCriteriaBuilderWithListofAuthors_thenResultIsFilteredByAuthorNames() {
- List titles = new ArrayList() {
+ List titles = new ArrayList<>() {
{
add("Manager");
add("Senior Manager");
diff --git a/persistence-modules/hibernate-jpa/src/test/java/com/baeldung/hibernate/optimisticlocking/OptimisticLockingIntegrationTest.java b/persistence-modules/hibernate-jpa/src/test/java/com/baeldung/hibernate/optimisticlocking/OptimisticLockingIntegrationTest.java
index 37c490f297..2fa302e270 100644
--- a/persistence-modules/hibernate-jpa/src/test/java/com/baeldung/hibernate/optimisticlocking/OptimisticLockingIntegrationTest.java
+++ b/persistence-modules/hibernate-jpa/src/test/java/com/baeldung/hibernate/optimisticlocking/OptimisticLockingIntegrationTest.java
@@ -3,9 +3,9 @@ package com.baeldung.hibernate.optimisticlocking;
import java.io.IOException;
import java.util.Arrays;
-import javax.persistence.EntityManager;
-import javax.persistence.LockModeType;
-import javax.persistence.OptimisticLockException;
+import jakarta.persistence.EntityManager;
+import jakarta.persistence.LockModeType;
+import jakarta.persistence.OptimisticLockException;
import org.hibernate.SessionFactory;
import org.junit.After;
diff --git a/persistence-modules/hibernate-jpa/src/test/java/com/baeldung/hibernate/pessimisticlocking/BasicPessimisticLockingIntegrationTest.java b/persistence-modules/hibernate-jpa/src/test/java/com/baeldung/hibernate/pessimisticlocking/BasicPessimisticLockingIntegrationTest.java
index 4b9c7720fd..4085a98dad 100644
--- a/persistence-modules/hibernate-jpa/src/test/java/com/baeldung/hibernate/pessimisticlocking/BasicPessimisticLockingIntegrationTest.java
+++ b/persistence-modules/hibernate-jpa/src/test/java/com/baeldung/hibernate/pessimisticlocking/BasicPessimisticLockingIntegrationTest.java
@@ -1,14 +1,14 @@
package com.baeldung.hibernate.pessimisticlocking;
import com.baeldung.hibernate.HibernateUtil;
-import com.vividsolutions.jts.util.Assert;
+import org.locationtech.jts.util.Assert;
import org.hibernate.SessionFactory;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
-import javax.persistence.*;
+import jakarta.persistence.*;
import java.io.IOException;
import java.util.Arrays;
@@ -46,7 +46,7 @@ public class BasicPessimisticLockingIntegrationTest {
}
@Test
- public void givenRecordWithPessimisticReadQuery_whenQueryingNewOne_PessimisticLockExceptionThrown() throws IOException {
+ public void givenRecordWithPessimisticReadQuery_whenQueryingNewOne_PessimisticLockExceptionThrown() {
try {
EntityManager entityManager = getEntityManagerWithOpenTransaction();
Query query = entityManager.createQuery("from Student where studentId = :studentId");
diff --git a/persistence-modules/hibernate-jpa/src/test/java/com/baeldung/hibernate/pessimisticlocking/PessimisticLockScopesIntegrationTest.java b/persistence-modules/hibernate-jpa/src/test/java/com/baeldung/hibernate/pessimisticlocking/PessimisticLockScopesIntegrationTest.java
index 81cb7d95f8..c2f2326159 100644
--- a/persistence-modules/hibernate-jpa/src/test/java/com/baeldung/hibernate/pessimisticlocking/PessimisticLockScopesIntegrationTest.java
+++ b/persistence-modules/hibernate-jpa/src/test/java/com/baeldung/hibernate/pessimisticlocking/PessimisticLockScopesIntegrationTest.java
@@ -6,9 +6,9 @@ import org.hibernate.SessionFactory;
import org.junit.AfterClass;
import org.junit.Test;
-import javax.persistence.EntityManager;
-import javax.persistence.LockModeType;
-import javax.persistence.PessimisticLockScope;
+import jakarta.persistence.EntityManager;
+import jakarta.persistence.LockModeType;
+import jakarta.persistence.PessimisticLockScope;
import java.io.IOException;
import java.math.BigDecimal;
import java.util.Arrays;
@@ -36,7 +36,7 @@ public class PessimisticLockScopesIntegrationTest {
// EXTENDED SCOPE
Map map = new HashMap<>();
- map.put("javax.persistence.lock.scope", PessimisticLockScope.EXTENDED);
+ map.put("jakarta.persistence", PessimisticLockScope.EXTENDED);
EntityManager em3 = getEntityManagerWithOpenTransaction();
foundEmployee = em3.find(PessimisticLockingEmployee.class, 1L, LockModeType.PESSIMISTIC_WRITE, map);
@@ -65,7 +65,7 @@ public class PessimisticLockScopesIntegrationTest {
// EXTENDED SCOPE
Map map = new HashMap<>();
- map.put("javax.persistence.lock.scope", PessimisticLockScope.EXTENDED);
+ map.put("jakarta.persistence", PessimisticLockScope.EXTENDED);
EntityManager em3 = getEntityManagerWithOpenTransaction();
foundCustomer = em3.find(Customer.class, 1L, LockModeType.PESSIMISTIC_WRITE, map);
@@ -96,7 +96,7 @@ public class PessimisticLockScopesIntegrationTest {
// EXTENDED SCOPE
Map map = new HashMap<>();
- map.put("javax.persistence.lock.scope", PessimisticLockScope.EXTENDED);
+ map.put("jakarta.persistence", PessimisticLockScope.EXTENDED);
EntityManager em3 = getEntityManagerWithOpenTransaction();
foundCourse = em3.find(PessimisticLockingCourse.class, 1L, LockModeType.PESSIMISTIC_WRITE, map);
diff --git a/persistence-modules/hibernate-jpa/src/test/java/com/baeldung/hibernate/serializable/JPASerializableIntegrationTest.java b/persistence-modules/hibernate-jpa/src/test/java/com/baeldung/hibernate/serializable/JPASerializableIntegrationTest.java
index 696bc23ab0..5512757889 100644
--- a/persistence-modules/hibernate-jpa/src/test/java/com/baeldung/hibernate/serializable/JPASerializableIntegrationTest.java
+++ b/persistence-modules/hibernate-jpa/src/test/java/com/baeldung/hibernate/serializable/JPASerializableIntegrationTest.java
@@ -4,10 +4,9 @@ import org.junit.After;
import org.junit.Before;
import org.junit.Test;
-import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
-import javax.persistence.Persistence;
-import java.io.IOException;
+import jakarta.persistence.EntityManager;
+import jakarta.persistence.EntityManagerFactory;
+import jakarta.persistence.Persistence;
import java.util.List;
import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -17,7 +16,7 @@ public class JPASerializableIntegrationTest {
private static EntityManager entityManager;
@Before
- public void setUp() throws IOException {
+ public void setUp() {
EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("com.baeldung.hibernate.serializable.h2_persistence_unit");
entityManager = entityManagerFactory.createEntityManager();
entityManager.getTransaction().begin();
@@ -63,7 +62,7 @@ public class JPASerializableIntegrationTest {
entityManager.persist(account);
entityManager.persist(account2);
- List userAccounts = entityManager.createQuery("select a from Account a join fetch a.user where a.user.email = :email")
+ List userAccounts = entityManager.createQuery("select a from Account a join fetch a.user where a.user.email = :email", Account.class)
.setParameter("email", email)
.getResultList();
assertEquals(2, userAccounts.size());
diff --git a/persistence-modules/hibernate-jpa/src/test/java/com/baeldung/hibernate/transaction/TransactionIntegrationTest.java b/persistence-modules/hibernate-jpa/src/test/java/com/baeldung/hibernate/transaction/TransactionIntegrationTest.java
index 246a7d59f9..f64846ba59 100644
--- a/persistence-modules/hibernate-jpa/src/test/java/com/baeldung/hibernate/transaction/TransactionIntegrationTest.java
+++ b/persistence-modules/hibernate-jpa/src/test/java/com/baeldung/hibernate/transaction/TransactionIntegrationTest.java
@@ -2,7 +2,6 @@ package com.baeldung.hibernate.transaction;
import com.baeldung.hibernate.HibernateUtil;
import com.baeldung.hibernate.pojo.Post;
-import com.baeldung.hibernate.transaction.PostService;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.junit.BeforeClass;
@@ -10,7 +9,6 @@ import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;
diff --git a/persistence-modules/hibernate-jpa/src/test/java/com/baeldung/persistencecontext/PersistenceContextIntegrationTest.java b/persistence-modules/hibernate-jpa/src/test/java/com/baeldung/persistencecontext/PersistenceContextIntegrationTest.java
index b299dd5834..37e6e438d8 100644
--- a/persistence-modules/hibernate-jpa/src/test/java/com/baeldung/persistencecontext/PersistenceContextIntegrationTest.java
+++ b/persistence-modules/hibernate-jpa/src/test/java/com/baeldung/persistencecontext/PersistenceContextIntegrationTest.java
@@ -4,8 +4,8 @@ import com.baeldung.persistencecontext.entity.User;
import com.baeldung.persistencecontext.service.ExtendedPersistenceContextUserService;
import com.baeldung.persistencecontext.service.TransctionPersistenceContextUserService;
-import javax.persistence.EntityExistsException;
-import javax.persistence.TransactionRequiredException;
+import jakarta.persistence.EntityExistsException;
+import jakarta.persistence.TransactionRequiredException;
import org.junit.Test;
import org.junit.runner.RunWith;
diff --git a/persistence-modules/hibernate-mapping-2/pom.xml b/persistence-modules/hibernate-mapping-2/pom.xml
index 2a787a0e46..a56f67b202 100644
--- a/persistence-modules/hibernate-mapping-2/pom.xml
+++ b/persistence-modules/hibernate-mapping-2/pom.xml
@@ -55,32 +55,16 @@
h2
${h2.version}
-
- com.sun.xml.bind
- jaxb-core
- ${com.sun.xml.version}
-
-
- javax.xml.bind
- jaxb-api
- ${javax.xml.bind.version}
-
-
- com.sun.xml.bind
- jaxb-impl
- ${com.sun.xml.version}
-
- 5.0.2.RELEASE
- 1.10.6.RELEASE
+ 6.0.6
+ 3.0.3
- 5.2.10.Final
+ 6.1.7.Final
9.0.0.M26
- 2.3.0.1
- 2.3.1
+ 4.0.2
2.1.214
diff --git a/persistence-modules/hibernate-mapping-2/src/main/java/com/baeldung/manytomany/model/Employee.java b/persistence-modules/hibernate-mapping-2/src/main/java/com/baeldung/manytomany/model/Employee.java
index 39671c21bc..cc745f9307 100644
--- a/persistence-modules/hibernate-mapping-2/src/main/java/com/baeldung/manytomany/model/Employee.java
+++ b/persistence-modules/hibernate-mapping-2/src/main/java/com/baeldung/manytomany/model/Employee.java
@@ -4,16 +4,16 @@ import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
-import javax.persistence.CascadeType;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.JoinTable;
-import javax.persistence.ManyToMany;
-import javax.persistence.Table;
+import jakarta.persistence.CascadeType;
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.GenerationType;
+import jakarta.persistence.Id;
+import jakarta.persistence.JoinColumn;
+import jakarta.persistence.JoinTable;
+import jakarta.persistence.ManyToMany;
+import jakarta.persistence.Table;
@Entity
@Table(name = "Employee")
diff --git a/persistence-modules/hibernate-mapping-2/src/main/java/com/baeldung/manytomany/model/Project.java b/persistence-modules/hibernate-mapping-2/src/main/java/com/baeldung/manytomany/model/Project.java
index b5dc3cb856..b0ca7f06cb 100644
--- a/persistence-modules/hibernate-mapping-2/src/main/java/com/baeldung/manytomany/model/Project.java
+++ b/persistence-modules/hibernate-mapping-2/src/main/java/com/baeldung/manytomany/model/Project.java
@@ -4,12 +4,12 @@ import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.ManyToMany;
-import javax.persistence.Table;
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.Id;
+import jakarta.persistence.ManyToMany;
+import jakarta.persistence.Table;
@Entity
@Table(name = "Project")
diff --git a/persistence-modules/hibernate-mapping/src/main/java/com/baeldung/hibernate/arraymapping/CustomIntegerArrayType.java b/persistence-modules/hibernate-mapping/src/main/java/com/baeldung/hibernate/arraymapping/CustomIntegerArrayType.java
index 233bb95dc1..1155a59a57 100644
--- a/persistence-modules/hibernate-mapping/src/main/java/com/baeldung/hibernate/arraymapping/CustomIntegerArrayType.java
+++ b/persistence-modules/hibernate-mapping/src/main/java/com/baeldung/hibernate/arraymapping/CustomIntegerArrayType.java
@@ -7,6 +7,7 @@ import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
import java.util.Arrays;
+import java.util.Objects;
import org.hibernate.HibernateException;
import org.hibernate.engine.spi.SharedSessionContractImplementor;
@@ -58,8 +59,8 @@ public class CustomIntegerArrayType implements UserType {
@Override
public Object deepCopy(Object value) throws HibernateException {
- Integer[] a = (Integer[])value;
- return Arrays.copyOf(a, a.length);
+ Integer[] arr = (Integer[]) value;
+ return arr != null ? Arrays.copyOf(arr, arr.length) : null;
}
@Override
diff --git a/persistence-modules/hibernate-mapping/src/main/java/com/baeldung/hibernate/arraymapping/CustomStringArrayType.java b/persistence-modules/hibernate-mapping/src/main/java/com/baeldung/hibernate/arraymapping/CustomStringArrayType.java
index 7bd284def7..ce50196513 100644
--- a/persistence-modules/hibernate-mapping/src/main/java/com/baeldung/hibernate/arraymapping/CustomStringArrayType.java
+++ b/persistence-modules/hibernate-mapping/src/main/java/com/baeldung/hibernate/arraymapping/CustomStringArrayType.java
@@ -7,6 +7,7 @@ import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
import java.util.Arrays;
+import java.util.Objects;
import org.hibernate.HibernateException;
import org.hibernate.engine.spi.SharedSessionContractImplementor;
@@ -58,8 +59,8 @@ public class CustomStringArrayType implements UserType {
@Override
public Object deepCopy(Object value) throws HibernateException {
- String[] a = (String[])value;
- return Arrays.copyOf(a, a.length);
+ String[] arr = (String[]) value;
+ return arr != null ? Arrays.copyOf(arr, arr.length) : null;
}
@Override
diff --git a/persistence-modules/pom.xml b/persistence-modules/pom.xml
index d7ff51b487..85cf251d18 100644
--- a/persistence-modules/pom.xml
+++ b/persistence-modules/pom.xml
@@ -21,61 +21,60 @@
blaze-persistence
core-java-persistence
core-java-persistence-2
- deltaspike
elasticsearch
flyway
flyway-repair
hbase
hibernate5
- hibernate-mapping
+
hibernate-mapping-2
- hibernate-ogm
- hibernate-annotations
+
hibernate-exceptions
hibernate-libraries
hibernate-jpa
- hibernate-queries
- hibernate-enterprise
+
+
influxdb
- java-cassandra
+
java-cockroachdb
java-jdbi
- java-jpa
- java-jpa-2
+
+
java-jpa-3
java-mongodb-2
java-mongodb-3
java-mongodb-queries
- jnosql
+
jooq
jpa-hibernate-cascade-type
liquibase
orientdb
persistence-libraries
- querydsl
- r2dbc
+
+
read-only-transactions
- redis
+
solr
- spring-boot-persistence-2
+
spring-boot-persistence-3
spring-boot-mysql
spring-boot-persistence
spring-boot-persistence-h2
- spring-boot-persistence-mongodb
+
spring-data-arangodb
spring-data-cassandra
spring-data-cassandra-test
- spring-data-cassandra-reactive
+
spring-data-cosmosdb
- spring-data-couchbase-2
+
spring-data-dynamodb
- spring-data-eclipselink
+
spring-data-elasticsearch
@@ -89,24 +88,24 @@
spring-data-jpa-query
spring-data-jpa-query-2
spring-data-jpa-query-3
- spring-data-jpa-repo
+
spring-data-jpa-repo-2
spring-data-jdbc
spring-data-keyvalue
- spring-data-mongodb
+
spring-data-mongodb-2
spring-data-mongodb-reactive
- spring-data-neo4j
+
spring-data-redis
spring-data-rest-2
spring-data-rest-querydsl
spring-data-solr
- spring-hibernate-3
- spring-hibernate-5
- spring-jpa
- spring-jpa-2
+
+
+
spring-jdbc
spring-jooq
spring-mybatis
@@ -115,8 +114,8 @@
- 5.2.17.Final
- 42.2.20
+ 6.1.7.Final
+ 42.5.4
2.3.4
1.16.3
diff --git a/persistence-modules/r2dbc/src/test/resources/application.yml b/persistence-modules/r2dbc/src/test/resources/application.yml
index 0903bed6fb..f99f02c9c1 100644
--- a/persistence-modules/r2dbc/src/test/resources/application.yml
+++ b/persistence-modules/r2dbc/src/test/resources/application.yml
@@ -1,6 +1,8 @@
# R2DBC Test configuration
r2dbc:
url: r2dbc:h2:mem://./testdb
+ user: local
+ password: local
server:
port: 8080
@@ -24,6 +26,7 @@ spring:
user: local
password: local
locations: classpath:db/h2/migration
-
+ main:
+ allow-bean-definition-overriding: true
diff --git a/persistence-modules/spring-data-jpa-annotations/README.md b/persistence-modules/spring-data-jpa-annotations/README.md
index 5a5440b1ed..d7e6189ae5 100644
--- a/persistence-modules/spring-data-jpa-annotations/README.md
+++ b/persistence-modules/spring-data-jpa-annotations/README.md
@@ -10,6 +10,7 @@ This module contains articles about annotations used in Spring Data JPA
- [Programmatic Transaction Management in Spring](https://www.baeldung.com/spring-programmatic-transaction-management)
- [JPA Entity Lifecycle Events](https://www.baeldung.com/jpa-entity-lifecycle-events)
- [Overriding Column Definition With @AttributeOverride](https://www.baeldung.com/jpa-attributeoverride)
+- [A Spring Custom Annotation for a Better DAO](http://www.baeldung.com/spring-annotation-bean-pre-processor)
### Eclipse Config
After importing the project into Eclipse, you may see the following error:
diff --git a/spring-core-3/src/main/java/com/baeldung/customannotation/CustomAnnotationConfiguration.java b/persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/customannotation/CustomAnnotationConfiguration.java
similarity index 100%
rename from spring-core-3/src/main/java/com/baeldung/customannotation/CustomAnnotationConfiguration.java
rename to persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/customannotation/CustomAnnotationConfiguration.java
diff --git a/spring-core-3/src/main/java/com/baeldung/customannotation/DataAccess.java b/persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/customannotation/DataAccess.java
similarity index 100%
rename from spring-core-3/src/main/java/com/baeldung/customannotation/DataAccess.java
rename to persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/customannotation/DataAccess.java
diff --git a/spring-core-3/src/main/java/com/baeldung/customannotation/DataAccessAnnotationProcessor.java b/persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/customannotation/DataAccessAnnotationProcessor.java
similarity index 100%
rename from spring-core-3/src/main/java/com/baeldung/customannotation/DataAccessAnnotationProcessor.java
rename to persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/customannotation/DataAccessAnnotationProcessor.java
diff --git a/spring-core-3/src/main/java/com/baeldung/customannotation/DataAccessFieldCallback.java b/persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/customannotation/DataAccessFieldCallback.java
similarity index 100%
rename from spring-core-3/src/main/java/com/baeldung/customannotation/DataAccessFieldCallback.java
rename to persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/customannotation/DataAccessFieldCallback.java
diff --git a/spring-core-3/src/main/java/com/baeldung/customannotation/GenericDAO.java b/persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/customannotation/GenericDAO.java
similarity index 100%
rename from spring-core-3/src/main/java/com/baeldung/customannotation/GenericDAO.java
rename to persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/customannotation/GenericDAO.java
diff --git a/spring-core-3/src/test/java/com/baeldung/customannotation/Account.java b/persistence-modules/spring-data-jpa-annotations/src/test/java/com/baeldung/customannotation/Account.java
similarity index 100%
rename from spring-core-3/src/test/java/com/baeldung/customannotation/Account.java
rename to persistence-modules/spring-data-jpa-annotations/src/test/java/com/baeldung/customannotation/Account.java
diff --git a/spring-core-3/src/test/java/com/baeldung/customannotation/BeanWithGenericDAO.java b/persistence-modules/spring-data-jpa-annotations/src/test/java/com/baeldung/customannotation/BeanWithGenericDAO.java
similarity index 100%
rename from spring-core-3/src/test/java/com/baeldung/customannotation/BeanWithGenericDAO.java
rename to persistence-modules/spring-data-jpa-annotations/src/test/java/com/baeldung/customannotation/BeanWithGenericDAO.java
diff --git a/spring-core-3/src/test/java/com/baeldung/customannotation/DataAccessAnnotationIntegrationTest.java b/persistence-modules/spring-data-jpa-annotations/src/test/java/com/baeldung/customannotation/DataAccessAnnotationIntegrationTest.java
similarity index 100%
rename from spring-core-3/src/test/java/com/baeldung/customannotation/DataAccessAnnotationIntegrationTest.java
rename to persistence-modules/spring-data-jpa-annotations/src/test/java/com/baeldung/customannotation/DataAccessAnnotationIntegrationTest.java
diff --git a/spring-core-3/src/test/java/com/baeldung/customannotation/DataAccessFieldCallbackIntegrationTest.java b/persistence-modules/spring-data-jpa-annotations/src/test/java/com/baeldung/customannotation/DataAccessFieldCallbackIntegrationTest.java
similarity index 100%
rename from spring-core-3/src/test/java/com/baeldung/customannotation/DataAccessFieldCallbackIntegrationTest.java
rename to persistence-modules/spring-data-jpa-annotations/src/test/java/com/baeldung/customannotation/DataAccessFieldCallbackIntegrationTest.java
diff --git a/spring-core-3/src/test/java/com/baeldung/customannotation/Person.java b/persistence-modules/spring-data-jpa-annotations/src/test/java/com/baeldung/customannotation/Person.java
similarity index 100%
rename from spring-core-3/src/test/java/com/baeldung/customannotation/Person.java
rename to persistence-modules/spring-data-jpa-annotations/src/test/java/com/baeldung/customannotation/Person.java
diff --git a/persistence-modules/spring-data-jpa-filtering/src/main/java/com/baeldung/entity/Customer.java b/persistence-modules/spring-data-jpa-filtering/src/main/java/com/baeldung/entity/Customer.java
index efcae73853..5af96d7822 100644
--- a/persistence-modules/spring-data-jpa-filtering/src/main/java/com/baeldung/entity/Customer.java
+++ b/persistence-modules/spring-data-jpa-filtering/src/main/java/com/baeldung/entity/Customer.java
@@ -1,8 +1,11 @@
package com.baeldung.entity;
+import org.hibernate.annotations.Type;
+
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
+import java.util.UUID;
@Entity
public class Customer {
@@ -13,11 +16,20 @@ public class Customer {
private String name;
private String email;
+ @Type(type = "org.hibernate.type.UUIDCharType")
+ private UUID uuid;
+
public Customer(String name, String email) {
this.name = name;
this.email = email;
}
+ public Customer(String name, String email, UUID uuid) {
+ this.name = name;
+ this.email = email;
+ this.uuid = uuid;
+ }
+
public String getName() {
return name;
}
@@ -34,4 +46,7 @@ public class Customer {
this.email = email;
}
+ public UUID getUuid() {
+ return this.uuid;
+ }
}
diff --git a/persistence-modules/spring-data-jpa-filtering/src/main/java/com/baeldung/repository/CustomerRepository.java b/persistence-modules/spring-data-jpa-filtering/src/main/java/com/baeldung/repository/CustomerRepository.java
index 65b22bbd84..5f9710b839 100644
--- a/persistence-modules/spring-data-jpa-filtering/src/main/java/com/baeldung/repository/CustomerRepository.java
+++ b/persistence-modules/spring-data-jpa-filtering/src/main/java/com/baeldung/repository/CustomerRepository.java
@@ -6,6 +6,7 @@ import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import java.util.List;
+import java.util.UUID;
public interface CustomerRepository extends JpaRepository {
@@ -16,4 +17,5 @@ public interface CustomerRepository extends JpaRepository {
@Query("SELECT c FROM Customer c WHERE (:name is null or c.name = :name) and (:email is null or c.email = :email)")
List findCustomerByNameAndEmail(@Param("name") String name, @Param("email") String email);
+ List findCustomerByUuid(@Param("uuid") UUID uuid);
}
diff --git a/persistence-modules/spring-data-jpa-filtering/src/test/java/com/baeldung/repository/CustomerRepositoryIntegrationTest.java b/persistence-modules/spring-data-jpa-filtering/src/test/java/com/baeldung/repository/CustomerRepositoryIntegrationTest.java
index 5d6457ce30..27208507f1 100644
--- a/persistence-modules/spring-data-jpa-filtering/src/test/java/com/baeldung/repository/CustomerRepositoryIntegrationTest.java
+++ b/persistence-modules/spring-data-jpa-filtering/src/test/java/com/baeldung/repository/CustomerRepositoryIntegrationTest.java
@@ -12,6 +12,7 @@ import org.springframework.test.context.junit4.SpringRunner;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import java.util.List;
+import java.util.UUID;
import static org.junit.Assert.assertEquals;
@@ -30,6 +31,7 @@ public class CustomerRepositoryIntegrationTest {
entityManager.persist(new Customer("A", "A@example.com"));
entityManager.persist(new Customer("D", null));
entityManager.persist(new Customer("D", "D@example.com"));
+ entityManager.persist(new Customer("C", null, UUID.fromString("c7c19ff4-8636-4b99-9591-c3327652f191")));
}
@Test
@@ -57,6 +59,20 @@ public class CustomerRepositoryIntegrationTest {
assertEquals(2, customers.size());
}
+ @Test
+ public void givenUUIDIsPresent_whenQueryMethod_thenFetchedCorrectly() {
+ List customers = repository.findCustomerByUuid(UUID.fromString("c7c19ff4-8636-4b99-9591-c3327652f191"));
+
+ assertEquals(1, customers.size());
+ }
+
+ @Test
+ public void givenNullUuid_whenQueryMethod_thenFetchedCorrectly() {
+ List customers = repository.findCustomerByUuid(null);
+
+ assertEquals(3, customers.size());
+ }
+
@After
public void cleanUp() {
repository.deleteAll();
diff --git a/persistence-modules/spring-data-jpa-repo-2/README.md b/persistence-modules/spring-data-jpa-repo-2/README.md
index 23134ec02d..dc94ba41d0 100644
--- a/persistence-modules/spring-data-jpa-repo-2/README.md
+++ b/persistence-modules/spring-data-jpa-repo-2/README.md
@@ -9,4 +9,5 @@
- [Difference Between JPA and Spring Data JPA](https://www.baeldung.com/spring-data-jpa-vs-jpa)
- [Differences Between Spring Data JPA findFirst() and findTop()](https://www.baeldung.com/spring-data-jpa-findfirst-vs-findtop)
- [Difference Between findBy and findAllBy in Spring Data JPA](https://www.baeldung.com/spring-data-jpa-find-by-vs-find-all-by)
+- [Unidirectional One-to-Many and Cascading Delete in JPA](https://www.baeldung.com/spring-jpa-unidirectional-one-to-many-and-cascading-delete)
- More articles: [[<-- prev]](../spring-data-jpa-repo)
diff --git a/persistence-modules/spring-jpa-2/README.md b/persistence-modules/spring-jpa-2/README.md
index f9f259cdfa..c1068b6a39 100644
--- a/persistence-modules/spring-jpa-2/README.md
+++ b/persistence-modules/spring-jpa-2/README.md
@@ -7,4 +7,5 @@
- [The DAO with Spring and Hibernate](https://www.baeldung.com/persistence-layer-with-spring-and-hibernate)
- [Simplify the DAO with Spring and Java Generics](https://www.baeldung.com/simplifying-the-data-access-layer-with-spring-and-java-generics)
- [Multitenancy With Spring Data JPA](https://www.baeldung.com/multitenancy-with-spring-data-jpa)
+- [Remove Entity with Many-to-Many Relationship in JPA](https://www.baeldung.com/jpa-remove-entity-many-to-many)
- More articles: [[<-- prev]](/spring-jpa)
diff --git a/persistence-modules/spring-jpa-2/pom.xml b/persistence-modules/spring-jpa-2/pom.xml
index 19bc9cba14..974dd41df9 100644
--- a/persistence-modules/spring-jpa-2/pom.xml
+++ b/persistence-modules/spring-jpa-2/pom.xml
@@ -101,7 +101,7 @@
- 5.1.5.RELEASE
+ 5.2.0.RELEASE
2.2.6.RELEASE
9.0.0.M26
diff --git a/persistence-modules/spring-jpa-2/src/main/java/com/baeldung/manytomanyremoval/Application.java b/persistence-modules/spring-jpa-2/src/main/java/com/baeldung/manytomanyremoval/Application.java
new file mode 100644
index 0000000000..7b8551ee0c
--- /dev/null
+++ b/persistence-modules/spring-jpa-2/src/main/java/com/baeldung/manytomanyremoval/Application.java
@@ -0,0 +1,12 @@
+package com.baeldung.manytomanyremoval;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class Application {
+
+ public static void main(String[] args) {
+ SpringApplication.run(Application.class, args);
+ }
+}
diff --git a/persistence-modules/spring-jpa-2/src/main/java/com/baeldung/manytomanyremoval/Author.java b/persistence-modules/spring-jpa-2/src/main/java/com/baeldung/manytomanyremoval/Author.java
new file mode 100644
index 0000000000..d9906a21cd
--- /dev/null
+++ b/persistence-modules/spring-jpa-2/src/main/java/com/baeldung/manytomanyremoval/Author.java
@@ -0,0 +1,62 @@
+package com.baeldung.manytomanyremoval;
+
+import javax.persistence.*;
+import java.util.HashSet;
+import java.util.Set;
+
+@Entity
+@Table(name = "author")
+public class Author {
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ @Column(name = "id")
+ private Long id;
+
+ @Column(name = "name")
+ private String name;
+
+ @ManyToMany(mappedBy = "authors")
+ private Set books = new HashSet<>();
+
+ // standard getters and setters
+
+ public Author() {
+ }
+
+ public Author(String name) {
+ this.name = name;
+ }
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public Set getBooks() {
+ return books;
+ }
+
+ public void setBooks(Set books) {
+ this.books = books;
+ }
+
+ @PreRemove
+ private void removeBookAssociations() {
+ for (Book book : this.books) {
+ book.getAuthors().remove(this);
+ }
+ }
+
+}
diff --git a/persistence-modules/spring-jpa-2/src/main/java/com/baeldung/manytomanyremoval/Book.java b/persistence-modules/spring-jpa-2/src/main/java/com/baeldung/manytomanyremoval/Book.java
new file mode 100644
index 0000000000..4b49acd000
--- /dev/null
+++ b/persistence-modules/spring-jpa-2/src/main/java/com/baeldung/manytomanyremoval/Book.java
@@ -0,0 +1,65 @@
+package com.baeldung.manytomanyremoval;
+
+
+import javax.persistence.*;
+import java.util.HashSet;
+import java.util.Set;
+
+@Entity
+@Table(name = "book")
+public class Book {
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ @Column(name = "id")
+ private Long id;
+
+ @Column(name = "title")
+ private String title;
+
+ @ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
+ @JoinTable(name = "book_author",
+ joinColumns = @JoinColumn(name = "book_id"),
+ inverseJoinColumns = @JoinColumn(name = "author_id")
+ )
+ private Set authors = new HashSet<>();
+
+ // standard getters and setters
+
+ public Book() {
+ }
+
+ public Book(String title) {
+ this.title = title;
+ }
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public String getTitle() {
+ return title;
+ }
+
+ public void setTitle(String title) {
+ this.title = title;
+ }
+
+ public Set getAuthors() {
+ return authors;
+ }
+
+ public void removeAuthor(Author author) {
+ this.authors.remove(author);
+ author.getBooks().remove(this);
+ }
+
+ public void addAuthor(Author author) {
+ authors.add(author);
+ author.getBooks().add(this);
+ }
+
+}
diff --git a/persistence-modules/spring-jpa-2/src/main/java/com/baeldung/manytomanyremoval/Category.java b/persistence-modules/spring-jpa-2/src/main/java/com/baeldung/manytomanyremoval/Category.java
new file mode 100644
index 0000000000..f7202f544c
--- /dev/null
+++ b/persistence-modules/spring-jpa-2/src/main/java/com/baeldung/manytomanyremoval/Category.java
@@ -0,0 +1,41 @@
+package com.baeldung.manytomanyremoval;
+
+import javax.persistence.*;
+
+@Entity
+@Table(name = "category")
+public class Category {
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ @Column(name = "id")
+ private Long id;
+
+ @Column(name = "name")
+ private String name;
+
+ // getters and setters
+
+ public Category() {
+ }
+
+ public Category(String name) {
+ this.name = name;
+ }
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+}
diff --git a/persistence-modules/spring-jpa-2/src/main/java/com/baeldung/manytomanyremoval/Post.java b/persistence-modules/spring-jpa-2/src/main/java/com/baeldung/manytomanyremoval/Post.java
new file mode 100644
index 0000000000..d229a9d0d7
--- /dev/null
+++ b/persistence-modules/spring-jpa-2/src/main/java/com/baeldung/manytomanyremoval/Post.java
@@ -0,0 +1,59 @@
+package com.baeldung.manytomanyremoval;
+
+
+import javax.persistence.*;
+import java.util.HashSet;
+import java.util.Set;
+
+@Entity
+@Table(name = "post")
+public class Post {
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ @Column(name = "id")
+ private Long id;
+
+ @Column(name = "title")
+ private String title;
+
+ @ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH})
+ @JoinTable(name = "post_category",
+ joinColumns = @JoinColumn(name = "post_id"),
+ inverseJoinColumns = @JoinColumn(name = "category_id")
+ )
+ private Set categories = new HashSet<>();
+
+ // getters and setters
+
+ public Post(String title) {
+ this.title = title;
+ }
+
+ public Post() {
+ }
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public String getTitle() {
+ return title;
+ }
+
+ public void setTitle(String title) {
+ this.title = title;
+ }
+
+ public Set getCategories() {
+ return categories;
+ }
+
+ public void setCategories(Set categories) {
+ this.categories = categories;
+ }
+}
diff --git a/persistence-modules/spring-jpa-2/src/test/java/com/baeldung/manytomanyremoval/BidirectionalRemovalUnitTest.java b/persistence-modules/spring-jpa-2/src/test/java/com/baeldung/manytomanyremoval/BidirectionalRemovalUnitTest.java
new file mode 100644
index 0000000000..f214fcdc2a
--- /dev/null
+++ b/persistence-modules/spring-jpa-2/src/test/java/com/baeldung/manytomanyremoval/BidirectionalRemovalUnitTest.java
@@ -0,0 +1,78 @@
+package com.baeldung.manytomanyremoval;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.annotation.DirtiesContext;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit.jupiter.SpringExtension;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.persistence.EntityManager;
+
+@ExtendWith(SpringExtension.class)
+@ContextConfiguration(classes = TestContextConfig.class)
+@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD)
+@Transactional
+class BidirectionalRemovalUnitTest {
+
+ @Autowired
+ private EntityManager entityManager;
+
+ @BeforeEach
+ void init() {
+ Author author1 = new Author("Erich Gamma");
+ Author author2 = new Author("John Vlissides");
+ Author author3 = new Author("Ralph Johnson");
+ Author author4 = new Author("Richard Helm");
+
+ Book book = new Book();
+ book.setTitle("GOF Java");
+ book.addAuthor(author1);
+ book.addAuthor(author2);
+ book.addAuthor(author3);
+ book.addAuthor(author4);
+ entityManager.persist(book);
+
+ Book book2 = new Book();
+ book2.setTitle("A Lost Age");
+ book2.addAuthor(author3);
+ entityManager.persist(book2);
+ }
+
+ @Test
+ void givenEntities_whenRemoveFromOwner_thenRemoveAssociation() {
+ Author author = (Author) entityManager
+ .createQuery("SELECT author from Author author where author.name = ?1")
+ .setParameter(1, "Ralph Johnson")
+ .getSingleResult();
+
+ Book book1 = entityManager.find(Book.class, 1L);
+ Book book2 = entityManager.find(Book.class, 2L);
+
+ book1.removeAuthor(author);
+ entityManager.persist(book1);
+
+ Assertions.assertEquals(3, book1.getAuthors().size());
+ Assertions.assertEquals(1, book2.getAuthors().size());
+ }
+
+ @Transactional
+ @Test
+ void givenEntities_whenRemoveFromNotOwner_thenRemoveAssociation() {
+ Author author = (Author) entityManager
+ .createQuery("SELECT author from Author author where author.name = ?1")
+ .setParameter(1, "Ralph Johnson")
+ .getSingleResult();
+ Book book1 = entityManager.find(Book.class, 1L);
+ Book book2 = entityManager.find(Book.class, 2L);
+
+ entityManager.remove(author);
+
+ Assertions.assertEquals(3, book1.getAuthors().size());
+ Assertions.assertEquals(0, book2.getAuthors().size());
+ }
+}
+
diff --git a/persistence-modules/spring-jpa-2/src/test/java/com/baeldung/manytomanyremoval/TestContextConfig.java b/persistence-modules/spring-jpa-2/src/test/java/com/baeldung/manytomanyremoval/TestContextConfig.java
new file mode 100644
index 0000000000..6a840824de
--- /dev/null
+++ b/persistence-modules/spring-jpa-2/src/test/java/com/baeldung/manytomanyremoval/TestContextConfig.java
@@ -0,0 +1,12 @@
+package com.baeldung.manytomanyremoval;
+
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.PropertySource;
+
+@Configuration
+@PropertySource("classpath:/manytomanyremoval/test.properties")
+@ComponentScan("com.baeldung.manytomanyremoval")
+public class TestContextConfig {
+
+}
diff --git a/persistence-modules/spring-jpa-2/src/test/java/com/baeldung/manytomanyremoval/UnidirectionalRemovalUnitTest.java b/persistence-modules/spring-jpa-2/src/test/java/com/baeldung/manytomanyremoval/UnidirectionalRemovalUnitTest.java
new file mode 100644
index 0000000000..b23b589fb7
--- /dev/null
+++ b/persistence-modules/spring-jpa-2/src/test/java/com/baeldung/manytomanyremoval/UnidirectionalRemovalUnitTest.java
@@ -0,0 +1,55 @@
+package com.baeldung.manytomanyremoval;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.annotation.DirtiesContext;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit.jupiter.SpringExtension;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.persistence.EntityManager;
+
+@ExtendWith(SpringExtension.class)
+@ContextConfiguration(classes = TestContextConfig.class)
+@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD)
+@Transactional
+class UnidirectionalRemovalUnitTest {
+
+ @Autowired
+ private EntityManager entityManager;
+
+ @BeforeEach
+ void init() {
+ Category category1 = new Category("JPA");
+ Category category2 = new Category("Persistence");
+
+ Post post1 = new Post("Many-to-Many Relationship");
+ post1.getCategories().add(category1);
+ post1.getCategories().add(category2);
+
+ Post post2 = new Post("Entity Manager");
+ post2.getCategories().add(category1);
+
+ entityManager.persist(post1);
+ entityManager.persist(post2);
+
+ Assertions.assertEquals(2, post1.getCategories().size());
+ Assertions.assertEquals(1, post2.getCategories().size());
+ }
+
+ @Test
+ void givenEntities_whenRemove_thenRemoveAssociation() {
+ Post post1 = entityManager.find(Post.class, 1L);
+ Post post2 = entityManager.find(Post.class, 2L);
+ Category category = entityManager.find(Category.class, 1L);
+
+ post1.getCategories().remove(category);
+
+ Assertions.assertEquals(1, post1.getCategories().size());
+ Assertions.assertEquals(1, post2.getCategories().size());
+ }
+
+}
diff --git a/persistence-modules/spring-jpa-2/src/test/resources/manytomanyremoval/test.properties b/persistence-modules/spring-jpa-2/src/test/resources/manytomanyremoval/test.properties
new file mode 100644
index 0000000000..83479cd453
--- /dev/null
+++ b/persistence-modules/spring-jpa-2/src/test/resources/manytomanyremoval/test.properties
@@ -0,0 +1,11 @@
+spring.datasource.url=jdbc:h2:mem:mydb;MODE=LEGACY;
+spring.datasource.driverClassName=org.h2.Driver
+spring.datasource.username=sa
+spring.datasource.password=
+
+hibernate.dialect=org.hibernate.dialect.H2Dialect
+hibernate.hbm2ddl.auto=none
+spring.jpa.show-sql=true
+spring.jpa.hibernate.dialect=org.hibernate.dialect.H2Dialect
+spring.jpa.hibernate.ddl-auto=create-drop
+
diff --git a/pom.xml b/pom.xml
index 31495958e7..ca50f630ae 100644
--- a/pom.xml
+++ b/pom.xml
@@ -332,7 +332,21 @@
checker-plugin
- core-java-modules
+
+ core-java-modules/core-java
+ core-java-modules/core-java-8
+ core-java-modules/core-java-8-2
+ core-java-modules/core-java-8-datetime
+ core-java-modules/core-java-8-datetime-2
+ core-java-modules/core-java-sun
+ core-java-modules/core-java-security
+ core-java-modules/core-java-nio-2
+ core-java-modules/core-java-serialization
+ core-java-modules/core-java-lang
+ core-java-modules/core-java-lang-math-3
+ core-java-modules/core-java-collections-conversions-2
+ core-java-modules/core-java-streams-2
+
couchbase
@@ -344,19 +358,17 @@
jetbrains
jhipster-5
- jmh
language-interop
libraries-3
- libraries-data-db
+ libraries-jdk8
lombok-modules
muleesb
- osgi
- persistence-modules
web-modules
+ persistence-modules/deltaspike
@@ -412,8 +424,6 @@
spring-integration
spring-jenkins-pipeline
- spring-remoting-modules
-
spring-security-modules
@@ -481,12 +491,7 @@
jhipster-5
jws
- libraries
- libraries-4
- libraries-5
libraries-6
-
- vaadin
@@ -525,7 +530,20 @@
checker-plugin
- core-java-modules
+ core-java-modules/core-java
+ core-java-modules/core-java-8
+ core-java-modules/core-java-8-2
+ core-java-modules/core-java-8-datetime
+ core-java-modules/core-java-8-datetime-2
+ core-java-modules/core-java-sun
+ core-java-modules/core-java-security
+ core-java-modules/core-java-nio-2
+ core-java-modules/core-java-serialization
+ core-java-modules/core-java-lang
+ core-java-modules/core-java-lang-math-3
+ core-java-modules/core-java-collections-conversions-2
+ core-java-modules/core-java-streams-2
+
couchbase
@@ -536,18 +554,16 @@
java-jdi
jhipster-5
- jmh
language-interop
libraries-3
- libraries-data-db
+ libraries-jdk8
lombok-modules
muleesb
- osgi
- persistence-modules
web-modules
+ persistence-modules/deltaspike
@@ -594,8 +610,6 @@
spring-integration
spring-jenkins-pipeline
- spring-remoting-modules
-
spring-security-modules
@@ -655,12 +669,7 @@
jhipster-5
jws
- libraries
- libraries-4
- libraries-5
libraries-6
-
- vaadin
@@ -726,6 +735,7 @@
+ osgi
spring-katharsis
logging-modules
spring-boot-modules
@@ -749,6 +759,7 @@
javafx
spring-batch
+ spring-batch-2
spring-boot-rest
spring-drools
spring-exceptions
@@ -756,7 +767,9 @@
spring-core
spring-core-4
spring-integration
+ spring-remoting-modules
libraries-security
+ libraries-data-db
performance-tests
security-modules
@@ -769,7 +782,6 @@
server-modules
apache-cxf-modules
-
spring-aop
jmeter
spring-aop-2
@@ -785,15 +797,8 @@
couchbase
core-groovy-modules
- core-java-modules/core-java-9
- core-java-modules/core-java-9-improvements
- core-java-modules/core-java-9-jigsaw
+ core-java-modules
- core-java-modules/core-java-9-streams
- core-java-modules/core-java-10
- core-java-modules/core-java-11
- core-java-modules/core-java-11-2
- core-java-modules/core-java-11-3
@@ -801,32 +806,12 @@
- core-java-modules/core-java-collections-set
- core-java-modules/core-java-collections-list-4
- core-java-modules/core-java-collections-array-list
- core-java-modules/core-java-collections-maps-4
- core-java-modules/core-java-collections-maps-5
- core-java-modules/core-java-concurrency-simple
- core-java-modules/core-java-date-operations-1
- core-java-modules/core-java-datetime-conversion
- core-java-modules/core-java-datetime-string
- core-java-modules/core-java-io-conversions-2
- core-java-modules/core-java-jpms
- core-java-modules/core-java-os
- core-java-modules/core-java-streams-4
- core-java-modules/core-java-string-algorithms-3
- core-java-modules/core-java-string-operations-3
- core-java-modules/core-java-string-operations-4
- core-java-modules/core-java-string-operations-5
- core-java-modules/core-java-time-measurements
- core-java-modules/core-java-networking-3
- core-java-modules/core-java-strings
- core-java-modules/core-java-httpclient
custom-pmd
spring-core-6
data-structures
ddd-contexts
jackson-modules
+ jmh
deeplearning4j
docker-modules
drools
@@ -836,9 +821,7 @@
libraries-testing
maven-modules
optaplanner
- persistence-modules/sirix
- persistence-modules/spring-data-cassandra-2
- persistence-modules/spring-data-jpa-repo-3
+ persistence-modules
quarkus-modules
spring-reactive-modules
spring-swagger-codegen/custom-validations-opeanpi-codegen
@@ -905,8 +888,12 @@
jsoup
ksqldb
jsf
+
+ libraries
libraries-2
- libraries-7
+ libraries-4
+ libraries-5
+
libraries-apache-commons
libraries-apache-commons-collections
libraries-apache-commons-io
@@ -939,7 +926,6 @@
spring-5-webflux
spring-5-webflux-2
spring-activiti
- spring-batch-2
spring-core-2
spring-core-3
spring-core-5
@@ -961,10 +947,11 @@
xstream
webrtc
persistence-modules/java-mongodb
-
+
messaging-modules
persistence-modules/questdb
+ vaadin
@@ -998,6 +985,7 @@
+ osgi
spring-katharsis
logging-modules
spring-boot-modules
@@ -1021,6 +1009,7 @@
javafx
spring-batch
+ spring-batch-2
spring-boot-rest
spring-drools
spring-exceptions
@@ -1028,7 +1017,9 @@
spring-core
spring-core-4
spring-integration
+ spring-remoting-modules
libraries-security
+ libraries-data-db
performance-tests
security-modules
@@ -1052,15 +1043,9 @@
couchbase
core-groovy-modules
- core-java-modules/core-java-9
- core-java-modules/core-java-9-improvements
- core-java-modules/core-java-9-jigsaw
+
+ core-java-modules
- core-java-modules/core-java-9-streams
- core-java-modules/core-java-10
- core-java-modules/core-java-11
- core-java-modules/core-java-11-2
- core-java-modules/core-java-11-3
@@ -1068,27 +1053,6 @@
- core-java-modules/core-java-collections-set
- core-java-modules/core-java-collections-list-4
- core-java-modules/core-java-collections-array-list
- core-java-modules/core-java-collections-maps-4
- core-java-modules/core-java-collections-maps-5
- core-java-modules/core-java-concurrency-simple
- core-java-modules/core-java-date-operations-1
- core-java-modules/core-java-datetime-conversion
- core-java-modules/core-java-datetime-string
- core-java-modules/core-java-io-conversions-2
- core-java-modules/core-java-jpms
- core-java-modules/core-java-os
- core-java-modules/core-java-streams-4
- core-java-modules/core-java-string-algorithms-3
- core-java-modules/core-java-string-operations-3
- core-java-modules/core-java-string-operations-4
- core-java-modules/core-java-string-operations-5
- core-java-modules/core-java-time-measurements
- core-java-modules/core-java-networking-3
- core-java-modules/core-java-strings
- core-java-modules/core-java-httpclient
spring-aop
spring-aop-2
custom-pmd
@@ -1096,6 +1060,7 @@
data-structures
ddd-contexts
jackson-modules
+ jmh
deeplearning4j
jmeter
docker-modules
@@ -1106,9 +1071,7 @@
libraries-testing
maven-modules
optaplanner
- persistence-modules/sirix
- persistence-modules/spring-data-cassandra-2
- persistence-modules/spring-data-jpa-repo-3
+ persistence-modules
quarkus-modules
spring-reactive-modules
spring-swagger-codegen/custom-validations-opeanpi-codegen
@@ -1177,7 +1140,9 @@
jsf
ksqldb
- libraries-7
+ libraries
+ libraries-4
+ libraries-5
libraries-apache-commons
libraries-apache-commons-collections
libraries-apache-commons-io
@@ -1211,7 +1176,6 @@
spring-5-webflux
spring-5-webflux-2
spring-activiti
- spring-batch-2
spring-core-2
spring-core-3
spring-core-5
@@ -1232,10 +1196,11 @@
xstream
webrtc
persistence-modules/java-mongodb
- libraries-2
+ libraries-2
messaging-modules
persistence-modules/questdb
+ vaadin
@@ -1288,6 +1253,7 @@
1.12.13
+
1.7.32
1.2.7
diff --git a/spring-batch-2/pom.xml b/spring-batch-2/pom.xml
index 12d31aca14..378191c91c 100644
--- a/spring-batch-2/pom.xml
+++ b/spring-batch-2/pom.xml
@@ -11,9 +11,9 @@
com.baeldung
- parent-boot-2
+ parent-boot-3
0.0.1-SNAPSHOT
- ../parent-boot-2
+ ../parent-boot-3
@@ -51,8 +51,9 @@
- 4.3.0
- 3.1.1
+ 5.0.0
+ 4.2.0
+ com.baeldung.batch.SpringBootBatchProcessingApplication
\ No newline at end of file
diff --git a/spring-batch-2/src/main/java/com/baeldung/batch/BatchConfiguration.java b/spring-batch-2/src/main/java/com/baeldung/batch/BatchConfiguration.java
index 0c053dd86c..770b6330dd 100644
--- a/spring-batch-2/src/main/java/com/baeldung/batch/BatchConfiguration.java
+++ b/spring-batch-2/src/main/java/com/baeldung/batch/BatchConfiguration.java
@@ -4,31 +4,24 @@ import javax.sql.DataSource;
import org.springframework.batch.core.Job;
import org.springframework.batch.core.Step;
-import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing;
-import org.springframework.batch.core.configuration.annotation.JobBuilderFactory;
-import org.springframework.batch.core.configuration.annotation.StepBuilderFactory;
+import org.springframework.batch.core.job.builder.JobBuilder;
import org.springframework.batch.core.launch.support.RunIdIncrementer;
+import org.springframework.batch.core.repository.JobRepository;
+import org.springframework.batch.core.step.builder.StepBuilder;
import org.springframework.batch.item.database.BeanPropertyItemSqlParameterSourceProvider;
import org.springframework.batch.item.database.JdbcBatchItemWriter;
import org.springframework.batch.item.database.builder.JdbcBatchItemWriterBuilder;
import org.springframework.batch.item.file.FlatFileItemReader;
import org.springframework.batch.item.file.builder.FlatFileItemReaderBuilder;
import org.springframework.batch.item.file.mapping.BeanWrapperFieldSetMapper;
-import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;
+import org.springframework.transaction.PlatformTransactionManager;
@Configuration
-@EnableBatchProcessing
public class BatchConfiguration {
-
- @Autowired
- public JobBuilderFactory jobBuilderFactory;
-
- @Autowired
- public StepBuilderFactory stepBuilderFactory;
@Value("${file.input}")
private String fileInput;
@@ -59,8 +52,8 @@ public class BatchConfiguration {
}
@Bean
- public Job importUserJob(JobCompletionNotificationListener listener, Step step1) {
- return jobBuilderFactory.get("importUserJob")
+ public Job importUserJob(JobRepository jobRepository, JobCompletionNotificationListener listener, Step step1) {
+ return new JobBuilder("importUserJob", jobRepository)
.incrementer(new RunIdIncrementer())
.listener(listener)
.flow(step1)
@@ -69,9 +62,9 @@ public class BatchConfiguration {
}
@Bean
- public Step step1(JdbcBatchItemWriter writer) {
- return stepBuilderFactory.get("step1")
- . chunk(10)
+ public Step step1(JobRepository jobRepository, PlatformTransactionManager transactionManager, JdbcBatchItemWriter writer) {
+ return new StepBuilder("step1", jobRepository)
+ . chunk(10, transactionManager)
.reader(reader())
.processor(processor())
.writer(writer)
diff --git a/spring-batch-2/src/main/java/com/baeldung/batch/CoffeeItemProcessor.java b/spring-batch-2/src/main/java/com/baeldung/batch/CoffeeItemProcessor.java
index b154b80453..bd4173e9ed 100644
--- a/spring-batch-2/src/main/java/com/baeldung/batch/CoffeeItemProcessor.java
+++ b/spring-batch-2/src/main/java/com/baeldung/batch/CoffeeItemProcessor.java
@@ -10,7 +10,7 @@ public class CoffeeItemProcessor implements ItemProcessor {
private static final Logger LOGGER = LoggerFactory.getLogger(CoffeeItemProcessor.class);
@Override
- public Coffee process(final Coffee coffee) throws Exception {
+ public Coffee process(final Coffee coffee) {
String brand = coffee.getBrand().toUpperCase();
String origin = coffee.getOrigin().toUpperCase();
String chracteristics = coffee.getCharacteristics().toUpperCase();
diff --git a/spring-batch-2/src/main/java/com/baeldung/batch/JobCompletionNotificationListener.java b/spring-batch-2/src/main/java/com/baeldung/batch/JobCompletionNotificationListener.java
index ca1de40aea..b61faeb13b 100644
--- a/spring-batch-2/src/main/java/com/baeldung/batch/JobCompletionNotificationListener.java
+++ b/spring-batch-2/src/main/java/com/baeldung/batch/JobCompletionNotificationListener.java
@@ -4,13 +4,13 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.batch.core.BatchStatus;
import org.springframework.batch.core.JobExecution;
-import org.springframework.batch.core.listener.JobExecutionListenerSupport;
+import org.springframework.batch.core.JobExecutionListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
@Component
-public class JobCompletionNotificationListener extends JobExecutionListenerSupport {
+public class JobCompletionNotificationListener implements JobExecutionListener {
private static final Logger LOGGER = LoggerFactory.getLogger(JobCompletionNotificationListener.class);
diff --git a/spring-batch-2/src/main/java/com/baeldung/batchscheduler/SpringBatchScheduler.java b/spring-batch-2/src/main/java/com/baeldung/batchscheduler/SpringBatchScheduler.java
index c830a41855..dcb2bc5199 100644
--- a/spring-batch-2/src/main/java/com/baeldung/batchscheduler/SpringBatchScheduler.java
+++ b/spring-batch-2/src/main/java/com/baeldung/batchscheduler/SpringBatchScheduler.java
@@ -7,15 +7,16 @@ import org.springframework.batch.core.Job;
import org.springframework.batch.core.JobExecution;
import org.springframework.batch.core.JobParametersBuilder;
import org.springframework.batch.core.Step;
-import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing;
-import org.springframework.batch.core.configuration.annotation.JobBuilderFactory;
-import org.springframework.batch.core.configuration.annotation.StepBuilderFactory;
+import org.springframework.batch.core.job.builder.JobBuilder;
import org.springframework.batch.core.launch.JobLauncher;
+import org.springframework.batch.core.repository.JobRepository;
+import org.springframework.batch.core.step.builder.StepBuilder;
import org.springframework.batch.item.ItemWriter;
import org.springframework.batch.item.file.FlatFileItemReader;
import org.springframework.batch.item.file.builder.FlatFileItemReaderBuilder;
import org.springframework.batch.item.file.mapping.BeanWrapperFieldSetMapper;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;
@@ -24,17 +25,16 @@ import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import org.springframework.scheduling.support.ScheduledMethodRunnable;
+import org.springframework.transaction.PlatformTransactionManager;
import java.util.Date;
import java.util.IdentityHashMap;
-import java.util.List;
import java.util.Map;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
@Configuration
-@EnableBatchProcessing
@EnableScheduling
public class SpringBatchScheduler {
@@ -46,21 +46,21 @@ public class SpringBatchScheduler {
private final Map
\ No newline at end of file
diff --git a/spring-core-6/src/main/java/com/baeldung/httpinterface/Book.java b/spring-boot-modules/spring-boot-3/src/main/java/com/baeldung/httpinterface/Book.java
similarity index 100%
rename from spring-core-6/src/main/java/com/baeldung/httpinterface/Book.java
rename to spring-boot-modules/spring-boot-3/src/main/java/com/baeldung/httpinterface/Book.java
diff --git a/spring-core-6/src/main/java/com/baeldung/httpinterface/BooksClient.java b/spring-boot-modules/spring-boot-3/src/main/java/com/baeldung/httpinterface/BooksClient.java
similarity index 100%
rename from spring-core-6/src/main/java/com/baeldung/httpinterface/BooksClient.java
rename to spring-boot-modules/spring-boot-3/src/main/java/com/baeldung/httpinterface/BooksClient.java
diff --git a/spring-core-6/src/main/java/com/baeldung/httpinterface/BooksService.java b/spring-boot-modules/spring-boot-3/src/main/java/com/baeldung/httpinterface/BooksService.java
similarity index 85%
rename from spring-core-6/src/main/java/com/baeldung/httpinterface/BooksService.java
rename to spring-boot-modules/spring-boot-3/src/main/java/com/baeldung/httpinterface/BooksService.java
index a9cf6ec58a..a70d412dd2 100644
--- a/spring-core-6/src/main/java/com/baeldung/httpinterface/BooksService.java
+++ b/spring-boot-modules/spring-boot-3/src/main/java/com/baeldung/httpinterface/BooksService.java
@@ -15,12 +15,12 @@ interface BooksService {
List getBooks();
@GetExchange("/books/{id}")
- Book getBook(@PathVariable long id);
+ Book getBook(@PathVariable("id") long id);
@PostExchange("/books")
Book saveBook(@RequestBody Book book);
@DeleteExchange("/books/{id}")
- ResponseEntity deleteBook(@PathVariable long id);
+ ResponseEntity deleteBook(@PathVariable("id") long id);
}
diff --git a/spring-boot-modules/spring-boot-3/src/test/java/com/baeldung/httpinterface/BooksServiceMockServerUnitTest.java b/spring-boot-modules/spring-boot-3/src/test/java/com/baeldung/httpinterface/BooksServiceMockServerUnitTest.java
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/spring-boot-modules/spring-boot-3/src/test/java/com/baeldung/httpinterface/BooksServiceMockitoUnitTest.java b/spring-boot-modules/spring-boot-3/src/test/java/com/baeldung/httpinterface/BooksServiceMockitoUnitTest.java
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/spring-core-6/src/test/java/com/baeldung/httpinterface/MyServiceException.java b/spring-boot-modules/spring-boot-3/src/test/java/com/baeldung/httpinterface/MyServiceException.java
similarity index 100%
rename from spring-core-6/src/test/java/com/baeldung/httpinterface/MyServiceException.java
rename to spring-boot-modules/spring-boot-3/src/test/java/com/baeldung/httpinterface/MyServiceException.java
diff --git a/spring-boot-modules/spring-boot-annotations-2/README.md b/spring-boot-modules/spring-boot-annotations-2/README.md
index bea5d2fec6..541fa2fd73 100644
--- a/spring-boot-modules/spring-boot-annotations-2/README.md
+++ b/spring-boot-modules/spring-boot-annotations-2/README.md
@@ -7,4 +7,8 @@ This module contains articles about Spring Boot annotations
- [Spring Conditional Annotations](https://www.baeldung.com/spring-conditional-annotations)
- [Guide to @SpringBootConfiguration in Spring Boot](https://www.baeldung.com/springbootconfiguration-annotation)
- [Spring @Primary Annotation](http://www.baeldung.com/spring-primary)
+- [Spring Bean Names](https://www.baeldung.com/spring-bean-names)
+- [AliasFor Annotation in Spring](https://www.baeldung.com/spring-aliasfor-annotation)
+- [A Quick Guide to the Spring @Lazy Annotation](https://www.baeldung.com/spring-lazy-annotation)
+- [Instantiating Multiple Beans of the Same Class with Spring Annotations](https://www.baeldung.com/spring-same-class-multiple-beans)
- More articles: [[<-- prev]](/spring-boot-modules/spring-boot-annotations)
diff --git a/spring-boot-modules/spring-boot-annotations-2/pom.xml b/spring-boot-modules/spring-boot-annotations-2/pom.xml
index 99d1c4587b..71fc7ff388 100644
--- a/spring-boot-modules/spring-boot-annotations-2/pom.xml
+++ b/spring-boot-modules/spring-boot-annotations-2/pom.xml
@@ -28,6 +28,11 @@
mockito-inline
test
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
\ No newline at end of file
diff --git a/spring-core-5/src/main/java/com/baeldung/aliasfor/MyMapping.java b/spring-boot-modules/spring-boot-annotations-2/src/main/java/com/baeldung/aliasfor/MyMapping.java
similarity index 100%
rename from spring-core-5/src/main/java/com/baeldung/aliasfor/MyMapping.java
rename to spring-boot-modules/spring-boot-annotations-2/src/main/java/com/baeldung/aliasfor/MyMapping.java
diff --git a/spring-core-5/src/main/java/com/baeldung/aliasfor/MyMappingController.java b/spring-boot-modules/spring-boot-annotations-2/src/main/java/com/baeldung/aliasfor/MyMappingController.java
similarity index 100%
rename from spring-core-5/src/main/java/com/baeldung/aliasfor/MyMappingController.java
rename to spring-boot-modules/spring-boot-annotations-2/src/main/java/com/baeldung/aliasfor/MyMappingController.java
diff --git a/spring-core-5/src/main/java/com/baeldung/lazy/AppConfig.java b/spring-boot-modules/spring-boot-annotations-2/src/main/java/com/baeldung/lazy/AppConfig.java
similarity index 100%
rename from spring-core-5/src/main/java/com/baeldung/lazy/AppConfig.java
rename to spring-boot-modules/spring-boot-annotations-2/src/main/java/com/baeldung/lazy/AppConfig.java
diff --git a/spring-core-5/src/main/java/com/baeldung/lazy/City.java b/spring-boot-modules/spring-boot-annotations-2/src/main/java/com/baeldung/lazy/City.java
similarity index 100%
rename from spring-core-5/src/main/java/com/baeldung/lazy/City.java
rename to spring-boot-modules/spring-boot-annotations-2/src/main/java/com/baeldung/lazy/City.java
diff --git a/spring-core-5/src/main/java/com/baeldung/lazy/Country.java b/spring-boot-modules/spring-boot-annotations-2/src/main/java/com/baeldung/lazy/Country.java
similarity index 100%
rename from spring-core-5/src/main/java/com/baeldung/lazy/Country.java
rename to spring-boot-modules/spring-boot-annotations-2/src/main/java/com/baeldung/lazy/Country.java
diff --git a/spring-core-5/src/main/java/com/baeldung/lazy/Region.java b/spring-boot-modules/spring-boot-annotations-2/src/main/java/com/baeldung/lazy/Region.java
similarity index 100%
rename from spring-core-5/src/main/java/com/baeldung/lazy/Region.java
rename to spring-boot-modules/spring-boot-annotations-2/src/main/java/com/baeldung/lazy/Region.java
diff --git a/spring-core-6/src/main/java/com/baeldung/multibeaninstantiation/solution1/Person.java b/spring-boot-modules/spring-boot-annotations-2/src/main/java/com/baeldung/multibeaninstantiation/solution1/Person.java
similarity index 100%
rename from spring-core-6/src/main/java/com/baeldung/multibeaninstantiation/solution1/Person.java
rename to spring-boot-modules/spring-boot-annotations-2/src/main/java/com/baeldung/multibeaninstantiation/solution1/Person.java
diff --git a/spring-core-6/src/main/java/com/baeldung/multibeaninstantiation/solution1/PersonConfig.java b/spring-boot-modules/spring-boot-annotations-2/src/main/java/com/baeldung/multibeaninstantiation/solution1/PersonConfig.java
similarity index 100%
rename from spring-core-6/src/main/java/com/baeldung/multibeaninstantiation/solution1/PersonConfig.java
rename to spring-boot-modules/spring-boot-annotations-2/src/main/java/com/baeldung/multibeaninstantiation/solution1/PersonConfig.java
diff --git a/spring-core-6/src/main/java/com/baeldung/multibeaninstantiation/solution1/SpringApp1.java b/spring-boot-modules/spring-boot-annotations-2/src/main/java/com/baeldung/multibeaninstantiation/solution1/SpringApp1.java
similarity index 100%
rename from spring-core-6/src/main/java/com/baeldung/multibeaninstantiation/solution1/SpringApp1.java
rename to spring-boot-modules/spring-boot-annotations-2/src/main/java/com/baeldung/multibeaninstantiation/solution1/SpringApp1.java
diff --git a/spring-core-6/src/main/java/com/baeldung/multibeaninstantiation/solution2/Person.java b/spring-boot-modules/spring-boot-annotations-2/src/main/java/com/baeldung/multibeaninstantiation/solution2/Person.java
similarity index 100%
rename from spring-core-6/src/main/java/com/baeldung/multibeaninstantiation/solution2/Person.java
rename to spring-boot-modules/spring-boot-annotations-2/src/main/java/com/baeldung/multibeaninstantiation/solution2/Person.java
diff --git a/spring-core-6/src/main/java/com/baeldung/multibeaninstantiation/solution2/PersonConfig.java b/spring-boot-modules/spring-boot-annotations-2/src/main/java/com/baeldung/multibeaninstantiation/solution2/PersonConfig.java
similarity index 100%
rename from spring-core-6/src/main/java/com/baeldung/multibeaninstantiation/solution2/PersonConfig.java
rename to spring-boot-modules/spring-boot-annotations-2/src/main/java/com/baeldung/multibeaninstantiation/solution2/PersonConfig.java
diff --git a/spring-core-6/src/main/java/com/baeldung/multibeaninstantiation/solution2/PersonOne.java b/spring-boot-modules/spring-boot-annotations-2/src/main/java/com/baeldung/multibeaninstantiation/solution2/PersonOne.java
similarity index 100%
rename from spring-core-6/src/main/java/com/baeldung/multibeaninstantiation/solution2/PersonOne.java
rename to spring-boot-modules/spring-boot-annotations-2/src/main/java/com/baeldung/multibeaninstantiation/solution2/PersonOne.java
diff --git a/spring-core-6/src/main/java/com/baeldung/multibeaninstantiation/solution2/PersonTwo.java b/spring-boot-modules/spring-boot-annotations-2/src/main/java/com/baeldung/multibeaninstantiation/solution2/PersonTwo.java
similarity index 100%
rename from spring-core-6/src/main/java/com/baeldung/multibeaninstantiation/solution2/PersonTwo.java
rename to spring-boot-modules/spring-boot-annotations-2/src/main/java/com/baeldung/multibeaninstantiation/solution2/PersonTwo.java
diff --git a/spring-core-6/src/main/java/com/baeldung/multibeaninstantiation/solution2/SpringApp2.java b/spring-boot-modules/spring-boot-annotations-2/src/main/java/com/baeldung/multibeaninstantiation/solution2/SpringApp2.java
similarity index 100%
rename from spring-core-6/src/main/java/com/baeldung/multibeaninstantiation/solution2/SpringApp2.java
rename to spring-boot-modules/spring-boot-annotations-2/src/main/java/com/baeldung/multibeaninstantiation/solution2/SpringApp2.java
diff --git a/spring-core-6/src/main/java/com/baeldung/multibeaninstantiation/solution3/Human.java b/spring-boot-modules/spring-boot-annotations-2/src/main/java/com/baeldung/multibeaninstantiation/solution3/Human.java
similarity index 100%
rename from spring-core-6/src/main/java/com/baeldung/multibeaninstantiation/solution3/Human.java
rename to spring-boot-modules/spring-boot-annotations-2/src/main/java/com/baeldung/multibeaninstantiation/solution3/Human.java
diff --git a/spring-core-6/src/main/java/com/baeldung/multibeaninstantiation/solution3/MultiBeanFactory.java b/spring-boot-modules/spring-boot-annotations-2/src/main/java/com/baeldung/multibeaninstantiation/solution3/MultiBeanFactory.java
similarity index 100%
rename from spring-core-6/src/main/java/com/baeldung/multibeaninstantiation/solution3/MultiBeanFactory.java
rename to spring-boot-modules/spring-boot-annotations-2/src/main/java/com/baeldung/multibeaninstantiation/solution3/MultiBeanFactory.java
diff --git a/spring-core-6/src/main/java/com/baeldung/multibeaninstantiation/solution3/Person.java b/spring-boot-modules/spring-boot-annotations-2/src/main/java/com/baeldung/multibeaninstantiation/solution3/Person.java
similarity index 100%
rename from spring-core-6/src/main/java/com/baeldung/multibeaninstantiation/solution3/Person.java
rename to spring-boot-modules/spring-boot-annotations-2/src/main/java/com/baeldung/multibeaninstantiation/solution3/Person.java
diff --git a/spring-core-6/src/main/java/com/baeldung/multibeaninstantiation/solution3/PersonConfig.java b/spring-boot-modules/spring-boot-annotations-2/src/main/java/com/baeldung/multibeaninstantiation/solution3/PersonConfig.java
similarity index 100%
rename from spring-core-6/src/main/java/com/baeldung/multibeaninstantiation/solution3/PersonConfig.java
rename to spring-boot-modules/spring-boot-annotations-2/src/main/java/com/baeldung/multibeaninstantiation/solution3/PersonConfig.java
diff --git a/spring-core-6/src/main/java/com/baeldung/multibeaninstantiation/solution3/PersonFactoryPostProcessor.java b/spring-boot-modules/spring-boot-annotations-2/src/main/java/com/baeldung/multibeaninstantiation/solution3/PersonFactoryPostProcessor.java
similarity index 100%
rename from spring-core-6/src/main/java/com/baeldung/multibeaninstantiation/solution3/PersonFactoryPostProcessor.java
rename to spring-boot-modules/spring-boot-annotations-2/src/main/java/com/baeldung/multibeaninstantiation/solution3/PersonFactoryPostProcessor.java
diff --git a/spring-core-6/src/main/java/com/baeldung/multibeaninstantiation/solution3/SpringApp3.java b/spring-boot-modules/spring-boot-annotations-2/src/main/java/com/baeldung/multibeaninstantiation/solution3/SpringApp3.java
similarity index 100%
rename from spring-core-6/src/main/java/com/baeldung/multibeaninstantiation/solution3/SpringApp3.java
rename to spring-boot-modules/spring-boot-annotations-2/src/main/java/com/baeldung/multibeaninstantiation/solution3/SpringApp3.java
diff --git a/spring-core-5/src/main/java/com/baeldung/springbean/naming/component/Animal.java b/spring-boot-modules/spring-boot-annotations-2/src/main/java/com/baeldung/springbean/naming/component/Animal.java
similarity index 100%
rename from spring-core-5/src/main/java/com/baeldung/springbean/naming/component/Animal.java
rename to spring-boot-modules/spring-boot-annotations-2/src/main/java/com/baeldung/springbean/naming/component/Animal.java
diff --git a/spring-core-5/src/main/java/com/baeldung/springbean/naming/component/Cat.java b/spring-boot-modules/spring-boot-annotations-2/src/main/java/com/baeldung/springbean/naming/component/Cat.java
similarity index 100%
rename from spring-core-5/src/main/java/com/baeldung/springbean/naming/component/Cat.java
rename to spring-boot-modules/spring-boot-annotations-2/src/main/java/com/baeldung/springbean/naming/component/Cat.java
diff --git a/spring-core-5/src/main/java/com/baeldung/springbean/naming/component/CustomComponent.java b/spring-boot-modules/spring-boot-annotations-2/src/main/java/com/baeldung/springbean/naming/component/CustomComponent.java
similarity index 100%
rename from spring-core-5/src/main/java/com/baeldung/springbean/naming/component/CustomComponent.java
rename to spring-boot-modules/spring-boot-annotations-2/src/main/java/com/baeldung/springbean/naming/component/CustomComponent.java
diff --git a/spring-core-5/src/main/java/com/baeldung/springbean/naming/component/Dog.java b/spring-boot-modules/spring-boot-annotations-2/src/main/java/com/baeldung/springbean/naming/component/Dog.java
similarity index 100%
rename from spring-core-5/src/main/java/com/baeldung/springbean/naming/component/Dog.java
rename to spring-boot-modules/spring-boot-annotations-2/src/main/java/com/baeldung/springbean/naming/component/Dog.java
diff --git a/spring-core-5/src/main/java/com/baeldung/springbean/naming/configuration/AuditConfiguration.java b/spring-boot-modules/spring-boot-annotations-2/src/main/java/com/baeldung/springbean/naming/configuration/AuditConfiguration.java
similarity index 100%
rename from spring-core-5/src/main/java/com/baeldung/springbean/naming/configuration/AuditConfiguration.java
rename to spring-boot-modules/spring-boot-annotations-2/src/main/java/com/baeldung/springbean/naming/configuration/AuditConfiguration.java
diff --git a/spring-core-5/src/main/java/com/baeldung/springbean/naming/configuration/MyConfiguration.java b/spring-boot-modules/spring-boot-annotations-2/src/main/java/com/baeldung/springbean/naming/configuration/MyConfiguration.java
similarity index 100%
rename from spring-core-5/src/main/java/com/baeldung/springbean/naming/configuration/MyConfiguration.java
rename to spring-boot-modules/spring-boot-annotations-2/src/main/java/com/baeldung/springbean/naming/configuration/MyConfiguration.java
diff --git a/spring-core-5/src/main/java/com/baeldung/springbean/naming/controller/MessagingController.java b/spring-boot-modules/spring-boot-annotations-2/src/main/java/com/baeldung/springbean/naming/controller/MessagingController.java
similarity index 100%
rename from spring-core-5/src/main/java/com/baeldung/springbean/naming/controller/MessagingController.java
rename to spring-boot-modules/spring-boot-annotations-2/src/main/java/com/baeldung/springbean/naming/controller/MessagingController.java
diff --git a/spring-core-5/src/main/java/com/baeldung/springbean/naming/service/AuditService.java b/spring-boot-modules/spring-boot-annotations-2/src/main/java/com/baeldung/springbean/naming/service/AuditService.java
similarity index 100%
rename from spring-core-5/src/main/java/com/baeldung/springbean/naming/service/AuditService.java
rename to spring-boot-modules/spring-boot-annotations-2/src/main/java/com/baeldung/springbean/naming/service/AuditService.java
diff --git a/spring-core-5/src/main/java/com/baeldung/springbean/naming/service/LoggingService.java b/spring-boot-modules/spring-boot-annotations-2/src/main/java/com/baeldung/springbean/naming/service/LoggingService.java
similarity index 100%
rename from spring-core-5/src/main/java/com/baeldung/springbean/naming/service/LoggingService.java
rename to spring-boot-modules/spring-boot-annotations-2/src/main/java/com/baeldung/springbean/naming/service/LoggingService.java
diff --git a/spring-core-5/src/main/java/com/baeldung/springbean/naming/service/MessagingService.java b/spring-boot-modules/spring-boot-annotations-2/src/main/java/com/baeldung/springbean/naming/service/MessagingService.java
similarity index 100%
rename from spring-core-5/src/main/java/com/baeldung/springbean/naming/service/MessagingService.java
rename to spring-boot-modules/spring-boot-annotations-2/src/main/java/com/baeldung/springbean/naming/service/MessagingService.java
diff --git a/spring-core-5/src/main/java/com/baeldung/springbean/naming/service/MessagingServiceImpl.java b/spring-boot-modules/spring-boot-annotations-2/src/main/java/com/baeldung/springbean/naming/service/MessagingServiceImpl.java
similarity index 100%
rename from spring-core-5/src/main/java/com/baeldung/springbean/naming/service/MessagingServiceImpl.java
rename to spring-boot-modules/spring-boot-annotations-2/src/main/java/com/baeldung/springbean/naming/service/MessagingServiceImpl.java
diff --git a/spring-core-5/src/main/java/com/baeldung/springbean/naming/service/PetShow.java b/spring-boot-modules/spring-boot-annotations-2/src/main/java/com/baeldung/springbean/naming/service/PetShow.java
similarity index 100%
rename from spring-core-5/src/main/java/com/baeldung/springbean/naming/service/PetShow.java
rename to spring-boot-modules/spring-boot-annotations-2/src/main/java/com/baeldung/springbean/naming/service/PetShow.java
diff --git a/spring-core-5/src/test/java/com/baeldung/aliasfor/AliasForUnitTest.java b/spring-boot-modules/spring-boot-annotations-2/src/test/java/com/baeldung/aliasfor/AliasForUnitTest.java
similarity index 100%
rename from spring-core-5/src/test/java/com/baeldung/aliasfor/AliasForUnitTest.java
rename to spring-boot-modules/spring-boot-annotations-2/src/test/java/com/baeldung/aliasfor/AliasForUnitTest.java
diff --git a/spring-core-5/src/test/java/com/baeldung/lazy/LazyAnnotationUnitTest.java b/spring-boot-modules/spring-boot-annotations-2/src/test/java/com/baeldung/lazy/LazyAnnotationUnitTest.java
similarity index 100%
rename from spring-core-5/src/test/java/com/baeldung/lazy/LazyAnnotationUnitTest.java
rename to spring-boot-modules/spring-boot-annotations-2/src/test/java/com/baeldung/lazy/LazyAnnotationUnitTest.java
diff --git a/spring-core-5/src/test/java/com/baeldung/springbean/naming/SpringBeanNamingUnitTest.java b/spring-boot-modules/spring-boot-annotations-2/src/test/java/com/baeldung/springbean/naming/SpringBeanNamingUnitTest.java
similarity index 100%
rename from spring-core-5/src/test/java/com/baeldung/springbean/naming/SpringBeanNamingUnitTest.java
rename to spring-boot-modules/spring-boot-annotations-2/src/test/java/com/baeldung/springbean/naming/SpringBeanNamingUnitTest.java
diff --git a/spring-boot-modules/spring-boot-environment/README.md b/spring-boot-modules/spring-boot-environment/README.md
index 687322938e..c3e1866491 100644
--- a/spring-boot-modules/spring-boot-environment/README.md
+++ b/spring-boot-modules/spring-boot-environment/README.md
@@ -7,3 +7,4 @@ This module contains articles about configuring the Spring Boot `Environment`
- [Spring Properties File Outside jar](https://www.baeldung.com/spring-properties-file-outside-jar)
- [Get the Running Port in Spring Boot](https://www.baeldung.com/spring-boot-running-port)
- [Environment Variable Prefixes in Spring Boot 2.5](https://www.baeldung.com/spring-boot-env-variable-prefixes)
+ - [Spring Profiles](http://www.baeldung.com/spring-profiles)
diff --git a/spring-boot-modules/spring-boot-environment/pom.xml b/spring-boot-modules/spring-boot-environment/pom.xml
index 3ea591f561..013156fa7f 100644
--- a/spring-boot-modules/spring-boot-environment/pom.xml
+++ b/spring-boot-modules/spring-boot-environment/pom.xml
@@ -133,8 +133,23 @@
+
+ dev
+
+ true
+
+
+ dev
+
+
+
+ prod
+
+ prod
+
+
-
+
2.2
3.1.7
diff --git a/spring-core-2/src/main/java/com/baeldung/profiles/DatasourceConfig.java b/spring-boot-modules/spring-boot-environment/src/main/java/com/baeldung/profiles/DatasourceConfig.java
similarity index 100%
rename from spring-core-2/src/main/java/com/baeldung/profiles/DatasourceConfig.java
rename to spring-boot-modules/spring-boot-environment/src/main/java/com/baeldung/profiles/DatasourceConfig.java
diff --git a/spring-core-2/src/main/java/com/baeldung/profiles/DevDatasourceConfig.java b/spring-boot-modules/spring-boot-environment/src/main/java/com/baeldung/profiles/DevDatasourceConfig.java
similarity index 100%
rename from spring-core-2/src/main/java/com/baeldung/profiles/DevDatasourceConfig.java
rename to spring-boot-modules/spring-boot-environment/src/main/java/com/baeldung/profiles/DevDatasourceConfig.java
diff --git a/spring-core-2/src/main/java/com/baeldung/profiles/ProductionDatasourceConfig.java b/spring-boot-modules/spring-boot-environment/src/main/java/com/baeldung/profiles/ProductionDatasourceConfig.java
similarity index 100%
rename from spring-core-2/src/main/java/com/baeldung/profiles/ProductionDatasourceConfig.java
rename to spring-boot-modules/spring-boot-environment/src/main/java/com/baeldung/profiles/ProductionDatasourceConfig.java
diff --git a/spring-core-2/src/main/java/com/baeldung/profiles/ProfileManager.java b/spring-boot-modules/spring-boot-environment/src/main/java/com/baeldung/profiles/ProfileManager.java
similarity index 100%
rename from spring-core-2/src/main/java/com/baeldung/profiles/ProfileManager.java
rename to spring-boot-modules/spring-boot-environment/src/main/java/com/baeldung/profiles/ProfileManager.java
diff --git a/spring-core-2/src/main/java/com/baeldung/profiles/SpringProfilesConfig.java b/spring-boot-modules/spring-boot-environment/src/main/java/com/baeldung/profiles/SpringProfilesConfig.java
similarity index 100%
rename from spring-core-2/src/main/java/com/baeldung/profiles/SpringProfilesConfig.java
rename to spring-boot-modules/spring-boot-environment/src/main/java/com/baeldung/profiles/SpringProfilesConfig.java
diff --git a/spring-boot-modules/spring-boot-environment/src/main/resources/application.properties b/spring-boot-modules/spring-boot-environment/src/main/resources/application.properties
index 4ffb414e92..8333184f1e 100644
--- a/spring-boot-modules/spring-boot-environment/src/main/resources/application.properties
+++ b/spring-boot-modules/spring-boot-environment/src/main/resources/application.properties
@@ -4,4 +4,34 @@ management.metrics.enable.jvm=true
management.endpoint.restart.enabled=true
spring.datasource.tomcat.jmx-enabled=false
management.endpoint.shutdown.enabled=true
-spring.config.import=file:./additional.properties,optional:file:/Users/home/config/jdbc.properties
\ No newline at end of file
+spring.config.import=file:./additional.properties,optional:file:/Users/home/config/jdbc.properties
+
+#---
+spring.profiles.active=@spring.profiles.active@
+
+my.prop=used-always-in-all-profiles
+
+#---
+spring.config.activate.on-profile=dev
+#spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
+#spring.datasource.url=jdbc:mysql://localhost:3306/db
+#spring.datasource.username=root
+#spring.datasource.password=root
+
+#---
+spring.config.activate.on-profile=production
+#spring.datasource.driver-class-name=org.h2.Driver
+#spring.datasource.url=jdbc:h2:mem:db;DB_CLOSE_DELAY=-1
+#spring.datasource.username=sa
+#spring.datasource.password=sa
+
+#---
+spring.profiles.group.production=proddb,prodquartz
+
+#---
+spring.config.activate.on-profile=proddb
+db=url_to_production_db
+
+#---
+spring.config.activate.on-profile=prodquartz
+quartz=url_to_quartz_scheduler
\ No newline at end of file
diff --git a/spring-core-2/src/main/resources/springProfiles-config.xml b/spring-boot-modules/spring-boot-environment/src/main/resources/springProfiles-config.xml
similarity index 100%
rename from spring-core-2/src/main/resources/springProfiles-config.xml
rename to spring-boot-modules/spring-boot-environment/src/main/resources/springProfiles-config.xml
diff --git a/spring-core-2/src/test/java/com/baeldung/profiles/DevProfileWithAnnotationIntegrationTest.java b/spring-boot-modules/spring-boot-environment/src/test/java/com/baeldung/profiles/DevProfileWithAnnotationIntegrationTest.java
similarity index 100%
rename from spring-core-2/src/test/java/com/baeldung/profiles/DevProfileWithAnnotationIntegrationTest.java
rename to spring-boot-modules/spring-boot-environment/src/test/java/com/baeldung/profiles/DevProfileWithAnnotationIntegrationTest.java
diff --git a/spring-core-2/src/test/java/com/baeldung/profiles/ProductionProfileWithAnnotationIntegrationTest.java b/spring-boot-modules/spring-boot-environment/src/test/java/com/baeldung/profiles/ProductionProfileWithAnnotationIntegrationTest.java
similarity index 100%
rename from spring-core-2/src/test/java/com/baeldung/profiles/ProductionProfileWithAnnotationIntegrationTest.java
rename to spring-boot-modules/spring-boot-environment/src/test/java/com/baeldung/profiles/ProductionProfileWithAnnotationIntegrationTest.java
diff --git a/spring-core-2/src/test/java/com/baeldung/profiles/SpringProfilesWithMavenPropertiesIntegrationTest.java b/spring-boot-modules/spring-boot-environment/src/test/java/com/baeldung/profiles/SpringProfilesWithMavenPropertiesIntegrationTest.java
similarity index 100%
rename from spring-core-2/src/test/java/com/baeldung/profiles/SpringProfilesWithMavenPropertiesIntegrationTest.java
rename to spring-boot-modules/spring-boot-environment/src/test/java/com/baeldung/profiles/SpringProfilesWithMavenPropertiesIntegrationTest.java
diff --git a/spring-core-2/src/test/java/com/baeldung/profiles/SpringProfilesWithXMLIntegrationTest.java b/spring-boot-modules/spring-boot-environment/src/test/java/com/baeldung/profiles/SpringProfilesWithXMLIntegrationTest.java
similarity index 100%
rename from spring-core-2/src/test/java/com/baeldung/profiles/SpringProfilesWithXMLIntegrationTest.java
rename to spring-boot-modules/spring-boot-environment/src/test/java/com/baeldung/profiles/SpringProfilesWithXMLIntegrationTest.java
diff --git a/spring-boot-modules/spring-boot-keycloak-2/README.md b/spring-boot-modules/spring-boot-keycloak-2/README.md
index d372132a6a..e4f8b1904b 100644
--- a/spring-boot-modules/spring-boot-keycloak-2/README.md
+++ b/spring-boot-modules/spring-boot-keycloak-2/README.md
@@ -4,3 +4,4 @@ This module contains articles about Keycloak in Spring Boot projects.
## Relevant articles:
- [Disabling Keycloak Security in Spring Boot](https://www.baeldung.com/spring-keycloak-security-disable)
+- [Search Users With Keycloak in Java](https://www.baeldung.com/java-keycloak-search-users)
diff --git a/spring-boot-modules/spring-boot-keycloak-2/pom.xml b/spring-boot-modules/spring-boot-keycloak-2/pom.xml
index 8b1eec2e4e..572986e8c4 100644
--- a/spring-boot-modules/spring-boot-keycloak-2/pom.xml
+++ b/spring-boot-modules/spring-boot-keycloak-2/pom.xml
@@ -16,6 +16,10 @@
0.0.1-SNAPSHOT
../../parent-boot-2
+
+
+ 21.0.1
+
@@ -39,6 +43,41 @@
spring-boot-starter-test
test
+
+
+
+ org.keycloak
+ keycloak-admin-client
+ ${keycloak.version}
+
+
+
+ org.keycloak
+ keycloak-core
+ provided
+ ${keycloak.version}
+
+
+ org.keycloak
+ keycloak-server-spi
+ ${keycloak.version}
+ provided
+
+
+
+ org.keycloak
+ keycloak-server-spi-private
+ provided
+ ${keycloak.version}
+
+
+ org.keycloak
+ keycloak-services
+ provided
+ ${keycloak.version}
+
+
+
diff --git a/spring-boot-modules/spring-boot-keycloak-2/src/main/java/com/baeldung/keycloak/adminclient/AdminClientService.java b/spring-boot-modules/spring-boot-keycloak-2/src/main/java/com/baeldung/keycloak/adminclient/AdminClientService.java
new file mode 100644
index 0000000000..bacca9bdea
--- /dev/null
+++ b/spring-boot-modules/spring-boot-keycloak-2/src/main/java/com/baeldung/keycloak/adminclient/AdminClientService.java
@@ -0,0 +1,90 @@
+package com.baeldung.keycloak.adminclient;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+import javax.annotation.PostConstruct;
+
+import org.keycloak.admin.client.Keycloak;
+import org.keycloak.representations.idm.UserRepresentation;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class AdminClientService {
+
+ private static final Logger logger = LoggerFactory.getLogger(AdminClientService.class);
+ private static final String REALM_NAME = "master";
+
+ @Autowired
+ private Keycloak keycloak;
+
+ @PostConstruct
+ public void searchUsers() {
+ logger.info("Searching users in Keycloak {}", keycloak.serverInfo()
+ .getInfo()
+ .getSystemInfo()
+ .getVersion());
+ searchByUsername("user1", true);
+ searchByUsername("user", false);
+ searchByUsername("1", false);
+ searchByEmail("user2@test.com", true);
+ searchByAttributes("DOB:2000-01-05");
+ searchByGroup("c67643fb-514e-488a-a4b4-5c0bdf2e7477");
+ searchByRole("user");
+ }
+
+ private void searchByUsername(String username, boolean exact) {
+ logger.info("Searching by username: {} (exact {})", username, exact);
+ List users = keycloak.realm(REALM_NAME)
+ .users()
+ .searchByUsername(username, exact);
+ logger.info("Users found by username {}", users.stream()
+ .map(user -> user.getUsername())
+ .collect(Collectors.toList()));
+ }
+
+ private void searchByEmail(String email, boolean exact) {
+ logger.info("Searching by email: {} (exact {})", email, exact);
+ List users = keycloak.realm(REALM_NAME)
+ .users()
+ .searchByEmail(email, exact);
+ logger.info("Users found by email {}", users.stream()
+ .map(user -> user.getEmail())
+ .collect(Collectors.toList()));
+ }
+
+ private void searchByAttributes(String query) {
+ logger.info("Searching by attributes: {}", query);
+ List users = keycloak.realm(REALM_NAME)
+ .users()
+ .searchByAttributes(query);
+ logger.info("Users found by attributes {}", users.stream()
+ .map(user -> user.getUsername() + " " + user.getAttributes())
+ .collect(Collectors.toList()));
+ }
+
+ private void searchByGroup(String groupId) {
+ logger.info("Searching by group: {}", groupId);
+ List users = keycloak.realm(REALM_NAME)
+ .groups()
+ .group(groupId)
+ .members();
+ logger.info("Users found by group {}", users.stream()
+ .map(user -> user.getUsername())
+ .collect(Collectors.toList()));
+ }
+
+ private void searchByRole(String roleName) {
+ logger.info("Searching by role: {}", roleName);
+ List users = keycloak.realm(REALM_NAME)
+ .roles()
+ .get(roleName)
+ .getUserMembers();
+ logger.info("Users found by role {}", users.stream()
+ .map(user -> user.getUsername())
+ .collect(Collectors.toList()));
+ }
+}
\ No newline at end of file
diff --git a/spring-boot-modules/spring-boot-keycloak-2/src/main/java/com/baeldung/keycloak/adminclient/App.java b/spring-boot-modules/spring-boot-keycloak-2/src/main/java/com/baeldung/keycloak/adminclient/App.java
new file mode 100644
index 0000000000..a863bde2e3
--- /dev/null
+++ b/spring-boot-modules/spring-boot-keycloak-2/src/main/java/com/baeldung/keycloak/adminclient/App.java
@@ -0,0 +1,30 @@
+package com.baeldung.keycloak.adminclient;
+
+import org.keycloak.OAuth2Constants;
+import org.keycloak.admin.client.Keycloak;
+import org.keycloak.admin.client.KeycloakBuilder;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.PropertySource;
+
+@SpringBootApplication(scanBasePackages = { "com.baeldung.keycloak.adminclient" })
+@PropertySource("classpath:application-adminclient.properties")
+public class App {
+
+ public static void main(String[] args) {
+ SpringApplication.run(App.class, args);
+ }
+
+ @Bean
+ Keycloak keycloak() {
+ return KeycloakBuilder.builder()
+ .serverUrl("http://localhost:8080")
+ .realm("master")
+ .clientId("admin-cli")
+ .grantType(OAuth2Constants.PASSWORD)
+ .username("admin")
+ .password("password")
+ .build();
+ }
+}
\ No newline at end of file
diff --git a/spring-boot-modules/spring-boot-keycloak-2/src/main/java/com/baeldung/keycloak/customendpoint/KeycloakUserApiProvider.java b/spring-boot-modules/spring-boot-keycloak-2/src/main/java/com/baeldung/keycloak/customendpoint/KeycloakUserApiProvider.java
new file mode 100644
index 0000000000..c34514104b
--- /dev/null
+++ b/spring-boot-modules/spring-boot-keycloak-2/src/main/java/com/baeldung/keycloak/customendpoint/KeycloakUserApiProvider.java
@@ -0,0 +1,52 @@
+package com.baeldung.keycloak.customendpoint;
+
+import java.util.Optional;
+import java.util.stream.Stream;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import javax.ws.rs.GET;
+import javax.ws.rs.NotFoundException;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.MediaType;
+
+import org.keycloak.models.GroupModel;
+import org.keycloak.models.KeycloakSession;
+import org.keycloak.models.RealmModel;
+import org.keycloak.models.utils.ModelToRepresentation;
+import org.keycloak.representations.idm.UserRepresentation;
+import org.keycloak.services.resource.RealmResourceProvider;
+
+public class KeycloakUserApiProvider implements RealmResourceProvider {
+ private final KeycloakSession session;
+
+ public KeycloakUserApiProvider(KeycloakSession session) {
+ this.session = session;
+ }
+
+ public void close() {
+ }
+
+ public Object getResource() {
+ return this;
+ }
+
+ @GET
+ @Produces({ MediaType.APPLICATION_JSON })
+ public Stream searchUsersByGroupAndRoleName(@QueryParam("groupName") @NotNull String groupName, @QueryParam("roleName") @NotBlank String roleName) {
+ RealmModel realm = session.getContext().getRealm();
+
+ Optional groupByName = session.groups()
+ .getGroupsStream(realm)
+ .filter(group -> group.getName().equals(groupName))
+ .findAny();
+
+ GroupModel group = groupByName.orElseThrow(() -> new NotFoundException("Group not found with name " + groupName));
+
+ return session.users()
+ .getGroupMembersStream(realm, group)
+ .filter(user -> user.getRealmRoleMappingsStream().anyMatch(role -> role.getName().equals(roleName)))
+ .map(user -> ModelToRepresentation.toBriefRepresentation(user));
+ }
+}
\ No newline at end of file
diff --git a/spring-boot-modules/spring-boot-keycloak-2/src/main/java/com/baeldung/keycloak/customendpoint/KeycloakUserApiProviderFactory.java b/spring-boot-modules/spring-boot-keycloak-2/src/main/java/com/baeldung/keycloak/customendpoint/KeycloakUserApiProviderFactory.java
new file mode 100644
index 0000000000..34eda94d6a
--- /dev/null
+++ b/spring-boot-modules/spring-boot-keycloak-2/src/main/java/com/baeldung/keycloak/customendpoint/KeycloakUserApiProviderFactory.java
@@ -0,0 +1,33 @@
+package com.baeldung.keycloak.customendpoint;
+
+import org.keycloak.Config.Scope;
+import org.keycloak.models.KeycloakSession;
+import org.keycloak.models.KeycloakSessionFactory;
+import org.keycloak.services.resource.RealmResourceProvider;
+import org.keycloak.services.resource.RealmResourceProviderFactory;
+
+public class KeycloakUserApiProviderFactory implements RealmResourceProviderFactory {
+ public static final String ID = "users-by-group-and-role-name";
+
+ @Override
+ public RealmResourceProvider create(KeycloakSession session) {
+ return new KeycloakUserApiProvider(session);
+ }
+
+ @Override
+ public void init(Scope config) {
+ }
+
+ @Override
+ public void postInit(KeycloakSessionFactory factory) {
+ }
+
+ @Override
+ public void close() {
+ }
+
+ @Override
+ public String getId() {
+ return ID;
+ }
+}
\ No newline at end of file
diff --git a/spring-boot-modules/spring-boot-keycloak-2/src/main/resources/META-INF/services/org.keycloak.services.resource.RealmResourceProviderFactory b/spring-boot-modules/spring-boot-keycloak-2/src/main/resources/META-INF/services/org.keycloak.services.resource.RealmResourceProviderFactory
new file mode 100644
index 0000000000..f11a60fd2b
--- /dev/null
+++ b/spring-boot-modules/spring-boot-keycloak-2/src/main/resources/META-INF/services/org.keycloak.services.resource.RealmResourceProviderFactory
@@ -0,0 +1 @@
+com.baeldung.keycloak.customendpoint.KeycloakUserApiProviderFactory
\ No newline at end of file
diff --git a/spring-boot-modules/spring-boot-keycloak-2/src/main/resources/application-adminclient.properties b/spring-boot-modules/spring-boot-keycloak-2/src/main/resources/application-adminclient.properties
new file mode 100644
index 0000000000..bafddced85
--- /dev/null
+++ b/spring-boot-modules/spring-boot-keycloak-2/src/main/resources/application-adminclient.properties
@@ -0,0 +1 @@
+server.port=8081
\ No newline at end of file
diff --git a/spring-boot-modules/spring-boot-properties-3/README.md b/spring-boot-modules/spring-boot-properties-3/README.md
index 77c6815649..37b63abb84 100644
--- a/spring-boot-modules/spring-boot-properties-3/README.md
+++ b/spring-boot-modules/spring-boot-properties-3/README.md
@@ -10,3 +10,5 @@
- [Load Spring Boot Properties From a JSON File](https://www.baeldung.com/spring-boot-json-properties)
- [IntelliJ – Cannot Resolve Spring Boot Configuration Properties Error](https://www.baeldung.com/intellij-resolve-spring-boot-configuration-properties)
- [Log Properties in a Spring Boot Application](https://www.baeldung.com/spring-boot-log-properties)
+- [Using Environment Variables in Spring Boot’s application.properties](https://www.baeldung.com/spring-boot-properties-env-variables)
+- More articles: [[<-- prev]](../spring-boot-properties-2)
diff --git a/spring-core-6/src/main/java/com/baeldung/envvariables/BaeldungProperties.java b/spring-boot-modules/spring-boot-properties-3/src/main/java/com/baeldung/envvariables/BaeldungProperties.java
similarity index 86%
rename from spring-core-6/src/main/java/com/baeldung/envvariables/BaeldungProperties.java
rename to spring-boot-modules/spring-boot-properties-3/src/main/java/com/baeldung/envvariables/BaeldungProperties.java
index a41ac7a509..0e6e05a3c2 100644
--- a/spring-core-6/src/main/java/com/baeldung/envvariables/BaeldungProperties.java
+++ b/spring-boot-modules/spring-boot-properties-3/src/main/java/com/baeldung/envvariables/BaeldungProperties.java
@@ -1,20 +1,20 @@
-package com.baeldung.envvariables.valueinjection;
-
-import org.springframework.boot.context.properties.ConfigurationProperties;
-import org.springframework.stereotype.Component;
-
-@Component
-@ConfigurationProperties(prefix = "baeldung")
-public class BaeldungProperties {
-
- private String presentation;
-
- public String getPresentation() {
- return presentation;
- }
-
- public void setPresentation(String presentation) {
- this.presentation = presentation;
- }
-
-}
+package com.baeldung.envvariables;
+
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Component
+@ConfigurationProperties(prefix = "baeldung")
+public class BaeldungProperties {
+
+ private String presentation;
+
+ public String getPresentation() {
+ return presentation;
+ }
+
+ public void setPresentation(String presentation) {
+ this.presentation = presentation;
+ }
+
+}
diff --git a/spring-core-6/src/main/java/com/baeldung/envvariables/MyController.java b/spring-boot-modules/spring-boot-properties-3/src/main/java/com/baeldung/envvariables/MyController.java
similarity index 94%
rename from spring-core-6/src/main/java/com/baeldung/envvariables/MyController.java
rename to spring-boot-modules/spring-boot-properties-3/src/main/java/com/baeldung/envvariables/MyController.java
index 503ee47157..6afe9f2de1 100644
--- a/spring-core-6/src/main/java/com/baeldung/envvariables/MyController.java
+++ b/spring-boot-modules/spring-boot-properties-3/src/main/java/com/baeldung/envvariables/MyController.java
@@ -1,60 +1,60 @@
-package com.baeldung.envvariables.valueinjection;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.core.env.Environment;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-@RestController
-public class MyController {
-
- @Value("${environment.name}")
- private String environmentName;
-
- @Value("${java.home.and.environment}")
- private String javaHomeAndEnvironmentName;
-
- @Value("${thispropertydoesnotexist}")
- private String nonExistentProperty;
-
- @Value("${baeldung.presentation}")
- private String baeldungPresentation;
-
- @Autowired
- private Environment environment;
-
- @Autowired
- private BaeldungProperties baeldungProperties;
-
- @GetMapping("/environment_name")
- String getEnvironmentName_FromEnvironmentVariables() {
- return environmentName;
- }
-
- @GetMapping("/java_home_and_environment")
- String getJavaHomeAndEnvironmentName_FromEnvironmentVariables() {
- return javaHomeAndEnvironmentName;
- }
-
- @GetMapping("non_existent_property")
- String getNonexistentProperty_FromEnvironmentVariables() {
- return nonExistentProperty;
- }
-
- @GetMapping("baeldung_presentation_from_value")
- String getBaeldungPresentation_FromValue() {
- return baeldungPresentation;
- }
-
- @GetMapping("baeldung_presentation_from_environment")
- String getBaeldungPresentation_FromEnvironment() {
- return environment.getProperty("baeldung.presentation");
- }
-
- @GetMapping("baeldung_configuration_properties")
- String getBaeldungPresentation_FromConfigurationProperties() {
- return baeldungProperties.getPresentation();
- }
-
-}
+package com.baeldung.envvariables;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.core.env.Environment;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+public class MyController {
+
+ @Value("${environment.name}")
+ private String environmentName;
+
+ @Value("${java.home.and.environment}")
+ private String javaHomeAndEnvironmentName;
+
+ @Value("${thispropertydoesnotexist}")
+ private String nonExistentProperty;
+
+ @Value("${baeldung.presentation}")
+ private String baeldungPresentation;
+
+ @Autowired
+ private Environment environment;
+
+ @Autowired
+ private BaeldungProperties baeldungProperties;
+
+ @GetMapping("/environment_name")
+ String getEnvironmentName_FromEnvironmentVariables() {
+ return environmentName;
+ }
+
+ @GetMapping("/java_home_and_environment")
+ String getJavaHomeAndEnvironmentName_FromEnvironmentVariables() {
+ return javaHomeAndEnvironmentName;
+ }
+
+ @GetMapping("non_existent_property")
+ String getNonexistentProperty_FromEnvironmentVariables() {
+ return nonExistentProperty;
+ }
+
+ @GetMapping("baeldung_presentation_from_value")
+ String getBaeldungPresentation_FromValue() {
+ return baeldungPresentation;
+ }
+
+ @GetMapping("baeldung_presentation_from_environment")
+ String getBaeldungPresentation_FromEnvironment() {
+ return environment.getProperty("baeldung.presentation");
+ }
+
+ @GetMapping("baeldung_configuration_properties")
+ String getBaeldungPresentation_FromConfigurationProperties() {
+ return baeldungProperties.getPresentation();
+ }
+
+}
diff --git a/spring-boot-modules/spring-boot-properties-3/src/main/resources/application.properties b/spring-boot-modules/spring-boot-properties-3/src/main/resources/application.properties
index a079837942..541183a186 100644
--- a/spring-boot-modules/spring-boot-properties-3/src/main/resources/application.properties
+++ b/spring-boot-modules/spring-boot-properties-3/src/main/resources/application.properties
@@ -26,4 +26,9 @@ spring.config.activate.on-profile=multidocument-prod
spring.datasource.password=password
spring.datasource.url=jdbc:h2:prod
spring.datasource.username=prodUser
-bael.property=prodValue
\ No newline at end of file
+bael.property=prodValue
+#---
+environment.name=${OS}
+java.home.and.environment=${JAVA_HOME}+${OS}
+not.existing.system.property=${thispropertydoesnotexist}
+baeldung.presentation=${HELLO_BAELDUNG}. Java is installed in the folder: ${JAVA_HOME}
\ No newline at end of file
diff --git a/spring-core-6/src/test/java/com/baeldung/envvariables/MyControllerIntegrationTest.java b/spring-boot-modules/spring-boot-properties-3/src/test/java/com/baeldung/envvariables/MyControllerIntegrationTest.java
similarity index 95%
rename from spring-core-6/src/test/java/com/baeldung/envvariables/MyControllerIntegrationTest.java
rename to spring-boot-modules/spring-boot-properties-3/src/test/java/com/baeldung/envvariables/MyControllerIntegrationTest.java
index b3ee2c7c46..527acd5dfc 100644
--- a/spring-core-6/src/test/java/com/baeldung/envvariables/MyControllerIntegrationTest.java
+++ b/spring-boot-modules/spring-boot-properties-3/src/test/java/com/baeldung/envvariables/MyControllerIntegrationTest.java
@@ -1,36 +1,36 @@
-package com.baeldung.envvariables.valueinjection;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.test.web.servlet.MockMvc;
-
-@SpringBootTest(classes = MyController.class)
-@AutoConfigureMockMvc
-public class MyControllerIntegrationTest {
-
- @Autowired
- private MockMvc mockMvc;
-
- /** NB : these tests are commented out because they are environment dependent
- * If you want to run one of them on your machine, follow the instruction above it
- *
- * expects the value of your system environment property 'OS' (it is already defined at least in Windows_NT)
- @Test void givenExistingSystemProperty_whenInjected_thenHasSystemPropertyValue() throws Exception {
- mockMvc.perform(get("/environment_name"))
- .andExpect(content().string(equalTo("Windows_NT")));
- }
-
- * expects the value of the JAVA_HOME environment variable (you need to define it if you haven't yet), with a + and the 'OS' environment property in the end
- @Test void givenCombinationOfSystemPropertyAndEnvironmentVariable_whenInjected_thenHasExpectedValue() throws Exception {
- mockMvc.perform(get("/java_home_and_environment"))
- .andExpect(content().string(equalTo("C:\\Program Files\\Java\\jdk-11.0.14+Windows_NT")));
- }
-
- * expects the content to be ${thispropertydoesnotexist} ; if you have defined an environment property called thispropertydoesnotexist, it would fail
- @Test void givenNonExistentProperty_whenInjected_thenKeepsTheStringValue() throws Exception {
- mockMvc.perform(get("/non_existent_property"))
- .andExpect(content().string(equalTo("${thispropertydoesnotexist}")));
- }
- */
-}
+package com.baeldung.envvariables;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.web.servlet.MockMvc;
+
+@SpringBootTest(classes = MyController.class)
+@AutoConfigureMockMvc
+public class MyControllerIntegrationTest {
+
+ @Autowired
+ private MockMvc mockMvc;
+
+ /** NB : these tests are commented out because they are environment dependent
+ * If you want to run one of them on your machine, follow the instruction above it
+ *
+ * expects the value of your system environment property 'OS' (it is already defined at least in Windows_NT)
+ @Test void givenExistingSystemProperty_whenInjected_thenHasSystemPropertyValue() throws Exception {
+ mockMvc.perform(get("/environment_name"))
+ .andExpect(content().string(equalTo("Windows_NT")));
+ }
+
+ * expects the value of the JAVA_HOME environment variable (you need to define it if you haven't yet), with a + and the 'OS' environment property in the end
+ @Test void givenCombinationOfSystemPropertyAndEnvironmentVariable_whenInjected_thenHasExpectedValue() throws Exception {
+ mockMvc.perform(get("/java_home_and_environment"))
+ .andExpect(content().string(equalTo("C:\\Program Files\\Java\\jdk-11.0.14+Windows_NT")));
+ }
+
+ * expects the content to be ${thispropertydoesnotexist} ; if you have defined an environment property called thispropertydoesnotexist, it would fail
+ @Test void givenNonExistentProperty_whenInjected_thenKeepsTheStringValue() throws Exception {
+ mockMvc.perform(get("/non_existent_property"))
+ .andExpect(content().string(equalTo("${thispropertydoesnotexist}")));
+ }
+ */
+}
diff --git a/spring-boot-modules/spring-boot-resilience4j/README.md b/spring-boot-modules/spring-boot-resilience4j/README.md
new file mode 100644
index 0000000000..e6c73674ce
--- /dev/null
+++ b/spring-boot-modules/spring-boot-resilience4j/README.md
@@ -0,0 +1,3 @@
+### Relevant Articles:
+
+- [Resilience4j Events Endpoints](https://www.baeldung.com/resilience4j-events-endpoints)
\ No newline at end of file
diff --git a/spring-boot-modules/spring-boot-resilience4j/pom.xml b/spring-boot-modules/spring-boot-resilience4j/pom.xml
new file mode 100644
index 0000000000..609bc7fc49
--- /dev/null
+++ b/spring-boot-modules/spring-boot-resilience4j/pom.xml
@@ -0,0 +1,53 @@
+
+
+ 4.0.0
+ com.example
+ spring-boot-resilience4j
+ 0.0.1-SNAPSHOT
+ spring-boot-resilience4j
+
+
+ com.baeldung.spring-boot-modules
+ spring-boot-modules
+ 1.0.0-SNAPSHOT
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+ org.springframework.boot
+ spring-boot-starter-aop
+
+
+ org.springframework.boot
+ spring-boot-starter-actuator
+
+
+ io.github.resilience4j
+ resilience4j-spring-boot2
+ 2.0.2
+
+
+ com.fasterxml.jackson.datatype
+ jackson-datatype-jsr310
+ 2.14.2
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+ com.github.tomakehurst
+ wiremock-jre8
+ 2.35.0
+ test
+
+
+
+
\ No newline at end of file
diff --git a/spring-boot-modules/spring-boot-resilience4j/src/main/java/com/baeldung/resilience4j/eventendpoints/ApiExceptionHandler.java b/spring-boot-modules/spring-boot-resilience4j/src/main/java/com/baeldung/resilience4j/eventendpoints/ApiExceptionHandler.java
new file mode 100644
index 0000000000..4e14d5c532
--- /dev/null
+++ b/spring-boot-modules/spring-boot-resilience4j/src/main/java/com/baeldung/resilience4j/eventendpoints/ApiExceptionHandler.java
@@ -0,0 +1,29 @@
+package com.baeldung.resilience4j.eventendpoints;
+
+import io.github.resilience4j.bulkhead.BulkheadFullException;
+import io.github.resilience4j.circuitbreaker.CallNotPermittedException;
+import io.github.resilience4j.ratelimiter.RequestNotPermitted;
+import java.util.concurrent.TimeoutException;
+import org.springframework.http.HttpStatus;
+import org.springframework.web.bind.annotation.ControllerAdvice;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+import org.springframework.web.bind.annotation.ResponseStatus;
+
+@ControllerAdvice
+public class ApiExceptionHandler {
+ @ExceptionHandler({CallNotPermittedException.class})
+ @ResponseStatus(HttpStatus.SERVICE_UNAVAILABLE)
+ public void handleCallNotPermittedException() {}
+
+ @ExceptionHandler({TimeoutException.class})
+ @ResponseStatus(HttpStatus.REQUEST_TIMEOUT)
+ public void handleTimeoutException() {}
+
+ @ExceptionHandler({BulkheadFullException.class})
+ @ResponseStatus(HttpStatus.BANDWIDTH_LIMIT_EXCEEDED)
+ public void handleBulkheadFullException() {}
+
+ @ExceptionHandler({RequestNotPermitted.class})
+ @ResponseStatus(HttpStatus.TOO_MANY_REQUESTS)
+ public void handleRequestNotPermitted() {}
+}
diff --git a/spring-boot-modules/spring-boot-resilience4j/src/main/java/com/baeldung/resilience4j/eventendpoints/ExternalAPICaller.java b/spring-boot-modules/spring-boot-resilience4j/src/main/java/com/baeldung/resilience4j/eventendpoints/ExternalAPICaller.java
new file mode 100644
index 0000000000..a860e7e3cc
--- /dev/null
+++ b/spring-boot-modules/spring-boot-resilience4j/src/main/java/com/baeldung/resilience4j/eventendpoints/ExternalAPICaller.java
@@ -0,0 +1,28 @@
+package com.baeldung.resilience4j.eventendpoints;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.web.client.RestTemplate;
+
+@Component
+public class ExternalAPICaller {
+ private final RestTemplate restTemplate;
+
+ @Autowired
+ public ExternalAPICaller(RestTemplate restTemplate) {
+ this.restTemplate = restTemplate;
+ }
+
+ public String callApi() {
+ return restTemplate.getForObject("/api/external", String.class);
+ }
+
+ public String callApiWithDelay() {
+ String result = restTemplate.getForObject("/api/external", String.class);
+ try {
+ Thread.sleep(5000);
+ } catch (InterruptedException ignore) {
+ }
+ return result;
+ }
+}
diff --git a/spring-boot-modules/spring-boot-resilience4j/src/main/java/com/baeldung/resilience4j/eventendpoints/ExternalApiCallerConfig.java b/spring-boot-modules/spring-boot-resilience4j/src/main/java/com/baeldung/resilience4j/eventendpoints/ExternalApiCallerConfig.java
new file mode 100644
index 0000000000..7145e58877
--- /dev/null
+++ b/spring-boot-modules/spring-boot-resilience4j/src/main/java/com/baeldung/resilience4j/eventendpoints/ExternalApiCallerConfig.java
@@ -0,0 +1,14 @@
+package com.baeldung.resilience4j.eventendpoints;
+
+import org.springframework.boot.web.client.RestTemplateBuilder;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.client.RestTemplate;
+
+@Configuration
+public class ExternalApiCallerConfig {
+ @Bean
+ public RestTemplate restTemplate() {
+ return new RestTemplateBuilder().rootUri("http://localhost:9090").build();
+ }
+}
diff --git a/spring-boot-modules/spring-boot-resilience4j/src/main/java/com/baeldung/resilience4j/eventendpoints/ResilientApp.java b/spring-boot-modules/spring-boot-resilience4j/src/main/java/com/baeldung/resilience4j/eventendpoints/ResilientApp.java
new file mode 100644
index 0000000000..35b999a9de
--- /dev/null
+++ b/spring-boot-modules/spring-boot-resilience4j/src/main/java/com/baeldung/resilience4j/eventendpoints/ResilientApp.java
@@ -0,0 +1,12 @@
+package com.baeldung.resilience4j.eventendpoints;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication()
+public class ResilientApp {
+
+ public static void main(String[] args) {
+ SpringApplication.run(ResilientApp.class, args);
+ }
+}
diff --git a/spring-boot-modules/spring-boot-resilience4j/src/main/java/com/baeldung/resilience4j/eventendpoints/ResilientAppController.java b/spring-boot-modules/spring-boot-resilience4j/src/main/java/com/baeldung/resilience4j/eventendpoints/ResilientAppController.java
new file mode 100644
index 0000000000..ccd0108c2f
--- /dev/null
+++ b/spring-boot-modules/spring-boot-resilience4j/src/main/java/com/baeldung/resilience4j/eventendpoints/ResilientAppController.java
@@ -0,0 +1,58 @@
+package com.baeldung.resilience4j.eventendpoints;
+
+import io.github.resilience4j.bulkhead.annotation.Bulkhead;
+import io.github.resilience4j.circuitbreaker.annotation.CircuitBreaker;
+import io.github.resilience4j.ratelimiter.annotation.RateLimiter;
+import io.github.resilience4j.retry.annotation.Retry;
+import io.github.resilience4j.timelimiter.annotation.TimeLimiter;
+import java.util.concurrent.CompletableFuture;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("/api/")
+public class ResilientAppController {
+
+ private final ExternalAPICaller externalAPICaller;
+
+ @Autowired
+ public ResilientAppController(ExternalAPICaller externalApi) {
+ this.externalAPICaller = externalApi;
+ }
+
+ @GetMapping("/circuit-breaker")
+ @CircuitBreaker(name = "externalService")
+ public String circuitBreakerApi() {
+ return externalAPICaller.callApi();
+ }
+
+ @GetMapping("/retry")
+ @Retry(name = "externalService", fallbackMethod = "fallbackAfterRetry")
+ public String retryApi() {
+ return externalAPICaller.callApi();
+ }
+
+ @GetMapping("/bulkhead")
+ @Bulkhead(name = "externalService")
+ public String bulkheadApi() {
+ return externalAPICaller.callApi();
+ }
+
+ @GetMapping("/rate-limiter")
+ @RateLimiter(name = "externalService")
+ public String rateLimitApi() {
+ return externalAPICaller.callApi();
+ }
+
+ @GetMapping("/time-limiter")
+ @TimeLimiter(name = "externalService")
+ public CompletableFuture timeLimiterApi() {
+ return CompletableFuture.supplyAsync(externalAPICaller::callApiWithDelay);
+ }
+
+ public String fallbackAfterRetry(Exception ex) {
+ return "all retries have exhausted";
+ }
+}
diff --git a/spring-boot-modules/spring-boot-resilience4j/src/main/resources/application.yml b/spring-boot-modules/spring-boot-resilience4j/src/main/resources/application.yml
new file mode 100644
index 0000000000..81904f56d9
--- /dev/null
+++ b/spring-boot-modules/spring-boot-resilience4j/src/main/resources/application.yml
@@ -0,0 +1,60 @@
+management:
+ endpoints:
+ web:
+ exposure:
+ include: '*'
+
+resilience4j.circuitbreaker:
+ configs:
+ default:
+ registerHealthIndicator: true
+ slidingWindowSize: 10
+ minimumNumberOfCalls: 5
+ permittedNumberOfCallsInHalfOpenState: 3
+ automaticTransitionFromOpenToHalfOpenEnabled: true
+ waitDurationInOpenState: 5s
+ failureRateThreshold: 50
+ eventConsumerBufferSize: 50
+ instances:
+ externalService:
+ baseConfig: default
+
+resilience4j.retry:
+ configs:
+ default:
+ maxAttempts: 3
+ waitDuration: 100
+ instances:
+ externalService:
+ baseConfig: default
+
+resilience4j.timelimiter:
+ configs:
+ default:
+ cancelRunningFuture: true
+ timeoutDuration: 2s
+ instances:
+ externalService:
+ baseConfig: default
+
+resilience4j.bulkhead:
+ configs:
+ default:
+ max-concurrent-calls: 3
+ max-wait-duration: 1
+ instances:
+ externalService:
+ baseConfig: default
+
+resilience4j.ratelimiter:
+ configs:
+ default:
+ limit-for-period: 5
+ limit-refresh-period: 60s
+ timeout-duration: 0s
+ allow-health-indicator-to-fail: true
+ subscribe-for-events: true
+ event-consumer-buffer-size: 50
+ instances:
+ externalService:
+ baseConfig: default
\ No newline at end of file
diff --git a/spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/ResilientAppControllerIntegrationTest.java b/spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/ResilientAppControllerIntegrationTest.java
new file mode 100644
index 0000000000..ae1b89764d
--- /dev/null
+++ b/spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/ResilientAppControllerIntegrationTest.java
@@ -0,0 +1,318 @@
+package com.baeldung.resilience4j.eventendpoints;
+
+import static com.github.tomakehurst.wiremock.client.WireMock.*;
+import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.springframework.http.HttpStatus.*;
+
+import com.baeldung.resilience4j.eventendpoints.model.*;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.datatype.jsr310.JSR310Module;
+import com.github.tomakehurst.wiremock.client.WireMock;
+import com.github.tomakehurst.wiremock.core.WireMockConfiguration;
+import com.github.tomakehurst.wiremock.junit5.WireMockExtension;
+import java.net.URI;
+import java.nio.charset.Charset;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.*;
+import java.util.stream.IntStream;
+import org.apache.commons.io.IOUtils;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.web.client.TestRestTemplate;
+import org.springframework.boot.test.web.server.LocalServerPort;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
+class ResilientAppControllerIntegrationTest {
+
+ @Autowired private TestRestTemplate restTemplate;
+
+ @LocalServerPort private Integer port;
+
+ private static final ObjectMapper objectMapper =
+ new ObjectMapper().registerModule(new JSR310Module());
+
+ @RegisterExtension
+ static WireMockExtension EXTERNAL_SERVICE =
+ WireMockExtension.newInstance()
+ .options(WireMockConfiguration.wireMockConfig().port(9090))
+ .build();
+
+ @Test
+ void testCircuitBreakerEvents() throws Exception {
+ EXTERNAL_SERVICE.stubFor(WireMock.get("/api/external").willReturn(serverError()));
+
+ IntStream.rangeClosed(1, 5)
+ .forEach(
+ i -> {
+ ResponseEntity response =
+ restTemplate.getForEntity("/api/circuit-breaker", String.class);
+ assertThat(response.getStatusCode()).isEqualTo(HttpStatus.INTERNAL_SERVER_ERROR);
+ });
+
+ // Fetch the events generated by the above calls
+ List circuitBreakerEvents = getCircuitBreakerEvents();
+ assertThat(circuitBreakerEvents.size()).isEqualTo(7);
+
+ // The first 5 events are the error events corresponding to the above server error responses
+ IntStream.rangeClosed(0, 4)
+ .forEach(
+ i -> {
+ assertThat(circuitBreakerEvents.get(i).getCircuitBreakerName())
+ .isEqualTo("externalService");
+ assertThat(circuitBreakerEvents.get(i).getType()).isEqualTo("ERROR");
+ assertThat(circuitBreakerEvents.get(i).getCreationTime()).isNotNull();
+ assertThat(circuitBreakerEvents.get(i).getErrorMessage()).isNotNull();
+ assertThat(circuitBreakerEvents.get(i).getDurationInMs()).isNotNull();
+ assertThat(circuitBreakerEvents.get(i).getStateTransition()).isNull();
+ });
+
+ // Following event signals the configured failure rate exceeded
+ CircuitBreakerEvent failureRateExceededEvent = circuitBreakerEvents.get(5);
+ assertThat(failureRateExceededEvent.getCircuitBreakerName()).isEqualTo("externalService");
+ assertThat(failureRateExceededEvent.getType()).isEqualTo("FAILURE_RATE_EXCEEDED");
+ assertThat(failureRateExceededEvent.getCreationTime()).isNotNull();
+ assertThat(failureRateExceededEvent.getErrorMessage()).isNull();
+ assertThat(failureRateExceededEvent.getDurationInMs()).isNull();
+ assertThat(failureRateExceededEvent.getStateTransition()).isNull();
+
+ // Following event signals the state transition from CLOSED TO OPEN
+ CircuitBreakerEvent stateTransitionEvent = circuitBreakerEvents.get(6);
+ assertThat(stateTransitionEvent.getCircuitBreakerName()).isEqualTo("externalService");
+ assertThat(stateTransitionEvent.getType()).isEqualTo("STATE_TRANSITION");
+ assertThat(stateTransitionEvent.getCreationTime()).isNotNull();
+ assertThat(stateTransitionEvent.getErrorMessage()).isNull();
+ assertThat(stateTransitionEvent.getDurationInMs()).isNull();
+ assertThat(stateTransitionEvent.getStateTransition()).isEqualTo("CLOSED_TO_OPEN");
+
+ IntStream.rangeClosed(1, 5)
+ .forEach(
+ i -> {
+ ResponseEntity response =
+ restTemplate.getForEntity("/api/circuit-breaker", String.class);
+ assertThat(response.getStatusCode()).isEqualTo(HttpStatus.SERVICE_UNAVAILABLE);
+ });
+
+ /// Fetch the events generated by the above calls
+ List updatedCircuitBreakerEvents = getCircuitBreakerEvents();
+ assertThat(updatedCircuitBreakerEvents.size()).isEqualTo(12);
+
+ // Newly added events will be of type NOT_PERMITTED since the Circuit Breaker is in OPEN state
+ IntStream.rangeClosed(7, 11)
+ .forEach(
+ i -> {
+ assertThat(updatedCircuitBreakerEvents.get(i).getCircuitBreakerName())
+ .isEqualTo("externalService");
+ assertThat(updatedCircuitBreakerEvents.get(i).getType()).isEqualTo("NOT_PERMITTED");
+ assertThat(updatedCircuitBreakerEvents.get(i).getCreationTime()).isNotNull();
+ assertThat(updatedCircuitBreakerEvents.get(i).getErrorMessage()).isNull();
+ assertThat(updatedCircuitBreakerEvents.get(i).getDurationInMs()).isNull();
+ assertThat(updatedCircuitBreakerEvents.get(i).getStateTransition()).isNull();
+ });
+
+ EXTERNAL_SERVICE.verify(5, getRequestedFor(urlEqualTo("/api/external")));
+ }
+
+ private List getCircuitBreakerEvents() throws Exception {
+ String jsonEventsList =
+ IOUtils.toString(
+ new URI("http://localhost:" + port + "/actuator/circuitbreakerevents"),
+ Charset.forName("UTF-8"));
+ CircuitBreakerEvents circuitBreakerEvents =
+ objectMapper.readValue(jsonEventsList, CircuitBreakerEvents.class);
+ return circuitBreakerEvents.getCircuitBreakerEvents();
+ }
+
+ @Test
+ void testRetryEvents() throws Exception {
+ EXTERNAL_SERVICE.stubFor(WireMock.get("/api/external").willReturn(ok()));
+ ResponseEntity response1 = restTemplate.getForEntity("/api/retry", String.class);
+ EXTERNAL_SERVICE.verify(1, getRequestedFor(urlEqualTo("/api/external")));
+
+ EXTERNAL_SERVICE.resetRequests();
+
+ EXTERNAL_SERVICE.stubFor(WireMock.get("/api/external").willReturn(serverError()));
+ ResponseEntity response2 = restTemplate.getForEntity("/api/retry", String.class);
+ assertThat(response2.getBody()).isEqualTo("all retries have exhausted");
+ EXTERNAL_SERVICE.verify(3, getRequestedFor(urlEqualTo("/api/external")));
+
+ List retryEvents = getRetryEvents();
+ assertThat(retryEvents.size()).isEqualTo(3);
+
+ // First 2 events should be retry events
+ IntStream.rangeClosed(0, 1)
+ .forEach(
+ i -> {
+ assertThat(retryEvents.get(i).getRetryName()).isEqualTo("externalService");
+ assertThat(retryEvents.get(i).getType()).isEqualTo("RETRY");
+ assertThat(retryEvents.get(i).getCreationTime()).isNotNull();
+ assertThat(retryEvents.get(i).getErrorMessage()).isNotNull();
+ assertThat(retryEvents.get(i).getNumberOfAttempts()).isEqualTo(i + 1);
+ });
+
+ // Last event should be an error event because the configured num of retries is reached
+ RetryEvent errorRetryEvent = retryEvents.get(2);
+ assertThat(errorRetryEvent.getRetryName()).isEqualTo("externalService");
+ assertThat(errorRetryEvent.getType()).isEqualTo("ERROR");
+ assertThat(errorRetryEvent.getCreationTime()).isNotNull();
+ assertThat(errorRetryEvent.getErrorMessage()).isNotNull();
+ assertThat(errorRetryEvent.getNumberOfAttempts()).isEqualTo(3);
+ }
+
+ private List getRetryEvents() throws Exception {
+ String jsonEventsList =
+ IOUtils.toString(
+ new URI("http://localhost:" + port + "/actuator/retryevents"),
+ Charset.forName("UTF-8"));
+ RetryEvents retryEvents = objectMapper.readValue(jsonEventsList, RetryEvents.class);
+ return retryEvents.getRetryEvents();
+ }
+
+ @Test
+ void testTimeLimiterEvents() throws Exception {
+ EXTERNAL_SERVICE.stubFor(WireMock.get("/api/external").willReturn(ok()));
+ ResponseEntity response = restTemplate.getForEntity("/api/time-limiter", String.class);
+
+ assertThat(response.getStatusCode()).isEqualTo(HttpStatus.REQUEST_TIMEOUT);
+ EXTERNAL_SERVICE.verify(1, getRequestedFor(urlEqualTo("/api/external")));
+
+ List timeLimiterEvents = getTimeLimiterEvents();
+ assertThat(timeLimiterEvents.size()).isEqualTo(1);
+ TimeLimiterEvent timeoutEvent = timeLimiterEvents.get(0);
+ assertThat(timeoutEvent.getTimeLimiterName()).isEqualTo("externalService");
+ assertThat(timeoutEvent.getType()).isEqualTo("TIMEOUT");
+ assertThat(timeoutEvent.getCreationTime()).isNotNull();
+ }
+
+ private List getTimeLimiterEvents() throws Exception {
+ String jsonEventsList =
+ IOUtils.toString(
+ new URI("http://localhost:" + port + "/actuator/timelimiterevents"),
+ Charset.forName("UTF-8"));
+ TimeLimiterEvents timeLimiterEvents =
+ objectMapper.readValue(jsonEventsList, TimeLimiterEvents.class);
+ return timeLimiterEvents.getTimeLimiterEvents();
+ }
+
+ @Test
+ void testBulkheadEvents() throws Exception {
+ EXTERNAL_SERVICE.stubFor(WireMock.get("/api/external").willReturn(ok()));
+ Map responseStatusCount = new ConcurrentHashMap<>();
+ ExecutorService executorService = Executors.newFixedThreadPool(5);
+
+ List> tasks = new ArrayList<>();
+ IntStream.rangeClosed(1, 5)
+ .forEach(
+ i ->
+ tasks.add(
+ () -> {
+ ResponseEntity response =
+ restTemplate.getForEntity("/api/bulkhead", String.class);
+ return response.getStatusCodeValue();
+ }));
+
+ List> futures = executorService.invokeAll(tasks);
+ for (Future future : futures) {
+ int statusCode = future.get();
+ responseStatusCount.merge(statusCode, 1, Integer::sum);
+ }
+ executorService.shutdown();
+
+ assertEquals(2, responseStatusCount.keySet().size());
+ assertTrue(responseStatusCount.containsKey(BANDWIDTH_LIMIT_EXCEEDED.value()));
+ assertTrue(responseStatusCount.containsKey(OK.value()));
+ EXTERNAL_SERVICE.verify(3, getRequestedFor(urlEqualTo("/api/external")));
+
+ List bulkheadEvents = getBulkheadEvents();
+
+ // Based on the configuration, the first 3 calls should be permitted, so we should see the
+ // CALL_PERMITTED events
+ IntStream.rangeClosed(0, 2)
+ .forEach(
+ i -> {
+ assertThat(bulkheadEvents.get(i).getBulkheadName()).isEqualTo("externalService");
+ assertThat(bulkheadEvents.get(i).getType()).isEqualTo("CALL_PERMITTED");
+ assertThat(bulkheadEvents.get(i).getCreationTime()).isNotNull();
+ });
+
+ // For the other 2 calls made we should see the CALL_REJECTED events
+ IntStream.rangeClosed(3, 4)
+ .forEach(
+ i -> {
+ assertThat(bulkheadEvents.get(i).getBulkheadName()).isEqualTo("externalService");
+ assertThat(bulkheadEvents.get(i).getType()).isEqualTo("CALL_REJECTED");
+ assertThat(bulkheadEvents.get(i).getCreationTime()).isNotNull();
+ });
+ }
+
+ private List getBulkheadEvents() throws Exception {
+ String jsonEventsList =
+ IOUtils.toString(
+ new URI("http://localhost:" + port + "/actuator/bulkheadevents"),
+ Charset.forName("UTF-8"));
+ BulkheadEvents bulkheadEvents = objectMapper.readValue(jsonEventsList, BulkheadEvents.class);
+ return bulkheadEvents.getBulkheadEvents();
+ }
+
+ @Test
+ void testRateLimiterEvents() throws Exception {
+ EXTERNAL_SERVICE.stubFor(WireMock.get("/api/external").willReturn(ok()));
+ Map responseStatusCount = new ConcurrentHashMap<>();
+
+ IntStream.rangeClosed(1, 50)
+ .forEach(
+ i -> {
+ ResponseEntity response =
+ restTemplate.getForEntity("/api/rate-limiter", String.class);
+ int statusCode = response.getStatusCodeValue();
+ responseStatusCount.put(
+ statusCode, responseStatusCount.getOrDefault(statusCode, 0) + 1);
+ });
+
+ assertEquals(2, responseStatusCount.keySet().size());
+ assertTrue(responseStatusCount.containsKey(TOO_MANY_REQUESTS.value()));
+ assertTrue(responseStatusCount.containsKey(OK.value()));
+ EXTERNAL_SERVICE.verify(5, getRequestedFor(urlEqualTo("/api/external")));
+
+ List rateLimiterEvents = getRateLimiterEvents();
+ assertThat(rateLimiterEvents.size()).isEqualTo(50);
+
+ // First allowed calls in the rate limit is 5, so we should see for those SUCCESSFUL_ACQUIRE
+ // events
+ IntStream.rangeClosed(0, 4)
+ .forEach(
+ i -> {
+ assertThat(rateLimiterEvents.get(i).getRateLimiterName())
+ .isEqualTo("externalService");
+ assertThat(rateLimiterEvents.get(i).getType()).isEqualTo("SUCCESSFUL_ACQUIRE");
+ assertThat(rateLimiterEvents.get(i).getCreationTime()).isNotNull();
+ });
+
+ // the rest should be FAILED_ACQUIRE events since the rate limiter kicks in
+ IntStream.rangeClosed(5, rateLimiterEvents.size() - 1)
+ .forEach(
+ i -> {
+ assertThat(rateLimiterEvents.get(i).getRateLimiterName())
+ .isEqualTo("externalService");
+ assertThat(rateLimiterEvents.get(i).getType()).isEqualTo("FAILED_ACQUIRE");
+ assertThat(rateLimiterEvents.get(i).getCreationTime()).isNotNull();
+ });
+ }
+
+ private List getRateLimiterEvents() throws Exception {
+ String jsonEventsList =
+ IOUtils.toString(
+ new URI("http://localhost:" + port + "/actuator/ratelimiterevents"),
+ Charset.forName("UTF-8"));
+ RateLimiterEvents rateLimiterEvents =
+ objectMapper.readValue(jsonEventsList, RateLimiterEvents.class);
+ return rateLimiterEvents.getRateLimiterEvents();
+ }
+}
diff --git a/spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/model/BulkheadEvent.java b/spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/model/BulkheadEvent.java
new file mode 100644
index 0000000000..6d25006bbb
--- /dev/null
+++ b/spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/model/BulkheadEvent.java
@@ -0,0 +1,50 @@
+package com.baeldung.resilience4j.eventendpoints.model;
+
+import java.time.ZonedDateTime;
+import java.util.Objects;
+
+public class BulkheadEvent {
+
+ private String bulkheadName;
+ private String type;
+ private ZonedDateTime creationTime;
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+ BulkheadEvent that = (BulkheadEvent) o;
+ return Objects.equals(bulkheadName, that.bulkheadName)
+ && Objects.equals(type, that.type)
+ && Objects.equals(creationTime, that.creationTime);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(bulkheadName, type, creationTime);
+ }
+
+ public String getBulkheadName() {
+ return bulkheadName;
+ }
+
+ public void setBulkheadName(String bulkheadName) {
+ this.bulkheadName = bulkheadName;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+
+ public ZonedDateTime getCreationTime() {
+ return creationTime;
+ }
+
+ public void setCreationTime(ZonedDateTime creationTime) {
+ this.creationTime = creationTime;
+ }
+}
diff --git a/spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/model/BulkheadEvents.java b/spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/model/BulkheadEvents.java
new file mode 100644
index 0000000000..7d8b6b2a5f
--- /dev/null
+++ b/spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/model/BulkheadEvents.java
@@ -0,0 +1,16 @@
+package com.baeldung.resilience4j.eventendpoints.model;
+
+import java.util.List;
+
+public class BulkheadEvents {
+
+ private List bulkheadEvents;
+
+ public List getBulkheadEvents() {
+ return bulkheadEvents;
+ }
+
+ public void setBulkheadEvents(List bulkheadEvents) {
+ this.bulkheadEvents = bulkheadEvents;
+ }
+}
diff --git a/spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/model/CircuitBreakerEvent.java b/spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/model/CircuitBreakerEvent.java
new file mode 100644
index 0000000000..0a07c9b495
--- /dev/null
+++ b/spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/model/CircuitBreakerEvent.java
@@ -0,0 +1,81 @@
+package com.baeldung.resilience4j.eventendpoints.model;
+
+import java.time.ZonedDateTime;
+import java.util.Objects;
+
+public class CircuitBreakerEvent {
+
+ private String circuitBreakerName;
+ private String type;
+ private ZonedDateTime creationTime;
+ private String errorMessage;
+ private Integer durationInMs;
+ private String stateTransition;
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+ CircuitBreakerEvent that = (CircuitBreakerEvent) o;
+ return Objects.equals(circuitBreakerName, that.circuitBreakerName)
+ && Objects.equals(type, that.type)
+ && Objects.equals(creationTime, that.creationTime)
+ && Objects.equals(errorMessage, that.errorMessage)
+ && Objects.equals(durationInMs, that.durationInMs)
+ && Objects.equals(stateTransition, that.stateTransition);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(
+ circuitBreakerName, type, creationTime, errorMessage, durationInMs, stateTransition);
+ }
+
+ public String getCircuitBreakerName() {
+ return circuitBreakerName;
+ }
+
+ public void setCircuitBreakerName(String circuitBreakerName) {
+ this.circuitBreakerName = circuitBreakerName;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+
+ public ZonedDateTime getCreationTime() {
+ return creationTime;
+ }
+
+ public void setCreationTime(ZonedDateTime creationTime) {
+ this.creationTime = creationTime;
+ }
+
+ public String getErrorMessage() {
+ return errorMessage;
+ }
+
+ public void setErrorMessage(String errorMessage) {
+ this.errorMessage = errorMessage;
+ }
+
+ public Integer getDurationInMs() {
+ return durationInMs;
+ }
+
+ public void setDurationInMs(Integer durationInMs) {
+ this.durationInMs = durationInMs;
+ }
+
+ public String getStateTransition() {
+ return stateTransition;
+ }
+
+ public void setStateTransition(String stateTransition) {
+ this.stateTransition = stateTransition;
+ }
+}
diff --git a/spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/model/CircuitBreakerEvents.java b/spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/model/CircuitBreakerEvents.java
new file mode 100644
index 0000000000..c3ec741d05
--- /dev/null
+++ b/spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/model/CircuitBreakerEvents.java
@@ -0,0 +1,16 @@
+package com.baeldung.resilience4j.eventendpoints.model;
+
+import java.util.List;
+
+public class CircuitBreakerEvents {
+
+ private List circuitBreakerEvents;
+
+ public List getCircuitBreakerEvents() {
+ return circuitBreakerEvents;
+ }
+
+ public void setCircuitBreakerEvents(List circuitBreakerEvents) {
+ this.circuitBreakerEvents = circuitBreakerEvents;
+ }
+}
diff --git a/spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/model/RateLimiterEvent.java b/spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/model/RateLimiterEvent.java
new file mode 100644
index 0000000000..ccc0f5a9b3
--- /dev/null
+++ b/spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/model/RateLimiterEvent.java
@@ -0,0 +1,50 @@
+package com.baeldung.resilience4j.eventendpoints.model;
+
+import java.time.ZonedDateTime;
+import java.util.Objects;
+
+public class RateLimiterEvent {
+
+ private String rateLimiterName;
+ private String type;
+ private ZonedDateTime creationTime;
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+ RateLimiterEvent that = (RateLimiterEvent) o;
+ return Objects.equals(rateLimiterName, that.rateLimiterName)
+ && Objects.equals(type, that.type)
+ && Objects.equals(creationTime, that.creationTime);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(rateLimiterName, type, creationTime);
+ }
+
+ public String getRateLimiterName() {
+ return rateLimiterName;
+ }
+
+ public void setRateLimiterName(String rateLimiterName) {
+ this.rateLimiterName = rateLimiterName;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+
+ public ZonedDateTime getCreationTime() {
+ return creationTime;
+ }
+
+ public void setCreationTime(ZonedDateTime creationTime) {
+ this.creationTime = creationTime;
+ }
+}
diff --git a/spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/model/RateLimiterEvents.java b/spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/model/RateLimiterEvents.java
new file mode 100644
index 0000000000..c0cfcdf0d7
--- /dev/null
+++ b/spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/model/RateLimiterEvents.java
@@ -0,0 +1,16 @@
+package com.baeldung.resilience4j.eventendpoints.model;
+
+import java.util.List;
+
+public class RateLimiterEvents {
+
+ private List rateLimiterEvents;
+
+ public List getRateLimiterEvents() {
+ return rateLimiterEvents;
+ }
+
+ public void setRateLimiterEvents(List rateLimiterEvents) {
+ this.rateLimiterEvents = rateLimiterEvents;
+ }
+}
diff --git a/spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/model/RetryEvent.java b/spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/model/RetryEvent.java
new file mode 100644
index 0000000000..a17d45c679
--- /dev/null
+++ b/spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/model/RetryEvent.java
@@ -0,0 +1,70 @@
+package com.baeldung.resilience4j.eventendpoints.model;
+
+import java.time.ZonedDateTime;
+import java.util.Objects;
+
+public class RetryEvent {
+
+ private String retryName;
+ private String type;
+ private ZonedDateTime creationTime;
+ private String errorMessage;
+ private Integer numberOfAttempts;
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+ RetryEvent that = (RetryEvent) o;
+ return Objects.equals(retryName, that.retryName)
+ && Objects.equals(type, that.type)
+ && Objects.equals(creationTime, that.creationTime)
+ && Objects.equals(errorMessage, that.errorMessage)
+ && Objects.equals(numberOfAttempts, that.numberOfAttempts);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(retryName, type, creationTime, errorMessage, numberOfAttempts);
+ }
+
+ public String getRetryName() {
+ return retryName;
+ }
+
+ public void setRetryName(String retryName) {
+ this.retryName = retryName;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+
+ public ZonedDateTime getCreationTime() {
+ return creationTime;
+ }
+
+ public void setCreationTime(ZonedDateTime creationTime) {
+ this.creationTime = creationTime;
+ }
+
+ public String getErrorMessage() {
+ return errorMessage;
+ }
+
+ public void setErrorMessage(String errorMessage) {
+ this.errorMessage = errorMessage;
+ }
+
+ public Integer getNumberOfAttempts() {
+ return numberOfAttempts;
+ }
+
+ public void setNumberOfAttempts(Integer numberOfAttempts) {
+ this.numberOfAttempts = numberOfAttempts;
+ }
+}
diff --git a/spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/model/RetryEvents.java b/spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/model/RetryEvents.java
new file mode 100644
index 0000000000..e5bb73ff0c
--- /dev/null
+++ b/spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/model/RetryEvents.java
@@ -0,0 +1,16 @@
+package com.baeldung.resilience4j.eventendpoints.model;
+
+import java.util.List;
+
+public class RetryEvents {
+
+ private List retryEvents;
+
+ public List getRetryEvents() {
+ return retryEvents;
+ }
+
+ public void setRetryEvents(List retryEvents) {
+ this.retryEvents = retryEvents;
+ }
+}
diff --git a/spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/model/TimeLimiterEvent.java b/spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/model/TimeLimiterEvent.java
new file mode 100644
index 0000000000..07f891c401
--- /dev/null
+++ b/spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/model/TimeLimiterEvent.java
@@ -0,0 +1,50 @@
+package com.baeldung.resilience4j.eventendpoints.model;
+
+import java.time.ZonedDateTime;
+import java.util.Objects;
+
+public class TimeLimiterEvent {
+
+ private String timeLimiterName;
+ private String type;
+ private ZonedDateTime creationTime;
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+ TimeLimiterEvent that = (TimeLimiterEvent) o;
+ return Objects.equals(timeLimiterName, that.timeLimiterName)
+ && Objects.equals(type, that.type)
+ && Objects.equals(creationTime, that.creationTime);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(timeLimiterName, type, creationTime);
+ }
+
+ public String getTimeLimiterName() {
+ return timeLimiterName;
+ }
+
+ public void setTimeLimiterName(String timeLimiterName) {
+ this.timeLimiterName = timeLimiterName;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+
+ public ZonedDateTime getCreationTime() {
+ return creationTime;
+ }
+
+ public void setCreationTime(ZonedDateTime creationTime) {
+ this.creationTime = creationTime;
+ }
+}
diff --git a/spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/model/TimeLimiterEvents.java b/spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/model/TimeLimiterEvents.java
new file mode 100644
index 0000000000..739ff91916
--- /dev/null
+++ b/spring-boot-modules/spring-boot-resilience4j/src/test/java/com/baeldung/resilience4j/eventendpoints/model/TimeLimiterEvents.java
@@ -0,0 +1,16 @@
+package com.baeldung.resilience4j.eventendpoints.model;
+
+import java.util.List;
+
+public class TimeLimiterEvents {
+
+ private List timeLimiterEvents;
+
+ public List getTimeLimiterEvents() {
+ return timeLimiterEvents;
+ }
+
+ public void setTimeLimiterEvents(List timeLimiterEvents) {
+ this.timeLimiterEvents = timeLimiterEvents;
+ }
+}
diff --git a/spring-boot-modules/spring-boot-testing/pom.xml b/spring-boot-modules/spring-boot-testing/pom.xml
index f54a1964f9..7eadfd9b24 100644
--- a/spring-boot-modules/spring-boot-testing/pom.xml
+++ b/spring-boot-modules/spring-boot-testing/pom.xml
@@ -147,7 +147,7 @@
com.baeldung.boot.Application
2.2.4
- 2.4-M1-groovy-4.0
+ 2.4-M1-groovy-3.0
2.0.0
3.10.1
0.7.2
diff --git a/spring-boot-modules/spring-boot-validation/README.md b/spring-boot-modules/spring-boot-validation/README.md
index 93b6e7d2d1..f20f846b60 100644
--- a/spring-boot-modules/spring-boot-validation/README.md
+++ b/spring-boot-modules/spring-boot-validation/README.md
@@ -2,3 +2,4 @@
- [Spring Validation in the Service Layer](https://www.baeldung.com/spring-service-layer-validation)
- [Validation in Spring Boot](https://www.baeldung.com/spring-boot-bean-validation)
+- [Spring Null-Safety Annotations](https://www.baeldung.com/spring-null-safety-annotations)
\ No newline at end of file
diff --git a/spring-core-2/src/main/java/com/baeldung/nullibility/Person.java b/spring-boot-modules/spring-boot-validation/src/main/java/com/baeldung/nullibility/Person.java
similarity index 100%
rename from spring-core-2/src/main/java/com/baeldung/nullibility/Person.java
rename to spring-boot-modules/spring-boot-validation/src/main/java/com/baeldung/nullibility/Person.java
diff --git a/spring-core-2/src/main/java/com/baeldung/nullibility/package-info.java b/spring-boot-modules/spring-boot-validation/src/main/java/com/baeldung/nullibility/package-info.java
similarity index 100%
rename from spring-core-2/src/main/java/com/baeldung/nullibility/package-info.java
rename to spring-boot-modules/spring-boot-validation/src/main/java/com/baeldung/nullibility/package-info.java
diff --git a/spring-boot-rest/pom.xml b/spring-boot-rest/pom.xml
index fb5df4e68a..81c9ebbec8 100644
--- a/spring-boot-rest/pom.xml
+++ b/spring-boot-rest/pom.xml
@@ -20,6 +20,12 @@
org.springframework.boot
spring-boot-starter-web
+
+
+ tomcat-embed-el
+ org.apache.tomcat.embed
+
+
com.fasterxml.jackson.dataformat
@@ -42,37 +48,101 @@
org.springframework.boot
spring-boot-starter-data-jpa
+
+
+ jakarta.xml.bind-api
+ jakarta.xml.bind
+
+
+ txw2
+ org.glassfish.jaxb
+
+
org.springframework.boot
spring-boot-starter-data-rest
+
+
+ spring-boot-starter-web
+ org.springframework.boot
+
+
org.springframework.boot
spring-boot-starter-hateoas
+
+
+ spring-boot-starter-web
+ org.springframework.boot
+
+
com.google.guava
guava
${guava.version}
+
+
+ listenablefuture
+ com.google.guava
+
+
+ jsr305
+ com.google.code.findbugs
+
+
+ error_prone_annotations
+ com.google.errorprone
+
+
+ j2objc-annotations
+ com.google.j2objc
+
+
org.springframework.boot
spring-boot-starter-test
test
+
+
+ jakarta.xml.bind-api
+ jakarta.xml.bind
+
+
net.sourceforge.htmlunit
htmlunit
test
+
+
+ commons-logging
+ commons-logging
+
+
org.modelmapper
modelmapper
${modelmapper.version}
+
+ io.rest-assured
+ rest-assured
+ 3.3.0
+ provided
+
+
+ hamcrest-library
+ org.hamcrest
+
+
+
@@ -90,5 +160,4 @@
3.1.0
3.3.2
-
-
\ No newline at end of file
+
diff --git a/spring-boot-rest/src/main/java/com/baeldung/springpagination/repository/PostRepository.java b/spring-boot-rest/src/main/java/com/baeldung/springpagination/repository/PostRepository.java
index acdc01df94..62f05f8262 100644
--- a/spring-boot-rest/src/main/java/com/baeldung/springpagination/repository/PostRepository.java
+++ b/spring-boot-rest/src/main/java/com/baeldung/springpagination/repository/PostRepository.java
@@ -10,7 +10,7 @@ import org.springframework.data.repository.query.Param;
import com.baeldung.springpagination.model.Post;
import com.baeldung.springpagination.model.User;
-public interface PostRepository extends JpaRepository, PagingAndSortingRepository {
+public interface PostRepository extends JpaRepository {
@Query("select u from Post u where u.userName=:userName")
Page findByUser(@Param("userName") String userName, Pageable pageReq);
diff --git a/spring-cloud-modules/pom.xml b/spring-cloud-modules/pom.xml
index 68c7d45b7c..dafc5b628e 100644
--- a/spring-cloud-modules/pom.xml
+++ b/spring-cloud-modules/pom.xml
@@ -54,7 +54,8 @@
spring-cloud-bus
spring-cloud-data-flow
spring-cloud-sleuth
- spring-cloud-open-telemetry
+ spring-cloud-open-telemetry
+ spring-cloud-azure
diff --git a/spring-cloud-modules/spring-cloud-azure/README.md b/spring-cloud-modules/spring-cloud-azure/README.md
new file mode 100644
index 0000000000..7f0e9815ae
--- /dev/null
+++ b/spring-cloud-modules/spring-cloud-azure/README.md
@@ -0,0 +1,13 @@
+# Spring Cloud Azure
+
+# Relevant Articles
+- [A Guide to Spring Cloud Azure Key Vault](https://www.baeldung.com/spring-cloud-azure-key-vault)
+# Azure KeyVault:
+In order to create the secrets, follow these steps:
+- create an Azure account
+- install the Azure Cli an run the following commands
+- login on Azure -> _az-login_
+- create a resource group: _az group create --name spring_cloud_azure --location eastus_
+- create a keyvault storage: _az keyvault create --name new_keyvault --resource-group spring_cloud_azure --location eastus_
+- create the secrets: > az keyvault secret set --name my-database-secret --value my-database-secret-value --vault-name new_keyvault,> az keyvault secret set --name my-secret --value my-secret-value --vault-name new_keyvault
+```
diff --git a/spring-cloud-modules/spring-cloud-azure/pom.xml b/spring-cloud-modules/spring-cloud-azure/pom.xml
new file mode 100644
index 0000000000..86706c794f
--- /dev/null
+++ b/spring-cloud-modules/spring-cloud-azure/pom.xml
@@ -0,0 +1,59 @@
+
+
+ 4.0.0
+ com.baeldung.spring.cloud
+ spring-cloud-azure
+ spring-cloud-azure
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+
+
+ jar
+ Spring Cloud Azure Examples
+ 1.0.0-SNAPSHOT
+
+
+ com.baeldung.spring.cloud
+ spring-cloud-modules
+ 1.0.0-SNAPSHOT
+
+
+
+
+ org.springframework.boot
+ spring-boot-dependencies
+ 2.7.8
+ pom
+ import
+
+
+ org.springframework.cloud
+ spring-cloud-dependencies
+ ${spring-cloud-dependencies.version}
+ pom
+ import
+
+
+
+
+
+
+
+ com.azure.spring
+ spring-cloud-azure-starter-keyvault-secrets
+ ${azure-key-vault-extension-version}
+
+
+
+
+ 2021.0.3
+ 4.0.0
+
+
+
\ No newline at end of file
diff --git a/spring-cloud-modules/spring-cloud-azure/src/main/java/com/baeldung/spring/cloud/azure/keyvault/Application.java b/spring-cloud-modules/spring-cloud-azure/src/main/java/com/baeldung/spring/cloud/azure/keyvault/Application.java
new file mode 100644
index 0000000000..8a44a502de
--- /dev/null
+++ b/spring-cloud-modules/spring-cloud-azure/src/main/java/com/baeldung/spring/cloud/azure/keyvault/Application.java
@@ -0,0 +1,36 @@
+package com.baeldung.spring.cloud.azure.keyvault;
+
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.CommandLineRunner;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+import com.azure.security.keyvault.secrets.models.KeyVaultSecret;
+import com.baeldung.spring.cloud.azure.keyvault.service.KeyVaultClient;
+import com.baeldung.spring.cloud.azure.keyvault.service.KeyVaultAutoconfiguredClient;
+
+@SpringBootApplication
+public class Application implements CommandLineRunner {
+
+ @Value("${database.secret.value}")
+ private String mySecret;
+
+ private final KeyVaultClient keyVaultClient;
+
+ public Application(@Qualifier(value = "KeyVaultAutoconfiguredClient") KeyVaultAutoconfiguredClient keyVaultAutoconfiguredClient) {
+ this.keyVaultClient = keyVaultAutoconfiguredClient;
+ }
+
+ public static void main(String[] args) {
+ SpringApplication.run(Application.class);
+
+ }
+
+ @Override
+ public void run(String... args) throws Exception {
+ //KeyVaultSecret keyVaultSecret = keyVaultClient.getSecret("my-secret");
+ //System.out.println("Hey, our secret is here ->" + keyVaultSecret.getValue());
+ //System.out.println("Hey, our secret is here from application properties file ->" + mySecret);
+ }
+}
diff --git a/spring-cloud-modules/spring-cloud-azure/src/main/java/com/baeldung/spring/cloud/azure/keyvault/data/KeyVaultProperties.java b/spring-cloud-modules/spring-cloud-azure/src/main/java/com/baeldung/spring/cloud/azure/keyvault/data/KeyVaultProperties.java
new file mode 100644
index 0000000000..edd7c01416
--- /dev/null
+++ b/spring-cloud-modules/spring-cloud-azure/src/main/java/com/baeldung/spring/cloud/azure/keyvault/data/KeyVaultProperties.java
@@ -0,0 +1,52 @@
+package com.baeldung.spring.cloud.azure.keyvault.data;
+
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.boot.context.properties.ConstructorBinding;
+
+@ConfigurationProperties("azure.keyvault")
+@ConstructorBinding
+public class KeyVaultProperties {
+ private String vaultUrl;
+ private String tenantId;
+ private String clientId;
+ private String clientSecret;
+
+ public KeyVaultProperties(String vaultUrl, String tenantId, String clientId, String clientSecret) {
+ this.vaultUrl = vaultUrl;
+ this.tenantId = tenantId;
+ this.clientId = clientId;
+ this.clientSecret = clientSecret;
+ }
+
+ public String getVaultUrl() {
+ return vaultUrl;
+ }
+
+ public void setVaultUrl(String vaultUrl) {
+ this.vaultUrl = vaultUrl;
+ }
+
+ public String getTenantId() {
+ return tenantId;
+ }
+
+ public void setTenantId(String tenantId) {
+ this.tenantId = tenantId;
+ }
+
+ public String getClientId() {
+ return clientId;
+ }
+
+ public void setClientId(String clientId) {
+ this.clientId = clientId;
+ }
+
+ public String getClientSecret() {
+ return clientSecret;
+ }
+
+ public void setClientSecret(String clientSecret) {
+ this.clientSecret = clientSecret;
+ }
+}
diff --git a/spring-cloud-modules/spring-cloud-azure/src/main/java/com/baeldung/spring/cloud/azure/keyvault/service/KeyVaultAutoconfiguredClient.java b/spring-cloud-modules/spring-cloud-azure/src/main/java/com/baeldung/spring/cloud/azure/keyvault/service/KeyVaultAutoconfiguredClient.java
new file mode 100644
index 0000000000..392c15c6b4
--- /dev/null
+++ b/spring-cloud-modules/spring-cloud-azure/src/main/java/com/baeldung/spring/cloud/azure/keyvault/service/KeyVaultAutoconfiguredClient.java
@@ -0,0 +1,19 @@
+package com.baeldung.spring.cloud.azure.keyvault.service;
+
+import org.springframework.stereotype.Component;
+
+import com.azure.security.keyvault.secrets.SecretClient;
+
+@Component("KeyVaultAutoconfiguredClient")
+public class KeyVaultAutoconfiguredClient implements KeyVaultClient {
+ private final SecretClient secretClient;
+
+ public KeyVaultAutoconfiguredClient(SecretClient secretClient) {
+ this.secretClient = secretClient;
+ }
+
+ @Override
+ public SecretClient getSecretClient() {
+ return secretClient;
+ }
+}
diff --git a/spring-cloud-modules/spring-cloud-azure/src/main/java/com/baeldung/spring/cloud/azure/keyvault/service/KeyVaultClient.java b/spring-cloud-modules/spring-cloud-azure/src/main/java/com/baeldung/spring/cloud/azure/keyvault/service/KeyVaultClient.java
new file mode 100644
index 0000000000..4f4148250e
--- /dev/null
+++ b/spring-cloud-modules/spring-cloud-azure/src/main/java/com/baeldung/spring/cloud/azure/keyvault/service/KeyVaultClient.java
@@ -0,0 +1,21 @@
+package com.baeldung.spring.cloud.azure.keyvault.service;
+
+import java.util.NoSuchElementException;
+
+import com.azure.security.keyvault.secrets.SecretClient;
+import com.azure.security.keyvault.secrets.models.KeyVaultSecret;
+
+public interface KeyVaultClient {
+
+ SecretClient getSecretClient();
+
+ default KeyVaultSecret getSecret(String key) {
+ KeyVaultSecret secret;
+ try {
+ secret = getSecretClient().getSecret(key);
+ } catch (Exception ex) {
+ throw new NoSuchElementException();
+ }
+ return secret;
+ }
+}
diff --git a/spring-cloud-modules/spring-cloud-azure/src/main/java/com/baeldung/spring/cloud/azure/keyvault/service/KeyVaultManuallyConfiguredClient.java b/spring-cloud-modules/spring-cloud-azure/src/main/java/com/baeldung/spring/cloud/azure/keyvault/service/KeyVaultManuallyConfiguredClient.java
new file mode 100644
index 0000000000..33a85f6bb9
--- /dev/null
+++ b/spring-cloud-modules/spring-cloud-azure/src/main/java/com/baeldung/spring/cloud/azure/keyvault/service/KeyVaultManuallyConfiguredClient.java
@@ -0,0 +1,31 @@
+package com.baeldung.spring.cloud.azure.keyvault.service;
+
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+import com.azure.identity.ClientSecretCredentialBuilder;
+import com.azure.security.keyvault.secrets.SecretClient;
+import com.azure.security.keyvault.secrets.SecretClientBuilder;
+import com.baeldung.spring.cloud.azure.keyvault.data.KeyVaultProperties;
+
+@EnableConfigurationProperties(KeyVaultProperties.class)
+@Component("KeyVaultManuallyConfiguredClient")
+public class KeyVaultManuallyConfiguredClient implements KeyVaultClient {
+
+ private KeyVaultProperties keyVaultProperties;
+
+ private SecretClient secretClient;
+
+ @Override
+ public SecretClient getSecretClient() {
+ if (secretClient == null) {
+ secretClient = new SecretClientBuilder().vaultUrl(keyVaultProperties.getVaultUrl())
+ .credential(new ClientSecretCredentialBuilder().tenantId(keyVaultProperties.getTenantId())
+ .clientId(keyVaultProperties.getClientId())
+ .clientSecret(keyVaultProperties.getClientSecret())
+ .build())
+ .buildClient();
+ }
+ return secretClient;
+ }
+}
diff --git a/spring-cloud-modules/spring-cloud-azure/src/main/resources/application.yaml b/spring-cloud-modules/spring-cloud-azure/src/main/resources/application.yaml
new file mode 100644
index 0000000000..4bea8d789b
--- /dev/null
+++ b/spring-cloud-modules/spring-cloud-azure/src/main/resources/application.yaml
@@ -0,0 +1,21 @@
+spring:
+ cloud:
+ azure:
+ compatibility-verifier:
+ enabled: false
+ keyvault:
+ secret:
+ property-sources[0]:
+ name: key-vault-property-source-1
+ endpoint: https://spring-cloud-azure.vault.azure.net/
+ property-source-enabled: true
+ endpoint: https://spring-cloud-azure.vault.azure.net/
+azure:
+ keyvault:
+ vaultUrl: myVaultUrl
+ tenantId: myTenantId
+ clientId: myClientId
+ clientSecret: myClientSecret
+database:
+ secret:
+ value: ${my-database-secret}
\ No newline at end of file
diff --git a/spring-cloud-modules/spring-cloud-azure/src/test/java/com/baeldung/spring/cloud/azure/keyvault/KeyVaultAutoconfiguredClientUnitTest.java b/spring-cloud-modules/spring-cloud-azure/src/test/java/com/baeldung/spring/cloud/azure/keyvault/KeyVaultAutoconfiguredClientUnitTest.java
new file mode 100644
index 0000000000..0e3779e2c2
--- /dev/null
+++ b/spring-cloud-modules/spring-cloud-azure/src/test/java/com/baeldung/spring/cloud/azure/keyvault/KeyVaultAutoconfiguredClientUnitTest.java
@@ -0,0 +1,26 @@
+package com.baeldung.spring.cloud.azure.keyvault;
+
+import java.util.NoSuchElementException;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.boot.test.context.SpringBootTest;
+
+import com.baeldung.spring.cloud.azure.keyvault.service.KeyVaultAutoconfiguredClient;
+
+@SpringBootTest(classes = Application.class)
+public class KeyVaultAutoconfiguredClientUnitTest {
+
+ @Autowired
+ @Qualifier(value = "KeyVaultAutoconfiguredClient")
+ private KeyVaultAutoconfiguredClient keyVaultAutoconfiguredClient;
+
+ @Test
+ void whenANotExistingKeyIsProvided_thenShouldReturnAnError() {
+ String secretKey = "mySecret";
+ Assertions.assertThrows(NoSuchElementException.class, () -> keyVaultAutoconfiguredClient.getSecret(secretKey));
+ }
+
+}
diff --git a/spring-cloud-modules/spring-cloud-azure/src/test/resources/application.yaml b/spring-cloud-modules/spring-cloud-azure/src/test/resources/application.yaml
new file mode 100644
index 0000000000..88c54b32eb
--- /dev/null
+++ b/spring-cloud-modules/spring-cloud-azure/src/test/resources/application.yaml
@@ -0,0 +1,21 @@
+spring:
+ cloud:
+ azure:
+ compatibility-verifier:
+ enabled: false
+ keyvault:
+ secret:
+ endpoint: https://spring-cloud-azure.vault.azure.net/
+ property-source-enabled: true
+ property-sources:
+ name: key-vault-property-source-1
+ endpoint: https://spring-cloud-azure.vault.azure.net/
+azure:
+ keyvault:
+ vaultUrl: myVaultUrl
+ tenantId: myTenantId
+ clientId: myClientId
+ clientSecret: myClientSecret
+database:
+ secret:
+ value: my-database-secret
\ No newline at end of file
diff --git a/spring-cloud-modules/spring-cloud-open-telemetry/spring-cloud-open-telemetry2/src/main/java/com/baeldung/opentelemetry/exception/ProductControllerAdvice.java b/spring-cloud-modules/spring-cloud-open-telemetry/spring-cloud-open-telemetry2/src/main/java/com/baeldung/opentelemetry/exception/PriceControllerAdvice.java
similarity index 93%
rename from spring-cloud-modules/spring-cloud-open-telemetry/spring-cloud-open-telemetry2/src/main/java/com/baeldung/opentelemetry/exception/ProductControllerAdvice.java
rename to spring-cloud-modules/spring-cloud-open-telemetry/spring-cloud-open-telemetry2/src/main/java/com/baeldung/opentelemetry/exception/PriceControllerAdvice.java
index fe7789ecf5..4d01ab0f6d 100644
--- a/spring-cloud-modules/spring-cloud-open-telemetry/spring-cloud-open-telemetry2/src/main/java/com/baeldung/opentelemetry/exception/ProductControllerAdvice.java
+++ b/spring-cloud-modules/spring-cloud-open-telemetry/spring-cloud-open-telemetry2/src/main/java/com/baeldung/opentelemetry/exception/PriceControllerAdvice.java
@@ -6,7 +6,7 @@ import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
@RestControllerAdvice
-public class ProductControllerAdvice {
+public class PriceControllerAdvice {
@ExceptionHandler(PriceNotFoundException.class)
public ResponseEntity
-
-
- dev
-
- true
-
-
- dev
-
-
-
- prod
-
- prod
-
-
-
-
com.baeldung.sample.App
diff --git a/spring-core-2/src/main/resources/application.properties b/spring-core-2/src/main/resources/application.properties
index d482330b83..e69de29bb2 100644
--- a/spring-core-2/src/main/resources/application.properties
+++ b/spring-core-2/src/main/resources/application.properties
@@ -1,28 +0,0 @@
-spring.profiles.active=@spring.profiles.active@
-
-my.prop=used-always-in-all-profiles
-
-#---
-spring.config.activate.on-profile=dev
-spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
-spring.datasource.url=jdbc:mysql://localhost:3306/db
-spring.datasource.username=root
-spring.datasource.password=root
-
-#---
-spring.config.activate.on-profile=production
-spring.datasource.driver-class-name=org.h2.Driver
-spring.datasource.url=jdbc:h2:mem:db;DB_CLOSE_DELAY=-1
-spring.datasource.username=sa
-spring.datasource.password=sa
-
-#---
-spring.profiles.group.production=proddb,prodquartz
-
-#---
-spring.config.activate.on-profile=proddb
-db=url_to_production_db
-
-#---
-spring.config.activate.on-profile=prodquartz
-quartz=url_to_quartz_scheduler
\ No newline at end of file
diff --git a/spring-core-3/README.md b/spring-core-3/README.md
index 7232ad71a1..394f6e1857 100644
--- a/spring-core-3/README.md
+++ b/spring-core-3/README.md
@@ -9,6 +9,5 @@ This module contains articles about core Spring functionality
- [How to use the Spring FactoryBean?](https://www.baeldung.com/spring-factorybean)
- [Design Patterns in the Spring Framework](https://www.baeldung.com/spring-framework-design-patterns)
- [Difference Between BeanFactory and ApplicationContext](https://www.baeldung.com/spring-beanfactory-vs-applicationcontext)
-- [A Spring Custom Annotation for a Better DAO](http://www.baeldung.com/spring-annotation-bean-pre-processor)
- [Custom Scope in Spring](http://www.baeldung.com/spring-custom-scope)
- More articles: [[<-- prev]](/spring-core-2) [[next -->]](/spring-core-4)
diff --git a/spring-core-4/README.md b/spring-core-4/README.md
index 3b2c3d4764..0338d5d6e8 100644
--- a/spring-core-4/README.md
+++ b/spring-core-4/README.md
@@ -5,10 +5,7 @@ This module contains articles about core Spring functionality
## Relevant Articles:
- [Creating Spring Beans Through Factory Methods](https://www.baeldung.com/spring-beans-factory-methods)
-- [How to dynamically Autowire a Bean in Spring](https://www.baeldung.com/spring-dynamic-autowire)
-- [Spring @Import Annotation](https://www.baeldung.com/spring-import-annotation)
- [Spring BeanPostProcessor](https://www.baeldung.com/spring-beanpostprocessor)
- [Using @Autowired in Abstract Classes](https://www.baeldung.com/spring-autowired-abstract-class)
-- [Constructor Injection in Spring with Lombok](https://www.baeldung.com/spring-injection-lombok)
- [The Spring ApplicationContext](https://www.baeldung.com/spring-application-context)
- More articles: [[<-- prev]](/spring-core-3) [[next -->]](/spring-core-5)
diff --git a/spring-core-5/README.md b/spring-core-5/README.md
index ebf62ac24f..13945c1f8b 100644
--- a/spring-core-5/README.md
+++ b/spring-core-5/README.md
@@ -6,9 +6,6 @@ This module contains articles about core Spring functionality.
- [Spring @Component Annotation](https://www.baeldung.com/spring-component-annotation)
- [Solving Spring’s “not eligible for auto-proxying” Warning](https://www.baeldung.com/spring-not-eligible-for-auto-proxying)
-- [Spring Bean Names](https://www.baeldung.com/spring-bean-names)
-- [AliasFor Annotation in Spring](https://www.baeldung.com/spring-aliasfor-annotation)
-- [A Quick Guide to the Spring @Lazy Annotation](https://www.baeldung.com/spring-lazy-annotation)
- [Finding the Spring Version](https://www.baeldung.com/spring-find-version)
- [How Does the Spring Singleton Bean Serve Concurrent Requests?](https://www.baeldung.com/spring-singleton-concurrent-requests)
- More articles: [[<-- prev]](../spring-core-4)
diff --git a/spring-core-6/README.md b/spring-core-6/README.md
index e10db19a54..1879ff9a68 100644
--- a/spring-core-6/README.md
+++ b/spring-core-6/README.md
@@ -1,7 +1,5 @@
### Relevant Articles:
-- [Instantiating Multiple Beans of the Same Class with Spring Annotations](https://www.baeldung.com/spring-same-class-multiple-beans)
-- [Using Environment Variables in Spring Boot’s application.properties](https://www.baeldung.com/spring-boot-properties-env-variables)
- [Reinitialize Singleton Bean in Spring Context](https://www.baeldung.com/spring-reinitialize-singleton-bean)
-- [HTTP Interface in Spring 6](https://www.baeldung.com/spring-6-http-interface)
- [Getting the Current ApplicationContext in Spring](https://www.baeldung.com/spring-get-current-applicationcontext)
+- More articles: [[<-- prev]](../spring-core-5)
\ No newline at end of file
diff --git a/spring-core-6/pom.xml b/spring-core-6/pom.xml
index a3dda0374f..cc494b3a57 100644
--- a/spring-core-6/pom.xml
+++ b/spring-core-6/pom.xml
@@ -21,20 +21,6 @@
org.springframework.boot
spring-boot-starter-web
-
- org.springframework.boot
- spring-boot-starter-webflux
-
-
- org.mock-server
- mockserver-netty
- ${mockserver.version}
-
-
- org.mock-server
- mockserver-client-java
- ${mockserver.version}
-
org.springframework.boot
spring-boot-starter-test
@@ -104,7 +90,6 @@
UTF-8
17
17
- 5.14.0
\ No newline at end of file
diff --git a/spring-core-6/src/main/resources/application.properties b/spring-core-6/src/main/resources/application.properties
index 28a65dce32..6545cd1097 100644
--- a/spring-core-6/src/main/resources/application.properties
+++ b/spring-core-6/src/main/resources/application.properties
@@ -1,5 +1 @@
-environment.name=${OS}
-java.home.and.environment=${JAVA_HOME}+${OS}
-not.existing.system.property=${thispropertydoesnotexist}
-baeldung.presentation=${HELLO_BAELDUNG}. Java is installed in the folder: ${JAVA_HOME}
config.file.path=./spring-core-6/src/main/resources/config.properties
\ No newline at end of file
diff --git a/spring-core-6/src/test/java/com/baeldung/httpinterface/BooksServiceMockServerTest.java b/spring-core-6/src/test/java/com/baeldung/httpinterface/BooksServiceMockServerTest.java
deleted file mode 100644
index 22e00c16ae..0000000000
--- a/spring-core-6/src/test/java/com/baeldung/httpinterface/BooksServiceMockServerTest.java
+++ /dev/null
@@ -1,217 +0,0 @@
-package com.baeldung.httpinterface;
-
-import org.apache.http.HttpException;
-import org.apache.http.HttpStatus;
-import org.junit.jupiter.api.AfterAll;
-import org.junit.jupiter.api.BeforeAll;
-import org.junit.jupiter.api.Test;
-import org.mockserver.client.MockServerClient;
-import org.mockserver.integration.ClientAndServer;
-import org.mockserver.configuration.Configuration;
-
-import java.io.IOException;
-import java.net.ServerSocket;
-import java.util.List;
-
-import org.mockserver.model.HttpRequest;
-import org.mockserver.model.MediaType;
-import org.mockserver.verify.VerificationTimes;
-import org.slf4j.event.Level;
-import org.springframework.http.HttpMethod;
-import org.springframework.http.HttpStatusCode;
-import org.springframework.http.ResponseEntity;
-import org.springframework.web.reactive.function.client.WebClient;
-import org.springframework.web.reactive.function.client.WebClientResponseException;
-import reactor.core.publisher.Mono;
-
-import static org.junit.jupiter.api.Assertions.assertThrows;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-import static org.mockserver.integration.ClientAndServer.startClientAndServer;
-import static org.mockserver.matchers.Times.exactly;
-import static org.mockserver.model.HttpRequest.request;
-import static org.mockserver.model.HttpResponse.response;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-
-class BooksServiceMockServerTest {
-
- private static final String SERVER_ADDRESS = "localhost";
- private static final String PATH = "/books";
-
- private static int serverPort;
- private static ClientAndServer mockServer;
- private static String serviceUrl;
-
- @BeforeAll
- static void startServer() throws IOException {
- serverPort = getFreePort();
- serviceUrl = "http://" + SERVER_ADDRESS + ":" + serverPort;
-
- Configuration config = Configuration.configuration().logLevel(Level.WARN);
- mockServer = startClientAndServer(config, serverPort);
-
- mockAllBooksRequest();
- mockBookByIdRequest();
- mockSaveBookRequest();
- mockDeleteBookRequest();
- }
-
- @AfterAll
- static void stopServer() {
- mockServer.stop();
- }
-
- @Test
- void givenMockedGetResponse_whenGetBooksServiceMethodIsCalled_thenTwoBooksAreReturned() {
- BooksClient booksClient = new BooksClient(WebClient.builder().baseUrl(serviceUrl).build());
- BooksService booksService = booksClient.getBooksService();
-
- List books = booksService.getBooks();
- assertEquals(2, books.size());
-
- mockServer.verify(
- HttpRequest.request()
- .withMethod(HttpMethod.GET.name())
- .withPath(PATH),
- VerificationTimes.exactly(1)
- );
- }
-
- @Test
- void givenMockedGetResponse_whenGetExistingBookServiceMethodIsCalled_thenCorrectBookIsReturned() {
- BooksClient booksClient = new BooksClient(WebClient.builder().baseUrl(serviceUrl).build());
- BooksService booksService = booksClient.getBooksService();
-
- Book book = booksService.getBook(1);
- assertEquals("Book_1", book.title());
-
- mockServer.verify(
- HttpRequest.request()
- .withMethod(HttpMethod.GET.name())
- .withPath(PATH + "/1"),
- VerificationTimes.exactly(1)
- );
- }
-
- @Test
- void givenMockedGetResponse_whenGetNonExistingBookServiceMethodIsCalled_thenCorrectBookIsReturned() {
- BooksClient booksClient = new BooksClient(WebClient.builder().baseUrl(serviceUrl).build());
- BooksService booksService = booksClient.getBooksService();
-
- assertThrows(WebClientResponseException.class, () -> booksService.getBook(9));
- }
-
- @Test
- void givenCustomErrorHandlerIsSet_whenGetNonExistingBookServiceMethodIsCalled_thenCustomExceptionIsThrown() {
- BooksClient booksClient = new BooksClient(WebClient.builder()
- .defaultStatusHandler(HttpStatusCode::isError, resp ->
- Mono.just(new MyServiceException("Custom exception")))
- .baseUrl(serviceUrl)
- .build());
-
- BooksService booksService = booksClient.getBooksService();
- assertThrows(MyServiceException.class, () -> booksService.getBook(9));
- }
-
- @Test
- void givenMockedPostResponse_whenSaveBookServiceMethodIsCalled_thenCorrectBookIsReturned() {
- BooksClient booksClient = new BooksClient(WebClient.builder().baseUrl(serviceUrl).build());
- BooksService booksService = booksClient.getBooksService();
-
- Book book = booksService.saveBook(new Book(3, "Book_3", "Author_3", 2000));
- assertEquals("Book_3", book.title());
-
- mockServer.verify(
- HttpRequest.request()
- .withMethod(HttpMethod.POST.name())
- .withPath(PATH),
- VerificationTimes.exactly(1)
- );
- }
-
- @Test
- void givenMockedDeleteResponse_whenDeleteBookServiceMethodIsCalled_thenCorrectCodeIsReturned() {
- BooksClient booksClient = new BooksClient(WebClient.builder().baseUrl(serviceUrl).build());
- BooksService booksService = booksClient.getBooksService();
-
- ResponseEntity response = booksService.deleteBook(3);
- assertEquals(HttpStatusCode.valueOf(200), response.getStatusCode());
-
- mockServer.verify(
- HttpRequest.request()
- .withMethod(HttpMethod.DELETE.name())
- .withPath(PATH + "/3"),
- VerificationTimes.exactly(1)
- );
- }
-
- private static int getFreePort () throws IOException {
- try (ServerSocket serverSocket = new ServerSocket(0)) {
- return serverSocket.getLocalPort();
- }
- }
-
- private static void mockAllBooksRequest() {
- new MockServerClient(SERVER_ADDRESS, serverPort)
- .when(
- request()
- .withPath(PATH)
- .withMethod(HttpMethod.GET.name()),
- exactly(1)
- )
- .respond(
- response()
- .withStatusCode(HttpStatus.SC_OK)
- .withContentType(MediaType.APPLICATION_JSON)
- .withBody("[{\"id\":1,\"title\":\"Book_1\",\"author\":\"Author_1\",\"year\":1998},{\"id\":2,\"title\":\"Book_2\",\"author\":\"Author_2\",\"year\":1999}]")
- );
- }
-
- private static void mockBookByIdRequest() {
- new MockServerClient(SERVER_ADDRESS, serverPort)
- .when(
- request()
- .withPath(PATH + "/1")
- .withMethod(HttpMethod.GET.name()),
- exactly(1)
- )
- .respond(
- response()
- .withStatusCode(HttpStatus.SC_OK)
- .withContentType(MediaType.APPLICATION_JSON)
- .withBody("{\"id\":1,\"title\":\"Book_1\",\"author\":\"Author_1\",\"year\":1998}")
- );
- }
-
- private static void mockSaveBookRequest() {
- new MockServerClient(SERVER_ADDRESS, serverPort)
- .when(
- request()
- .withPath(PATH)
- .withMethod(HttpMethod.POST.name())
- .withContentType(MediaType.APPLICATION_JSON)
- .withBody("{\"id\":3,\"title\":\"Book_3\",\"author\":\"Author_3\",\"year\":2000}"),
- exactly(1)
- )
- .respond(
- response()
- .withStatusCode(HttpStatus.SC_OK)
- .withContentType(MediaType.APPLICATION_JSON)
- .withBody("{\"id\":3,\"title\":\"Book_3\",\"author\":\"Author_3\",\"year\":2000}")
- );
- }
-
- private static void mockDeleteBookRequest() {
- new MockServerClient(SERVER_ADDRESS, serverPort)
- .when(
- request()
- .withPath(PATH + "/3")
- .withMethod(HttpMethod.DELETE.name()),
- exactly(1)
- )
- .respond(
- response()
- .withStatusCode(HttpStatus.SC_OK)
- );
- }
-
-}
diff --git a/spring-core-6/src/test/java/com/baeldung/httpinterface/BooksServiceMockitoTest.java b/spring-core-6/src/test/java/com/baeldung/httpinterface/BooksServiceMockitoTest.java
deleted file mode 100644
index 7a82835ef3..0000000000
--- a/spring-core-6/src/test/java/com/baeldung/httpinterface/BooksServiceMockitoTest.java
+++ /dev/null
@@ -1,88 +0,0 @@
-package com.baeldung.httpinterface;
-
-import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.ExtendWith;
-import org.mockito.Answers;
-import org.mockito.InjectMocks;
-import org.mockito.Mock;
-import org.mockito.junit.jupiter.MockitoExtension;
-import org.springframework.core.ParameterizedTypeReference;
-import org.springframework.http.HttpMethod;
-import org.springframework.http.HttpStatusCode;
-import org.springframework.http.ResponseEntity;
-import org.springframework.web.reactive.function.client.WebClient;
-import reactor.core.publisher.Mono;
-
-import static org.mockito.BDDMockito.*;
-
-import java.util.List;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
-
-@ExtendWith(MockitoExtension.class)
-class BooksServiceMockitoTest {
-
- @Mock(answer = Answers.RETURNS_DEEP_STUBS)
- private WebClient webClient;
-
- @InjectMocks
- private BooksClient booksClient;
-
- @Test
- void givenMockedWebClientReturnsTwoBooks_whenGetBooksServiceMethodIsCalled_thenListOfTwoBooksIsReturned() {
- given(webClient.method(HttpMethod.GET)
- .uri(anyString(), anyMap())
- .retrieve()
- .bodyToMono(new ParameterizedTypeReference>(){}))
- .willReturn(Mono.just(List.of(
- new Book(1,"Book_1", "Author_1", 1998),
- new Book(2, "Book_2", "Author_2", 1999)
- )));
-
- BooksService booksService = booksClient.getBooksService();
- List books = booksService.getBooks();
- assertEquals(2, books.size());
- }
-
- @Test
- void givenMockedWebClientReturnsBook_whenGetBookServiceMethodIsCalled_thenBookIsReturned() {
- given(webClient.method(HttpMethod.GET)
- .uri(anyString(), anyMap())
- .retrieve()
- .bodyToMono(new ParameterizedTypeReference(){}))
- .willReturn(Mono.just(new Book(1,"Book_1", "Author_1", 1998)));
-
- BooksService booksService = booksClient.getBooksService();
- Book book = booksService.getBook(1);
- assertEquals("Book_1", book.title());
- }
-
- @Test
- void givenMockedWebClientReturnsBook_whenSaveBookServiceMethodIsCalled_thenBookIsReturned() {
- given(webClient.method(HttpMethod.POST)
- .uri(anyString(), anyMap())
- .retrieve()
- .bodyToMono(new ParameterizedTypeReference(){}))
- .willReturn(Mono.just(new Book(3, "Book_3", "Author_3", 2000)));
-
- BooksService booksService = booksClient.getBooksService();
- Book book = booksService.saveBook(new Book(3, "Book_3", "Author_3", 2000));
- assertEquals("Book_3", book.title());
- }
-
- @Test
- void givenMockedWebClientReturnsOk_whenDeleteBookServiceMethodIsCalled_thenOkCodeIsReturned() {
- given(webClient.method(HttpMethod.DELETE)
- .uri(anyString(), anyMap())
- .retrieve()
- .toBodilessEntity()
- .block(any())
- .getStatusCode())
- .willReturn(HttpStatusCode.valueOf(200));
-
- BooksService booksService = booksClient.getBooksService();
- ResponseEntity response = booksService.deleteBook(3);
- assertEquals(HttpStatusCode.valueOf(200), response.getStatusCode());
- }
-
-}
diff --git a/spring-di-3/README.md b/spring-di-3/README.md
index 3ddd720af5..1ac280fef2 100644
--- a/spring-di-3/README.md
+++ b/spring-di-3/README.md
@@ -7,4 +7,8 @@ This module contains articles about dependency injection with Spring
- [@Lookup Annotation in Spring](https://www.baeldung.com/spring-lookup)
- [Spring @Autowired Field Null – Common Causes and Solutions](https://www.baeldung.com/spring-autowired-field-null)
- [Finding All Beans with a Custom Annotation](https://www.baeldung.com/spring-injecting-all-annotated-beans)
+- [Guide to Spring @Autowired](http://www.baeldung.com/spring-autowire)
+- [@Order in Spring](http://www.baeldung.com/spring-order)
+- [How to dynamically Autowire a Bean in Spring](https://www.baeldung.com/spring-dynamic-autowire)
+- [Spring @Import Annotation](https://www.baeldung.com/spring-import-annotation)
- More articles: [[<-- prev]](../spring-di-2)
diff --git a/spring-core-2/src/main/java/com/baeldung/autowire/sample/App.java b/spring-di-3/src/main/java/com/baeldung/autowire/sample/App.java
similarity index 100%
rename from spring-core-2/src/main/java/com/baeldung/autowire/sample/App.java
rename to spring-di-3/src/main/java/com/baeldung/autowire/sample/App.java
diff --git a/spring-core-2/src/main/java/com/baeldung/autowire/sample/AppConfig.java b/spring-di-3/src/main/java/com/baeldung/autowire/sample/AppConfig.java
similarity index 100%
rename from spring-core-2/src/main/java/com/baeldung/autowire/sample/AppConfig.java
rename to spring-di-3/src/main/java/com/baeldung/autowire/sample/AppConfig.java
diff --git a/spring-core-2/src/main/java/com/baeldung/autowire/sample/BarFormatter.java b/spring-di-3/src/main/java/com/baeldung/autowire/sample/BarFormatter.java
similarity index 100%
rename from spring-core-2/src/main/java/com/baeldung/autowire/sample/BarFormatter.java
rename to spring-di-3/src/main/java/com/baeldung/autowire/sample/BarFormatter.java
diff --git a/spring-core-2/src/main/java/com/baeldung/autowire/sample/FooDAO.java b/spring-di-3/src/main/java/com/baeldung/autowire/sample/FooDAO.java
similarity index 100%
rename from spring-core-2/src/main/java/com/baeldung/autowire/sample/FooDAO.java
rename to spring-di-3/src/main/java/com/baeldung/autowire/sample/FooDAO.java
diff --git a/spring-core-2/src/main/java/com/baeldung/autowire/sample/FooFormatter.java b/spring-di-3/src/main/java/com/baeldung/autowire/sample/FooFormatter.java
similarity index 100%
rename from spring-core-2/src/main/java/com/baeldung/autowire/sample/FooFormatter.java
rename to spring-di-3/src/main/java/com/baeldung/autowire/sample/FooFormatter.java
diff --git a/spring-core-2/src/main/java/com/baeldung/autowire/sample/FooService.java b/spring-di-3/src/main/java/com/baeldung/autowire/sample/FooService.java
similarity index 100%
rename from spring-core-2/src/main/java/com/baeldung/autowire/sample/FooService.java
rename to spring-di-3/src/main/java/com/baeldung/autowire/sample/FooService.java
diff --git a/spring-core-2/src/main/java/com/baeldung/autowire/sample/Formatter.java b/spring-di-3/src/main/java/com/baeldung/autowire/sample/Formatter.java
similarity index 100%
rename from spring-core-2/src/main/java/com/baeldung/autowire/sample/Formatter.java
rename to spring-di-3/src/main/java/com/baeldung/autowire/sample/Formatter.java
diff --git a/spring-core-2/src/main/java/com/baeldung/autowire/sample/FormatterType.java b/spring-di-3/src/main/java/com/baeldung/autowire/sample/FormatterType.java
similarity index 100%
rename from spring-core-2/src/main/java/com/baeldung/autowire/sample/FormatterType.java
rename to spring-di-3/src/main/java/com/baeldung/autowire/sample/FormatterType.java
diff --git a/spring-core-4/src/main/java/com/baeldung/dynamic/autowire/BeanFactoryDynamicAutowireService.java b/spring-di-3/src/main/java/com/baeldung/dynamic/autowire/BeanFactoryDynamicAutowireService.java
similarity index 100%
rename from spring-core-4/src/main/java/com/baeldung/dynamic/autowire/BeanFactoryDynamicAutowireService.java
rename to spring-di-3/src/main/java/com/baeldung/dynamic/autowire/BeanFactoryDynamicAutowireService.java
diff --git a/spring-core-4/src/main/java/com/baeldung/dynamic/autowire/CustomMapFromListDynamicAutowireService.java b/spring-di-3/src/main/java/com/baeldung/dynamic/autowire/CustomMapFromListDynamicAutowireService.java
similarity index 100%
rename from spring-core-4/src/main/java/com/baeldung/dynamic/autowire/CustomMapFromListDynamicAutowireService.java
rename to spring-di-3/src/main/java/com/baeldung/dynamic/autowire/CustomMapFromListDynamicAutowireService.java
diff --git a/spring-core-4/src/main/java/com/baeldung/dynamic/autowire/DynamicAutowireConfig.java b/spring-di-3/src/main/java/com/baeldung/dynamic/autowire/DynamicAutowireConfig.java
similarity index 100%
rename from spring-core-4/src/main/java/com/baeldung/dynamic/autowire/DynamicAutowireConfig.java
rename to spring-di-3/src/main/java/com/baeldung/dynamic/autowire/DynamicAutowireConfig.java
diff --git a/spring-core-4/src/main/java/com/baeldung/dynamic/autowire/GBRegionService.java b/spring-di-3/src/main/java/com/baeldung/dynamic/autowire/GBRegionService.java
similarity index 100%
rename from spring-core-4/src/main/java/com/baeldung/dynamic/autowire/GBRegionService.java
rename to spring-di-3/src/main/java/com/baeldung/dynamic/autowire/GBRegionService.java
diff --git a/spring-core-4/src/main/java/com/baeldung/dynamic/autowire/RegionService.java b/spring-di-3/src/main/java/com/baeldung/dynamic/autowire/RegionService.java
similarity index 100%
rename from spring-core-4/src/main/java/com/baeldung/dynamic/autowire/RegionService.java
rename to spring-di-3/src/main/java/com/baeldung/dynamic/autowire/RegionService.java
diff --git a/spring-core-4/src/main/java/com/baeldung/dynamic/autowire/USRegionService.java b/spring-di-3/src/main/java/com/baeldung/dynamic/autowire/USRegionService.java
similarity index 100%
rename from spring-core-4/src/main/java/com/baeldung/dynamic/autowire/USRegionService.java
rename to spring-di-3/src/main/java/com/baeldung/dynamic/autowire/USRegionService.java
diff --git a/spring-core-4/src/main/java/com/baeldung/importannotation/animal/AnimalConfiguration.java b/spring-di-3/src/main/java/com/baeldung/importannotation/animal/AnimalConfiguration.java
similarity index 100%
rename from spring-core-4/src/main/java/com/baeldung/importannotation/animal/AnimalConfiguration.java
rename to spring-di-3/src/main/java/com/baeldung/importannotation/animal/AnimalConfiguration.java
diff --git a/spring-core-4/src/main/java/com/baeldung/importannotation/animal/AnimalScanConfiguration.java b/spring-di-3/src/main/java/com/baeldung/importannotation/animal/AnimalScanConfiguration.java
similarity index 100%
rename from spring-core-4/src/main/java/com/baeldung/importannotation/animal/AnimalScanConfiguration.java
rename to spring-di-3/src/main/java/com/baeldung/importannotation/animal/AnimalScanConfiguration.java
diff --git a/spring-core-4/src/main/java/com/baeldung/importannotation/animal/Bird.java b/spring-di-3/src/main/java/com/baeldung/importannotation/animal/Bird.java
similarity index 100%
rename from spring-core-4/src/main/java/com/baeldung/importannotation/animal/Bird.java
rename to spring-di-3/src/main/java/com/baeldung/importannotation/animal/Bird.java
diff --git a/spring-core-4/src/main/java/com/baeldung/importannotation/animal/BirdConfig.java b/spring-di-3/src/main/java/com/baeldung/importannotation/animal/BirdConfig.java
similarity index 100%
rename from spring-core-4/src/main/java/com/baeldung/importannotation/animal/BirdConfig.java
rename to spring-di-3/src/main/java/com/baeldung/importannotation/animal/BirdConfig.java
diff --git a/spring-core-4/src/main/java/com/baeldung/importannotation/animal/Bug.java b/spring-di-3/src/main/java/com/baeldung/importannotation/animal/Bug.java
similarity index 100%
rename from spring-core-4/src/main/java/com/baeldung/importannotation/animal/Bug.java
rename to spring-di-3/src/main/java/com/baeldung/importannotation/animal/Bug.java
diff --git a/spring-core-4/src/main/java/com/baeldung/importannotation/animal/BugConfig.java b/spring-di-3/src/main/java/com/baeldung/importannotation/animal/BugConfig.java
similarity index 100%
rename from spring-core-4/src/main/java/com/baeldung/importannotation/animal/BugConfig.java
rename to spring-di-3/src/main/java/com/baeldung/importannotation/animal/BugConfig.java
diff --git a/spring-core-4/src/main/java/com/baeldung/importannotation/animal/Cat.java b/spring-di-3/src/main/java/com/baeldung/importannotation/animal/Cat.java
similarity index 100%
rename from spring-core-4/src/main/java/com/baeldung/importannotation/animal/Cat.java
rename to spring-di-3/src/main/java/com/baeldung/importannotation/animal/Cat.java
diff --git a/spring-core-4/src/main/java/com/baeldung/importannotation/animal/CatConfig.java b/spring-di-3/src/main/java/com/baeldung/importannotation/animal/CatConfig.java
similarity index 100%
rename from spring-core-4/src/main/java/com/baeldung/importannotation/animal/CatConfig.java
rename to spring-di-3/src/main/java/com/baeldung/importannotation/animal/CatConfig.java
diff --git a/spring-core-4/src/main/java/com/baeldung/importannotation/animal/Dog.java b/spring-di-3/src/main/java/com/baeldung/importannotation/animal/Dog.java
similarity index 100%
rename from spring-core-4/src/main/java/com/baeldung/importannotation/animal/Dog.java
rename to spring-di-3/src/main/java/com/baeldung/importannotation/animal/Dog.java
diff --git a/spring-core-4/src/main/java/com/baeldung/importannotation/animal/DogConfig.java b/spring-di-3/src/main/java/com/baeldung/importannotation/animal/DogConfig.java
similarity index 100%
rename from spring-core-4/src/main/java/com/baeldung/importannotation/animal/DogConfig.java
rename to spring-di-3/src/main/java/com/baeldung/importannotation/animal/DogConfig.java
diff --git a/spring-core-4/src/main/java/com/baeldung/importannotation/animal/MammalConfiguration.java b/spring-di-3/src/main/java/com/baeldung/importannotation/animal/MammalConfiguration.java
similarity index 100%
rename from spring-core-4/src/main/java/com/baeldung/importannotation/animal/MammalConfiguration.java
rename to spring-di-3/src/main/java/com/baeldung/importannotation/animal/MammalConfiguration.java
diff --git a/spring-core-4/src/main/java/com/baeldung/importannotation/zoo/ZooApplication.java b/spring-di-3/src/main/java/com/baeldung/importannotation/zoo/ZooApplication.java
similarity index 100%
rename from spring-core-4/src/main/java/com/baeldung/importannotation/zoo/ZooApplication.java
rename to spring-di-3/src/main/java/com/baeldung/importannotation/zoo/ZooApplication.java
diff --git a/spring-core-2/src/main/java/com/baeldung/order/Average.java b/spring-di-3/src/main/java/com/baeldung/order/Average.java
similarity index 100%
rename from spring-core-2/src/main/java/com/baeldung/order/Average.java
rename to spring-di-3/src/main/java/com/baeldung/order/Average.java
diff --git a/spring-core-2/src/main/java/com/baeldung/order/Excellent.java b/spring-di-3/src/main/java/com/baeldung/order/Excellent.java
similarity index 100%
rename from spring-core-2/src/main/java/com/baeldung/order/Excellent.java
rename to spring-di-3/src/main/java/com/baeldung/order/Excellent.java
diff --git a/spring-core-2/src/main/java/com/baeldung/order/Good.java b/spring-di-3/src/main/java/com/baeldung/order/Good.java
similarity index 100%
rename from spring-core-2/src/main/java/com/baeldung/order/Good.java
rename to spring-di-3/src/main/java/com/baeldung/order/Good.java
diff --git a/spring-core-2/src/main/java/com/baeldung/order/Rating.java b/spring-di-3/src/main/java/com/baeldung/order/Rating.java
similarity index 100%
rename from spring-core-2/src/main/java/com/baeldung/order/Rating.java
rename to spring-di-3/src/main/java/com/baeldung/order/Rating.java
diff --git a/spring-core-2/src/test/java/com/baeldung/autowire/sample/FooServiceIntegrationTest.java b/spring-di-3/src/test/java/com/baeldung/autowire/sample/FooServiceIntegrationTest.java
similarity index 100%
rename from spring-core-2/src/test/java/com/baeldung/autowire/sample/FooServiceIntegrationTest.java
rename to spring-di-3/src/test/java/com/baeldung/autowire/sample/FooServiceIntegrationTest.java
diff --git a/spring-core-4/src/test/java/com/baeldung/dynamic/autowire/DynamicAutowireIntegrationTest.java b/spring-di-3/src/test/java/com/baeldung/dynamic/autowire/DynamicAutowireIntegrationTest.java
similarity index 100%
rename from spring-core-4/src/test/java/com/baeldung/dynamic/autowire/DynamicAutowireIntegrationTest.java
rename to spring-di-3/src/test/java/com/baeldung/dynamic/autowire/DynamicAutowireIntegrationTest.java
diff --git a/spring-core-4/src/test/java/com/baeldung/importannotation/animal/AnimalConfigUnitTest.java b/spring-di-3/src/test/java/com/baeldung/importannotation/animal/AnimalConfigUnitTest.java
similarity index 100%
rename from spring-core-4/src/test/java/com/baeldung/importannotation/animal/AnimalConfigUnitTest.java
rename to spring-di-3/src/test/java/com/baeldung/importannotation/animal/AnimalConfigUnitTest.java
diff --git a/spring-core-4/src/test/java/com/baeldung/importannotation/animal/BugConfigUnitTest.java b/spring-di-3/src/test/java/com/baeldung/importannotation/animal/BugConfigUnitTest.java
similarity index 100%
rename from spring-core-4/src/test/java/com/baeldung/importannotation/animal/BugConfigUnitTest.java
rename to spring-di-3/src/test/java/com/baeldung/importannotation/animal/BugConfigUnitTest.java
diff --git a/spring-core-4/src/test/java/com/baeldung/importannotation/animal/ConfigUnitTest.java b/spring-di-3/src/test/java/com/baeldung/importannotation/animal/ConfigUnitTest.java
similarity index 100%
rename from spring-core-4/src/test/java/com/baeldung/importannotation/animal/ConfigUnitTest.java
rename to spring-di-3/src/test/java/com/baeldung/importannotation/animal/ConfigUnitTest.java
diff --git a/spring-core-4/src/test/java/com/baeldung/importannotation/animal/MammalConfigUnitTest.java b/spring-di-3/src/test/java/com/baeldung/importannotation/animal/MammalConfigUnitTest.java
similarity index 100%
rename from spring-core-4/src/test/java/com/baeldung/importannotation/animal/MammalConfigUnitTest.java
rename to spring-di-3/src/test/java/com/baeldung/importannotation/animal/MammalConfigUnitTest.java
diff --git a/spring-core-4/src/test/java/com/baeldung/importannotation/zoo/ZooApplicationUnitTest.java b/spring-di-3/src/test/java/com/baeldung/importannotation/zoo/ZooApplicationUnitTest.java
similarity index 100%
rename from spring-core-4/src/test/java/com/baeldung/importannotation/zoo/ZooApplicationUnitTest.java
rename to spring-di-3/src/test/java/com/baeldung/importannotation/zoo/ZooApplicationUnitTest.java
diff --git a/spring-core-2/src/test/java/com/baeldung/order/RatingRetrieverUnitTest.java b/spring-di-3/src/test/java/com/baeldung/order/RatingRetrieverUnitTest.java
similarity index 100%
rename from spring-core-2/src/test/java/com/baeldung/order/RatingRetrieverUnitTest.java
rename to spring-di-3/src/test/java/com/baeldung/order/RatingRetrieverUnitTest.java
diff --git a/spring-drools/src/main/java/com/baeldung/spring/drools/service/TaxiFareCalculatorService.java b/spring-drools/src/main/java/com/baeldung/spring/drools/service/TaxiFareCalculatorService.java
index c2c5b399df..8f6f49c29b 100644
--- a/spring-drools/src/main/java/com/baeldung/spring/drools/service/TaxiFareCalculatorService.java
+++ b/spring-drools/src/main/java/com/baeldung/spring/drools/service/TaxiFareCalculatorService.java
@@ -2,6 +2,8 @@ package com.baeldung.spring.drools.service;
import org.kie.api.runtime.KieContainer;
import org.kie.api.runtime.KieSession;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -11,6 +13,8 @@ import com.baeldung.spring.drools.model.TaxiRide;
@Service
public class TaxiFareCalculatorService {
+ private static final Logger LOGGER = LoggerFactory.getLogger(TaxiFareCalculatorService.class);
+
@Autowired
private KieContainer kContainer;
@@ -20,7 +24,7 @@ public class TaxiFareCalculatorService {
kieSession.insert(taxiRide);
kieSession.fireAllRules();
kieSession.dispose();
- System.out.println("!! RIDE FARE !! " + rideFare.getTotalFare());
+ LOGGER.debug("!! RIDE FARE !! " + rideFare.getTotalFare());
return rideFare.getTotalFare();
}
}
diff --git a/spring-kafka/pom.xml b/spring-kafka/pom.xml
index 7b0bb0a8b7..c013be32e3 100644
--- a/spring-kafka/pom.xml
+++ b/spring-kafka/pom.xml
@@ -23,6 +23,16 @@
org.springframework.boot
spring-boot-starter-web
+
+ org.springframework.boot
+ spring-boot-starter-actuator
+ 3.0.5
+
+
+ io.micrometer
+ micrometer-registry-prometheus
+ 1.10.5
+
org.springframework.kafka
spring-kafka
diff --git a/spring-kafka/src/main/java/com/baeldung/monitoring/LagAnalyzerApplication.java b/spring-kafka/src/main/java/com/baeldung/monitoring/LagAnalyzerApplication.java
index 9275151d50..d305af8c87 100644
--- a/spring-kafka/src/main/java/com/baeldung/monitoring/LagAnalyzerApplication.java
+++ b/spring-kafka/src/main/java/com/baeldung/monitoring/LagAnalyzerApplication.java
@@ -10,6 +10,7 @@ public class LagAnalyzerApplication {
public static void main(String[] args) {
SpringApplication.run(LagAnalyzerApplication.class, args);
- while (true) ;
+ while (true)
+ ;
}
}
diff --git a/spring-kafka/src/main/java/com/baeldung/monitoring/service/LagAnalyzerService.java b/spring-kafka/src/main/java/com/baeldung/monitoring/service/LagAnalyzerService.java
index b046f0b2c4..f8898b60d8 100644
--- a/spring-kafka/src/main/java/com/baeldung/monitoring/service/LagAnalyzerService.java
+++ b/spring-kafka/src/main/java/com/baeldung/monitoring/service/LagAnalyzerService.java
@@ -1,6 +1,7 @@
package com.baeldung.monitoring.service;
import com.baeldung.monitoring.util.MonitoringUtil;
+
import org.apache.kafka.clients.admin.AdminClient;
import org.apache.kafka.clients.admin.AdminClientConfig;
import org.apache.kafka.clients.admin.ListConsumerGroupOffsetsResult;
@@ -27,36 +28,38 @@ public class LagAnalyzerService {
private final KafkaConsumer consumer;
@Autowired
- public LagAnalyzerService(
- @Value("${monitor.kafka.bootstrap.config}") String bootstrapServerConfig) {
+ public LagAnalyzerService(@Value("${monitor.kafka.bootstrap.config}") String bootstrapServerConfig) {
adminClient = getAdminClient(bootstrapServerConfig);
consumer = getKafkaConsumer(bootstrapServerConfig);
}
- public Map analyzeLag(
- String groupId)
- throws ExecutionException, InterruptedException {
+ public Map analyzeLag(String groupId)
+ throws ExecutionException, InterruptedException {
Map consumerGrpOffsets = getConsumerGrpOffsets(groupId);
Map producerOffsets = getProducerOffsets(consumerGrpOffsets);
Map lags = computeLags(consumerGrpOffsets, producerOffsets);
for (Map.Entry lagEntry : lags.entrySet()) {
- String topic = lagEntry.getKey().topic();
- int partition = lagEntry.getKey().partition();
+ String topic = lagEntry.getKey()
+ .topic();
+ int partition = lagEntry.getKey()
+ .partition();
Long lag = lagEntry.getValue();
- LOGGER.info("Time={} | Lag for topic = {}, partition = {} is {}",
- MonitoringUtil.time(),
- topic,
- partition,
- lag);
+ LOGGER.info("Time={} | Lag for topic = {}, partition = {}, groupId = {} is {}",
+ MonitoringUtil.time(),
+ topic,
+ partition,
+ groupId,
+ lag);
}
return lags;
}
public Map getConsumerGrpOffsets(String groupId)
- throws ExecutionException, InterruptedException {
+ throws ExecutionException, InterruptedException {
ListConsumerGroupOffsetsResult info = adminClient.listConsumerGroupOffsets(groupId);
- Map metadataMap
- = info.partitionsToOffsetAndMetadata().get();
+ Map metadataMap = info
+ .partitionsToOffsetAndMetadata()
+ .get();
Map groupOffset = new HashMap<>();
for (Map.Entry entry : metadataMap.entrySet()) {
TopicPartition key = entry.getKey();
@@ -66,8 +69,7 @@ public class LagAnalyzerService {
return groupOffset;
}
- private Map getProducerOffsets(
- Map consumerGrpOffset) {
+ private Map getProducerOffsets(Map consumerGrpOffset) {
List topicPartitions = new LinkedList<>();
for (Map.Entry entry : consumerGrpOffset.entrySet()) {
TopicPartition key = entry.getKey();
@@ -77,9 +79,9 @@ public class LagAnalyzerService {
}
public Map computeLags(
- Map consumerGrpOffsets,
- Map producerOffsets) {
- Map lags = new HashMap<>();
+ Map consumerGrpOffsets,
+ Map producerOffsets) {
+ Map lags = new HashMap<>();
for (Map.Entry entry : consumerGrpOffsets.entrySet()) {
Long producerOffset = producerOffsets.get(entry.getKey());
Long consumerOffset = consumerGrpOffsets.get(entry.getKey());
@@ -91,15 +93,24 @@ public class LagAnalyzerService {
private AdminClient getAdminClient(String bootstrapServerConfig) {
Properties config = new Properties();
- config.put(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServerConfig);
+ config.put(
+ AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG,
+ bootstrapServerConfig);
return AdminClient.create(config);
}
- private KafkaConsumer getKafkaConsumer(String bootstrapServerConfig) {
+ private KafkaConsumer getKafkaConsumer(
+ String bootstrapServerConfig) {
Properties properties = new Properties();
- properties.setProperty(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServerConfig);
- properties.setProperty(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName());
- properties.setProperty(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName());
+ properties.setProperty(
+ ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG,
+ bootstrapServerConfig);
+ properties.setProperty(
+ ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG,
+ StringDeserializer.class.getName());
+ properties.setProperty(
+ ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG,
+ StringDeserializer.class.getName());
return new KafkaConsumer<>(properties);
}
}
diff --git a/spring-kafka/src/main/java/com/baeldung/monitoring/service/LiveLagAnalyzerService.java b/spring-kafka/src/main/java/com/baeldung/monitoring/service/LiveLagAnalyzerService.java
index a20b9e9a0c..7035bf73bd 100644
--- a/spring-kafka/src/main/java/com/baeldung/monitoring/service/LiveLagAnalyzerService.java
+++ b/spring-kafka/src/main/java/com/baeldung/monitoring/service/LiveLagAnalyzerService.java
@@ -15,8 +15,8 @@ public class LiveLagAnalyzerService {
@Autowired
public LiveLagAnalyzerService(
- LagAnalyzerService lagAnalyzerService,
- @Value(value = "${monitor.kafka.consumer.groupid}") String groupId) {
+ LagAnalyzerService lagAnalyzerService,
+ @Value(value = "${monitor.kafka.consumer.groupid}") String groupId) {
this.lagAnalyzerService = lagAnalyzerService;
this.groupId = groupId;
}
diff --git a/spring-kafka/src/main/java/com/baeldung/monitoring/simulation/ConsumerSimulator.java b/spring-kafka/src/main/java/com/baeldung/monitoring/simulation/ConsumerSimulator.java
index 2d376432e5..171c17a282 100644
--- a/spring-kafka/src/main/java/com/baeldung/monitoring/simulation/ConsumerSimulator.java
+++ b/spring-kafka/src/main/java/com/baeldung/monitoring/simulation/ConsumerSimulator.java
@@ -7,10 +7,9 @@ import org.springframework.stereotype.Service;
@Service
public class ConsumerSimulator {
- @KafkaListener(
- topics = "${monitor.topic.name}",
- containerFactory = "kafkaListenerContainerFactory",
- autoStartup = "${monitor.consumer.simulate}")
+ @KafkaListener(topics = "${monitor.topic.name}",
+ containerFactory = "kafkaListenerContainerFactory",
+ autoStartup = "${monitor.consumer.simulate}")
public void listenGroup(String message) throws InterruptedException {
Thread.sleep(10L);
}
diff --git a/spring-kafka/src/main/java/com/baeldung/monitoring/simulation/KafkaConsumerConfig.java b/spring-kafka/src/main/java/com/baeldung/monitoring/simulation/KafkaConsumerConfig.java
index a4a8847bcf..9d5160e713 100644
--- a/spring-kafka/src/main/java/com/baeldung/monitoring/simulation/KafkaConsumerConfig.java
+++ b/spring-kafka/src/main/java/com/baeldung/monitoring/simulation/KafkaConsumerConfig.java
@@ -2,53 +2,54 @@ package com.baeldung.monitoring.simulation;
import org.apache.kafka.clients.consumer.ConsumerConfig;
import org.apache.kafka.common.serialization.StringDeserializer;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.PropertySource;
import org.springframework.kafka.annotation.EnableKafka;
import org.springframework.kafka.config.ConcurrentKafkaListenerContainerFactory;
import org.springframework.kafka.core.ConsumerFactory;
import org.springframework.kafka.core.DefaultKafkaConsumerFactory;
+import org.springframework.kafka.core.MicrometerConsumerListener;
+import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.Map;
+import io.micrometer.core.instrument.MeterRegistry;
+
@EnableKafka
-@Configuration
+@Component
public class KafkaConsumerConfig {
@Value(value = "${monitor.kafka.bootstrap.config}")
private String bootstrapAddress;
@Value(value = "${monitor.kafka.consumer.groupid}")
private String groupId;
- @Value(value = "${monitor.kafka.consumer.groupid.simulate}")
- private String simulateGroupId;
- @Value(value = "${monitor.producer.simulate}")
- private boolean enabled;
- public ConsumerFactory consumerFactory(String groupId) {
+ @Autowired
+ private MeterRegistry meterRegistry;
+
+ @Bean
+ public ConsumerFactory consumerFactory() {
Map props = new HashMap<>();
props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapAddress);
- if (enabled) {
- props.put(ConsumerConfig.GROUP_ID_CONFIG, groupId);
- } else {
- props.put(ConsumerConfig.GROUP_ID_CONFIG, simulateGroupId);
- }
props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
props.put(ConsumerConfig.AUTO_COMMIT_INTERVAL_MS_CONFIG, 0);
- return new DefaultKafkaConsumerFactory<>(props);
+ props.put(ConsumerConfig.GROUP_ID_CONFIG, groupId);
+ DefaultKafkaConsumerFactory consumerFactory = new DefaultKafkaConsumerFactory<>(props);
+ consumerFactory.addListener(new MicrometerConsumerListener<>(this.meterRegistry));
+ return consumerFactory;
}
@Bean
- public ConcurrentKafkaListenerContainerFactory kafkaListenerContainerFactory() {
- ConcurrentKafkaListenerContainerFactory factory = new ConcurrentKafkaListenerContainerFactory<>();
- if (enabled) {
- factory.setConsumerFactory(consumerFactory(groupId));
- } else {
- factory.setConsumerFactory(consumerFactory(simulateGroupId));
- }
- return factory;
+ public ConcurrentKafkaListenerContainerFactory
+ kafkaListenerContainerFactory(@Qualifier("consumerFactory") ConsumerFactory consumerFactory) {
+ ConcurrentKafkaListenerContainerFactory listenerContainerFactory =
+ new ConcurrentKafkaListenerContainerFactory<>();
+ listenerContainerFactory.setConsumerFactory(consumerFactory);
+ return listenerContainerFactory;
}
}
diff --git a/spring-kafka/src/main/java/com/baeldung/monitoring/simulation/ProducerSimulator.java b/spring-kafka/src/main/java/com/baeldung/monitoring/simulation/ProducerSimulator.java
index 30476ff7ec..ad4a006809 100644
--- a/spring-kafka/src/main/java/com/baeldung/monitoring/simulation/ProducerSimulator.java
+++ b/spring-kafka/src/main/java/com/baeldung/monitoring/simulation/ProducerSimulator.java
@@ -23,10 +23,9 @@ public class ProducerSimulator {
private final boolean enabled;
@Autowired
- public ProducerSimulator(
- KafkaTemplate kafkaTemplate,
- @Value(value = "${monitor.topic.name}") String topicName,
- @Value(value = "${monitor.producer.simulate}") String enabled) {
+ public ProducerSimulator(KafkaTemplate kafkaTemplate,
+ @Value(value = "${monitor.topic.name}") String topicName,
+ @Value(value = "${monitor.producer.simulate}") String enabled) {
this.kafkaTemplate = kafkaTemplate;
this.topicName = topicName;
this.enabled = BooleanUtils.toBoolean(enabled);
@@ -37,7 +36,9 @@ public class ProducerSimulator {
if (enabled) {
if (endTime.after(new Date())) {
String message = "msg-" + time();
- SendResult result = kafkaTemplate.send(topicName, message).get();
+ SendResult result = kafkaTemplate
+ .send(topicName, message)
+ .get();
}
}
}
diff --git a/spring-kafka/src/main/resources/application.properties b/spring-kafka/src/main/resources/application.properties
index c57537e2af..1a639a43fc 100644
--- a/spring-kafka/src/main/resources/application.properties
+++ b/spring-kafka/src/main/resources/application.properties
@@ -1,3 +1,4 @@
+server.port=8081
spring.kafka.bootstrap-servers=localhost:9092
message.topic.name=baeldung
long.message.topic.name=longMessage
@@ -15,3 +16,12 @@ monitor.consumer.simulate=true
monitor.kafka.consumer.groupid.simulate=baeldungGrpSimulate
test.topic=testtopic1
+
+
+management.endpoints.web.base-path=/actuator
+management.endpoints.web.exposure.include=*
+management.endpoint.health.show-details=always
+management.endpoint.metrics.enabled=true
+management.endpoint.prometheus.enabled=true
+
+spring.jmx.enabled=false
diff --git a/spring-remoting-modules/pom.xml b/spring-remoting-modules/pom.xml
index c0f12d2f97..41d77c2969 100644
--- a/spring-remoting-modules/pom.xml
+++ b/spring-remoting-modules/pom.xml
@@ -37,4 +37,22 @@
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ ${maven-compiler-plugin.version}
+
+ ${maven.compiler.source}
+ ${maven.compiler.target}
+
+
+
+
+
+ 11
+ 11
+
+
\ No newline at end of file
diff --git a/spring-remoting-modules/remoting-hessian-burlap/remoting-hessian-burlap-client/pom.xml b/spring-remoting-modules/remoting-hessian-burlap/remoting-hessian-burlap-client/pom.xml
index 63458ef278..1939e00386 100644
--- a/spring-remoting-modules/remoting-hessian-burlap/remoting-hessian-burlap-client/pom.xml
+++ b/spring-remoting-modules/remoting-hessian-burlap/remoting-hessian-burlap-client/pom.xml
@@ -58,6 +58,20 @@
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+
+
+ --add-opens java.base/java.lang=ALL-UNNAMED
+
+
+
+
+
+
4.0.38
diff --git a/spring-remoting-modules/remoting-hessian-burlap/remoting-hessian-burlap-server/pom.xml b/spring-remoting-modules/remoting-hessian-burlap/remoting-hessian-burlap-server/pom.xml
index d64e8c94c1..68a70f24b6 100644
--- a/spring-remoting-modules/remoting-hessian-burlap/remoting-hessian-burlap-server/pom.xml
+++ b/spring-remoting-modules/remoting-hessian-burlap/remoting-hessian-burlap-server/pom.xml
@@ -29,6 +29,20 @@
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+
+
+ --add-opens java.base/java.lang=ALL-UNNAMED
+
+
+
+
+
+
4.0.38
diff --git a/spring-security-modules/spring-security-saml/README.md b/spring-security-modules/spring-security-saml/README.md
index 271b29632e..b6a11ed91b 100644
--- a/spring-security-modules/spring-security-saml/README.md
+++ b/spring-security-modules/spring-security-saml/README.md
@@ -1,3 +1,4 @@
### Relevant Articles:
- [A Guide to SAML with Spring Security](https://www.baeldung.com/spring-security-saml)
+- [SAML with Spring Boot and Spring Security](https://www.baeldung.com/spring-security-saml)
diff --git a/testing-modules/junit-5-basics/src/test/java/com/baeldung/extensions/tempdir/TemporaryDirectoryWithCleanupUnitTest.java b/testing-modules/junit-5-basics/src/test/java/com/baeldung/extensions/tempdir/TemporaryDirectoryWithCleanupUnitTest.java
new file mode 100644
index 0000000000..739212ec04
--- /dev/null
+++ b/testing-modules/junit-5-basics/src/test/java/com/baeldung/extensions/tempdir/TemporaryDirectoryWithCleanupUnitTest.java
@@ -0,0 +1,36 @@
+package com.baeldung.extensions.tempdir;
+
+import org.junit.jupiter.api.MethodOrderer;
+import org.junit.jupiter.api.Order;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestInstance;
+import org.junit.jupiter.api.TestMethodOrder;
+import org.junit.jupiter.api.io.TempDir;
+
+import java.nio.file.Path;
+
+import static org.junit.Assert.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.io.CleanupMode.NEVER;
+
+@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
+@TestInstance(TestInstance.Lifecycle.PER_CLASS)
+class TemporaryDirectoryWithCleanupUnitTest {
+
+ private Path theTempDirToBeChecked = null;
+
+ @Test
+ @Order(1)
+ void whenTestMethodWithTempDirNeverCleanup_thenSetInstanceVariable(@TempDir(cleanup = NEVER) Path tempDir) {
+ theTempDirToBeChecked = tempDir;
+ System.out.println(tempDir.toFile().getAbsolutePath());
+ }
+
+ @Test
+ @Order(2)
+ void whenTestMethodWithTempDirNeverCleanup_thenTempDirShouldNotBeRemoved() {
+ assertNotNull(theTempDirToBeChecked);
+ assertTrue(theTempDirToBeChecked.toFile().isDirectory());
+ }
+
+}
\ No newline at end of file
diff --git a/testing-modules/junit5-annotations/src/test/java/com/baeldung/junit5/conditional/ConditionalAnnotationsUnitTest.java b/testing-modules/junit5-annotations/src/test/java/com/baeldung/junit5/conditional/ConditionalAnnotationsUnitTest.java
index 0d4013116f..f4d0807dc3 100644
--- a/testing-modules/junit5-annotations/src/test/java/com/baeldung/junit5/conditional/ConditionalAnnotationsUnitTest.java
+++ b/testing-modules/junit5-annotations/src/test/java/com/baeldung/junit5/conditional/ConditionalAnnotationsUnitTest.java
@@ -2,18 +2,7 @@ package com.baeldung.junit5.conditional;
import org.junit.jupiter.api.RepeatedTest;
import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.condition.DisabledForJreRange;
-import org.junit.jupiter.api.condition.DisabledIfEnvironmentVariable;
-import org.junit.jupiter.api.condition.DisabledIfSystemProperty;
-import org.junit.jupiter.api.condition.DisabledOnJre;
-import org.junit.jupiter.api.condition.DisabledOnOs;
-import org.junit.jupiter.api.condition.EnabledForJreRange;
-import org.junit.jupiter.api.condition.EnabledIfEnvironmentVariable;
-import org.junit.jupiter.api.condition.EnabledIfSystemProperty;
-import org.junit.jupiter.api.condition.EnabledOnJre;
-import org.junit.jupiter.api.condition.EnabledOnOs;
-import org.junit.jupiter.api.condition.JRE;
-import org.junit.jupiter.api.condition.OS;
+import org.junit.jupiter.api.condition.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -44,6 +33,18 @@ public class ConditionalAnnotationsUnitTest {
LOGGER.debug("runs with java 10 and 11");
}
+ @Test
+ @EnabledInNativeImage
+ void shouldOnlyRunWithinNativeImage() {
+ LOGGER.debug("Should run only within native images.");
+ }
+
+ @Test
+ @DisabledInNativeImage
+ void shouldNeverRunWithinNativeImage() {
+ LOGGER.debug("Shouldn't run within native images.");
+ }
+
@Test
@EnabledForJreRange(min = JRE.JAVA_8, max = JRE.JAVA_13)
public void shouldOnlyRunOnJava8UntilJava13() {
diff --git a/testing-modules/junit5-annotations/src/test/java/com/baeldung/junit5/timeout/TimeoutUnitTest.java b/testing-modules/junit5-annotations/src/test/java/com/baeldung/junit5/timeout/TimeoutUnitTest.java
new file mode 100644
index 0000000000..b952dcf09f
--- /dev/null
+++ b/testing-modules/junit5-annotations/src/test/java/com/baeldung/junit5/timeout/TimeoutUnitTest.java
@@ -0,0 +1,79 @@
+package com.baeldung.junit5.timeout;
+
+import org.junit.jupiter.api.Nested;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.Timeout;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.ValueSource;
+
+import java.util.concurrent.TimeUnit;
+
+
+@Timeout(5)
+class TimeoutUnitTest {
+
+ @Test
+ @Timeout(1)
+ void shouldFailAfterOneSecond() {
+ slowMethod();
+ }
+
+ @Test
+ @Timeout(value = 5, unit = TimeUnit.MINUTES, threadMode = Timeout.ThreadMode.SEPARATE_THREAD)
+ void shouldUseADifferentThread() {
+ System.out.println(Thread.currentThread().getName());
+ slowMethod();
+ }
+
+ @Test
+ void shouldFailAfterDefaultTimeoutOfFiveSeconds() {
+ slowMethod();
+ }
+
+ @Test
+ @Timeout(value = 2, unit = TimeUnit.MINUTES)
+ void shouldFailAfterTwoMinutes() {
+ slowMethod();
+ }
+
+ @Timeout(1)
+ @ParameterizedTest
+ @ValueSource(ints = {1, 2, 3, 4, 5})
+ void eachTestShouldFailAfterOneSecond(int input) {
+ slowMethod();
+ }
+
+ @Nested
+ class NestedClassWithoutTimeout {
+ @Test
+ void shouldFailAfterParentsDefaultTimeoutOfFiveSeconds() {
+ slowMethod();
+ }
+ }
+
+ @Nested
+ @Timeout(3)
+ class NestedClassWithTimeout {
+
+ @Test
+ void shouldFailAfterNestedClassTimeoutOfThreeSeconds() {
+ slowMethod();
+ }
+
+ @Test
+ @Timeout(1)
+ void shouldFailAfterOneSecond() {
+ slowMethod();
+ }
+ }
+
+ private void slowMethod() {
+ try {
+// Thread.sleep(10_000);
+// just for demonstration purposes
+// tests cannot fail on the pipeline, bue we need failing examples in the article
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+}
diff --git a/vaadin/pom.xml b/vaadin/pom.xml
index aa37a2392a..777ab2551c 100644
--- a/vaadin/pom.xml
+++ b/vaadin/pom.xml
@@ -187,6 +187,7 @@
local
mytheme
3.0.0
+ 3.3.2
\ No newline at end of file
diff --git a/vertx-modules/vertx-and-rxjava/src/test/java/com/baeldung/weather/VertxWithRxJavaIntegrationTest.java b/vertx-modules/vertx-and-rxjava/src/test/java/com/baeldung/weather/VertxWithRxJavaIntegrationTest.java
index a2ddbe5007..d5d58438e2 100644
--- a/vertx-modules/vertx-and-rxjava/src/test/java/com/baeldung/weather/VertxWithRxJavaIntegrationTest.java
+++ b/vertx-modules/vertx-and-rxjava/src/test/java/com/baeldung/weather/VertxWithRxJavaIntegrationTest.java
@@ -45,18 +45,18 @@ public class VertxWithRxJavaIntegrationTest {
// read the file that contains one city name per line
fileSystem
.rxReadFile("cities.txt").toFlowable()
- .doOnNext(buffer -> log.info("File buffer ---\n{}\n---", buffer))
+ .doOnNext(buffer -> log.debug("File buffer ---\n{}\n---", buffer))
.flatMap(buffer -> Flowable.fromArray(buffer.toString().split("\\r?\\n")))
- .doOnNext(city -> log.info("City from file: '{}'", city))
+ .doOnNext(city -> log.debug("City from file: '{}'", city))
.filter(city -> !city.startsWith("#"))
- .doOnNext(city -> log.info("City that survived filtering: '{}'", city))
+ .doOnNext(city -> log.debug("City that survived filtering: '{}'", city))
.flatMap(city -> searchByCityName(httpClient, city))
.flatMap(HttpClientResponse::toFlowable)
- .doOnNext(buffer -> log.info("JSON of city detail: '{}'", buffer))
+ .doOnNext(buffer -> log.debug("JSON of city detail: '{}'", buffer))
.map(extractingWoeid())
.flatMap(cityId -> getDataByPlaceId(httpClient, cityId))
.flatMap(toBufferFlowable())
- .doOnNext(buffer -> log.info("JSON of place detail: '{}'", buffer))
+ .doOnNext(buffer -> log.debug("JSON of place detail: '{}'", buffer))
.map(Buffer::toJsonObject)
.map(toCityAndDayLength())
.subscribe(System.out::println, Throwable::printStackTrace);