diff --git a/algorithms-miscellaneous-6/src/main/java/com/baeldung/algorithms/linkedlist/LinkedListReversal.java b/algorithms-miscellaneous-6/src/main/java/com/baeldung/algorithms/linkedlist/LinkedListReversal.java
new file mode 100644
index 0000000000..93402133ff
--- /dev/null
+++ b/algorithms-miscellaneous-6/src/main/java/com/baeldung/algorithms/linkedlist/LinkedListReversal.java
@@ -0,0 +1,30 @@
+package com.baeldung.algorithms.linkedlist;
+
+public class LinkedListReversal {
+
+ ListNode reverseList(ListNode head) {
+ ListNode previous = null;
+ ListNode current = head;
+ while (current != null) {
+ ListNode nextElement = current.getNext();
+ current.setNext(previous);
+ previous = current;
+ current = nextElement;
+ }
+ return previous;
+ }
+
+ ListNode reverseListRecursive(ListNode head) {
+ if (head == null) {
+ return null;
+ }
+ if (head.getNext() == null) {
+ return head;
+ }
+ ListNode node = reverseListRecursive(head.getNext());
+ head.getNext().setNext(head);
+ head.setNext(null);
+ return node;
+ }
+
+}
diff --git a/algorithms-miscellaneous-6/src/main/java/com/baeldung/algorithms/linkedlist/ListNode.java b/algorithms-miscellaneous-6/src/main/java/com/baeldung/algorithms/linkedlist/ListNode.java
new file mode 100644
index 0000000000..de2e93a65c
--- /dev/null
+++ b/algorithms-miscellaneous-6/src/main/java/com/baeldung/algorithms/linkedlist/ListNode.java
@@ -0,0 +1,28 @@
+package com.baeldung.algorithms.linkedlist;
+
+public class ListNode {
+
+ private int data;
+ private ListNode next;
+
+ ListNode(int data) {
+ this.data = data;
+ this.next = null;
+ }
+
+ public int getData() {
+ return data;
+ }
+
+ public ListNode getNext() {
+ return next;
+ }
+
+ public void setData(int data) {
+ this.data = data;
+ }
+
+ public void setNext(ListNode next) {
+ this.next = next;
+ }
+}
diff --git a/algorithms-miscellaneous-6/src/test/java/com/baeldung/algorithms/linkedlist/LinkedListReversalUnitTest.java b/algorithms-miscellaneous-6/src/test/java/com/baeldung/algorithms/linkedlist/LinkedListReversalUnitTest.java
new file mode 100644
index 0000000000..0940677959
--- /dev/null
+++ b/algorithms-miscellaneous-6/src/test/java/com/baeldung/algorithms/linkedlist/LinkedListReversalUnitTest.java
@@ -0,0 +1,59 @@
+package com.baeldung.algorithms.linkedlist;
+
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+public class LinkedListReversalUnitTest {
+ @Test
+ public void givenLinkedList_whenIterativeReverse_thenOutputCorrectResult() {
+ ListNode head = constructLinkedList();
+ ListNode node = head;
+ for (int i = 1; i <= 5; i++) {
+ assertNotNull(node);
+ assertEquals(i, node.getData());
+ node = node.getNext();
+ }
+ LinkedListReversal reversal = new LinkedListReversal();
+ node = reversal.reverseList(head);
+ for (int i = 5; i >= 1; i--) {
+ assertNotNull(node);
+ assertEquals(i, node.getData());
+ node = node.getNext();
+ }
+ }
+
+ @Test
+ public void givenLinkedList_whenRecursiveReverse_thenOutputCorrectResult() {
+ ListNode head = constructLinkedList();
+ ListNode node = head;
+ for (int i = 1; i <= 5; i++) {
+ assertNotNull(node);
+ assertEquals(i, node.getData());
+ node = node.getNext();
+ }
+ LinkedListReversal reversal = new LinkedListReversal();
+ node = reversal.reverseListRecursive(head);
+ for (int i = 5; i >= 1; i--) {
+ assertNotNull(node);
+ assertEquals(i, node.getData());
+ node = node.getNext();
+ }
+ }
+
+ private ListNode constructLinkedList() {
+ ListNode head = null;
+ ListNode tail = null;
+ for (int i = 1; i <= 5; i++) {
+ ListNode node = new ListNode(i);
+ if (head == null) {
+ head = node;
+ } else {
+ tail.setNext(node);
+ }
+ tail = node;
+ }
+ return head;
+ }
+}
diff --git a/apache-libraries/pom.xml b/apache-libraries/pom.xml
index 9f800f1e0b..15404676cc 100644
--- a/apache-libraries/pom.xml
+++ b/apache-libraries/pom.xml
@@ -129,6 +129,11 @@
zookeeper
${zookeeper.version}
+
+ com.fasterxml.jackson.core
+ jackson-core
+ ${jackson.version}
+
com.fasterxml.jackson.core
jackson-databind
diff --git a/core-java-modules/core-java-io-3/src/main/java/com/baeldung/lastmodifiedfile/LastModifiedFileApp.java b/core-java-modules/core-java-io-3/src/main/java/com/baeldung/lastmodifiedfile/LastModifiedFileApp.java
new file mode 100644
index 0000000000..d2aace184f
--- /dev/null
+++ b/core-java-modules/core-java-io-3/src/main/java/com/baeldung/lastmodifiedfile/LastModifiedFileApp.java
@@ -0,0 +1,61 @@
+package com.baeldung.lastmodifiedfile;
+
+import java.io.File;
+import java.io.FileFilter;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.Arrays;
+import java.util.Optional;
+
+import org.apache.commons.io.comparator.LastModifiedFileComparator;
+import org.apache.commons.io.filefilter.FileFilterUtils;
+
+public class LastModifiedFileApp {
+
+ public static File findUsingIOApi(String sdir) {
+ File dir = new File(sdir);
+ if (dir.isDirectory()) {
+ Optional opFile = Arrays.stream(dir.listFiles(File::isFile))
+ .max((f1, f2) -> Long.compare(f1.lastModified(), f2.lastModified()));
+
+ if (opFile.isPresent()) {
+ return opFile.get();
+ }
+ }
+
+ return null;
+ }
+
+ public static Path findUsingNIOApi(String sdir) throws IOException {
+ Path dir = Paths.get(sdir);
+ if (Files.isDirectory(dir)) {
+ Optional opPath = Files.list(dir)
+ .filter(p -> !Files.isDirectory(p))
+ .sorted((p1, p2) -> Long.valueOf(p2.toFile().lastModified())
+ .compareTo(p1.toFile().lastModified()))
+ .findFirst();
+
+ if (opPath.isPresent()) {
+ return opPath.get();
+ }
+ }
+
+ return null;
+ }
+
+ public static File findUsingCommonsIO(String sdir) {
+ File dir = new File(sdir);
+ if (dir.isDirectory()) {
+ File[] dirFiles = dir.listFiles((FileFilter) FileFilterUtils.fileFileFilter());
+ if (dirFiles != null && dirFiles.length > 0) {
+ Arrays.sort(dirFiles, LastModifiedFileComparator.LASTMODIFIED_REVERSE);
+ return dirFiles[0];
+ }
+ }
+
+ return null;
+ }
+
+}
diff --git a/core-java-modules/core-java-io-3/src/test/java/com/baeldung/lastmodifiedfile/LastModifiedFileAppUnitTest.java b/core-java-modules/core-java-io-3/src/test/java/com/baeldung/lastmodifiedfile/LastModifiedFileAppUnitTest.java
new file mode 100644
index 0000000000..fe704c3c40
--- /dev/null
+++ b/core-java-modules/core-java-io-3/src/test/java/com/baeldung/lastmodifiedfile/LastModifiedFileAppUnitTest.java
@@ -0,0 +1,78 @@
+package com.baeldung.lastmodifiedfile;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+
+import org.apache.commons.io.FileUtils;
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+
+public class LastModifiedFileAppUnitTest {
+
+ private final static String SOURCEDIRECTORY = "src/test/resources/lastmodfiles";
+
+ @BeforeAll
+ public static void setUpFiles() throws IOException, InterruptedException {
+ File srcDir = new File(SOURCEDIRECTORY);
+ if (!srcDir.exists()) {
+ srcDir.mkdir();
+ }
+
+ FileUtils.cleanDirectory(srcDir);
+
+ File file01 = new File(SOURCEDIRECTORY + "/file01.txt");
+ file01.createNewFile();
+
+ Thread.sleep(2000);
+
+ File file02 = new File(SOURCEDIRECTORY + "/file02.txt");
+ file02.createNewFile();
+
+ Thread.sleep(2000);
+
+ File file03 = new File(SOURCEDIRECTORY + "/file03.txt");
+ file03.createNewFile();
+
+ Thread.sleep(2000);
+
+ Files.write(Paths.get(SOURCEDIRECTORY + "/file02.txt"), "Hello File02".getBytes());
+
+ }
+
+ @Test
+ public void givenDirectory_whenUsingIoApi_thenFindLastModfile() throws IOException {
+ File lastModFile = LastModifiedFileApp.findUsingIOApi(SOURCEDIRECTORY);
+
+ assertThat(lastModFile).isNotNull();
+ assertThat(lastModFile.getName()).isEqualTo("file02.txt");
+ }
+
+ @Test
+ public void givenDirectory_whenUsingNioApi_thenFindLastModfile() throws IOException {
+ Path lastModPath = LastModifiedFileApp.findUsingNIOApi(SOURCEDIRECTORY);
+
+ assertThat(lastModPath).isNotNull();
+ assertThat(lastModPath.toFile().getName()).isEqualTo("file02.txt");
+ }
+
+ @Test
+ public void givenDirectory_whenUsingApacheCommons_thenFindLastModfile() throws IOException {
+ File lastModFile = LastModifiedFileApp.findUsingCommonsIO(SOURCEDIRECTORY);
+
+ assertThat(lastModFile).isNotNull();
+ assertThat(lastModFile.getName()).isEqualTo("file02.txt");
+ }
+
+ @AfterAll
+ public static void cleanUp() throws IOException {
+ File srcDir = new File(SOURCEDIRECTORY);
+ FileUtils.deleteDirectory(srcDir);
+ }
+
+}
\ No newline at end of file
diff --git a/core-java-modules/core-java-lang-3/src/main/java/com/baeldung/getclassobject/Animal.java b/core-java-modules/core-java-lang-3/src/main/java/com/baeldung/getclassobject/Animal.java
new file mode 100644
index 0000000000..426f1403af
--- /dev/null
+++ b/core-java-modules/core-java-lang-3/src/main/java/com/baeldung/getclassobject/Animal.java
@@ -0,0 +1,5 @@
+package com.baeldung.getclassobject;
+
+public class Animal {
+ protected int numberOfEyes;
+}
diff --git a/core-java-modules/core-java-lang-3/src/main/java/com/baeldung/getclassobject/Monkey.java b/core-java-modules/core-java-lang-3/src/main/java/com/baeldung/getclassobject/Monkey.java
new file mode 100644
index 0000000000..76ad8a96e3
--- /dev/null
+++ b/core-java-modules/core-java-lang-3/src/main/java/com/baeldung/getclassobject/Monkey.java
@@ -0,0 +1,4 @@
+package com.baeldung.getclassobject;
+
+public class Monkey extends Animal {
+}
diff --git a/core-java-modules/core-java-lang-3/src/main/java/com/baeldung/getclassobject/SomeAbstractClass.java b/core-java-modules/core-java-lang-3/src/main/java/com/baeldung/getclassobject/SomeAbstractClass.java
new file mode 100644
index 0000000000..7ee34cf62a
--- /dev/null
+++ b/core-java-modules/core-java-lang-3/src/main/java/com/baeldung/getclassobject/SomeAbstractClass.java
@@ -0,0 +1,4 @@
+package com.baeldung.getclassobject;
+
+public abstract class SomeAbstractClass {
+}
diff --git a/core-java-modules/core-java-lang-3/src/main/java/com/baeldung/getclassobject/SomeInterface.java b/core-java-modules/core-java-lang-3/src/main/java/com/baeldung/getclassobject/SomeInterface.java
new file mode 100644
index 0000000000..eec8048481
--- /dev/null
+++ b/core-java-modules/core-java-lang-3/src/main/java/com/baeldung/getclassobject/SomeInterface.java
@@ -0,0 +1,4 @@
+package com.baeldung.getclassobject;
+
+interface SomeInterface {
+}
diff --git a/core-java-modules/core-java-lang-3/src/main/java/com/baeldung/getclassobject/SomeUtils.java b/core-java-modules/core-java-lang-3/src/main/java/com/baeldung/getclassobject/SomeUtils.java
new file mode 100644
index 0000000000..294ef5bc9e
--- /dev/null
+++ b/core-java-modules/core-java-lang-3/src/main/java/com/baeldung/getclassobject/SomeUtils.java
@@ -0,0 +1,9 @@
+package com.baeldung.getclassobject;
+
+public class SomeUtils {
+ private SomeUtils() {
+ throw new RuntimeException("This Util class is not allowed to be instantiated!");
+ }
+ // public static utilMethods
+ // ...
+}
diff --git a/core-java-modules/core-java-lang-3/src/test/java/com/baeldung/getclassobject/GetClassObjectUnitTest.java b/core-java-modules/core-java-lang-3/src/test/java/com/baeldung/getclassobject/GetClassObjectUnitTest.java
new file mode 100644
index 0000000000..20b5b8e0c8
--- /dev/null
+++ b/core-java-modules/core-java-lang-3/src/test/java/com/baeldung/getclassobject/GetClassObjectUnitTest.java
@@ -0,0 +1,55 @@
+package com.baeldung.getclassobject;
+
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+public class GetClassObjectUnitTest {
+ @Test
+ public void givenObjectAndType_whenGettingClassObject_thenTwoMethodsHaveTheSameResult() {
+ String str = "I am an object of the String class";
+ Class fromStrObject = str.getClass();
+ Class clazz = String.class;
+ assertSame(fromStrObject, clazz);
+ }
+
+ @Test
+ public void givenClassInheritance_whenGettingRuntimeTypeAndStaticType_thenGetDifferentResult() {
+ Animal animal = new Monkey();
+ Class runtimeType = animal.getClass();
+ Class staticType = Animal.class;
+ //Not equals
+ assertNotEquals(staticType, runtimeType);
+
+ Class monkeyClass = Monkey.class;
+ assertSame(runtimeType, monkeyClass);
+ }
+
+ @Test
+ public void givenPrimitiveType_whenGettingClassObject_thenOnlyStaticTypeWorks() {
+ int number = 7;
+ // Class numberClass = number.getClass(); <-- compilation error
+ Class intType = int.class;
+
+ assertNotNull(intType);
+ assertEquals("int", intType.getName());
+ assertTrue(intType.isPrimitive());
+ }
+
+ @Test
+ public void givenTypeCannotInstantiate_whenGetTypeStatically_thenGetTypesSuccefully() {
+ Class interfaceType = SomeInterface.class;
+ Class abstractClassType = SomeAbstractClass.class;
+ Class utilClassType = SomeUtils.class;
+
+ assertNotNull(interfaceType);
+ assertTrue(interfaceType.isInterface());
+ assertEquals("SomeInterface", interfaceType.getSimpleName());
+
+ assertNotNull(abstractClassType);
+ assertEquals("SomeAbstractClass", abstractClassType.getSimpleName());
+
+ assertNotNull(utilClassType);
+ assertEquals("SomeUtils", utilClassType.getSimpleName());
+ }
+}
diff --git a/core-java-modules/core-java-security-2/src/test/java/com/baeldung/trustedcert/CertificatesUnitTest.java b/core-java-modules/core-java-security-2/src/test/java/com/baeldung/trustedcert/CertificatesUnitTest.java
new file mode 100644
index 0000000000..4f40c3c195
--- /dev/null
+++ b/core-java-modules/core-java-security-2/src/test/java/com/baeldung/trustedcert/CertificatesUnitTest.java
@@ -0,0 +1,94 @@
+package com.baeldung.trustedcert;
+
+import org.junit.jupiter.api.Test;
+
+import javax.net.ssl.TrustManager;
+import javax.net.ssl.TrustManagerFactory;
+import javax.net.ssl.X509TrustManager;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.security.KeyStore;
+import java.security.KeyStoreException;
+import java.security.NoSuchAlgorithmException;
+import java.security.cert.Certificate;
+import java.security.cert.CertificateException;
+import java.security.cert.PKIXParameters;
+import java.security.cert.TrustAnchor;
+import java.security.cert.X509Certificate;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+public class CertificatesUnitTest {
+
+ private static final String GODADDY_CA_ALIAS = "godaddyrootg2ca [jdk]";
+
+ @Test
+ public void whenLoadingCacertsKeyStore_thenCertificatesArePresent() throws Exception {
+ KeyStore keyStore = loadKeyStore();
+ PKIXParameters params = new PKIXParameters(keyStore);
+
+ Set trustAnchors = params.getTrustAnchors();
+ List certificates = trustAnchors.stream()
+ .map(TrustAnchor::getTrustedCert)
+ .collect(Collectors.toList());
+
+ assertFalse(certificates.isEmpty());
+ }
+
+ @Test
+ public void whenLoadingDefaultKeyStore_thenCertificatesArePresent() throws Exception {
+ TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
+ trustManagerFactory.init((KeyStore)null);
+
+ List trustManagers = Arrays.asList(trustManagerFactory.getTrustManagers());
+ List certificates = trustManagers.stream()
+ .filter(X509TrustManager.class::isInstance)
+ .map(X509TrustManager.class::cast)
+ .map(trustManager -> Arrays.asList(trustManager.getAcceptedIssuers()))
+ .flatMap(Collection::stream)
+ .collect(Collectors.toList());
+
+ assertFalse(certificates.isEmpty());
+ }
+
+ @Test
+ public void whenLoadingKeyStore_thenGoDaddyCALabelIsPresent() throws Exception {
+ KeyStore keyStore = loadKeyStore();
+
+ Enumeration aliasEnumeration = keyStore.aliases();
+ List aliases = Collections.list(aliasEnumeration);
+
+ assertTrue(aliases.contains(GODADDY_CA_ALIAS));
+ }
+
+ @Test
+ public void whenLoadingKeyStore_thenGoDaddyCertificateIsPresent() throws Exception {
+ KeyStore keyStore = loadKeyStore();
+
+ Certificate goDaddyCertificate = keyStore.getCertificate(GODADDY_CA_ALIAS);
+
+ assertNotNull(goDaddyCertificate);
+ }
+
+ private KeyStore loadKeyStore() throws CertificateException, NoSuchAlgorithmException, IOException, KeyStoreException {
+ String relativeCacertsPath = "/lib/security/cacerts".replace("/", File.separator);
+ String filename = System.getProperty("java.home") + relativeCacertsPath;
+ FileInputStream is = new FileInputStream(filename);
+
+ KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType());
+ String password = "changeit";
+ keystore.load(is, password.toCharArray());
+
+ return keystore;
+ }
+}
diff --git a/feign/pom.xml b/feign/pom.xml
index 4b994be1f2..da3cbcb0fd 100644
--- a/feign/pom.xml
+++ b/feign/pom.xml
@@ -16,11 +16,6 @@
-
- io.github.openfeign
- feign-core
- ${feign.version}
-
io.github.openfeign
feign-okhttp
@@ -44,21 +39,8 @@
-
-
-
-
- org.springframework.boot
- spring-boot-maven-plugin
- ${spring-boot-maven-plugin.version}
-
-
-
-
-
- 9.4.0
- 1.4.2.RELEASE
+ 10.11
diff --git a/feign/src/test/java/com/baeldung/feign/clients/BookClientLiveTest.java b/feign/src/test/java/com/baeldung/feign/clients/BookClientLiveTest.java
index bee440bd9e..6f6666de32 100644
--- a/feign/src/test/java/com/baeldung/feign/clients/BookClientLiveTest.java
+++ b/feign/src/test/java/com/baeldung/feign/clients/BookClientLiveTest.java
@@ -6,8 +6,6 @@ import com.baeldung.feign.models.BookResource;
import lombok.extern.slf4j.Slf4j;
import org.junit.Before;
import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.JUnit4;
import java.util.List;
import java.util.UUID;
@@ -22,7 +20,6 @@ import static org.junit.Assert.assertTrue;
* Consumes https://github.com/Baeldung/spring-hypermedia-api
*/
@Slf4j
-@RunWith(JUnit4.class)
public class BookClientLiveTest {
private BookClient bookClient;
diff --git a/httpclient-2/pom.xml b/httpclient-2/pom.xml
index 1a27d9b5fe..7638c692dc 100644
--- a/httpclient-2/pom.xml
+++ b/httpclient-2/pom.xml
@@ -4,6 +4,7 @@
4.0.0
httpclient-2
0.1-SNAPSHOT
+ httpclient-2
com.baeldung
@@ -13,6 +14,7 @@
+
org.apache.httpcomponents
httpclient
@@ -24,6 +26,19 @@
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+ ${spring-boot.version}
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ ${spring-boot.version}
+ test
+
@@ -34,10 +49,24 @@
true
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ ${maven-compiler-plugin.version}
+
+ ${maven.compiler.source.version}
+ ${maven.compiler.target.version}
+
+
+
4.5.8
+ 11
+ 11
+ 2.1.7.RELEASE
\ No newline at end of file
diff --git a/httpclient-2/src/test/java/com/baeldung/httpclient/cookies/HttpClientGettingCookieValueUnitTest.java b/httpclient-2/src/test/java/com/baeldung/httpclient/cookies/HttpClientGettingCookieValueUnitTest.java
new file mode 100644
index 0000000000..c3b0ef3c25
--- /dev/null
+++ b/httpclient-2/src/test/java/com/baeldung/httpclient/cookies/HttpClientGettingCookieValueUnitTest.java
@@ -0,0 +1,54 @@
+package com.baeldung.httpclient.cookies;
+
+import org.apache.http.client.CookieStore;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.client.protocol.HttpClientContext;
+import org.apache.http.cookie.Cookie;
+import org.apache.http.impl.client.BasicCookieStore;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.impl.cookie.BasicClientCookie;
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.IOException;
+
+import static org.junit.Assert.assertEquals;
+
+
+public class HttpClientGettingCookieValueUnitTest {
+ private static Logger log = LoggerFactory.getLogger(HttpClientGettingCookieValueUnitTest.class);
+
+ private static final String SAMPLE_URL = "http://www.baeldung.com/";
+
+ @Test
+ public final void whenSettingCustomCookieOnTheRequest_thenGettingTheSameCookieFromTheResponse() throws IOException {
+ HttpClientContext context = HttpClientContext.create();
+ context.setAttribute(HttpClientContext.COOKIE_STORE, createCustomCookieStore());
+
+ try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
+ try (CloseableHttpResponse response = httpClient.execute(new HttpGet(SAMPLE_URL), context)) {
+ CookieStore cookieStore = context.getCookieStore();
+ Cookie customCookie = cookieStore.getCookies()
+ .stream()
+ .peek(cookie -> log.info("cookie name:{}", cookie.getName()))
+ .filter(cookie -> "custom_cookie".equals(cookie.getName()))
+ .findFirst()
+ .orElseThrow(IllegalStateException::new);
+
+ assertEquals("test_value", customCookie.getValue());
+ }
+ }
+ }
+
+ private BasicCookieStore createCustomCookieStore() {
+ BasicCookieStore cookieStore = new BasicCookieStore();
+ BasicClientCookie cookie = new BasicClientCookie("custom_cookie", "test_value");
+ cookie.setDomain("baeldung.com");
+ cookie.setPath("/");
+ cookieStore.addCookie(cookie);
+ return cookieStore;
+ }
+}
diff --git a/httpclient-2/src/test/java/com/baeldung/httpclient/readresponsebodystring/ApacheHttpClientUnitTest.java b/httpclient-2/src/test/java/com/baeldung/httpclient/readresponsebodystring/ApacheHttpClientUnitTest.java
new file mode 100644
index 0000000000..5a638b2bd5
--- /dev/null
+++ b/httpclient-2/src/test/java/com/baeldung/httpclient/readresponsebodystring/ApacheHttpClientUnitTest.java
@@ -0,0 +1,26 @@
+package com.baeldung.httpclient.readresponsebodystring;
+
+import org.apache.http.HttpEntity;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.util.EntityUtils;
+import org.junit.Test;
+
+import java.io.IOException;
+
+public class ApacheHttpClientUnitTest {
+ public static final String DUMMY_URL = "https://postman-echo.com/get";
+
+ @Test
+ public void whenUseApacheHttpClient_thenCorrect() throws IOException {
+ HttpGet request = new HttpGet(DUMMY_URL);
+
+ try (CloseableHttpClient client = HttpClients.createDefault(); CloseableHttpResponse response = client.execute(request)) {
+ HttpEntity entity = response.getEntity();
+ String result = EntityUtils.toString(entity);
+ System.out.println("Response -> " + result);
+ }
+ }
+}
diff --git a/httpclient-2/src/test/java/com/baeldung/httpclient/readresponsebodystring/HttpClientUnitTest.java b/httpclient-2/src/test/java/com/baeldung/httpclient/readresponsebodystring/HttpClientUnitTest.java
new file mode 100644
index 0000000000..1dca1bf7c6
--- /dev/null
+++ b/httpclient-2/src/test/java/com/baeldung/httpclient/readresponsebodystring/HttpClientUnitTest.java
@@ -0,0 +1,29 @@
+package com.baeldung.httpclient.readresponsebodystring;
+
+import org.junit.Test;
+
+import java.io.IOException;
+import java.net.URI;
+import java.net.http.HttpClient;
+import java.net.http.HttpRequest;
+import java.net.http.HttpResponse;
+
+public class HttpClientUnitTest {
+ public static final String DUMMY_URL = "https://postman-echo.com/get";
+
+ @Test
+ public void whenUseHttpClient_thenCorrect() throws IOException, InterruptedException {
+ HttpClient client = HttpClient.newHttpClient();
+ HttpRequest request = HttpRequest.newBuilder().uri(URI.create(DUMMY_URL)).build();
+
+ // synchronous response
+ HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString());
+ System.out.println(response.body());
+
+ // asynchronous response
+ client.sendAsync(request, HttpResponse.BodyHandlers.ofString())
+ .thenApply(HttpResponse::body)
+ .thenAccept(System.out::println)
+ .join();
+ }
+}
diff --git a/httpclient-2/src/test/java/com/baeldung/httpclient/readresponsebodystring/HttpUrlConnectionUnitTest.java b/httpclient-2/src/test/java/com/baeldung/httpclient/readresponsebodystring/HttpUrlConnectionUnitTest.java
new file mode 100644
index 0000000000..54ae887eb4
--- /dev/null
+++ b/httpclient-2/src/test/java/com/baeldung/httpclient/readresponsebodystring/HttpUrlConnectionUnitTest.java
@@ -0,0 +1,34 @@
+package com.baeldung.httpclient.readresponsebodystring;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.HttpURLConnection;
+import java.net.URL;
+
+public class HttpUrlConnectionUnitTest {
+
+ public static final String DUMMY_URL = "https://postman-echo.com/get";
+
+ @Test
+ public void whenUseHttpUrlConnection_thenCorrect() throws IOException {
+ HttpURLConnection connection = (HttpURLConnection) new URL(DUMMY_URL).openConnection();
+
+ InputStream inputStream = connection.getInputStream();
+
+ BufferedReader in = new BufferedReader(new InputStreamReader(inputStream));
+ StringBuilder response = new StringBuilder();
+ String currentLine;
+
+ while ((currentLine = in.readLine()) != null)
+ response.append(currentLine);
+
+ in.close();
+ Assert.assertNotNull(response.toString());
+ System.out.println("Response -> " + response.toString());
+ }
+}
diff --git a/httpclient-2/src/test/java/com/baeldung/httpclient/readresponsebodystring/SpringRestTemplateUnitTest.java b/httpclient-2/src/test/java/com/baeldung/httpclient/readresponsebodystring/SpringRestTemplateUnitTest.java
new file mode 100644
index 0000000000..c59d7662f1
--- /dev/null
+++ b/httpclient-2/src/test/java/com/baeldung/httpclient/readresponsebodystring/SpringRestTemplateUnitTest.java
@@ -0,0 +1,17 @@
+package com.baeldung.httpclient.readresponsebodystring;
+
+import org.junit.Test;
+import org.springframework.web.client.RestTemplate;
+
+public class SpringRestTemplateUnitTest {
+
+ public static final String DUMMY_URL = "https://postman-echo.com/get";
+
+ @Test
+ public void whenUseRestTemplate_thenCorrect() {
+ RestTemplate restTemplate = new RestTemplate();
+ String response = restTemplate.getForObject(DUMMY_URL, String.class);
+ System.out.println(response);
+ }
+
+}
diff --git a/jackson-modules/jackson-custom-conversions/pom.xml b/jackson-modules/jackson-custom-conversions/pom.xml
index c319891da9..f58b25781c 100644
--- a/jackson-modules/jackson-custom-conversions/pom.xml
+++ b/jackson-modules/jackson-custom-conversions/pom.xml
@@ -23,6 +23,13 @@
jackson-datatype-joda
${jackson.version}
+
+ com.fasterxml.jackson.core
+ jackson-core
+ ${jackson.version}
+
+
+
diff --git a/jackson-modules/jackson-custom-conversions/src/test/java/com/baeldung/deserialization/CustomDeserializationUnitTest.java b/jackson-modules/jackson-custom-conversions/src/test/java/com/baeldung/deserialization/CustomDeserializationUnitTest.java
index f2a2502c3e..17016149a2 100644
--- a/jackson-modules/jackson-custom-conversions/src/test/java/com/baeldung/deserialization/CustomDeserializationUnitTest.java
+++ b/jackson-modules/jackson-custom-conversions/src/test/java/com/baeldung/deserialization/CustomDeserializationUnitTest.java
@@ -60,8 +60,6 @@ public class CustomDeserializationUnitTest {
String converted = objectMapper.writeValueAsString(now);
// restore an instance of ZonedDateTime from String
ZonedDateTime restored = objectMapper.readValue(converted, ZonedDateTime.class);
- System.out.println("serialized: " + now);
- System.out.println("restored: " + restored);
assertThat(now, is(not(restored)));
}
@@ -70,15 +68,14 @@ public class CustomDeserializationUnitTest {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.findAndRegisterModules();
objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
+ objectMapper.enable(SerializationFeature.WRITE_DATES_WITH_ZONE_ID);
objectMapper.disable(DeserializationFeature.ADJUST_DATES_TO_CONTEXT_TIME_ZONE);
// construct a new instance of ZonedDateTime
ZonedDateTime now = ZonedDateTime.now(ZoneId.of("Europe/Berlin"));
String converted = objectMapper.writeValueAsString(now);
// restore an instance of ZonedDateTime from String
ZonedDateTime restored = objectMapper.readValue(converted, ZonedDateTime.class);
- System.out.println("serialized: " + now);
- System.out.println("restored: " + restored);
- assertThat(now, is(restored));
+ assertThat(restored, is(now));
}
}
diff --git a/jackson-modules/jackson-custom-conversions/src/test/java/com/baeldung/serialization/CustomSerializationUnitTest.java b/jackson-modules/jackson-custom-conversions/src/test/java/com/baeldung/serialization/CustomSerializationUnitTest.java
index 6cb4019fa2..9c46a86fd8 100644
--- a/jackson-modules/jackson-custom-conversions/src/test/java/com/baeldung/serialization/CustomSerializationUnitTest.java
+++ b/jackson-modules/jackson-custom-conversions/src/test/java/com/baeldung/serialization/CustomSerializationUnitTest.java
@@ -24,7 +24,6 @@ public class CustomSerializationUnitTest {
public final void whenSerializing_thenNoExceptions() throws JsonGenerationException, JsonMappingException, IOException {
final Item myItem = new Item(1, "theItem", new User(2, "theUser"));
final String serialized = new ObjectMapper().writeValueAsString(myItem);
- System.out.println(serialized);
}
@Test
@@ -38,7 +37,6 @@ public class CustomSerializationUnitTest {
mapper.registerModule(simpleModule);
final String serialized = mapper.writeValueAsString(myItem);
- System.out.println(serialized);
}
@Test
@@ -46,7 +44,6 @@ public class CustomSerializationUnitTest {
final ItemWithSerializer myItem = new ItemWithSerializer(1, "theItem", new User(2, "theUser"));
final String serialized = new ObjectMapper().writeValueAsString(myItem);
- System.out.println(serialized);
}
}
diff --git a/jackson-modules/jackson-custom-conversions/src/test/java/com/baeldung/skipfields/IgnoreFieldsWithFilterUnitTest.java b/jackson-modules/jackson-custom-conversions/src/test/java/com/baeldung/skipfields/IgnoreFieldsWithFilterUnitTest.java
index e71f31bc6a..ec753019b2 100644
--- a/jackson-modules/jackson-custom-conversions/src/test/java/com/baeldung/skipfields/IgnoreFieldsWithFilterUnitTest.java
+++ b/jackson-modules/jackson-custom-conversions/src/test/java/com/baeldung/skipfields/IgnoreFieldsWithFilterUnitTest.java
@@ -37,7 +37,6 @@ public class IgnoreFieldsWithFilterUnitTest {
assertThat(dtoAsString, not(containsString("intValue")));
assertThat(dtoAsString, containsString("booleanValue"));
assertThat(dtoAsString, containsString("stringValue"));
- System.out.println(dtoAsString);
}
@Test
@@ -83,7 +82,6 @@ public class IgnoreFieldsWithFilterUnitTest {
assertThat(dtoAsString, not(containsString("intValue")));
assertThat(dtoAsString, containsString("booleanValue"));
assertThat(dtoAsString, containsString("stringValue"));
- System.out.println(dtoAsString);
}
}
diff --git a/jackson-modules/jackson-custom-conversions/src/test/java/com/baeldung/skipfields/JacksonDynamicIgnoreUnitTest.java b/jackson-modules/jackson-custom-conversions/src/test/java/com/baeldung/skipfields/JacksonDynamicIgnoreUnitTest.java
index 6ba14f7476..2fd59e2a82 100644
--- a/jackson-modules/jackson-custom-conversions/src/test/java/com/baeldung/skipfields/JacksonDynamicIgnoreUnitTest.java
+++ b/jackson-modules/jackson-custom-conversions/src/test/java/com/baeldung/skipfields/JacksonDynamicIgnoreUnitTest.java
@@ -51,8 +51,6 @@ public class JacksonDynamicIgnoreUnitTest {
assertTrue(result.contains("john"));
assertTrue(result.contains("address"));
assertTrue(result.contains("usa"));
-
- System.out.println("Not Hidden = " + result);
}
@Test
@@ -65,8 +63,6 @@ public class JacksonDynamicIgnoreUnitTest {
assertTrue(result.contains("john"));
assertFalse(result.contains("address"));
assertFalse(result.contains("usa"));
-
- System.out.println("Address Hidden = " + result);
}
@Test
@@ -76,8 +72,6 @@ public class JacksonDynamicIgnoreUnitTest {
final String result = mapper.writeValueAsString(person);
assertTrue(result.length() == 0);
-
- System.out.println("All Hidden = " + result);
}
@Test
@@ -90,7 +84,5 @@ public class JacksonDynamicIgnoreUnitTest {
final Person p3 = new Person("adam", ad3, false);
final String result = mapper.writeValueAsString(Arrays.asList(p1, p2, p3));
-
- System.out.println(result);
}
}
diff --git a/json-2/pom.xml b/json-2/pom.xml
index c5f11754f4..0bdede3b1a 100644
--- a/json-2/pom.xml
+++ b/json-2/pom.xml
@@ -53,12 +53,12 @@
com.fasterxml.jackson.core
jackson-annotations
- 2.11.0
+ ${jackson.version}
com.fasterxml.jackson.core
jackson-databind
- 2.11.0
+ ${jackson.version}
com.io-informatics.oss
diff --git a/libraries-5/src/test/java/com/baeldung/pact/PactConsumerDrivenContractUnitTest.java b/libraries-5/src/test/java/com/baeldung/pact/PactConsumerDrivenContractUnitTest.java
index e4ac8a3a95..8d4918a3e7 100644
--- a/libraries-5/src/test/java/com/baeldung/pact/PactConsumerDrivenContractUnitTest.java
+++ b/libraries-5/src/test/java/com/baeldung/pact/PactConsumerDrivenContractUnitTest.java
@@ -7,22 +7,38 @@ import au.com.dius.pact.consumer.dsl.PactDslWithProvider;
import au.com.dius.pact.model.RequestResponsePact;
import org.junit.Rule;
import org.junit.Test;
-import org.springframework.http.HttpEntity;
-import org.springframework.http.HttpHeaders;
-import org.springframework.http.HttpMethod;
-import org.springframework.http.MediaType;
-import org.springframework.http.ResponseEntity;
+import org.springframework.http.*;
import org.springframework.web.client.RestTemplate;
+import java.io.IOException;
+import java.net.ServerSocket;
import java.util.HashMap;
import java.util.Map;
+import java.util.Random;
import static org.assertj.core.api.Assertions.assertThat;
public class PactConsumerDrivenContractUnitTest {
+ private static int getAvailablePort() {
+ return new Random()
+ .ints(6000, 9000)
+ .filter(PactConsumerDrivenContractUnitTest::isFree)
+ .findFirst()
+ .orElse(8080);
+ }
+
+ private static boolean isFree(int port) {
+ try {
+ new ServerSocket(port).close();
+ return true;
+ } catch (IOException e) {
+ return false;
+ }
+ }
+
@Rule
- public PactProviderRuleMk2 mockProvider = new PactProviderRuleMk2("test_provider", "localhost", 8080, this);
+ public PactProviderRuleMk2 mockProvider = new PactProviderRuleMk2("test_provider", "localhost", getAvailablePort(), this);
@Pact(consumer = "test_consumer")
public RequestResponsePact createPact(PactDslWithProvider builder) {
diff --git a/libraries-6/pom.xml b/libraries-6/pom.xml
index 2f8cc385cb..7bb6028f17 100644
--- a/libraries-6/pom.xml
+++ b/libraries-6/pom.xml
@@ -107,6 +107,12 @@
renjin-script-engine
${renjin.version}
+
+
+ com.googlecode.libphonenumber
+ libphonenumber
+ ${libphonenumber.version}
+
@@ -150,6 +156,7 @@
RELEASE
3.0
1.8.1
+ 8.12.9
diff --git a/libraries-6/src/test/java/com/baeldung/libphonenumber/LibPhoneNumberUnitTest.java b/libraries-6/src/test/java/com/baeldung/libphonenumber/LibPhoneNumberUnitTest.java
new file mode 100644
index 0000000000..39b96b3e38
--- /dev/null
+++ b/libraries-6/src/test/java/com/baeldung/libphonenumber/LibPhoneNumberUnitTest.java
@@ -0,0 +1,79 @@
+package com.baeldung.libphonenumber;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import org.junit.Test;
+
+import com.google.i18n.phonenumbers.NumberParseException;
+import com.google.i18n.phonenumbers.PhoneNumberUtil;
+import com.google.i18n.phonenumbers.PhoneNumberUtil.PhoneNumberType;
+import com.google.i18n.phonenumbers.Phonenumber.PhoneNumber;
+import com.google.i18n.phonenumbers.Phonenumber.PhoneNumber.CountryCodeSource;
+
+public class LibPhoneNumberUnitTest {
+
+ private static final PhoneNumberUtil phoneNumberUtil = PhoneNumberUtil.getInstance();
+
+ @Test
+ public void givenPhoneNumber_whenValid_thenOK() throws Exception {
+
+ PhoneNumber phone = phoneNumberUtil.parse("+911234567890", CountryCodeSource.UNSPECIFIED.name());
+
+ assertTrue(phoneNumberUtil.isValidNumber(phone));
+ assertTrue(phoneNumberUtil.isValidNumberForRegion(phone, "IN"));
+ assertFalse(phoneNumberUtil.isValidNumberForRegion(phone, "US"));
+ assertTrue(phoneNumberUtil.isValidNumber(phoneNumberUtil.getExampleNumber("IN")));
+ }
+
+ @Test
+ public void givenPhoneNumber_whenAlphaNumber_thenValid() {
+ assertTrue(phoneNumberUtil.isAlphaNumber("325-CARS"));
+ assertTrue(phoneNumberUtil.isAlphaNumber("0800 REPAIR"));
+ assertTrue(phoneNumberUtil.isAlphaNumber("1-800-MY-APPLE"));
+ assertTrue(phoneNumberUtil.isAlphaNumber("1-800-MY-APPLE.."));
+ assertFalse(phoneNumberUtil.isAlphaNumber("+876 1234-1234"));
+ }
+
+ @Test
+ public void givenPhoneNumber_whenPossibleForType_thenValid() {
+ PhoneNumber number = new PhoneNumber();
+ number.setCountryCode(54);
+
+ number.setNationalNumber(123456);
+ assertTrue(phoneNumberUtil.isPossibleNumberForType(number, PhoneNumberType.FIXED_LINE));
+ assertFalse(phoneNumberUtil.isPossibleNumberForType(number, PhoneNumberType.TOLL_FREE));
+
+ number.setNationalNumber(12345678901L);
+ assertFalse(phoneNumberUtil.isPossibleNumberForType(number, PhoneNumberType.FIXED_LINE));
+ assertTrue(phoneNumberUtil.isPossibleNumberForType(number, PhoneNumberType.MOBILE));
+ assertFalse(phoneNumberUtil.isPossibleNumberForType(number, PhoneNumberType.TOLL_FREE));
+ }
+
+ @Test
+ public void givenPhoneNumber_whenPossible_thenValid() {
+ PhoneNumber number = new PhoneNumber();
+ number.setCountryCode(1)
+ .setNationalNumber(123000L);
+ assertFalse(phoneNumberUtil.isPossibleNumber(number));
+ assertFalse(phoneNumberUtil.isPossibleNumber("+1 343 253 00000", "US"));
+ assertFalse(phoneNumberUtil.isPossibleNumber("(343) 253-00000", "US"));
+ assertFalse(phoneNumberUtil.isPossibleNumber("dial p for pizza", "US"));
+ assertFalse(phoneNumberUtil.isPossibleNumber("123-000", "US"));
+ }
+
+ @Test
+ public void givenPhoneNumber_whenNumberGeographical_thenValid() throws NumberParseException {
+
+ PhoneNumber phone = phoneNumberUtil.parse("+911234567890", "IN");
+ assertTrue(phoneNumberUtil.isNumberGeographical(phone));
+
+ phone = new PhoneNumber().setCountryCode(1)
+ .setNationalNumber(2530000L);
+ assertFalse(phoneNumberUtil.isNumberGeographical(phone));
+
+ phone = new PhoneNumber().setCountryCode(800)
+ .setNationalNumber(12345678L);
+ assertFalse(phoneNumberUtil.isNumberGeographical(phone));
+ }
+}
diff --git a/libraries-data-2/pom.xml b/libraries-data-2/pom.xml
index 26d8651cdd..0154823cca 100644
--- a/libraries-data-2/pom.xml
+++ b/libraries-data-2/pom.xml
@@ -168,7 +168,7 @@
0.1.0
1.0.3
9.1.5.Final
- 2.9.8
+
4.3.8.RELEASE
4.0.0
1.1.0
diff --git a/libraries-http-2/pom.xml b/libraries-http-2/pom.xml
index 73fe6c66bd..3c0af51131 100644
--- a/libraries-http-2/pom.xml
+++ b/libraries-http-2/pom.xml
@@ -72,7 +72,7 @@
3.14.2
2.8.5
3.14.2
- 2.9.8
+
1.0.3
9.4.19.v20190610
2.2.11
diff --git a/libraries-http/pom.xml b/libraries-http/pom.xml
index cbc74ce132..74e00a7291 100644
--- a/libraries-http/pom.xml
+++ b/libraries-http/pom.xml
@@ -118,7 +118,7 @@
2.8.5
4.5.3
- 2.9.8
+
3.6.2
3.14.2
1.23.0
diff --git a/metrics/pom.xml b/metrics/pom.xml
index 92699c3fb8..07adf15936 100644
--- a/metrics/pom.xml
+++ b/metrics/pom.xml
@@ -66,12 +66,12 @@
com.fasterxml.jackson.core
jackson-databind
- ${fasterxml.jackson.version}
+ ${jackson.version}
com.fasterxml.jackson.dataformat
jackson-dataformat-smile
- ${fasterxml.jackson.version}
+ ${jackson.version}
@@ -93,7 +93,7 @@
3.1.0
0.12.17
0.12.0.RELEASE
- 2.9.1
+
2.0.7.RELEASE
3.11.1
1.1.0
diff --git a/persistence-modules/hibernate-enterprise/README.md b/persistence-modules/hibernate-enterprise/README.md
index c5606d0970..1a86c32afa 100644
--- a/persistence-modules/hibernate-enterprise/README.md
+++ b/persistence-modules/hibernate-enterprise/README.md
@@ -9,4 +9,5 @@ This module contains articles about enterprise concerns such as Multitenancy, Er
- [Hibernate Aggregate Functions](https://www.baeldung.com/hibernate-aggregate-functions)
- [Common Hibernate Exceptions](https://www.baeldung.com/hibernate-exceptions)
- [Hibernate Error “Not all named parameters have been set”](https://www.baeldung.com/hibernate-error-named-parameters-not-set)
-- [Various Logging Levels in Hibernate](https://www.baeldung.com/hibernate-logging-levels)
\ No newline at end of file
+- [Various Logging Levels in Hibernate](https://www.baeldung.com/hibernate-logging-levels)
+- [Hibernate: save, persist, update, merge, saveOrUpdate](https://www.baeldung.com/hibernate-save-persist-update-merge-saveorupdate)
\ No newline at end of file
diff --git a/persistence-modules/hibernate-enterprise/pom.xml b/persistence-modules/hibernate-enterprise/pom.xml
index ae58e409c4..c088cc1eca 100644
--- a/persistence-modules/hibernate-enterprise/pom.xml
+++ b/persistence-modules/hibernate-enterprise/pom.xml
@@ -61,13 +61,25 @@
${byte-buddy.version}
test
+
+ org.hsqldb
+ hsqldb
+ ${hsqldb.version}
+ test
+
- geodb-repo
- GeoDB repository
- http://repo.boundlessgeo.com/main/
+ osgeo
+ OSGeo Release Repository
+ https://repo.osgeo.org/repository/release/
+
+ false
+
+
+ true
+
@@ -77,6 +89,7 @@
2.2.3
3.8.0
0.9
+ 2.3.4
diff --git a/persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/model/Person.java b/persistence-modules/hibernate-enterprise/src/main/java/com/baeldung/persistence/model/Person.java
similarity index 100%
rename from persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/model/Person.java
rename to persistence-modules/hibernate-enterprise/src/main/java/com/baeldung/persistence/model/Person.java
diff --git a/persistence-modules/spring-hibernate4/src/test/java/com/baeldung/persistence/save/SaveMethodsIntegrationTest.java b/persistence-modules/hibernate-enterprise/src/test/java/com/baeldung/persistence/save/SaveMethodsIntegrationTest.java
similarity index 79%
rename from persistence-modules/spring-hibernate4/src/test/java/com/baeldung/persistence/save/SaveMethodsIntegrationTest.java
rename to persistence-modules/hibernate-enterprise/src/test/java/com/baeldung/persistence/save/SaveMethodsIntegrationTest.java
index ef83af3a0d..8c571428b4 100644
--- a/persistence-modules/spring-hibernate4/src/test/java/com/baeldung/persistence/save/SaveMethodsIntegrationTest.java
+++ b/persistence-modules/hibernate-enterprise/src/test/java/com/baeldung/persistence/save/SaveMethodsIntegrationTest.java
@@ -1,6 +1,14 @@
package com.baeldung.persistence.save;
-import com.baeldung.persistence.model.Person;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNotSame;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertSame;
+
+import javax.persistence.PersistenceException;
+
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
@@ -8,9 +16,13 @@ import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.dialect.HSQLDialect;
import org.hibernate.service.ServiceRegistry;
-import org.junit.*;
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
-import static org.junit.Assert.*;
+import com.baeldung.persistence.model.Person;
/**
* Testing specific implementation details for different methods:
@@ -21,12 +33,19 @@ public class SaveMethodsIntegrationTest {
private static SessionFactory sessionFactory;
private Session session;
+ private boolean doNotCommit = false;
@BeforeClass
public static void beforeTests() {
- Configuration configuration = new Configuration().addAnnotatedClass(Person.class).setProperty("hibernate.dialect", HSQLDialect.class.getName()).setProperty("hibernate.connection.driver_class", org.hsqldb.jdbcDriver.class.getName())
- .setProperty("hibernate.connection.url", "jdbc:hsqldb:mem:test").setProperty("hibernate.connection.username", "sa").setProperty("hibernate.connection.password", "").setProperty("hibernate.hbm2ddl.auto", "update");
- ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();
+ Configuration configuration = new Configuration().addAnnotatedClass(Person.class)
+ .setProperty("hibernate.dialect", HSQLDialect.class.getName())
+ .setProperty("hibernate.connection.driver_class", org.hsqldb.jdbcDriver.class.getName())
+ .setProperty("hibernate.connection.url", "jdbc:hsqldb: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);
}
@@ -34,6 +53,7 @@ public class SaveMethodsIntegrationTest {
public void setUp() {
session = sessionFactory.openSession();
session.beginTransaction();
+ doNotCommit = false;
}
@Test
@@ -43,7 +63,8 @@ public class SaveMethodsIntegrationTest {
person.setName("John");
session.persist(person);
- session.getTransaction().commit();
+ session.getTransaction()
+ .commit();
session.close();
session = sessionFactory.openSession();
@@ -68,15 +89,33 @@ public class SaveMethodsIntegrationTest {
assertEquals(id1, id2);
}
- @Test(expected = HibernateException.class)
+ @Test(expected = PersistenceException.class)
public void whenPersistDetached_thenThrowsException() {
+ doNotCommit = true;
+
Person person = new Person();
person.setName("John");
session.persist(person);
session.evict(person);
-
+
session.persist(person);
+ }
+
+ @Test
+ public void whenMergeDetached_thenEntityUpdatedFromDatabase() {
+
+ Person person = new Person();
+ person.setName("John");
+ session.save(person);
+ session.flush();
+ session.evict(person);
+
+ person.setName("Mary");
+ Person mergedPerson = (Person) session.merge(person);
+
+ assertNotSame(person, mergedPerson);
+ assertEquals("Mary", mergedPerson.getName());
}
@@ -92,7 +131,8 @@ public class SaveMethodsIntegrationTest {
assertNotNull(id);
- session.getTransaction().commit();
+ session.getTransaction()
+ .commit();
session.close();
assertEquals(id, person.getId());
@@ -128,22 +168,6 @@ public class SaveMethodsIntegrationTest {
}
- @Test
- public void whenMergeDetached_thenEntityUpdatedFromDatabase() {
-
- Person person = new Person();
- person.setName("John");
- session.save(person);
- session.evict(person);
-
- person.setName("Mary");
- Person mergedPerson = (Person) session.merge(person);
-
- assertNotSame(person, mergedPerson);
- assertEquals("Mary", mergedPerson.getName());
-
- }
-
@Test
public void whenMergeTransient_thenNewEntitySavedToDatabase() {
@@ -151,7 +175,8 @@ public class SaveMethodsIntegrationTest {
person.setName("John");
Person mergedPerson = (Person) session.merge(person);
- session.getTransaction().commit();
+ session.getTransaction()
+ .commit();
session.beginTransaction();
assertNull(person.getId());
@@ -227,7 +252,8 @@ public class SaveMethodsIntegrationTest {
person.setName("John");
session.saveOrUpdate(person);
- session.getTransaction().commit();
+ session.getTransaction()
+ .commit();
session.close();
session = sessionFactory.openSession();
@@ -250,7 +276,10 @@ public class SaveMethodsIntegrationTest {
@After
public void tearDown() {
- session.getTransaction().commit();
+ if (!doNotCommit) {
+ session.getTransaction()
+ .commit();
+ }
session.close();
}
diff --git a/persistence-modules/hibernate-libraries/pom.xml b/persistence-modules/hibernate-libraries/pom.xml
index 808c47133c..f67309cf43 100644
--- a/persistence-modules/hibernate-libraries/pom.xml
+++ b/persistence-modules/hibernate-libraries/pom.xml
@@ -170,7 +170,6 @@
29.0-jre
2.9.7
5.4.14.Final
- 2.10.3
3.27.0-GA
2.3.1
2.0.0
diff --git a/persistence-modules/jooq/src/main/java/com/baeldung/jooq/Crud.java b/persistence-modules/jooq/src/main/java/com/baeldung/jooq/Crud.java
index 0427b71c25..fb3d21c467 100644
--- a/persistence-modules/jooq/src/main/java/com/baeldung/jooq/Crud.java
+++ b/persistence-modules/jooq/src/main/java/com/baeldung/jooq/Crud.java
@@ -19,14 +19,14 @@ public class Crud {
public static Result getAll(DSLContext context, Table extends Record> table) {
return context.select()
- .from(table)
- .fetch();
+ .from(table)
+ .fetch();
}
public static Result getFields(DSLContext context, Table extends Record> table, SelectFieldOrAsterisk... fields) {
return context.select(fields)
- .from(table)
- .fetch();
+ .from(table)
+ .fetch();
}
public static R getOne(DSLContext context, Table table, Condition condition) {
@@ -35,9 +35,9 @@ public class Crud {
public static void update(DSLContext context, Table extends Record> table, Map, T> values, Condition condition) {
context.update(table)
- .set(values)
- .where(condition)
- .execute();
+ .set(values)
+ .where(condition)
+ .execute();
}
public static > void update(UpdatableRecord record) {
@@ -46,8 +46,8 @@ public class Crud {
public static void delete(DSLContext context, Table extends Record> table, Condition condition) {
context.delete(table)
- .where(condition)
- .execute();
+ .where(condition)
+ .execute();
}
public static > void delete(UpdatableRecord record) {
diff --git a/persistence-modules/jooq/src/main/java/com/baeldung/jooq/CrudExamples.java b/persistence-modules/jooq/src/main/java/com/baeldung/jooq/CrudExamples.java
index 87a7b6439e..57f6df4915 100644
--- a/persistence-modules/jooq/src/main/java/com/baeldung/jooq/CrudExamples.java
+++ b/persistence-modules/jooq/src/main/java/com/baeldung/jooq/CrudExamples.java
@@ -60,8 +60,8 @@ public class CrudExamples {
private void readValues(DSLContext context) {
Result authors = getAll(
- context,
- Author.AUTHOR
+ context,
+ Author.AUTHOR
);
authors.forEach(author -> {
@@ -73,15 +73,15 @@ public class CrudExamples {
});
Result articles = getFields(
- context,
- Author.AUTHOR,
- Article.ARTICLE.ID, Article.ARTICLE.TITLE
+ context,
+ Author.AUTHOR,
+ Article.ARTICLE.ID, Article.ARTICLE.TITLE
);
AuthorRecord author = getOne(
- context,
- Author.AUTHOR,
- Author.AUTHOR.ID.eq(1)
+ context,
+ Author.AUTHOR,
+ Author.AUTHOR.ID.eq(1)
);
}
@@ -90,24 +90,22 @@ public class CrudExamples {
fieldsToUpdate.put(Author.AUTHOR.FIRST_NAME, "David");
fieldsToUpdate.put(Author.AUTHOR.LAST_NAME, "Brown");
update(
- context,
- Author.AUTHOR,
- fieldsToUpdate,
- Author.AUTHOR.ID.eq(1)
+ context,
+ Author.AUTHOR,
+ fieldsToUpdate,
+ Author.AUTHOR.ID.eq(1)
);
ArticleRecord article = context.fetchOne(Article.ARTICLE, Article.ARTICLE.ID.eq(1));
article.setTitle("A New Article Title");
- update(
- article
- );
+ update(article);
}
private void deleteValues(DSLContext context) {
delete(
- context,
- Article.ARTICLE,
- Article.ARTICLE.ID.eq(1)
+ context,
+ Article.ARTICLE,
+ Article.ARTICLE.ID.eq(1)
);
AuthorRecord author = context.fetchOne(Author.AUTHOR, Author.AUTHOR.ID.eq(1));
diff --git a/persistence-modules/pom.xml b/persistence-modules/pom.xml
index 590e5da76e..05ef14f188 100644
--- a/persistence-modules/pom.xml
+++ b/persistence-modules/pom.xml
@@ -81,8 +81,7 @@
spring-data-redis
spring-data-solr
spring-hibernate-3
- spring-hibernate-5
- spring-hibernate4
+ spring-hibernate-5
spring-jpa
spring-jpa-2
spring-jdbc
diff --git a/persistence-modules/spring-data-jpa-query-2/README.md b/persistence-modules/spring-data-jpa-query-2/README.md
index fdb4ce3db7..bdc8d7cb32 100644
--- a/persistence-modules/spring-data-jpa-query-2/README.md
+++ b/persistence-modules/spring-data-jpa-query-2/README.md
@@ -6,6 +6,12 @@ This module contains articles about querying data using Spring Data JPA
- [Spring Data JPA @Query Annotation](https://www.baeldung.com/spring-data-jpa-query)
- [Use Criteria Queries in a Spring Data Application](https://www.baeldung.com/spring-data-criteria-queries)
- [Query Entities by Dates and Times with Spring Data JPA](https://www.baeldung.com/spring-data-jpa-query-by-date)
+- [Hibernate Pagination](https://www.baeldung.com/hibernate-pagination)
+- [Sorting with Hibernate](https://www.baeldung.com/hibernate-sort)
+- [Stored Procedures with Hibernate](https://www.baeldung.com/stored-procedures-with-hibernate-tutorial)
+- [Eager/Lazy Loading In Hibernate](https://www.baeldung.com/hibernate-lazy-eager-loading)
+- [Auditing with JPA, Hibernate, and Spring Data JPA](https://www.baeldung.com/database-auditing-jpa)
+
- More articles: [[<-- prev]](../spring-data-jpa-query)
### Eclipse Config
diff --git a/persistence-modules/spring-data-jpa-query-2/pom.xml b/persistence-modules/spring-data-jpa-query-2/pom.xml
index 231640284e..abac7b28da 100644
--- a/persistence-modules/spring-data-jpa-query-2/pom.xml
+++ b/persistence-modules/spring-data-jpa-query-2/pom.xml
@@ -18,6 +18,10 @@
org.springframework.boot
spring-boot-starter-data-jpa
+
+ org.springframework.security
+ spring-security-core
+
com.h2database
@@ -28,6 +32,55 @@
com.fasterxml.jackson.core
jackson-databind
+
+
+ org.hibernate
+ hibernate-envers
+
+
+ javax.transaction
+ jta
+ ${jta.version}
+
+
+ mysql
+ mysql-connector-java
+
+
+ com.google.guava
+ guava
+ ${guava.version}
+
+
+ org.apache.tomcat
+ tomcat-dbcp
+ ${tomcat-dbcp.version}
+
+
+ org.hibernate
+ hibernate-core
+ ${hibernate.version}
+
+
+ org.hibernate
+ hibernate-envers
+ ${hibernate.version}
+
+
+ org.springframework
+ spring-test
+ test
+
+
+ org.springframework.security
+ spring-security-test
+ test
+
+
+ org.hsqldb
+ hsqldb
+ test
+
@@ -35,5 +88,10 @@
2.22.2
5.6.2
4.13
+ 9.0.0.M26
+ 1.1
+ 21.0
+
+ 5.2.10.Final
\ No newline at end of file
diff --git a/persistence-modules/spring-hibernate4/src/main/java/com/baeldung/spring/PersistenceConfig.java b/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/config/PersistenceConfig.java
similarity index 95%
rename from persistence-modules/spring-hibernate4/src/main/java/com/baeldung/spring/PersistenceConfig.java
rename to persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/config/PersistenceConfig.java
index 4927c9957c..a0d70ed006 100644
--- a/persistence-modules/spring-hibernate4/src/main/java/com/baeldung/spring/PersistenceConfig.java
+++ b/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/config/PersistenceConfig.java
@@ -1,4 +1,4 @@
-package com.baeldung.spring;
+package com.baeldung.config;
import java.util.Properties;
@@ -15,8 +15,8 @@ import org.springframework.dao.annotation.PersistenceExceptionTranslationPostPro
import org.springframework.data.domain.AuditorAware;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
-import org.springframework.orm.hibernate4.HibernateTransactionManager;
-import org.springframework.orm.hibernate4.LocalSessionFactoryBean;
+import org.springframework.orm.hibernate5.HibernateTransactionManager;
+import org.springframework.orm.hibernate5.LocalSessionFactoryBean;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.JpaVendorAdapter;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
@@ -47,7 +47,7 @@ import com.google.common.base.Preconditions;
@Configuration
@EnableTransactionManagement
-@EnableJpaRepositories(basePackages = { "com.baeldung.persistence" }, transactionManagerRef = "jpaTransactionManager")
+@EnableJpaRepositories(basePackages = { "com.baeldung.persistence" }, transactionManagerRef = "jpaTransactionManager", entityManagerFactoryRef = "jpaEntityManager")
@EnableJpaAuditing(auditorAwareRef = "auditorProvider")
@PropertySource({ "classpath:persistence-h2.properties" })
@ComponentScan({ "com.baeldung.persistence" })
@@ -75,7 +75,7 @@ public class PersistenceConfig {
return sessionFactory;
}
- @Bean
+ @Bean("jpaEntityManager")
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
final LocalContainerEntityManagerFactoryBean emf = new LocalContainerEntityManagerFactoryBean();
emf.setDataSource(restDataSource());
diff --git a/persistence-modules/spring-hibernate4/src/main/java/com/baeldung/spring/PersistenceXmlConfig.java b/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/config/PersistenceXmlConfig.java
similarity index 94%
rename from persistence-modules/spring-hibernate4/src/main/java/com/baeldung/spring/PersistenceXmlConfig.java
rename to persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/config/PersistenceXmlConfig.java
index 9cbeb8e1f8..388494b21a 100644
--- a/persistence-modules/spring-hibernate4/src/main/java/com/baeldung/spring/PersistenceXmlConfig.java
+++ b/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/config/PersistenceXmlConfig.java
@@ -1,4 +1,4 @@
-package com.baeldung.spring;
+package com.baeldung.config;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
diff --git a/persistence-modules/spring-hibernate4/src/main/java/com/baeldung/hibernate/audit/AuditorAwareImpl.java b/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/hibernate/audit/AuditorAwareImpl.java
similarity index 80%
rename from persistence-modules/spring-hibernate4/src/main/java/com/baeldung/hibernate/audit/AuditorAwareImpl.java
rename to persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/hibernate/audit/AuditorAwareImpl.java
index 7aef08b2ce..5dd12e6841 100644
--- a/persistence-modules/spring-hibernate4/src/main/java/com/baeldung/hibernate/audit/AuditorAwareImpl.java
+++ b/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/hibernate/audit/AuditorAwareImpl.java
@@ -9,11 +9,10 @@ import org.springframework.security.core.context.SecurityContextHolder;
public class AuditorAwareImpl implements AuditorAware {
@Override
- public String getCurrentAuditor() {
+ public Optional getCurrentAuditor() {
return Optional.ofNullable(SecurityContextHolder.getContext())
.map(e -> e.getAuthentication())
- .map(Authentication::getName)
- .orElse(null);
+ .map(Authentication::getName);
}
}
diff --git a/persistence-modules/spring-hibernate4/src/main/java/com/baeldung/hibernate/fetching/model/OrderDetail.java b/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/hibernate/fetching/model/OrderDetail.java
similarity index 100%
rename from persistence-modules/spring-hibernate4/src/main/java/com/baeldung/hibernate/fetching/model/OrderDetail.java
rename to persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/hibernate/fetching/model/OrderDetail.java
diff --git a/persistence-modules/spring-hibernate4/src/main/java/com/baeldung/hibernate/fetching/model/UserEager.java b/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/hibernate/fetching/model/UserEager.java
similarity index 100%
rename from persistence-modules/spring-hibernate4/src/main/java/com/baeldung/hibernate/fetching/model/UserEager.java
rename to persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/hibernate/fetching/model/UserEager.java
diff --git a/persistence-modules/spring-hibernate4/src/main/java/com/baeldung/hibernate/fetching/model/UserLazy.java b/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/hibernate/fetching/model/UserLazy.java
similarity index 100%
rename from persistence-modules/spring-hibernate4/src/main/java/com/baeldung/hibernate/fetching/model/UserLazy.java
rename to persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/hibernate/fetching/model/UserLazy.java
diff --git a/persistence-modules/spring-hibernate4/src/main/java/com/baeldung/hibernate/fetching/util/HibernateUtil.java b/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/hibernate/fetching/util/HibernateUtil.java
similarity index 100%
rename from persistence-modules/spring-hibernate4/src/main/java/com/baeldung/hibernate/fetching/util/HibernateUtil.java
rename to persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/hibernate/fetching/util/HibernateUtil.java
diff --git a/persistence-modules/spring-hibernate4/src/main/java/com/baeldung/hibernate/fetching/view/FetchingAppView.java b/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/hibernate/fetching/view/FetchingAppView.java
similarity index 100%
rename from persistence-modules/spring-hibernate4/src/main/java/com/baeldung/hibernate/fetching/view/FetchingAppView.java
rename to persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/hibernate/fetching/view/FetchingAppView.java
diff --git a/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/dao/BookRepository.java b/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/dao/BookRepository.java
deleted file mode 100644
index 48620f4ff1..0000000000
--- a/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/dao/BookRepository.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package com.baeldung.persistence.dao;
-
-import com.baeldung.persistence.model.Book;
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
-
-public interface BookRepository extends JpaRepository, BookRepositoryCustom, JpaSpecificationExecutor {
-
-}
diff --git a/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/dao/BookRepositoryCustom.java b/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/dao/BookRepositoryCustom.java
deleted file mode 100644
index eda34542df..0000000000
--- a/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/dao/BookRepositoryCustom.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package com.baeldung.persistence.dao;
-
-import com.baeldung.persistence.model.Book;
-
-import java.util.List;
-
-public interface BookRepositoryCustom {
-
- List findBooksByAuthorNameAndTitle(String authorName, String title);
-
-}
diff --git a/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/dao/BookRepositoryImpl.java b/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/dao/BookRepositoryImpl.java
deleted file mode 100644
index 7f5bedd018..0000000000
--- a/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/dao/BookRepositoryImpl.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package com.baeldung.persistence.dao;
-
-import com.baeldung.persistence.model.Book;
-import org.springframework.stereotype.Repository;
-
-import javax.persistence.EntityManager;
-import javax.persistence.TypedQuery;
-import javax.persistence.criteria.CriteriaBuilder;
-import javax.persistence.criteria.CriteriaQuery;
-import javax.persistence.criteria.Predicate;
-import javax.persistence.criteria.Root;
-import java.util.ArrayList;
-import java.util.List;
-
-@Repository
-public class BookRepositoryImpl implements BookRepositoryCustom {
-
- private EntityManager em;
-
- public BookRepositoryImpl(EntityManager em) {
- this.em = em;
- }
-
- @Override
- public List findBooksByAuthorNameAndTitle(String authorName, String title) {
- CriteriaBuilder cb = em.getCriteriaBuilder();
- CriteriaQuery cq = cb.createQuery(Book.class);
-
- Root book = cq.from(Book.class);
- List predicates = new ArrayList<>();
-
- if (authorName != null) {
- predicates.add(cb.equal(book.get("author"), authorName));
- }
- if (title != null) {
- predicates.add(cb.like(book.get("title"), "%" + title + "%"));
- }
- cq.where(predicates.toArray(new Predicate[0]));
-
- TypedQuery query = em.createQuery(cq);
- return query.getResultList();
- }
-
-}
diff --git a/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/dao/BookService.java b/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/dao/BookService.java
deleted file mode 100644
index 4165cd8eb9..0000000000
--- a/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/dao/BookService.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package com.baeldung.persistence.dao;
-
-import com.baeldung.persistence.model.Book;
-import org.springframework.stereotype.Service;
-
-import java.util.List;
-
-import static com.baeldung.persistence.dao.BookSpecifications.hasAuthor;
-import static com.baeldung.persistence.dao.BookSpecifications.titleContains;
-import static org.springframework.data.jpa.domain.Specification.where;
-
-@Service
-public class BookService {
-
- private BookRepository bookRepository;
-
- public BookService(BookRepository bookRepository) {
- this.bookRepository = bookRepository;
- }
-
- public List query(String author, String title) {
- return bookRepository.findAll(where(hasAuthor(author)).and(titleContains(title)));
- }
-
-}
diff --git a/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/dao/BookSpecifications.java b/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/dao/BookSpecifications.java
deleted file mode 100644
index 16646a5b4b..0000000000
--- a/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/dao/BookSpecifications.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package com.baeldung.persistence.dao;
-
-import com.baeldung.persistence.model.Book;
-import org.springframework.data.jpa.domain.Specification;
-
-public class BookSpecifications {
-
- public static Specification hasAuthor(String author) {
- return (book, cq, cb) -> cb.equal(book.get("author"), author);
- }
-
- public static Specification titleContains(String title) {
- return (book, cq, cb) -> cb.like(book.get("title"), "%" + title + "%");
- }
-
-}
diff --git a/persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/dao/IBarAuditableDao.java b/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/dao/IBarAuditableDao.java
similarity index 100%
rename from persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/dao/IBarAuditableDao.java
rename to persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/dao/IBarAuditableDao.java
diff --git a/persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/dao/IBarCrudRepository.java b/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/dao/IBarCrudRepository.java
similarity index 100%
rename from persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/dao/IBarCrudRepository.java
rename to persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/dao/IBarCrudRepository.java
diff --git a/persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/dao/IBarDao.java b/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/dao/IBarDao.java
similarity index 100%
rename from persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/dao/IBarDao.java
rename to persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/dao/IBarDao.java
diff --git a/persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/dao/IChildDao.java b/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/dao/IChildDao.java
similarity index 100%
rename from persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/dao/IChildDao.java
rename to persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/dao/IChildDao.java
diff --git a/persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/dao/IFooAuditableDao.java b/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/dao/IFooAuditableDao.java
similarity index 100%
rename from persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/dao/IFooAuditableDao.java
rename to persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/dao/IFooAuditableDao.java
diff --git a/persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/dao/IFooDao.java b/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/dao/IFooDao.java
similarity index 100%
rename from persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/dao/IFooDao.java
rename to persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/dao/IFooDao.java
diff --git a/persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/dao/IParentDao.java b/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/dao/IParentDao.java
similarity index 100%
rename from persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/dao/IParentDao.java
rename to persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/dao/IParentDao.java
diff --git a/persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/dao/common/AbstractDao.java b/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/dao/common/AbstractDao.java
similarity index 100%
rename from persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/dao/common/AbstractDao.java
rename to persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/dao/common/AbstractDao.java
diff --git a/persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/dao/common/AbstractHibernateAuditableDao.java b/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/dao/common/AbstractHibernateAuditableDao.java
similarity index 100%
rename from persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/dao/common/AbstractHibernateAuditableDao.java
rename to persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/dao/common/AbstractHibernateAuditableDao.java
diff --git a/persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/dao/common/AbstractHibernateDao.java b/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/dao/common/AbstractHibernateDao.java
similarity index 100%
rename from persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/dao/common/AbstractHibernateDao.java
rename to persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/dao/common/AbstractHibernateDao.java
diff --git a/persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/dao/common/AbstractJpaDao.java b/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/dao/common/AbstractJpaDao.java
similarity index 96%
rename from persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/dao/common/AbstractJpaDao.java
rename to persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/dao/common/AbstractJpaDao.java
index 69f8e58c25..79bdd86658 100644
--- a/persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/dao/common/AbstractJpaDao.java
+++ b/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/dao/common/AbstractJpaDao.java
@@ -12,7 +12,7 @@ import javax.persistence.criteria.Root;
public class AbstractJpaDao extends AbstractDao implements IOperations {
- @PersistenceContext
+ @PersistenceContext(unitName = "jpaEntityManager")
private EntityManager em;
// API
diff --git a/persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/dao/common/GenericHibernateDao.java b/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/dao/common/GenericHibernateDao.java
similarity index 100%
rename from persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/dao/common/GenericHibernateDao.java
rename to persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/dao/common/GenericHibernateDao.java
diff --git a/persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/dao/common/IAuditOperations.java b/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/dao/common/IAuditOperations.java
similarity index 100%
rename from persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/dao/common/IAuditOperations.java
rename to persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/dao/common/IAuditOperations.java
diff --git a/persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/dao/common/IGenericDao.java b/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/dao/common/IGenericDao.java
similarity index 100%
rename from persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/dao/common/IGenericDao.java
rename to persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/dao/common/IGenericDao.java
diff --git a/persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/dao/common/IOperations.java b/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/dao/common/IOperations.java
similarity index 100%
rename from persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/dao/common/IOperations.java
rename to persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/dao/common/IOperations.java
diff --git a/persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/dao/impl/BarAuditableDao.java b/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/dao/impl/BarAuditableDao.java
similarity index 100%
rename from persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/dao/impl/BarAuditableDao.java
rename to persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/dao/impl/BarAuditableDao.java
diff --git a/persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/dao/impl/BarDao.java b/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/dao/impl/BarDao.java
similarity index 100%
rename from persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/dao/impl/BarDao.java
rename to persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/dao/impl/BarDao.java
diff --git a/persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/dao/impl/BarJpaDao.java b/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/dao/impl/BarJpaDao.java
similarity index 100%
rename from persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/dao/impl/BarJpaDao.java
rename to persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/dao/impl/BarJpaDao.java
diff --git a/persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/dao/impl/ChildDao.java b/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/dao/impl/ChildDao.java
similarity index 100%
rename from persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/dao/impl/ChildDao.java
rename to persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/dao/impl/ChildDao.java
diff --git a/persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/dao/impl/FooAuditableDao.java b/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/dao/impl/FooAuditableDao.java
similarity index 100%
rename from persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/dao/impl/FooAuditableDao.java
rename to persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/dao/impl/FooAuditableDao.java
diff --git a/persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/dao/impl/FooDao.java b/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/dao/impl/FooDao.java
similarity index 100%
rename from persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/dao/impl/FooDao.java
rename to persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/dao/impl/FooDao.java
diff --git a/persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/dao/impl/ParentDao.java b/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/dao/impl/ParentDao.java
similarity index 100%
rename from persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/dao/impl/ParentDao.java
rename to persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/dao/impl/ParentDao.java
diff --git a/persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/model/Bar.java b/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/model/Bar.java
similarity index 100%
rename from persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/model/Bar.java
rename to persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/model/Bar.java
diff --git a/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/model/Book.java b/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/model/Book.java
deleted file mode 100644
index 507043dd56..0000000000
--- a/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/model/Book.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package com.baeldung.persistence.model;
-
-import javax.persistence.Entity;
-import javax.persistence.Id;
-
-@Entity
-public class Book {
-
- @Id
- private Long id;
-
- private String title;
-
- private String author;
-
- public Long getId() {
- return id;
- }
-
- public String getTitle() {
- return title;
- }
-
- public void setTitle(String title) {
- this.title = title;
- }
-
- public String getAuthor() {
- return author;
- }
-
- public void setAuthor(String author) {
- this.author = author;
- }
-
-}
diff --git a/persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/model/Child.java b/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/model/Child.java
similarity index 100%
rename from persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/model/Child.java
rename to persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/model/Child.java
diff --git a/persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/model/Foo.java b/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/model/Foo.java
similarity index 100%
rename from persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/model/Foo.java
rename to persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/model/Foo.java
diff --git a/persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/model/Parent.java b/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/model/Parent.java
similarity index 100%
rename from persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/model/Parent.java
rename to persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/model/Parent.java
diff --git a/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/model/Person.java b/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/model/Person.java
new file mode 100644
index 0000000000..6a95a7acf5
--- /dev/null
+++ b/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/model/Person.java
@@ -0,0 +1,31 @@
+package com.baeldung.persistence.model;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+@Entity
+public class Person {
+
+ @Id
+ @GeneratedValue
+ private Long id;
+
+ private String 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-hibernate4/src/main/java/com/baeldung/persistence/service/IBarAuditableService.java b/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/service/IBarAuditableService.java
similarity index 100%
rename from persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/service/IBarAuditableService.java
rename to persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/service/IBarAuditableService.java
diff --git a/persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/service/IBarService.java b/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/service/IBarService.java
similarity index 100%
rename from persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/service/IBarService.java
rename to persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/service/IBarService.java
diff --git a/persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/service/IChildService.java b/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/service/IChildService.java
similarity index 100%
rename from persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/service/IChildService.java
rename to persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/service/IChildService.java
diff --git a/persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/service/IFooAuditableService.java b/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/service/IFooAuditableService.java
similarity index 100%
rename from persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/service/IFooAuditableService.java
rename to persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/service/IFooAuditableService.java
diff --git a/persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/service/IFooService.java b/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/service/IFooService.java
similarity index 100%
rename from persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/service/IFooService.java
rename to persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/service/IFooService.java
diff --git a/persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/service/IParentService.java b/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/service/IParentService.java
similarity index 100%
rename from persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/service/IParentService.java
rename to persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/service/IParentService.java
diff --git a/persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/service/common/AbstractHibernateAuditableService.java b/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/service/common/AbstractHibernateAuditableService.java
similarity index 100%
rename from persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/service/common/AbstractHibernateAuditableService.java
rename to persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/service/common/AbstractHibernateAuditableService.java
diff --git a/persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/service/common/AbstractHibernateService.java b/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/service/common/AbstractHibernateService.java
similarity index 100%
rename from persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/service/common/AbstractHibernateService.java
rename to persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/service/common/AbstractHibernateService.java
diff --git a/persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/service/common/AbstractJpaService.java b/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/service/common/AbstractJpaService.java
similarity index 100%
rename from persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/service/common/AbstractJpaService.java
rename to persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/service/common/AbstractJpaService.java
diff --git a/persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/service/common/AbstractService.java b/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/service/common/AbstractService.java
similarity index 100%
rename from persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/service/common/AbstractService.java
rename to persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/service/common/AbstractService.java
diff --git a/persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/service/common/AbstractSpringDataJpaService.java b/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/service/common/AbstractSpringDataJpaService.java
similarity index 86%
rename from persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/service/common/AbstractSpringDataJpaService.java
rename to persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/service/common/AbstractSpringDataJpaService.java
index cef483e6bf..73fe27e9ec 100644
--- a/persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/service/common/AbstractSpringDataJpaService.java
+++ b/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/service/common/AbstractSpringDataJpaService.java
@@ -2,6 +2,7 @@ package com.baeldung.persistence.service.common;
import java.io.Serializable;
import java.util.List;
+import java.util.Optional;
import com.baeldung.persistence.dao.common.IOperations;
import org.springframework.data.repository.CrudRepository;
@@ -14,7 +15,8 @@ public abstract class AbstractSpringDataJpaService imple
@Override
public T findOne(final long id) {
- return getDao().findOne(Long.valueOf(id));
+ Optional opt = getDao().findById(Long.valueOf(id));
+ return opt.get();
}
@Override
@@ -39,7 +41,7 @@ public abstract class AbstractSpringDataJpaService imple
@Override
public void deleteById(final long entityId) {
- getDao().delete(Long.valueOf(entityId));
+ getDao().deleteById(Long.valueOf(entityId));
}
protected abstract CrudRepository getDao();
diff --git a/persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/service/impl/BarAuditableService.java b/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/service/impl/BarAuditableService.java
similarity index 100%
rename from persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/service/impl/BarAuditableService.java
rename to persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/service/impl/BarAuditableService.java
diff --git a/persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/service/impl/BarJpaService.java b/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/service/impl/BarJpaService.java
similarity index 100%
rename from persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/service/impl/BarJpaService.java
rename to persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/service/impl/BarJpaService.java
diff --git a/persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/service/impl/BarService.java b/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/service/impl/BarService.java
similarity index 100%
rename from persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/service/impl/BarService.java
rename to persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/service/impl/BarService.java
diff --git a/persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/service/impl/BarSpringDataJpaService.java b/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/service/impl/BarSpringDataJpaService.java
similarity index 100%
rename from persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/service/impl/BarSpringDataJpaService.java
rename to persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/service/impl/BarSpringDataJpaService.java
diff --git a/persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/service/impl/ChildService.java b/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/service/impl/ChildService.java
similarity index 100%
rename from persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/service/impl/ChildService.java
rename to persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/service/impl/ChildService.java
diff --git a/persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/service/impl/FooAuditableService.java b/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/service/impl/FooAuditableService.java
similarity index 100%
rename from persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/service/impl/FooAuditableService.java
rename to persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/service/impl/FooAuditableService.java
diff --git a/persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/service/impl/FooService.java b/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/service/impl/FooService.java
similarity index 100%
rename from persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/service/impl/FooService.java
rename to persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/service/impl/FooService.java
diff --git a/persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/service/impl/ParentService.java b/persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/service/impl/ParentService.java
similarity index 100%
rename from persistence-modules/spring-hibernate4/src/main/java/com/baeldung/persistence/service/impl/ParentService.java
rename to persistence-modules/spring-data-jpa-query-2/src/main/java/com/baeldung/persistence/service/impl/ParentService.java
diff --git a/persistence-modules/spring-hibernate4/src/main/resources/fetching.cfg.xml b/persistence-modules/spring-data-jpa-query-2/src/main/resources/fetching.cfg.xml
similarity index 100%
rename from persistence-modules/spring-hibernate4/src/main/resources/fetching.cfg.xml
rename to persistence-modules/spring-data-jpa-query-2/src/main/resources/fetching.cfg.xml
diff --git a/persistence-modules/spring-hibernate4/src/main/resources/fetchingLazy.cfg.xml b/persistence-modules/spring-data-jpa-query-2/src/main/resources/fetchingLazy.cfg.xml
similarity index 100%
rename from persistence-modules/spring-hibernate4/src/main/resources/fetchingLazy.cfg.xml
rename to persistence-modules/spring-data-jpa-query-2/src/main/resources/fetchingLazy.cfg.xml
diff --git a/persistence-modules/spring-hibernate4/src/main/resources/fetching_create_queries.sql b/persistence-modules/spring-data-jpa-query-2/src/main/resources/fetching_create_queries.sql
similarity index 100%
rename from persistence-modules/spring-hibernate4/src/main/resources/fetching_create_queries.sql
rename to persistence-modules/spring-data-jpa-query-2/src/main/resources/fetching_create_queries.sql
diff --git a/persistence-modules/spring-hibernate4/src/main/resources/hibernate4Config.xml b/persistence-modules/spring-data-jpa-query-2/src/main/resources/hibernate5Config.xml
similarity index 91%
rename from persistence-modules/spring-hibernate4/src/main/resources/hibernate4Config.xml
rename to persistence-modules/spring-data-jpa-query-2/src/main/resources/hibernate5Config.xml
index ca507802cd..bbb61cb3e0 100644
--- a/persistence-modules/spring-hibernate4/src/main/resources/hibernate4Config.xml
+++ b/persistence-modules/spring-data-jpa-query-2/src/main/resources/hibernate5Config.xml
@@ -7,7 +7,7 @@
-
+
@@ -21,11 +21,11 @@
-
+
-
+
diff --git a/persistence-modules/spring-data-jpa-query-2/src/main/resources/hibernate5Configuration.xml b/persistence-modules/spring-data-jpa-query-2/src/main/resources/hibernate5Configuration.xml
new file mode 100644
index 0000000000..1870cfb917
--- /dev/null
+++ b/persistence-modules/spring-data-jpa-query-2/src/main/resources/hibernate5Configuration.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+ ${hibernate.hbm2ddl.auto}
+ ${hibernate.dialect}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/persistence-modules/spring-hibernate4/src/main/resources/immutable.cfg.xml b/persistence-modules/spring-data-jpa-query-2/src/main/resources/immutable.cfg.xml
similarity index 100%
rename from persistence-modules/spring-hibernate4/src/main/resources/immutable.cfg.xml
rename to persistence-modules/spring-data-jpa-query-2/src/main/resources/immutable.cfg.xml
diff --git a/persistence-modules/spring-hibernate4/src/main/resources/insert_statements.sql b/persistence-modules/spring-data-jpa-query-2/src/main/resources/insert_statements.sql
similarity index 100%
rename from persistence-modules/spring-hibernate4/src/main/resources/insert_statements.sql
rename to persistence-modules/spring-data-jpa-query-2/src/main/resources/insert_statements.sql
diff --git a/persistence-modules/spring-hibernate4/src/main/resources/logback.xml b/persistence-modules/spring-data-jpa-query-2/src/main/resources/logback.xml
similarity index 100%
rename from persistence-modules/spring-hibernate4/src/main/resources/logback.xml
rename to persistence-modules/spring-data-jpa-query-2/src/main/resources/logback.xml
diff --git a/persistence-modules/spring-hibernate4/src/main/resources/persistence-mysql.properties b/persistence-modules/spring-data-jpa-query-2/src/main/resources/persistence-mysql.properties
similarity index 100%
rename from persistence-modules/spring-hibernate4/src/main/resources/persistence-mysql.properties
rename to persistence-modules/spring-data-jpa-query-2/src/main/resources/persistence-mysql.properties
diff --git a/persistence-modules/spring-hibernate4/src/main/resources/stored_procedure.sql b/persistence-modules/spring-data-jpa-query-2/src/main/resources/stored_procedure.sql
similarity index 100%
rename from persistence-modules/spring-hibernate4/src/main/resources/stored_procedure.sql
rename to persistence-modules/spring-data-jpa-query-2/src/main/resources/stored_procedure.sql
diff --git a/persistence-modules/spring-hibernate4/src/main/resources/webSecurityConfig.xml b/persistence-modules/spring-data-jpa-query-2/src/main/resources/webSecurityConfig.xml
similarity index 100%
rename from persistence-modules/spring-hibernate4/src/main/resources/webSecurityConfig.xml
rename to persistence-modules/spring-data-jpa-query-2/src/main/resources/webSecurityConfig.xml
diff --git a/persistence-modules/spring-hibernate4/src/test/java/com/baeldung/hibernate/fetching/HibernateFetchingIntegrationTest.java b/persistence-modules/spring-data-jpa-query-2/src/test/java/com/baeldung/hibernate/fetching/HibernateFetchingIntegrationTest.java
similarity index 100%
rename from persistence-modules/spring-hibernate4/src/test/java/com/baeldung/hibernate/fetching/HibernateFetchingIntegrationTest.java
rename to persistence-modules/spring-data-jpa-query-2/src/test/java/com/baeldung/hibernate/fetching/HibernateFetchingIntegrationTest.java
diff --git a/persistence-modules/spring-hibernate4/src/test/java/com/baeldung/persistence/IntegrationTestSuite.java b/persistence-modules/spring-data-jpa-query-2/src/test/java/com/baeldung/persistence/IntegrationTestSuite.java
similarity index 100%
rename from persistence-modules/spring-hibernate4/src/test/java/com/baeldung/persistence/IntegrationTestSuite.java
rename to persistence-modules/spring-data-jpa-query-2/src/test/java/com/baeldung/persistence/IntegrationTestSuite.java
diff --git a/persistence-modules/spring-hibernate4/src/test/java/com/baeldung/persistence/audit/AuditTestSuite.java b/persistence-modules/spring-data-jpa-query-2/src/test/java/com/baeldung/persistence/audit/AuditTestSuite.java
similarity index 100%
rename from persistence-modules/spring-hibernate4/src/test/java/com/baeldung/persistence/audit/AuditTestSuite.java
rename to persistence-modules/spring-data-jpa-query-2/src/test/java/com/baeldung/persistence/audit/AuditTestSuite.java
diff --git a/persistence-modules/spring-hibernate4/src/test/java/com/baeldung/persistence/audit/EnversFooBarAuditIntegrationTest.java b/persistence-modules/spring-data-jpa-query-2/src/test/java/com/baeldung/persistence/audit/EnversFooBarAuditIntegrationTest.java
similarity index 100%
rename from persistence-modules/spring-hibernate4/src/test/java/com/baeldung/persistence/audit/EnversFooBarAuditIntegrationTest.java
rename to persistence-modules/spring-data-jpa-query-2/src/test/java/com/baeldung/persistence/audit/EnversFooBarAuditIntegrationTest.java
diff --git a/persistence-modules/spring-hibernate4/src/test/java/com/baeldung/persistence/audit/JPABarAuditIntegrationTest.java b/persistence-modules/spring-data-jpa-query-2/src/test/java/com/baeldung/persistence/audit/JPABarAuditIntegrationTest.java
similarity index 98%
rename from persistence-modules/spring-hibernate4/src/test/java/com/baeldung/persistence/audit/JPABarAuditIntegrationTest.java
rename to persistence-modules/spring-data-jpa-query-2/src/test/java/com/baeldung/persistence/audit/JPABarAuditIntegrationTest.java
index 733074a6a3..f591773cde 100644
--- a/persistence-modules/spring-hibernate4/src/test/java/com/baeldung/persistence/audit/JPABarAuditIntegrationTest.java
+++ b/persistence-modules/spring-data-jpa-query-2/src/test/java/com/baeldung/persistence/audit/JPABarAuditIntegrationTest.java
@@ -47,6 +47,7 @@ public class JPABarAuditIntegrationTest {
private IBarService barService;
@Autowired
+ @Qualifier("jpaEntityManager")
private EntityManagerFactory entityManagerFactory;
private EntityManager em;
diff --git a/persistence-modules/spring-hibernate4/src/test/java/com/baeldung/persistence/audit/SpringDataJPABarAuditIntegrationTest.java b/persistence-modules/spring-data-jpa-query-2/src/test/java/com/baeldung/persistence/audit/SpringDataJPABarAuditIntegrationTest.java
similarity index 98%
rename from persistence-modules/spring-hibernate4/src/test/java/com/baeldung/persistence/audit/SpringDataJPABarAuditIntegrationTest.java
rename to persistence-modules/spring-data-jpa-query-2/src/test/java/com/baeldung/persistence/audit/SpringDataJPABarAuditIntegrationTest.java
index 18227abd28..0603067810 100644
--- a/persistence-modules/spring-hibernate4/src/test/java/com/baeldung/persistence/audit/SpringDataJPABarAuditIntegrationTest.java
+++ b/persistence-modules/spring-data-jpa-query-2/src/test/java/com/baeldung/persistence/audit/SpringDataJPABarAuditIntegrationTest.java
@@ -46,6 +46,7 @@ public class SpringDataJPABarAuditIntegrationTest {
private IBarService barService;
@Autowired
+ @Qualifier("jpaEntityManager")
private EntityManagerFactory entityManagerFactory;
private EntityManager em;
diff --git a/persistence-modules/spring-hibernate4/src/test/java/com/baeldung/persistence/hibernate/FooFixtures.java b/persistence-modules/spring-data-jpa-query-2/src/test/java/com/baeldung/persistence/hibernate/FooFixtures.java
similarity index 100%
rename from persistence-modules/spring-hibernate4/src/test/java/com/baeldung/persistence/hibernate/FooFixtures.java
rename to persistence-modules/spring-data-jpa-query-2/src/test/java/com/baeldung/persistence/hibernate/FooFixtures.java
diff --git a/persistence-modules/spring-hibernate4/src/test/java/com/baeldung/persistence/hibernate/FooPaginationPersistenceIntegrationTest.java b/persistence-modules/spring-data-jpa-query-2/src/test/java/com/baeldung/persistence/hibernate/FooPaginationPersistenceIntegrationTest.java
similarity index 100%
rename from persistence-modules/spring-hibernate4/src/test/java/com/baeldung/persistence/hibernate/FooPaginationPersistenceIntegrationTest.java
rename to persistence-modules/spring-data-jpa-query-2/src/test/java/com/baeldung/persistence/hibernate/FooPaginationPersistenceIntegrationTest.java
diff --git a/persistence-modules/spring-hibernate4/src/test/java/com/baeldung/persistence/hibernate/FooSortingPersistenceIntegrationTest.java b/persistence-modules/spring-data-jpa-query-2/src/test/java/com/baeldung/persistence/hibernate/FooSortingPersistenceIntegrationTest.java
similarity index 100%
rename from persistence-modules/spring-hibernate4/src/test/java/com/baeldung/persistence/hibernate/FooSortingPersistenceIntegrationTest.java
rename to persistence-modules/spring-data-jpa-query-2/src/test/java/com/baeldung/persistence/hibernate/FooSortingPersistenceIntegrationTest.java
diff --git a/persistence-modules/spring-hibernate4/src/test/java/com/baeldung/persistence/service/FooServiceBasicPersistenceIntegrationTest.java b/persistence-modules/spring-data-jpa-query-2/src/test/java/com/baeldung/persistence/service/FooServiceBasicPersistenceIntegrationTest.java
similarity index 100%
rename from persistence-modules/spring-hibernate4/src/test/java/com/baeldung/persistence/service/FooServiceBasicPersistenceIntegrationTest.java
rename to persistence-modules/spring-data-jpa-query-2/src/test/java/com/baeldung/persistence/service/FooServiceBasicPersistenceIntegrationTest.java
diff --git a/persistence-modules/spring-hibernate4/src/test/java/com/baeldung/persistence/service/FooServicePersistenceIntegrationTest.java b/persistence-modules/spring-data-jpa-query-2/src/test/java/com/baeldung/persistence/service/FooServicePersistenceIntegrationTest.java
similarity index 100%
rename from persistence-modules/spring-hibernate4/src/test/java/com/baeldung/persistence/service/FooServicePersistenceIntegrationTest.java
rename to persistence-modules/spring-data-jpa-query-2/src/test/java/com/baeldung/persistence/service/FooServicePersistenceIntegrationTest.java
diff --git a/persistence-modules/spring-hibernate4/src/test/java/com/baeldung/persistence/service/FooStoredProceduresLiveTest.java b/persistence-modules/spring-data-jpa-query-2/src/test/java/com/baeldung/persistence/service/FooStoredProceduresLiveTest.java
similarity index 98%
rename from persistence-modules/spring-hibernate4/src/test/java/com/baeldung/persistence/service/FooStoredProceduresLiveTest.java
rename to persistence-modules/spring-data-jpa-query-2/src/test/java/com/baeldung/persistence/service/FooStoredProceduresLiveTest.java
index d9353f1ad1..8bf33c4110 100644
--- a/persistence-modules/spring-hibernate4/src/test/java/com/baeldung/persistence/service/FooStoredProceduresLiveTest.java
+++ b/persistence-modules/spring-data-jpa-query-2/src/test/java/com/baeldung/persistence/service/FooStoredProceduresLiveTest.java
@@ -21,8 +21,8 @@ import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.support.AnnotationConfigContextLoader;
+import com.baeldung.config.PersistenceConfig;
import com.baeldung.persistence.model.Foo;
-import com.baeldung.spring.PersistenceConfig;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = { PersistenceConfig.class }, loader = AnnotationConfigContextLoader.class)
diff --git a/persistence-modules/spring-hibernate4/src/test/java/com/baeldung/persistence/service/ParentServicePersistenceIntegrationTest.java b/persistence-modules/spring-data-jpa-query-2/src/test/java/com/baeldung/persistence/service/ParentServicePersistenceIntegrationTest.java
similarity index 100%
rename from persistence-modules/spring-hibernate4/src/test/java/com/baeldung/persistence/service/ParentServicePersistenceIntegrationTest.java
rename to persistence-modules/spring-data-jpa-query-2/src/test/java/com/baeldung/persistence/service/ParentServicePersistenceIntegrationTest.java
diff --git a/persistence-modules/spring-hibernate4/src/test/java/com/baeldung/spring/config/PersistenceTestConfig.java b/persistence-modules/spring-data-jpa-query-2/src/test/java/com/baeldung/spring/config/PersistenceTestConfig.java
similarity index 96%
rename from persistence-modules/spring-hibernate4/src/test/java/com/baeldung/spring/config/PersistenceTestConfig.java
rename to persistence-modules/spring-data-jpa-query-2/src/test/java/com/baeldung/spring/config/PersistenceTestConfig.java
index 9bf55c902a..34301741fe 100644
--- a/persistence-modules/spring-hibernate4/src/test/java/com/baeldung/spring/config/PersistenceTestConfig.java
+++ b/persistence-modules/spring-data-jpa-query-2/src/test/java/com/baeldung/spring/config/PersistenceTestConfig.java
@@ -14,8 +14,8 @@ import org.springframework.core.env.Environment;
import org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
-import org.springframework.orm.hibernate4.HibernateTransactionManager;
-import org.springframework.orm.hibernate4.LocalSessionFactoryBean;
+import org.springframework.orm.hibernate5.HibernateTransactionManager;
+import org.springframework.orm.hibernate5.LocalSessionFactoryBean;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.JpaVendorAdapter;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
@@ -45,7 +45,7 @@ import com.google.common.base.Preconditions;
@Configuration
@EnableTransactionManagement
-@EnableJpaRepositories(basePackages = { "com.baeldung.persistence" }, transactionManagerRef = "jpaTransactionManager")
+@EnableJpaRepositories(basePackages = { "com.baeldung.persistence" }, transactionManagerRef = "jpaTransactionManager", entityManagerFactoryRef = "jpaEntityManager")
@EnableJpaAuditing
@PropertySource({ "classpath:persistence-h2.properties" })
@ComponentScan({ "com.baeldung.persistence" })
@@ -68,7 +68,7 @@ public class PersistenceTestConfig {
return sessionFactory;
}
- @Bean
+ @Bean("jpaEntityManager")
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
final LocalContainerEntityManagerFactoryBean emf = new LocalContainerEntityManagerFactoryBean();
emf.setDataSource(restDataSource());
diff --git a/persistence-modules/spring-data-jpa-query-2/src/test/java/com/baeldung/spring/data/jpa/query/datetime/ArticleRepositoryIntegrationTest.java b/persistence-modules/spring-data-jpa-query-2/src/test/java/com/baeldung/spring/data/jpa/query/datetime/ArticleRepositoryIntegrationTest.java
index 38fd804195..b1158b3dae 100644
--- a/persistence-modules/spring-data-jpa-query-2/src/test/java/com/baeldung/spring/data/jpa/query/datetime/ArticleRepositoryIntegrationTest.java
+++ b/persistence-modules/spring-data-jpa-query-2/src/test/java/com/baeldung/spring/data/jpa/query/datetime/ArticleRepositoryIntegrationTest.java
@@ -6,6 +6,9 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
import org.springframework.test.context.junit4.SpringRunner;
+import com.baeldung.spring.data.jpa.query.datetime.Article;
+import com.baeldung.spring.data.jpa.query.datetime.ArticleRepository;
+
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.List;
diff --git a/persistence-modules/spring-hibernate4/src/test/resources/fetching.cfg.xml b/persistence-modules/spring-data-jpa-query-2/src/test/resources/fetching.cfg.xml
similarity index 100%
rename from persistence-modules/spring-hibernate4/src/test/resources/fetching.cfg.xml
rename to persistence-modules/spring-data-jpa-query-2/src/test/resources/fetching.cfg.xml
diff --git a/persistence-modules/spring-hibernate4/src/test/resources/fetchingLazy.cfg.xml b/persistence-modules/spring-data-jpa-query-2/src/test/resources/fetchingLazy.cfg.xml
similarity index 100%
rename from persistence-modules/spring-hibernate4/src/test/resources/fetchingLazy.cfg.xml
rename to persistence-modules/spring-data-jpa-query-2/src/test/resources/fetchingLazy.cfg.xml
diff --git a/persistence-modules/spring-hibernate4/src/test/resources/persistence-h2.properties b/persistence-modules/spring-data-jpa-query-2/src/test/resources/persistence-h2.properties
similarity index 100%
rename from persistence-modules/spring-hibernate4/src/test/resources/persistence-h2.properties
rename to persistence-modules/spring-data-jpa-query-2/src/test/resources/persistence-h2.properties
diff --git a/persistence-modules/spring-hibernate-5/README.md b/persistence-modules/spring-hibernate-5/README.md
index 6d7526a13b..cb227592f6 100644
--- a/persistence-modules/spring-hibernate-5/README.md
+++ b/persistence-modules/spring-hibernate-5/README.md
@@ -12,4 +12,4 @@ This module contains articles about Hibernate 5 with Spring.
- [Hibernate Second-Level Cache](http://www.baeldung.com/hibernate-second-level-cache)
- [Deleting Objects with Hibernate](http://www.baeldung.com/delete-with-hibernate)
- [Spring, Hibernate and a JNDI Datasource](http://www.baeldung.com/spring-persistence-jpa-jndi-datasource)
-- [@Immutable in Hibernate](http://www.baeldung.com/hibernate-immutable)
\ No newline at end of file
+- [@Immutable in Hibernate](http://www.baeldung.com/hibernate-immutable)
diff --git a/persistence-modules/spring-hibernate4/.gitignore b/persistence-modules/spring-hibernate4/.gitignore
deleted file mode 100644
index d31cc4c619..0000000000
--- a/persistence-modules/spring-hibernate4/.gitignore
+++ /dev/null
@@ -1,15 +0,0 @@
-*.class
-
-#folders#
-/target
-/neoDb*
-/data
-/src/main/webapp/WEB-INF/classes
-*/META-INF/*
-
-# Packaged files #
-*.jar
-*.war
-*.ear
-/target/
-/target/
diff --git a/persistence-modules/spring-hibernate4/README.md b/persistence-modules/spring-hibernate4/README.md
deleted file mode 100644
index a5a72a9b7e..0000000000
--- a/persistence-modules/spring-hibernate4/README.md
+++ /dev/null
@@ -1,24 +0,0 @@
-## Spring with Hibernate 4
-
-This module contains articles about Spring with Hibernate 4
-
-### Relevant Articles:
-- [Guide to Hibernate 4 with Spring](https://www.baeldung.com/hibernate-4-spring)
-- [Hibernate Pagination](https://www.baeldung.com/hibernate-pagination)
-- [Sorting with Hibernate](https://www.baeldung.com/hibernate-sort)
-- [Stored Procedures with Hibernate](https://www.baeldung.com/stored-procedures-with-hibernate-tutorial)
-- [Hibernate: save, persist, update, merge, saveOrUpdate](https://www.baeldung.com/hibernate-save-persist-update-merge-saveorupdate)
-- [Eager/Lazy Loading In Hibernate](https://www.baeldung.com/hibernate-lazy-eager-loading)
-- [Auditing with JPA, Hibernate, and Spring Data JPA](https://www.baeldung.com/database-auditing-jpa)
-
-### Quick Start
-
-```
-git clone git://github.com/eugenp/REST.git
-cd REST
-mvn install
-mvn cargo:run
-```
-
-- **note**: starts on port `8082`
-
diff --git a/persistence-modules/spring-hibernate4/pom.xml b/persistence-modules/spring-hibernate4/pom.xml
deleted file mode 100644
index 3e5a6f913f..0000000000
--- a/persistence-modules/spring-hibernate4/pom.xml
+++ /dev/null
@@ -1,166 +0,0 @@
-
-
- 4.0.0
- spring-hibernate4
- 0.1-SNAPSHOT
- spring-hibernate4
-
-
- com.baeldung
- parent-spring-4
- 0.0.1-SNAPSHOT
- ../../parent-spring-4
-
-
-
-
-
-
- org.springframework
- spring-context
- ${org.springframework.version}
-
-
- commons-logging
- commons-logging
-
-
-
-
- org.springframework
- spring-aspects
- ${org.springframework.version}
-
-
- org.springframework.security
- spring-security-core
- ${org.springframework.security.version}
-
-
-
-
-
- org.springframework
- spring-orm
- ${org.springframework.version}
-
-
- org.springframework.data
- spring-data-jpa
- ${org.springframework.data.version}
-
-
- org.hibernate
- hibernate-core
- ${hibernate.version}
-
-
- org.hibernate
- hibernate-envers
- ${hibernate-envers.version}
-
-
- javax.transaction
- jta
- ${jta.version}
-
-
- mysql
- mysql-connector-java
- ${mysql-connector-java.version}
-
-
-
- org.apache.tomcat
- tomcat-dbcp
- ${tomcat-dbcp.version}
-
-
-
-
-
- org.hibernate
- hibernate-validator
- ${hibernate-validator.version}
-
-
- javax.el
- javax.el-api
- ${javax.el-api.version}
-
-
-
-
-
- com.google.guava
- guava
- ${guava.version}
-
-
-
-
-
- org.apache.commons
- commons-lang3
- ${commons-lang3.version}
- test
-
-
-
- org.springframework
- spring-test
- ${org.springframework.version}
- test
-
-
-
- org.springframework.security
- spring-security-test
- ${org.springframework.security.version}
- test
-
-
-
- org.hsqldb
- hsqldb
- ${hsqldb.version}
- test
-
-
- com.h2database
- h2
- ${h2.version}
- test
-
-
-
-
-
-
- 4.3.4.RELEASE
- 4.2.0.RELEASE
- 1.10.5.RELEASE
-
-
- 4.3.11.Final
- ${hibernate.version}
- 5.1.40
- 8.5.8
- 1.1
- 2.3.4
-
-
- 5.3.3.Final
- 2.2.5
-
-
- 19.0
-
-
- 2.22.2
- 5.6.2
- 4.13
-
-
-
diff --git a/persistence-modules/spring-hibernate4/src/main/java/com/baeldung/hibernate/criteria/model/Item.java b/persistence-modules/spring-hibernate4/src/main/java/com/baeldung/hibernate/criteria/model/Item.java
deleted file mode 100644
index 957207b7e6..0000000000
--- a/persistence-modules/spring-hibernate4/src/main/java/com/baeldung/hibernate/criteria/model/Item.java
+++ /dev/null
@@ -1,81 +0,0 @@
-package com.baeldung.hibernate.criteria.model;
-
-import java.io.Serializable;
-
-public class Item implements Serializable {
-
- private static final long serialVersionUID = 1L;
- private Integer itemId;
- private String itemName;
- private String itemDescription;
- private Integer itemPrice;
-
- // constructors
- public Item() {
-
- }
-
- public Item(final Integer itemId, final String itemName, final String itemDescription) {
- super();
- this.itemId = itemId;
- this.itemName = itemName;
- this.itemDescription = itemDescription;
- }
-
- @Override
- public int hashCode() {
- final int prime = 31;
- int result = 1;
- result = prime * result + ((itemId == null) ? 0 : itemId.hashCode());
- return result;
- }
-
- @Override
- public boolean equals(final Object obj) {
- if (this == obj)
- return true;
- if (obj == null)
- return false;
- if (getClass() != obj.getClass())
- return false;
- final Item other = (Item) obj;
- if (itemId == null) {
- if (other.itemId != null)
- return false;
- } else if (!itemId.equals(other.itemId))
- return false;
- return true;
- }
-
- public Integer getItemId() {
- return itemId;
- }
-
- public void setItemId(final Integer itemId) {
- this.itemId = itemId;
- }
-
- public String getItemName() {
- return itemName;
- }
-
- public void setItemName(final String itemName) {
- this.itemName = itemName;
- }
-
- public String getItemDescription() {
- return itemDescription;
- }
-
- public Integer getItemPrice() {
- return itemPrice;
- }
-
- public void setItemPrice(final Integer itemPrice) {
- this.itemPrice = itemPrice;
- }
-
- public void setItemDescription(final String itemDescription) {
- this.itemDescription = itemDescription;
- }
-}
diff --git a/persistence-modules/spring-hibernate4/src/test/java/com/baeldung/SpringContextTest.java b/persistence-modules/spring-hibernate4/src/test/java/com/baeldung/SpringContextTest.java
deleted file mode 100644
index e19965773e..0000000000
--- a/persistence-modules/spring-hibernate4/src/test/java/com/baeldung/SpringContextTest.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package com.baeldung;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.springframework.test.context.ContextConfiguration;
-import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
-import org.springframework.test.context.support.AnnotationConfigContextLoader;
-
-import com.baeldung.spring.PersistenceConfig;
-
-@RunWith(SpringJUnit4ClassRunner.class)
-@ContextConfiguration(classes = { PersistenceConfig.class }, loader = AnnotationConfigContextLoader.class)
-public class SpringContextTest {
-
- @Test
- public void whenSpringContextIsBootstrapped_thenNoExceptions() {
- }
-}
diff --git a/persistence-modules/spring-hibernate4/src/test/resources/.gitignore b/persistence-modules/spring-hibernate4/src/test/resources/.gitignore
deleted file mode 100644
index 83c05e60c8..0000000000
--- a/persistence-modules/spring-hibernate4/src/test/resources/.gitignore
+++ /dev/null
@@ -1,13 +0,0 @@
-*.class
-
-#folders#
-/target
-/neoDb*
-/data
-/src/main/webapp/WEB-INF/classes
-*/META-INF/*
-
-# Packaged files #
-*.jar
-*.war
-*.ear
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index bd73fcbf5e..ac1a16a728 100644
--- a/pom.xml
+++ b/pom.xml
@@ -424,7 +424,7 @@
hazelcast
helidon
httpclient
- httpclient-2
+
httpclient-simple
hystrix
@@ -936,7 +936,7 @@
hazelcast
helidon
httpclient
- httpclient-2
+
httpclient-simple
hystrix
@@ -1485,9 +1485,8 @@
3.1.0
1.2
2.3.1
- 1.9.13
1.2
- 2.9.8
+ 2.11.1
1.3
1.2.0
5.2.0
diff --git a/spring-5-mvc/pom.xml b/spring-5-mvc/pom.xml
index fd9868ad66..0bb69d8057 100644
--- a/spring-5-mvc/pom.xml
+++ b/spring-5-mvc/pom.xml
@@ -173,7 +173,6 @@
2.9.0
- 2.9.9
1.2.71
4.5.8
com.baeldung.Spring5Application
diff --git a/spring-5-reactive-security/src/main/java/com/baeldung/reactive/security/SpringSecurity5Application.java b/spring-5-reactive-security/src/main/java/com/baeldung/reactive/security/SpringSecurity5Application.java
index 325923f577..bb0f007ada 100644
--- a/spring-5-reactive-security/src/main/java/com/baeldung/reactive/security/SpringSecurity5Application.java
+++ b/spring-5-reactive-security/src/main/java/com/baeldung/reactive/security/SpringSecurity5Application.java
@@ -28,9 +28,7 @@ public class SpringSecurity5Application {
HttpHandler handler = WebHttpHandlerBuilder.applicationContext(context)
.build();
ReactorHttpHandlerAdapter adapter = new ReactorHttpHandlerAdapter(handler);
- HttpServer httpServer = HttpServer.create();
- httpServer.host("localhost");
- httpServer.port(8080);
+ HttpServer httpServer = HttpServer.create().host("localhost").port(8083);
return httpServer.handle(adapter).bindNow();
}
diff --git a/spring-boot-modules/pom.xml b/spring-boot-modules/pom.xml
index 527f7dcad8..fa70a9f058 100644
--- a/spring-boot-modules/pom.xml
+++ b/spring-boot-modules/pom.xml
@@ -46,6 +46,7 @@
spring-boot-jasypt
spring-boot-keycloak
spring-boot-libraries
+ spring-boot-libraries-2
spring-boot-logging-log4j2
spring-boot-kotlin
spring-boot-mvc
diff --git a/spring-boot-modules/spring-boot-environment/src/main/java/com/baeldung/serverport/GetServerPortApplication.java b/spring-boot-modules/spring-boot-environment/src/main/java/com/baeldung/serverport/GetServerPortApplication.java
new file mode 100644
index 0000000000..d7658ad8d5
--- /dev/null
+++ b/spring-boot-modules/spring-boot-environment/src/main/java/com/baeldung/serverport/GetServerPortApplication.java
@@ -0,0 +1,12 @@
+package com.baeldung.serverport;
+
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class GetServerPortApplication {
+ public static void main(String[] args) {
+ SpringApplication.run(GetServerPortApplication.class, args);
+ }
+}
diff --git a/spring-boot-modules/spring-boot-environment/src/main/java/com/baeldung/serverport/ServerPortService.java b/spring-boot-modules/spring-boot-environment/src/main/java/com/baeldung/serverport/ServerPortService.java
new file mode 100644
index 0000000000..59c0a0f333
--- /dev/null
+++ b/spring-boot-modules/spring-boot-environment/src/main/java/com/baeldung/serverport/ServerPortService.java
@@ -0,0 +1,20 @@
+package com.baeldung.serverport;
+
+import org.springframework.boot.web.servlet.context.ServletWebServerInitializedEvent;
+import org.springframework.context.event.EventListener;
+import org.springframework.stereotype.Service;
+
+@Service
+public class ServerPortService {
+ private int port;
+
+ public int getPort() {
+ return port;
+ }
+
+ @EventListener
+ public void onApplicationEvent(final ServletWebServerInitializedEvent event) {
+ port = event.getWebServer().getPort();
+ }
+
+}
\ No newline at end of file
diff --git a/spring-boot-modules/spring-boot-environment/src/test/java/com/baeldung/serverport/GetServerFixedPortUnitTest.java b/spring-boot-modules/spring-boot-environment/src/test/java/com/baeldung/serverport/GetServerFixedPortUnitTest.java
new file mode 100644
index 0000000000..81e663b7a1
--- /dev/null
+++ b/spring-boot-modules/spring-boot-environment/src/test/java/com/baeldung/serverport/GetServerFixedPortUnitTest.java
@@ -0,0 +1,37 @@
+package com.baeldung.serverport;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.autoconfigure.web.ServerProperties;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.ActiveProfiles;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import static org.junit.Assert.assertEquals;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest(classes = GetServerPortApplication.class, webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
+@ActiveProfiles("fixedport")
+public class GetServerFixedPortUnitTest {
+ private final static int EXPECTED_PORT = 7777;
+
+ @Value("${server.port}")
+ private int serverPort;
+
+ @Autowired
+ private ServerProperties serverProperties;
+
+ @Test
+ public void givenFixedPortAsServerPort_whenReadServerPort_thenGetThePort() {
+ assertEquals("Reading fixed port by @Value(\"${server.port}\") will get the port.", EXPECTED_PORT, serverPort);
+ }
+
+ @Test
+ public void givenFixedPortAsServerPort_whenReadServerProps_thenGetThePort() {
+ int port = serverProperties.getPort();
+ assertEquals("Reading fixed port from serverProperties will get the port.", EXPECTED_PORT, port);
+ }
+
+}
diff --git a/spring-boot-modules/spring-boot-environment/src/test/java/com/baeldung/serverport/GetServerRandomPortUnitTest.java b/spring-boot-modules/spring-boot-environment/src/test/java/com/baeldung/serverport/GetServerRandomPortUnitTest.java
new file mode 100644
index 0000000000..3ad7e0fdf1
--- /dev/null
+++ b/spring-boot-modules/spring-boot-environment/src/test/java/com/baeldung/serverport/GetServerRandomPortUnitTest.java
@@ -0,0 +1,55 @@
+package com.baeldung.serverport;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.autoconfigure.web.ServerProperties;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext;
+import org.springframework.test.context.ActiveProfiles;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest(classes = GetServerPortApplication.class, webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
+@ActiveProfiles("randomport")
+public class GetServerRandomPortUnitTest {
+
+ @Value("${server.port}")
+ private int randomServerPort;
+
+ @Autowired
+ private ServerPortService serverPortService;
+
+ @Autowired
+ private ServerProperties serverProperties;
+
+ @Autowired
+ private ServletWebServerApplicationContext webServerAppCtxt;
+
+ @Test
+ public void given0AsServerPort_whenReadServerPort_thenGet0() {
+ assertEquals("Reading random port by @Value(\"${server.port}\") will get 0.", 0, randomServerPort);
+ }
+
+ @Test
+ public void given0AsServerPort_whenReadServerProps_thenGet0() {
+ int port = serverProperties.getPort();
+ assertEquals("Reading random port by serverProperties will get 0.", 0, port);
+ }
+
+ @Test
+ public void given0AsServerPort_whenReadWebAppCtxt_thenGetThePort() {
+ int port = webServerAppCtxt.getWebServer().getPort();
+ assertTrue("The random port should be greater than 1023", port > 1023);
+ }
+
+ @Test
+ public void given0AsServerPort_whenReadFromListener_thenGetThePort() {
+ int port = serverPortService.getPort();
+ assertTrue("The random port should be greater than 1023", port > 1023);
+ }
+}
diff --git a/spring-boot-modules/spring-boot-environment/src/test/resources/application-fixedport.properties b/spring-boot-modules/spring-boot-environment/src/test/resources/application-fixedport.properties
new file mode 100644
index 0000000000..0c5e84f3a2
--- /dev/null
+++ b/spring-boot-modules/spring-boot-environment/src/test/resources/application-fixedport.properties
@@ -0,0 +1 @@
+server.port=7777
diff --git a/spring-boot-modules/spring-boot-environment/src/test/resources/application-randomport.properties b/spring-boot-modules/spring-boot-environment/src/test/resources/application-randomport.properties
new file mode 100644
index 0000000000..cbe617ef03
--- /dev/null
+++ b/spring-boot-modules/spring-boot-environment/src/test/resources/application-randomport.properties
@@ -0,0 +1 @@
+server.port=0
diff --git a/spring-boot-modules/spring-boot-libraries-2/README.md b/spring-boot-modules/spring-boot-libraries-2/README.md
new file mode 100644
index 0000000000..b0840798e3
--- /dev/null
+++ b/spring-boot-modules/spring-boot-libraries-2/README.md
@@ -0,0 +1,7 @@
+## Spring Boot Libraries
+
+This module contains articles about various Spring Boot libraries
+
+### Relevant Articles:
+
+- Running background jobs in Spring with JobRunr
diff --git a/spring-boot-modules/spring-boot-libraries-2/pom.xml b/spring-boot-modules/spring-boot-libraries-2/pom.xml
new file mode 100644
index 0000000000..2633c8fad3
--- /dev/null
+++ b/spring-boot-modules/spring-boot-libraries-2/pom.xml
@@ -0,0 +1,46 @@
+
+
+
+ spring-boot-modules
+ com.baeldung.spring-boot-modules
+ 1.0.0-SNAPSHOT
+
+ 4.0.0
+
+ spring-boot-libraries-2
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+
+ org.jobrunr
+ jobrunr-spring-boot-starter
+ ${jobrunr.version}
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
+ org.awaitility
+ awaitility
+ ${awaitility.version}
+ test
+
+
+
+
+ 1.0.0
+ 4.0.3
+
+
+
\ No newline at end of file
diff --git a/spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/jobrunr/JobRunrSpringBootApp.java b/spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/jobrunr/JobRunrSpringBootApp.java
new file mode 100644
index 0000000000..d72e9464d9
--- /dev/null
+++ b/spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/jobrunr/JobRunrSpringBootApp.java
@@ -0,0 +1,37 @@
+package com.baeldung.jobrunr;
+
+import com.baeldung.jobrunr.service.SampleJobService;
+import org.jobrunr.jobs.mappers.JobMapper;
+import org.jobrunr.scheduling.JobScheduler;
+import org.jobrunr.scheduling.cron.Cron;
+import org.jobrunr.storage.InMemoryStorageProvider;
+import org.jobrunr.storage.StorageProvider;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.context.annotation.Bean;
+
+import javax.annotation.PostConstruct;
+
+@SpringBootApplication
+public class JobRunrSpringBootApp {
+
+ @Autowired
+ private JobScheduler jobScheduler;
+
+ public static void main(String[] args) {
+ SpringApplication.run(JobRunrSpringBootApp.class, args);
+ }
+
+ @Bean
+ public StorageProvider storageProvider(JobMapper jobMapper) {
+ InMemoryStorageProvider storageProvider = new InMemoryStorageProvider();
+ storageProvider.setJobMapper(jobMapper);
+ return storageProvider;
+ }
+
+ @PostConstruct
+ public void scheduleRecurrently() {
+ jobScheduler.scheduleRecurrently(x -> x.executeSampleJob("a recurring job"), Cron.every5minutes());
+ }
+}
diff --git a/spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/jobrunr/controller/JobRunrController.java b/spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/jobrunr/controller/JobRunrController.java
new file mode 100644
index 0000000000..af5f0b1196
--- /dev/null
+++ b/spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/jobrunr/controller/JobRunrController.java
@@ -0,0 +1,43 @@
+package com.baeldung.jobrunr.controller;
+
+import com.baeldung.jobrunr.service.SampleJobService;
+import org.jobrunr.scheduling.JobScheduler;
+import org.springframework.boot.context.properties.bind.DefaultValue;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+
+import java.time.LocalDateTime;
+
+@RestController
+@RequestMapping("/jobrunr")
+public class JobRunrController {
+
+ private JobScheduler jobScheduler;
+ private SampleJobService sampleJobService;
+
+ private JobRunrController(JobScheduler jobScheduler, SampleJobService sampleJobService) {
+ this.jobScheduler = jobScheduler;
+ this.sampleJobService = sampleJobService;
+ }
+
+ @GetMapping(value = "/enqueue/{input}", produces = MediaType.APPLICATION_JSON_VALUE)
+ public ResponseEntity enqueue(@PathVariable("input") @DefaultValue("default-input") String input) {
+ jobScheduler.enqueue(() -> sampleJobService.executeSampleJob(input));
+ return okResponse("job enqueued successfully");
+ }
+
+ @GetMapping(value = "/schedule/{input}", produces = MediaType.APPLICATION_JSON_VALUE)
+ public ResponseEntity schedule(
+ @PathVariable("input") @DefaultValue("default-input") String input,
+ @RequestParam("scheduleAt") @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime scheduleAt) {
+ jobScheduler.schedule(() -> sampleJobService.executeSampleJob(input), scheduleAt);
+ return okResponse("job scheduled successfully");
+ }
+
+ private ResponseEntity okResponse(String feedback) {
+ return new ResponseEntity<>(feedback, HttpStatus.OK);
+ }
+}
diff --git a/spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/jobrunr/service/SampleJobService.java b/spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/jobrunr/service/SampleJobService.java
new file mode 100644
index 0000000000..dff4309374
--- /dev/null
+++ b/spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/jobrunr/service/SampleJobService.java
@@ -0,0 +1,36 @@
+package com.baeldung.jobrunr.service;
+
+import org.jobrunr.jobs.annotations.Job;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+
+import java.util.concurrent.atomic.AtomicInteger;
+
+@Service
+public class SampleJobService {
+
+ public static final long EXECUTION_TIME = 5000L;
+
+ private Logger logger = LoggerFactory.getLogger(getClass());
+
+ private AtomicInteger count = new AtomicInteger();
+
+ @Job(name = "The sample job with variable %0", retries = 2)
+ public void executeSampleJob(String variable) {
+
+ logger.info("The sample job has begun. The variable you passed is {}", variable);
+ try {
+ Thread.sleep(EXECUTION_TIME);
+ } catch (InterruptedException e) {
+ logger.error("Error while executing sample job", e);
+ } finally {
+ count.incrementAndGet();
+ logger.info("Sample job has finished...");
+ }
+ }
+
+ public int getNumberOfInvocations() {
+ return count.get();
+ }
+}
diff --git a/spring-boot-modules/spring-boot-libraries-2/src/main/resources/application.properties b/spring-boot-modules/spring-boot-libraries-2/src/main/resources/application.properties
new file mode 100644
index 0000000000..69f5a7356e
--- /dev/null
+++ b/spring-boot-modules/spring-boot-libraries-2/src/main/resources/application.properties
@@ -0,0 +1,2 @@
+org.jobrunr.background_job_server=true
+org.jobrunr.dashboard=true
diff --git a/spring-boot-modules/spring-boot-libraries-2/src/test/java/com/baeldung/jobrunr/JobRunrLiveTest.java b/spring-boot-modules/spring-boot-libraries-2/src/test/java/com/baeldung/jobrunr/JobRunrLiveTest.java
new file mode 100644
index 0000000000..83222e7726
--- /dev/null
+++ b/spring-boot-modules/spring-boot-libraries-2/src/test/java/com/baeldung/jobrunr/JobRunrLiveTest.java
@@ -0,0 +1,46 @@
+package com.baeldung.jobrunr;
+
+import org.awaitility.Awaitility;
+import org.jobrunr.jobs.states.StateName;
+import org.jobrunr.storage.StorageProvider;
+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.boot.test.web.client.TestRestTemplate;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import java.net.URI;
+import java.util.concurrent.TimeUnit;
+
+import static org.awaitility.Awaitility.await;
+import static org.junit.Assert.assertEquals;
+import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.DEFINED_PORT;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest(webEnvironment = DEFINED_PORT, classes = JobRunrSpringBootApp.class)
+public class JobRunrLiveTest {
+
+ @Autowired
+ TestRestTemplate restTemplate;
+
+ @Autowired
+ StorageProvider storageProvider;
+
+ @Test
+ public void givenEndpoint_whenJobEnqueued_thenJobIsProcessedWithin30Seconds() {
+ String response = enqueueJobViaRest("some-input");
+ assertEquals("job enqueued successfully", response);
+
+ await().atMost(30, TimeUnit.SECONDS).until(() -> storageProvider.countJobs(StateName.SUCCEEDED) == 1);
+ }
+
+ private String enqueueJobViaRest(String input) {
+ try {
+ return restTemplate.getForObject(new URI("http://localhost:8080/jobrunr/enqueue/" + input), String.class);
+ } catch (Exception ignored) {
+ ignored.printStackTrace();
+ }
+ return null;
+ }
+}
diff --git a/spring-dispatcher-servlet/pom.xml b/spring-dispatcher-servlet/pom.xml
index 46e40722f1..21324e6757 100644
--- a/spring-dispatcher-servlet/pom.xml
+++ b/spring-dispatcher-servlet/pom.xml
@@ -40,11 +40,6 @@
javax.servlet.jsp-api
${javax.servlet.jsp-api.version}
-
- org.codehaus.jackson
- jackson-mapper-asl
- ${jackson-mapper-asl.version}
-
javax.servlet
jstl
diff --git a/spring-mvc-java-2/src/main/java/com/baeldung/datetime/DateTimeConfig.java b/spring-mvc-java-2/src/main/java/com/baeldung/datetime/DateTimeConfig.java
index 8a5d1c71af..c89b043486 100644
--- a/spring-mvc-java-2/src/main/java/com/baeldung/datetime/DateTimeConfig.java
+++ b/spring-mvc-java-2/src/main/java/com/baeldung/datetime/DateTimeConfig.java
@@ -2,28 +2,35 @@ package com.baeldung.datetime;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
+import org.springframework.format.datetime.DateFormatter;
+import org.springframework.format.datetime.DateFormatterRegistrar;
import org.springframework.format.datetime.standard.DateTimeFormatterRegistrar;
import org.springframework.format.number.NumberFormatAnnotationFormatterFactory;
import org.springframework.format.support.DefaultFormattingConversionService;
import org.springframework.format.support.FormattingConversionService;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
import java.time.format.DateTimeFormatter;
@Configuration
-class DateTimeConfig {
+public class DateTimeConfig extends WebMvcConfigurationSupport {
@Bean
- public FormattingConversionService conversionService() {
+ @Override
+ public FormattingConversionService mvcConversionService() {
DefaultFormattingConversionService conversionService = new DefaultFormattingConversionService(false);
conversionService.addFormatterForFieldAnnotation(new NumberFormatAnnotationFormatterFactory());
- DateTimeFormatterRegistrar registrar = new DateTimeFormatterRegistrar();
- registrar.setDateFormatter(DateTimeFormatter.ofPattern("dd.MM.yyyy"));
- registrar.setDateTimeFormatter(DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm:ss"));
- registrar.registerFormatters(conversionService);
+ DateTimeFormatterRegistrar dateTimeRegistrar = new DateTimeFormatterRegistrar();
+ dateTimeRegistrar.setDateFormatter(DateTimeFormatter.ofPattern("dd.MM.yyyy"));
+ dateTimeRegistrar.setDateTimeFormatter(DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm:ss"));
+ dateTimeRegistrar.registerFormatters(conversionService);
+
+ DateFormatterRegistrar dateRegistrar = new DateFormatterRegistrar();
+ dateRegistrar.setFormatter(new DateFormatter("dd.MM.yyyy"));
+ dateRegistrar.registerFormatters(conversionService);
return conversionService;
}
-
}
\ No newline at end of file
diff --git a/spring-swagger-codegen/spring-openapi-generator-api-client/pom.xml b/spring-swagger-codegen/spring-openapi-generator-api-client/pom.xml
index 7c6de543ae..3074849e4c 100644
--- a/spring-swagger-codegen/spring-openapi-generator-api-client/pom.xml
+++ b/spring-swagger-codegen/spring-openapi-generator-api-client/pom.xml
@@ -90,7 +90,7 @@
com.fasterxml.jackson.core
jackson-databind
- ${jackson-databind-version}
+ ${jackson-version}
com.fasterxml.jackson.jaxrs
@@ -264,8 +264,8 @@
1.5.22
4.3.9.RELEASE
- 2.10.1
- 2.10.1
+ 2.11.1
+
0.2.1
2.9.10
1.0.0
diff --git a/testing-modules/mockito-2/pom.xml b/testing-modules/mockito-2/pom.xml
index 340af89c82..055debe615 100644
--- a/testing-modules/mockito-2/pom.xml
+++ b/testing-modules/mockito-2/pom.xml
@@ -30,7 +30,6 @@
2.21.0
- 2.10.3