diff --git a/core-java-modules/core-java-arrays-3/README.md b/core-java-modules/core-java-arrays-3/README.md
new file mode 100644
index 0000000000..9f2885a2ce
--- /dev/null
+++ b/core-java-modules/core-java-arrays-3/README.md
@@ -0,0 +1,5 @@
+## Core Java Arrays (Part 3)
+
+This module contains articles about Java arrays
+
+## Relevant Articles
diff --git a/core-java-modules/core-java-arrays-3/pom.xml b/core-java-modules/core-java-arrays-3/pom.xml
new file mode 100644
index 0000000000..516d9b2b37
--- /dev/null
+++ b/core-java-modules/core-java-arrays-3/pom.xml
@@ -0,0 +1,31 @@
+
+
+ 4.0.0
+ core-java-arrays-3
+ 0.1.0-SNAPSHOT
+ core-java-arrays-3
+ jar
+
+
+ com.baeldung
+ parent-java
+ 0.0.1-SNAPSHOT
+ ../../parent-java
+
+
+
+
+ org.assertj
+ assertj-core
+ ${assertj.version}
+ test
+
+
+
+
+ 3.14.0
+
+
+
\ No newline at end of file
diff --git a/core-java-modules/core-java-arrays-3/src/test/java/com/baeldung/arrays/deepequals/ArraysDeepEqualsUnitTest.java b/core-java-modules/core-java-arrays-3/src/test/java/com/baeldung/arrays/deepequals/ArraysDeepEqualsUnitTest.java
new file mode 100644
index 0000000000..a9b8ed7e3f
--- /dev/null
+++ b/core-java-modules/core-java-arrays-3/src/test/java/com/baeldung/arrays/deepequals/ArraysDeepEqualsUnitTest.java
@@ -0,0 +1,96 @@
+package com.baeldung.arrays.deepequals;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import java.util.Arrays;
+import java.util.Objects;
+import org.junit.jupiter.api.Test;
+
+public class ArraysDeepEqualsUnitTest {
+
+ class Person {
+ private int id;
+ private String name;
+ private int age;
+
+ Person(int id, String name, int age) {
+ this.id = id;
+ this.name = name;
+ this.age = age;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (!(obj instanceof Person))
+ return false;
+ Person person = (Person) obj;
+ return id == person.id && name.equals(person.name) && age == person.age;
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(id, name, age);
+ }
+ }
+
+ @Test
+ void givenTwoUnidimensionalObjectTypeArrays_whenUsingEqualsAndDeepEquals_thenBothShouldReturnTrue() {
+ Object[] anArray = new Object[] { "string1", "string2", "string3" };
+ Object[] anotherArray = new Object[] { "string1", "string2", "string3" };
+
+ assertTrue(Arrays.equals(anArray, anotherArray));
+ assertTrue(Arrays.deepEquals(anArray, anotherArray));
+ }
+
+ @Test
+ void givenTwoUnidimensionalObjectTypeArraysWithNullElements_whenUsingEqualsAndDeepEquals_thenBothShouldReturnTrue() {
+ Object[] anArray = new Object[] { "string1", null, "string3" };
+ Object[] anotherArray = new Object[] { "string1", null, "string3" };
+
+ assertTrue(Arrays.equals(anArray, anotherArray));
+ assertTrue(Arrays.deepEquals(anArray, anotherArray));
+ }
+
+ @Test
+ void givenTwoUnidimensionalObjectTypeArraysWithNestedElements_whenUsingEqualsAndDeepEquals_thenShouldReturnDifferently() {
+ Object[] anArray = new Object[] { "string1", null, new String[] { "nestedString1", "nestedString2" } };
+ Object[] anotherArray = new Object[] { "string1", null, new String[] { "nestedString1", "nestedString2" } };
+
+ assertFalse(Arrays.equals(anArray, anotherArray));
+ assertTrue(Arrays.deepEquals(anArray, anotherArray));
+ }
+
+ @Test
+ void givenTwoMultidimensionalPrimitiveTypeArrays_whenUsingEqualsAndDeepEquals_thenBothShouldReturnDifferently() {
+ int[][] anArray = { { 1, 2, 3 }, { 4, 5, 6, 9 }, { 7 } };
+ int[][] anotherArray = { { 1, 2, 3 }, { 4, 5, 6, 9 }, { 7 } };
+
+ assertFalse(Arrays.equals(anArray, anotherArray));
+ assertTrue(Arrays.deepEquals(anArray, anotherArray));
+ }
+
+ @Test
+ void givenTwoMultidimensionalObjectTypeArrays_whenUsingEqualsAndDeepEquals_thenBothShouldReturnDifferently() {
+ Person personArray1[][] = { { new Person(1, "John", 22), new Person(2, "Mike", 23) }, { new Person(3, "Steve", 27), new Person(4, "Gary", 28) } };
+ Person personArray2[][] = { { new Person(1, "John", 22), new Person(2, "Mike", 23) }, { new Person(3, "Steve", 27), new Person(4, "Gary", 28) } };
+
+ assertFalse(Arrays.equals(personArray1, personArray2));
+ assertTrue(Arrays.deepEquals(personArray1, personArray2));
+ }
+
+ @Test
+ void givenTwoMultidimensionalObjectTypeArrays_whenUsingDeepEqualsFromObjectsAndArraysClasses_thenBothShouldReturnTrue() {
+ Person personArray1[][] = { { new Person(1, "John", 22), new Person(2, "Mike", 23) }, { new Person(3, "Steve", 27), new Person(4, "Gary", 28) } };
+ Person personArray2[][] = { { new Person(1, "John", 22), new Person(2, "Mike", 23) }, { new Person(3, "Steve", 27), new Person(4, "Gary", 28) } };
+
+ assertTrue(Objects.deepEquals(personArray1, personArray2));
+ assertTrue(Arrays.deepEquals(personArray1, personArray2));
+ }
+}
diff --git a/core-java-modules/core-java-arrays/src/main/java/com/baeldung/array/Find2ndLargestInArray.java b/core-java-modules/core-java-arrays/src/main/java/com/baeldung/array/Find2ndLargestInArray.java
deleted file mode 100644
index d424bd429f..0000000000
--- a/core-java-modules/core-java-arrays/src/main/java/com/baeldung/array/Find2ndLargestInArray.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.baeldung.array;
-
-public class Find2ndLargestInArray {
-
- public static int find2ndLargestElement(int[] array) {
- int maxElement = array[0];
- int secondLargestElement = -1;
-
- for (int index = 0; index < array.length; index++) {
- if (maxElement <= array[index]) {
- secondLargestElement = maxElement;
- maxElement = array[index];
- } else if (secondLargestElement < array[index]) {
- secondLargestElement = array[index];
- }
- }
- return secondLargestElement;
- }
-
-}
diff --git a/core-java-modules/core-java-arrays/src/main/java/com/baeldung/array/FindElementInArray.java b/core-java-modules/core-java-arrays/src/main/java/com/baeldung/array/FindElementInArray.java
deleted file mode 100644
index 6da889fe91..0000000000
--- a/core-java-modules/core-java-arrays/src/main/java/com/baeldung/array/FindElementInArray.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package com.baeldung.array;
-
-import java.util.Arrays;
-
-public class FindElementInArray {
-
- public static boolean findGivenElementInArrayWithoutUsingStream(int[] array, int element) {
- boolean actualResult = false;
-
- for (int index = 0; index < array.length; index++) {
- if (element == array[index]) {
- actualResult = true;
- break;
- }
- }
- return actualResult;
- }
-
- public static boolean findGivenElementInArrayUsingStream(int[] array, int element) {
- return Arrays.stream(array).filter(x -> element == x).findFirst().isPresent();
- }
-}
diff --git a/core-java-modules/core-java-arrays/src/test/java/com/baeldung/array/Find2ndLargestInArrayUnitTest.java b/core-java-modules/core-java-arrays/src/test/java/com/baeldung/array/Find2ndLargestInArrayUnitTest.java
deleted file mode 100644
index 4493f3fbf5..0000000000
--- a/core-java-modules/core-java-arrays/src/test/java/com/baeldung/array/Find2ndLargestInArrayUnitTest.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package com.baeldung.array;
-
-import org.junit.Assert;
-import org.junit.Test;
-
-public class Find2ndLargestInArrayUnitTest {
- @Test
- public void givenAnIntArray_thenFind2ndLargestElement() {
- int[] array = { 1, 3, 24, 16, 87, 20 };
- int expected2ndLargest = 24;
-
- int actualSecondLargestElement = Find2ndLargestInArray.find2ndLargestElement(array);
-
- Assert.assertEquals(expected2ndLargest, actualSecondLargestElement);
- }
-}
diff --git a/core-java-modules/core-java-arrays/src/test/java/com/baeldung/array/FindElementInArrayUnitTest.java b/core-java-modules/core-java-arrays/src/test/java/com/baeldung/array/FindElementInArrayUnitTest.java
deleted file mode 100644
index 887f50ebcc..0000000000
--- a/core-java-modules/core-java-arrays/src/test/java/com/baeldung/array/FindElementInArrayUnitTest.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package com.baeldung.array;
-
-import org.junit.Assert;
-import org.junit.Test;
-
-public class FindElementInArrayUnitTest {
- @Test
- public void givenAnIntArray_whenNotUsingStream_thenFindAnElement() {
- int[] array = { 1, 3, 4, 8, 19, 20 };
- int element = 19;
- boolean expectedResult = true;
- boolean actualResult = FindElementInArray.findGivenElementInArrayWithoutUsingStream(array, element);
- Assert.assertEquals(expectedResult, actualResult);
-
- element = 78;
- expectedResult = false;
- actualResult = FindElementInArray.findGivenElementInArrayWithoutUsingStream(array, element);
- Assert.assertEquals(expectedResult, actualResult);
- }
-
- @Test
- public void givenAnIntArray_whenUsingStream_thenFindAnElement() {
- int[] array = { 15, 16, 12, 18 };
- int element = 16;
- boolean expectedResult = true;
- boolean actualResult = FindElementInArray.findGivenElementInArrayUsingStream(array, element);
- Assert.assertEquals(expectedResult, actualResult);
-
- element = 20;
- expectedResult = false;
- actualResult = FindElementInArray.findGivenElementInArrayUsingStream(array, element);
- Assert.assertEquals(expectedResult, actualResult);
- }
-
-}
diff --git a/core-java-modules/core-java-io/README.md b/core-java-modules/core-java-io/README.md
index 2c6c3363cb..b8bec7aa5e 100644
--- a/core-java-modules/core-java-io/README.md
+++ b/core-java-modules/core-java-io/README.md
@@ -3,7 +3,7 @@
This module contains articles about core Java input and output (IO)
### Relevant Articles:
-- [How to Read a File in Java](https://www.baeldung.com/reading-file-in-java)
+- [Java – Read from File](https://www.baeldung.com/java-read-file)
- [Read a File into an ArrayList](https://www.baeldung.com/java-file-to-arraylist)
- [Java – Directory Size](https://www.baeldung.com/java-folder-size)
- [File Size in Java](https://www.baeldung.com/java-file-size)
diff --git a/core-java-modules/core-java-io/src/test/java/com/baeldung/readfile/FileOperationsManualTest.java b/core-java-modules/core-java-io/src/test/java/com/baeldung/readfile/FileOperationsManualTest.java
deleted file mode 100644
index b837c6b4dd..0000000000
--- a/core-java-modules/core-java-io/src/test/java/com/baeldung/readfile/FileOperationsManualTest.java
+++ /dev/null
@@ -1,134 +0,0 @@
-package com.baeldung.readfile;
-
-import org.apache.commons.io.FileUtils;
-import org.apache.commons.io.IOUtils;
-import org.hamcrest.CoreMatchers;
-import org.hamcrest.Matchers;
-import org.junit.Test;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.net.URISyntaxException;
-import java.net.URL;
-import java.net.URLConnection;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertThat;
-
-public class FileOperationsManualTest {
-
- @Test
- public void givenFileName_whenUsingClassloader_thenFileData() throws IOException {
- String expectedData = "Hello World from fileTest.txt!!!";
-
- ClassLoader classLoader = getClass().getClassLoader();
- File file = new File(classLoader.getResource("fileTest.txt").getFile());
- InputStream inputStream = new FileInputStream(file);
- String data = readFromInputStream(inputStream);
-
- assertEquals(expectedData, data.trim());
- }
-
- @Test
- public void givenFileNameAsAbsolutePath_whenUsingClasspath_thenFileData() throws IOException {
- String expectedData = "Hello World from fileTest.txt!!!";
-
- Class clazz = FileOperationsManualTest.class;
- InputStream inputStream = clazz.getResourceAsStream("/fileTest.txt");
- String data = readFromInputStream(inputStream);
-
- assertEquals(expectedData, data.trim());
- }
-
- @Test
- public void givenFileName_whenUsingJarFile_thenFileData() throws IOException {
- String expectedData = "MIT License";
-
- Class clazz = Matchers.class;
- InputStream inputStream = clazz.getResourceAsStream("/LICENSE.txt");
- String data = readFromInputStream(inputStream);
-
- assertThat(data.trim(), CoreMatchers.containsString(expectedData));
- }
-
- @Test
- public void givenURLName_whenUsingURL_thenFileData() throws IOException {
- String expectedData = "Example Domain";
-
- URL urlObject = new URL("http://www.example.com/");
-
- URLConnection urlConnection = urlObject.openConnection();
-
- InputStream inputStream = urlConnection.getInputStream();
- String data = readFromInputStream(inputStream);
-
- assertThat(data.trim(), CoreMatchers.containsString(expectedData));
- }
-
- @Test
- public void givenFileName_whenUsingFileUtils_thenFileData() throws IOException {
- String expectedData = "Hello World from fileTest.txt!!!";
-
- ClassLoader classLoader = getClass().getClassLoader();
- File file = new File(classLoader.getResource("fileTest.txt").getFile());
- String data = FileUtils.readFileToString(file, "UTF-8");
-
- assertEquals(expectedData, data.trim());
- }
-
- @Test
- public void givenFilePath_whenUsingFilesReadAllBytes_thenFileData() throws IOException, URISyntaxException {
- String expectedData = "Hello World from fileTest.txt!!!";
-
- Path path = Paths.get(getClass().getClassLoader().getResource("fileTest.txt").toURI());
-
- byte[] fileBytes = Files.readAllBytes(path);
- String data = new String(fileBytes);
-
- assertEquals(expectedData, data.trim());
- }
-
- @Test
- public void givenFilePath_whenUsingFilesLines_thenFileData() throws IOException, URISyntaxException {
- String expectedData = "Hello World from fileTest.txt!!!";
-
- Path path = Paths.get(getClass().getClassLoader().getResource("fileTest.txt").toURI());
-
- Stream lines = Files.lines(path);
- String data = lines.collect(Collectors.joining("\n"));
- lines.close();
-
- assertEquals(expectedData, data.trim());
- }
-
- private String readFromInputStream(InputStream inputStream) throws IOException {
- StringBuilder resultStringBuilder = new StringBuilder();
- try (BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream))) {
- String line;
- while ((line = bufferedReader.readLine()) != null) {
- resultStringBuilder.append(line).append("\n");
- }
- }
-
- return resultStringBuilder.toString();
- }
-
- @Test
- public void givenFileName_whenUsingIOUtils_thenFileData() throws IOException {
- String expectedData = "This is a content of the file";
-
- FileInputStream fis = new FileInputStream("src/test/resources/fileToRead.txt");
- String data = IOUtils.toString(fis, "UTF-8");
-
- assertEquals(expectedData, data.trim());
- }
-}
\ No newline at end of file
diff --git a/core-java-modules/core-java-io/src/test/java/com/baeldung/readfile/JavaReadFromFileUnitTest.java b/core-java-modules/core-java-io/src/test/java/com/baeldung/readfile/JavaReadFromFileUnitTest.java
index a4ccaad594..aa37a22e1f 100644
--- a/core-java-modules/core-java-io/src/test/java/com/baeldung/readfile/JavaReadFromFileUnitTest.java
+++ b/core-java-modules/core-java-io/src/test/java/com/baeldung/readfile/JavaReadFromFileUnitTest.java
@@ -1,11 +1,15 @@
package com.baeldung.readfile;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.IOUtils;
+import org.hamcrest.CoreMatchers;
+import org.hamcrest.Matchers;
import org.junit.Test;
-import org.junit.Ignore;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import java.io.*;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.net.URLConnection;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import java.nio.charset.Charset;
@@ -13,55 +17,148 @@ import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Scanner;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
public class JavaReadFromFileUnitTest {
- private static final Logger LOG = LoggerFactory.getLogger(JavaReadFromFileUnitTest.class);
-
@Test
public void whenReadWithBufferedReader_thenCorrect() throws IOException {
- final String expected_value = "Hello world";
+ final String expected_value = "Hello, world!";
- final BufferedReader reader = new BufferedReader(new FileReader("src/test/resources/test_read.in"));
+ final BufferedReader reader = new BufferedReader(new FileReader("src/test/resources/fileTest.txt"));
final String currentLine = reader.readLine();
reader.close();
assertEquals(expected_value, currentLine);
}
+ @Test
+ public void givenFileName_whenUsingClassloader_thenFileData() throws IOException {
+ String expectedData = "Hello, world!";
+
+ ClassLoader classLoader = getClass().getClassLoader();
+ File file = new File(classLoader.getResource("fileTest.txt").getFile());
+ InputStream inputStream = new FileInputStream(file);
+ String data = readFromInputStream(inputStream);
+
+ assertEquals(expectedData, data.trim());
+ }
+
+ @Test
+ public void givenFileNameAsAbsolutePath_whenUsingClasspath_thenFileData() throws IOException {
+ String expectedData = "Hello, world!";
+
+ Class clazz = JavaReadFromFileUnitTest.class;
+ InputStream inputStream = clazz.getResourceAsStream("/fileTest.txt");
+ String data = readFromInputStream(inputStream);
+
+ assertEquals(expectedData, data.trim());
+ }
+
+ @Test
+ public void givenFileName_whenUsingJarFile_thenFileData() throws IOException {
+ String expectedData = "BSD License";
+
+ Class clazz = Matchers.class;
+ InputStream inputStream = clazz.getResourceAsStream("/LICENSE.txt");
+ String data = readFromInputStream(inputStream);
+
+ assertThat(data.trim(), CoreMatchers.containsString(expectedData));
+ }
+
+ @Test
+ public void givenURLName_whenUsingURL_thenFileData() throws IOException {
+ String expectedData = "Example Domain";
+
+ URL urlObject = new URL("http://www.example.com/");
+
+ URLConnection urlConnection = urlObject.openConnection();
+
+ InputStream inputStream = urlConnection.getInputStream();
+ String data = readFromInputStream(inputStream);
+
+ assertThat(data.trim(), CoreMatchers.containsString(expectedData));
+ }
+
+ @Test
+ public void givenFileName_whenUsingFileUtils_thenFileData() throws IOException {
+ String expectedData = "Hello, world!";
+
+ ClassLoader classLoader = getClass().getClassLoader();
+ File file = new File(classLoader.getResource("fileTest.txt").getFile());
+ String data = FileUtils.readFileToString(file, "UTF-8");
+
+ assertEquals(expectedData, data.trim());
+ }
+
+ @Test
+ public void givenFilePath_whenUsingFilesReadAllBytes_thenFileData() throws IOException, URISyntaxException {
+ String expectedData = "Hello, world!";
+
+ Path path = Paths.get(getClass().getClassLoader().getResource("fileTest.txt").toURI());
+
+ byte[] fileBytes = Files.readAllBytes(path);
+ String data = new String(fileBytes);
+
+ assertEquals(expectedData, data.trim());
+ }
+
+ @Test
+ public void givenFilePath_whenUsingFilesLines_thenFileData() throws IOException, URISyntaxException {
+ String expectedData = "Hello, world!";
+
+ Path path = Paths.get(getClass().getClassLoader().getResource("fileTest.txt").toURI());
+
+ Stream lines = Files.lines(path);
+ String data = lines.collect(Collectors.joining("\n"));
+ lines.close();
+
+ assertEquals(expectedData, data.trim());
+ }
+
+ @Test
+ public void givenFileName_whenUsingIOUtils_thenFileData() throws IOException {
+ String expectedData = "Hello, world!";
+
+ FileInputStream fis = new FileInputStream("src/test/resources/fileTest.txt");
+ String data = IOUtils.toString(fis, "UTF-8");
+
+ assertEquals(expectedData, data.trim());
+ }
+
@Test
public void whenReadWithScanner_thenCorrect() throws IOException {
- final Scanner scanner = new Scanner(new File("src/test/resources/test_read1.in"));
+ final Scanner scanner = new Scanner(new File("src/test/resources/fileTest.txt"));
scanner.useDelimiter(" ");
assertTrue(scanner.hasNext());
- assertEquals("Hello", scanner.next());
- assertEquals("world", scanner.next());
- assertEquals(1, scanner.nextInt());
+ assertEquals("Hello,", scanner.next());
+ assertEquals("world!", scanner.next());
scanner.close();
-
}
@Test
public void whenReadWithScannerTwoDelimiters_thenCorrect() throws IOException {
- final Scanner scanner = new Scanner(new File("src/test/resources/test_read2.in"));
- scanner.useDelimiter(",| ");
+ final Scanner scanner = new Scanner(new File("src/test/resources/fileTest.txt"));
+ scanner.useDelimiter("\\s|,");
- assertTrue(scanner.hasNextInt());
- assertEquals(2, scanner.nextInt());
- assertEquals(3, scanner.nextInt());
- assertEquals(4, scanner.nextInt());
+ assertTrue(scanner.hasNext());
+ assertEquals("Hello", scanner.next());
+ assertEquals("", scanner.next());
+ assertEquals("world!", scanner.next());
scanner.close();
}
@Test
public void whenReadWithStreamTokenizer_thenCorrectTokens() throws IOException {
- final FileReader reader = new FileReader("src/test/resources/test_read3.in");
+ final FileReader reader = new FileReader("src/test/resources/fileTestTokenizer.txt");
final StreamTokenizer tokenizer = new StreamTokenizer(reader);
tokenizer.nextToken();
@@ -78,49 +175,36 @@ public class JavaReadFromFileUnitTest {
@Test
public void whenReadWithDataInputStream_thenCorrect() throws IOException {
- final String expected_value = "Hello";
+ String expectedValue = "Hello, world!";
+ String file ="src/test/resources/fileTest.txt";
- String result;
- final DataInputStream reader = new DataInputStream(new FileInputStream("src/test/resources/test_read4.in"));
- result = reader.readUTF();
- reader.close();
+ String result = null;
- assertEquals(expected_value, result);
- }
+ DataInputStream reader = new DataInputStream(new FileInputStream(file));
+ int nBytesToRead = reader.available();
+ if(nBytesToRead > 0) {
+ byte[] bytes = new byte[nBytesToRead];
+ reader.read(bytes);
+ result = new String(bytes);
+ }
- public void whenReadTwoFilesWithSequenceInputStream_thenCorrect() throws IOException {
- final int expected_value1 = 2000;
- final int expected_value2 = 5000;
-
- final FileInputStream stream1 = new FileInputStream("src/test/resources/test_read5.in");
- final FileInputStream stream2 = new FileInputStream("src/test/resources/test_read6.in");
-
- final SequenceInputStream sequence = new SequenceInputStream(stream1, stream2);
- final DataInputStream reader = new DataInputStream(sequence);
-
- assertEquals(expected_value1, reader.readInt());
- assertEquals(expected_value2, reader.readInt());
-
- reader.close();
- stream2.close();
+ assertEquals(expectedValue, result);
}
@Test
- @Ignore // TODO
public void whenReadUTFEncodedFile_thenCorrect() throws IOException {
final String expected_value = "青空";
- final BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream("src/test/resources/test_read7.in"), "UTF-8"));
+ final BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream("src/test/resources/fileTestUtf8.txt"), "UTF-8"));
final String currentLine = reader.readLine();
reader.close();
- LOG.debug(currentLine);
-
+
assertEquals(expected_value, currentLine);
}
@Test
public void whenReadFileContentsIntoString_thenCorrect() throws IOException {
- final String expected_value = "Hello world \n Test line \n";
- final BufferedReader reader = new BufferedReader(new FileReader("src/test/resources/test_read8.in"));
+ final String expected_value = "Hello, world!\n";
+ final BufferedReader reader = new BufferedReader(new FileReader("src/test/resources/fileTest.txt"));
final StringBuilder builder = new StringBuilder();
String currentLine = reader.readLine();
while (currentLine != null) {
@@ -136,8 +220,8 @@ public class JavaReadFromFileUnitTest {
@Test
public void whenReadWithFileChannel_thenCorrect() throws IOException {
- final String expected_value = "Hello world";
- final RandomAccessFile reader = new RandomAccessFile("src/test/resources/test_read.in", "r");
+ final String expected_value = "Hello, world!";
+ final RandomAccessFile reader = new RandomAccessFile("src/test/resources/fileTest.txt", "r");
final FileChannel channel = reader.getChannel();
int bufferSize = 1024;
@@ -154,8 +238,8 @@ public class JavaReadFromFileUnitTest {
@Test
public void whenReadSmallFileJava7_thenCorrect() throws IOException {
- final String expected_value = "Hello world";
- final Path path = Paths.get("src/test/resources/test_read.in");
+ final String expected_value = "Hello, world!";
+ final Path path = Paths.get("src/test/resources/fileTest.txt");
final String read = Files.readAllLines(path, Charset.defaultCharset()).get(0);
assertEquals(expected_value, read);
@@ -163,12 +247,24 @@ public class JavaReadFromFileUnitTest {
@Test
public void whenReadLargeFileJava7_thenCorrect() throws IOException {
- final String expected_value = "Hello world";
+ final String expected_value = "Hello, world!";
- final Path path = Paths.get("src/test/resources/test_read.in");
+ final Path path = Paths.get("src/test/resources/fileTest.txt");
final BufferedReader reader = Files.newBufferedReader(path, Charset.defaultCharset());
final String line = reader.readLine();
assertEquals(expected_value, line);
}
+ private String readFromInputStream(InputStream inputStream) throws IOException {
+ StringBuilder resultStringBuilder = new StringBuilder();
+ try (BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream))) {
+ String line;
+ while ((line = bufferedReader.readLine()) != null) {
+ resultStringBuilder.append(line).append("\n");
+ }
+ }
+
+ return resultStringBuilder.toString();
+ }
+
}
diff --git a/core-java-modules/core-java-io/src/test/resources/fileTest.txt b/core-java-modules/core-java-io/src/test/resources/fileTest.txt
index ce4bea208b..5dd01c177f 100644
--- a/core-java-modules/core-java-io/src/test/resources/fileTest.txt
+++ b/core-java-modules/core-java-io/src/test/resources/fileTest.txt
@@ -1 +1 @@
-Hello World from fileTest.txt!!!
\ No newline at end of file
+Hello, world!
\ No newline at end of file
diff --git a/core-java-modules/core-java-io/src/test/resources/test_read3.in b/core-java-modules/core-java-io/src/test/resources/fileTestTokenizer.txt
similarity index 100%
rename from core-java-modules/core-java-io/src/test/resources/test_read3.in
rename to core-java-modules/core-java-io/src/test/resources/fileTestTokenizer.txt
diff --git a/core-java-modules/core-java-io/src/test/resources/test_read7.in b/core-java-modules/core-java-io/src/test/resources/fileTestUtf8.txt
similarity index 100%
rename from core-java-modules/core-java-io/src/test/resources/test_read7.in
rename to core-java-modules/core-java-io/src/test/resources/fileTestUtf8.txt
diff --git a/core-java-modules/core-java-io/src/test/resources/test_read1.in b/core-java-modules/core-java-io/src/test/resources/test_read1.in
deleted file mode 100644
index 1e46242993..0000000000
--- a/core-java-modules/core-java-io/src/test/resources/test_read1.in
+++ /dev/null
@@ -1 +0,0 @@
-Hello world 1
\ No newline at end of file
diff --git a/core-java-modules/core-java-io/src/test/resources/test_read2.in b/core-java-modules/core-java-io/src/test/resources/test_read2.in
deleted file mode 100644
index fe47dc003b..0000000000
--- a/core-java-modules/core-java-io/src/test/resources/test_read2.in
+++ /dev/null
@@ -1 +0,0 @@
-2,3 4
\ No newline at end of file
diff --git a/core-java-modules/core-java-io/src/test/resources/test_read4.in b/core-java-modules/core-java-io/src/test/resources/test_read4.in
deleted file mode 100644
index 5727d54bfc..0000000000
Binary files a/core-java-modules/core-java-io/src/test/resources/test_read4.in and /dev/null differ
diff --git a/core-java-modules/core-java-io/src/test/resources/test_read8.in b/core-java-modules/core-java-io/src/test/resources/test_read8.in
deleted file mode 100644
index 10fc1aac8a..0000000000
--- a/core-java-modules/core-java-io/src/test/resources/test_read8.in
+++ /dev/null
@@ -1,2 +0,0 @@
-Hello world
- Test line
diff --git a/core-java-modules/pom.xml b/core-java-modules/pom.xml
index c1a9acca6b..4e08271fa1 100644
--- a/core-java-modules/pom.xml
+++ b/core-java-modules/pom.xml
@@ -31,6 +31,7 @@
core-java-annotations
core-java-arrays
core-java-arrays-2
+ core-java-arrays-3
core-java-collections
core-java-collections-2
diff --git a/ddd/pom.xml b/ddd/pom.xml
index 9a0523a4c6..f27f1d24a9 100644
--- a/ddd/pom.xml
+++ b/ddd/pom.xml
@@ -20,6 +20,10 @@
org.springframework.boot
spring-boot-starter-data-mongodb
+
+ org.springframework.boot
+ spring-boot-starter-data-cassandra
+
org.junit.jupiter
junit-jupiter-api
diff --git a/ddd/src/main/java/com/baeldung/dddhexagonalspring/DomainLayerApplication.java b/ddd/src/main/java/com/baeldung/dddhexagonalspring/DomainLayerApplication.java
index 988f96042b..235021b03e 100644
--- a/ddd/src/main/java/com/baeldung/dddhexagonalspring/DomainLayerApplication.java
+++ b/ddd/src/main/java/com/baeldung/dddhexagonalspring/DomainLayerApplication.java
@@ -1,13 +1,37 @@
package com.baeldung.dddhexagonalspring;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
+import org.springframework.boot.WebApplicationType;
import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.PropertySource;
+import com.baeldung.dddhexagonalspring.application.cli.CliOrderController;
+
@SpringBootApplication
@PropertySource(value = { "classpath:ddd-layers.properties" })
-public class DomainLayerApplication {
+public class DomainLayerApplication implements CommandLineRunner {
+
public static void main(final String[] args) {
- SpringApplication.run(DomainLayerApplication.class, args);
+ SpringApplication application = new SpringApplication(DomainLayerApplication.class);
+ // uncomment to run just the console application
+ // application.setWebApplicationType(WebApplicationType.NONE);
+ application.run(args);
+ }
+
+ @Autowired
+ public CliOrderController orderController;
+
+ @Autowired
+ public ConfigurableApplicationContext context;
+
+ @Override
+ public void run(String... args) throws Exception {
+ orderController.createCompleteOrder();
+ orderController.createIncompleteOrder();
+ // uncomment to stop the context when execution is done
+ // context.close();
}
}
diff --git a/ddd/src/main/java/com/baeldung/dddhexagonalspring/application/cli/CliOrderController.java b/ddd/src/main/java/com/baeldung/dddhexagonalspring/application/cli/CliOrderController.java
new file mode 100644
index 0000000000..3d595533f3
--- /dev/null
+++ b/ddd/src/main/java/com/baeldung/dddhexagonalspring/application/cli/CliOrderController.java
@@ -0,0 +1,47 @@
+package com.baeldung.dddhexagonalspring.application.cli;
+
+import java.math.BigDecimal;
+import java.util.UUID;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import com.baeldung.dddhexagonalspring.domain.Product;
+import com.baeldung.dddhexagonalspring.domain.service.OrderService;
+
+@Component
+public class CliOrderController {
+
+ private static final Logger LOG = LoggerFactory.getLogger(CliOrderController.class);
+
+ private final OrderService orderService;
+
+ @Autowired
+ public CliOrderController(OrderService orderService) {
+ this.orderService = orderService;
+ }
+
+ public void createCompleteOrder() {
+ LOG.info("<>");
+ UUID orderId = createOrder();
+ orderService.completeOrder(orderId);
+ }
+
+ public void createIncompleteOrder() {
+ LOG.info("<>");
+ UUID orderId = createOrder();
+ }
+
+ private UUID createOrder() {
+ LOG.info("Placing a new order with two products");
+ Product mobilePhone = new Product(UUID.randomUUID(), BigDecimal.valueOf(200), "mobile");
+ Product razor = new Product(UUID.randomUUID(), BigDecimal.valueOf(50), "razor");
+ LOG.info("Creating order with mobile phone");
+ UUID orderId = orderService.createOrder(mobilePhone);
+ LOG.info("Adding a razor to the order");
+ orderService.addProduct(orderId, razor);
+ return orderId;
+ }
+}
diff --git a/ddd/src/main/java/com/baeldung/dddhexagonalspring/application/controller/OrderController.java b/ddd/src/main/java/com/baeldung/dddhexagonalspring/application/rest/OrderController.java
similarity index 96%
rename from ddd/src/main/java/com/baeldung/dddhexagonalspring/application/controller/OrderController.java
rename to ddd/src/main/java/com/baeldung/dddhexagonalspring/application/rest/OrderController.java
index 80ba36d01b..12bb8ddea4 100644
--- a/ddd/src/main/java/com/baeldung/dddhexagonalspring/application/controller/OrderController.java
+++ b/ddd/src/main/java/com/baeldung/dddhexagonalspring/application/rest/OrderController.java
@@ -1,4 +1,4 @@
-package com.baeldung.dddhexagonalspring.application.controller;
+package com.baeldung.dddhexagonalspring.application.rest;
import com.baeldung.dddhexagonalspring.application.request.AddProductRequest;
import com.baeldung.dddhexagonalspring.application.request.CreateOrderRequest;
diff --git a/ddd/src/main/java/com/baeldung/dddhexagonalspring/domain/Order.java b/ddd/src/main/java/com/baeldung/dddhexagonalspring/domain/Order.java
index 7d40007411..a8745eadbe 100644
--- a/ddd/src/main/java/com/baeldung/dddhexagonalspring/domain/Order.java
+++ b/ddd/src/main/java/com/baeldung/dddhexagonalspring/domain/Order.java
@@ -4,6 +4,7 @@ import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
+import java.util.Objects;
import java.util.UUID;
public class Order {
@@ -40,13 +41,11 @@ public class Order {
}
private OrderItem getOrderItem(final UUID id) {
- return orderItems
- .stream()
- .filter(orderItem -> orderItem
- .getProductId()
- .equals(id))
- .findFirst()
- .orElseThrow(() -> new DomainException("Product with " + id + " doesn't exist."));
+ return orderItems.stream()
+ .filter(orderItem -> orderItem.getProductId()
+ .equals(id))
+ .findFirst()
+ .orElseThrow(() -> new DomainException("Product with " + id + " doesn't exist."));
}
private void validateState() {
@@ -77,6 +76,21 @@ public class Order {
return Collections.unmodifiableList(orderItems);
}
+ @Override
+ public int hashCode() {
+ return Objects.hash(id, orderItems, price, status);
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (!(obj instanceof Order))
+ return false;
+ Order other = (Order) obj;
+ return Objects.equals(id, other.id) && Objects.equals(orderItems, other.orderItems) && Objects.equals(price, other.price) && status == other.status;
+ }
+
private Order() {
}
}
diff --git a/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/configuration/CassandraConfiguration.java b/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/configuration/CassandraConfiguration.java
new file mode 100644
index 0000000000..3b5911979a
--- /dev/null
+++ b/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/configuration/CassandraConfiguration.java
@@ -0,0 +1,10 @@
+package com.baeldung.dddhexagonalspring.infrastracture.configuration;
+
+import org.springframework.data.cassandra.repository.config.EnableCassandraRepositories;
+
+import com.baeldung.dddhexagonalspring.infrastracture.repository.cassandra.SpringDataCassandraOrderRepository;
+
+@EnableCassandraRepositories(basePackageClasses = SpringDataCassandraOrderRepository.class)
+public class CassandraConfiguration {
+
+}
diff --git a/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/configuration/MongoDBConfiguration.java b/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/configuration/MongoDBConfiguration.java
index fd76b2eb0e..8ec6daf370 100644
--- a/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/configuration/MongoDBConfiguration.java
+++ b/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/configuration/MongoDBConfiguration.java
@@ -1,8 +1,9 @@
package com.baeldung.dddhexagonalspring.infrastracture.configuration;
-import com.baeldung.dddhexagonalspring.infrastracture.repository.SpringDataOrderRepository;
import org.springframework.data.mongodb.repository.config.EnableMongoRepositories;
-@EnableMongoRepositories(basePackageClasses = SpringDataOrderRepository.class)
+import com.baeldung.dddhexagonalspring.infrastracture.repository.mongo.SpringDataMongoOrderRepository;
+
+@EnableMongoRepositories(basePackageClasses = SpringDataMongoOrderRepository.class)
public class MongoDBConfiguration {
}
diff --git a/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/cassandra/CassandraDbOrderRepository.java b/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/cassandra/CassandraDbOrderRepository.java
new file mode 100644
index 0000000000..686fc428e7
--- /dev/null
+++ b/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/cassandra/CassandraDbOrderRepository.java
@@ -0,0 +1,38 @@
+package com.baeldung.dddhexagonalspring.infrastracture.repository.cassandra;
+
+import java.util.Optional;
+import java.util.UUID;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import com.baeldung.dddhexagonalspring.domain.Order;
+import com.baeldung.dddhexagonalspring.domain.repository.OrderRepository;
+
+@Component
+public class CassandraDbOrderRepository implements OrderRepository {
+
+ private final SpringDataCassandraOrderRepository orderRepository;
+
+ @Autowired
+ public CassandraDbOrderRepository(SpringDataCassandraOrderRepository orderRepository) {
+ this.orderRepository = orderRepository;
+ }
+
+ @Override
+ public Optional findById(UUID id) {
+ Optional orderEntity = orderRepository.findById(id);
+ if (orderEntity.isPresent()) {
+ return Optional.of(orderEntity.get()
+ .toOrder());
+ } else {
+ return Optional.empty();
+ }
+ }
+
+ @Override
+ public void save(Order order) {
+ orderRepository.save(new OrderEntity(order));
+ }
+
+}
diff --git a/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/cassandra/OrderEntity.java b/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/cassandra/OrderEntity.java
new file mode 100644
index 0000000000..b9841a4433
--- /dev/null
+++ b/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/cassandra/OrderEntity.java
@@ -0,0 +1,75 @@
+package com.baeldung.dddhexagonalspring.infrastracture.repository.cassandra;
+
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.UUID;
+import java.util.stream.Collectors;
+
+import org.springframework.data.cassandra.core.mapping.PrimaryKey;
+
+import com.baeldung.dddhexagonalspring.domain.Order;
+import com.baeldung.dddhexagonalspring.domain.OrderItem;
+import com.baeldung.dddhexagonalspring.domain.OrderStatus;
+import com.baeldung.dddhexagonalspring.domain.Product;
+
+public class OrderEntity {
+
+ @PrimaryKey
+ private UUID id;
+ private OrderStatus status;
+ private List orderItemEntities;
+ private BigDecimal price;
+
+ public OrderEntity(UUID id, OrderStatus status, List orderItemEntities, BigDecimal price) {
+ this.id = id;
+ this.status = status;
+ this.orderItemEntities = orderItemEntities;
+ this.price = price;
+ }
+
+ public OrderEntity() {
+ }
+
+ public OrderEntity(Order order) {
+ this.id = order.getId();
+ this.price = order.getPrice();
+ this.status = order.getStatus();
+ this.orderItemEntities = order.getOrderItems()
+ .stream()
+ .map(OrderItemEntity::new)
+ .collect(Collectors.toList());
+
+ }
+
+ public Order toOrder() {
+ List orderItems = orderItemEntities.stream()
+ .map(OrderItemEntity::toOrderItem)
+ .collect(Collectors.toList());
+ List namelessProducts = orderItems.stream()
+ .map(orderItem -> new Product(orderItem.getProductId(), orderItem.getPrice(), ""))
+ .collect(Collectors.toList());
+ Order order = new Order(id, namelessProducts.remove(0));
+ namelessProducts.forEach(product -> order.addOrder(product));
+ if (status == OrderStatus.COMPLETED) {
+ order.complete();
+ }
+ return order;
+ }
+
+ public UUID getId() {
+ return id;
+ }
+
+ public OrderStatus getStatus() {
+ return status;
+ }
+
+ public List getOrderItems() {
+ return orderItemEntities;
+ }
+
+ public BigDecimal getPrice() {
+ return price;
+ }
+
+}
diff --git a/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/cassandra/OrderItemEntity.java b/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/cassandra/OrderItemEntity.java
new file mode 100644
index 0000000000..2cf8ac7845
--- /dev/null
+++ b/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/cassandra/OrderItemEntity.java
@@ -0,0 +1,44 @@
+package com.baeldung.dddhexagonalspring.infrastracture.repository.cassandra;
+
+import java.math.BigDecimal;
+import java.util.UUID;
+
+import org.springframework.data.cassandra.core.mapping.UserDefinedType;
+
+import com.baeldung.dddhexagonalspring.domain.OrderItem;
+import com.baeldung.dddhexagonalspring.domain.Product;
+
+@UserDefinedType
+public class OrderItemEntity {
+
+ private UUID productId;
+ private BigDecimal price;
+
+ public OrderItemEntity() {
+ }
+
+ public OrderItemEntity(final OrderItem orderItem) {
+ this.productId = orderItem.getProductId();
+ this.price = orderItem.getPrice();
+ }
+
+ public OrderItem toOrderItem() {
+ return new OrderItem(new Product(productId, price, ""));
+ }
+
+ public UUID getProductId() {
+ return productId;
+ }
+
+ public void setProductId(UUID productId) {
+ this.productId = productId;
+ }
+
+ public BigDecimal getPrice() {
+ return price;
+ }
+
+ public void setPrice(BigDecimal price) {
+ this.price = price;
+ }
+}
diff --git a/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/cassandra/SpringDataCassandraOrderRepository.java b/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/cassandra/SpringDataCassandraOrderRepository.java
new file mode 100644
index 0000000000..93cd7ab83f
--- /dev/null
+++ b/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/cassandra/SpringDataCassandraOrderRepository.java
@@ -0,0 +1,10 @@
+package com.baeldung.dddhexagonalspring.infrastracture.repository.cassandra;
+
+import java.util.UUID;
+
+import org.springframework.data.cassandra.repository.CassandraRepository;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface SpringDataCassandraOrderRepository extends CassandraRepository {
+}
diff --git a/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/MongoDbOrderRepository.java b/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/mongo/MongoDbOrderRepository.java
similarity index 75%
rename from ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/MongoDbOrderRepository.java
rename to ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/mongo/MongoDbOrderRepository.java
index 3123ef3e2f..b48b738cbd 100644
--- a/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/MongoDbOrderRepository.java
+++ b/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/mongo/MongoDbOrderRepository.java
@@ -1,20 +1,23 @@
-package com.baeldung.dddhexagonalspring.infrastracture.repository;
-
-import com.baeldung.dddhexagonalspring.domain.Order;
-import com.baeldung.dddhexagonalspring.domain.repository.OrderRepository;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
+package com.baeldung.dddhexagonalspring.infrastracture.repository.mongo;
import java.util.Optional;
import java.util.UUID;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Primary;
+import org.springframework.stereotype.Component;
+
+import com.baeldung.dddhexagonalspring.domain.Order;
+import com.baeldung.dddhexagonalspring.domain.repository.OrderRepository;
+
@Component
+@Primary
public class MongoDbOrderRepository implements OrderRepository {
- private final SpringDataOrderRepository orderRepository;
+ private final SpringDataMongoOrderRepository orderRepository;
@Autowired
- public MongoDbOrderRepository(final SpringDataOrderRepository orderRepository) {
+ public MongoDbOrderRepository(final SpringDataMongoOrderRepository orderRepository) {
this.orderRepository = orderRepository;
}
diff --git a/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/SpringDataOrderRepository.java b/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/mongo/SpringDataMongoOrderRepository.java
similarity index 74%
rename from ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/SpringDataOrderRepository.java
rename to ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/mongo/SpringDataMongoOrderRepository.java
index 0279a5ce4a..73aa74e7d7 100644
--- a/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/SpringDataOrderRepository.java
+++ b/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/mongo/SpringDataMongoOrderRepository.java
@@ -1,4 +1,4 @@
-package com.baeldung.dddhexagonalspring.infrastracture.repository;
+package com.baeldung.dddhexagonalspring.infrastracture.repository.mongo;
import com.baeldung.dddhexagonalspring.domain.Order;
import org.springframework.data.mongodb.repository.MongoRepository;
@@ -7,5 +7,5 @@ import org.springframework.stereotype.Repository;
import java.util.UUID;
@Repository
-public interface SpringDataOrderRepository extends MongoRepository {
+public interface SpringDataMongoOrderRepository extends MongoRepository {
}
diff --git a/ddd/src/main/resources/ddd-layers.properties b/ddd/src/main/resources/ddd-layers.properties
index 0479996b17..412c24eef7 100644
--- a/ddd/src/main/resources/ddd-layers.properties
+++ b/ddd/src/main/resources/ddd-layers.properties
@@ -1,5 +1,12 @@
+spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
spring.data.mongodb.host=localhost
spring.data.mongodb.port=27017
spring.data.mongodb.database=order-database
spring.data.mongodb.username=order
-spring.data.mongodb.password=order
\ No newline at end of file
+spring.data.mongodb.password=order
+
+spring.data.cassandra.keyspaceName=order_database
+spring.data.cassandra.username=cassandra
+spring.data.cassandra.password=cassandra
+spring.data.cassandra.contactPoints=localhost
+spring.data.cassandra.port=9042
\ No newline at end of file
diff --git a/ddd/src/test/java/com/baeldung/dddhexagonalspring/infrastracture/repository/CassandraDbOrderRepositoryIntegrationTest.java b/ddd/src/test/java/com/baeldung/dddhexagonalspring/infrastracture/repository/CassandraDbOrderRepositoryIntegrationTest.java
new file mode 100644
index 0000000000..668d1e5e34
--- /dev/null
+++ b/ddd/src/test/java/com/baeldung/dddhexagonalspring/infrastracture/repository/CassandraDbOrderRepositoryIntegrationTest.java
@@ -0,0 +1,57 @@
+package com.baeldung.dddhexagonalspring.infrastracture.repository;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import java.math.BigDecimal;
+import java.util.Optional;
+import java.util.UUID;
+
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.TestPropertySource;
+import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
+
+import com.baeldung.dddhexagonalspring.domain.Order;
+import com.baeldung.dddhexagonalspring.domain.Product;
+import com.baeldung.dddhexagonalspring.domain.repository.OrderRepository;
+import com.baeldung.dddhexagonalspring.infrastracture.repository.cassandra.SpringDataCassandraOrderRepository;
+
+@SpringJUnitConfig
+@SpringBootTest
+@TestPropertySource("classpath:ddd-layers-test.properties")
+class CassandraDbOrderRepositoryIntegrationTest {
+
+ @Autowired
+ private SpringDataCassandraOrderRepository cassandraOrderRepository;
+
+ @Autowired
+ private OrderRepository orderRepository;
+
+ @AfterEach
+ void cleanUp() {
+ cassandraOrderRepository.deleteAll();
+ }
+
+ @Test
+ void shouldFindById_thenReturnOrder() {
+
+ // given
+ final UUID id = UUID.randomUUID();
+ final Order order = createOrder(id);
+ order.addOrder(new Product(UUID.randomUUID(), BigDecimal.TEN, "second"));
+ order.complete();
+
+ // when
+ orderRepository.save(order);
+
+ final Optional result = orderRepository.findById(id);
+
+ assertEquals(order, result.get());
+ }
+
+ private Order createOrder(UUID id) {
+ return new Order(id, new Product(UUID.randomUUID(), BigDecimal.TEN, "product"));
+ }
+}
\ No newline at end of file
diff --git a/ddd/src/test/java/com/baeldung/dddhexagonalspring/infrastracture/repository/MongoDbOrderRepositoryIntegrationTest.java b/ddd/src/test/java/com/baeldung/dddhexagonalspring/infrastracture/repository/MongoDbOrderRepositoryIntegrationTest.java
new file mode 100644
index 0000000000..9a7736c419
--- /dev/null
+++ b/ddd/src/test/java/com/baeldung/dddhexagonalspring/infrastracture/repository/MongoDbOrderRepositoryIntegrationTest.java
@@ -0,0 +1,55 @@
+package com.baeldung.dddhexagonalspring.infrastracture.repository;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import java.math.BigDecimal;
+import java.util.Optional;
+import java.util.UUID;
+
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.TestPropertySource;
+import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
+
+import com.baeldung.dddhexagonalspring.domain.Order;
+import com.baeldung.dddhexagonalspring.domain.Product;
+import com.baeldung.dddhexagonalspring.domain.repository.OrderRepository;
+import com.baeldung.dddhexagonalspring.infrastracture.repository.mongo.SpringDataMongoOrderRepository;
+
+@SpringJUnitConfig
+@SpringBootTest
+@TestPropertySource("classpath:ddd-layers-test.properties")
+class MongoDbOrderRepositoryIntegrationTest {
+
+ @Autowired
+ private SpringDataMongoOrderRepository mongoOrderRepository;
+
+ @Autowired
+ private OrderRepository orderRepository;
+
+ @AfterEach
+ void cleanUp() {
+ mongoOrderRepository.deleteAll();
+ }
+
+ @Test
+ void shouldFindById_thenReturnOrder() {
+
+ // given
+ final UUID id = UUID.randomUUID();
+ final Order order = createOrder(id);
+
+ // when
+ orderRepository.save(order);
+
+ final Optional result = orderRepository.findById(id);
+
+ assertEquals(order, result.get());
+ }
+
+ private Order createOrder(UUID id) {
+ return new Order(id, new Product(UUID.randomUUID(), BigDecimal.TEN, "product"));
+ }
+}
\ No newline at end of file
diff --git a/ddd/src/test/java/com/baeldung/dddhexagonalspring/infrastracture/repository/MongoDbOrderRepositoryUnitTest.java b/ddd/src/test/java/com/baeldung/dddhexagonalspring/infrastracture/repository/MongoDbOrderRepositoryUnitTest.java
index 8f7e8260a3..4c75daaa4d 100644
--- a/ddd/src/test/java/com/baeldung/dddhexagonalspring/infrastracture/repository/MongoDbOrderRepositoryUnitTest.java
+++ b/ddd/src/test/java/com/baeldung/dddhexagonalspring/infrastracture/repository/MongoDbOrderRepositoryUnitTest.java
@@ -2,6 +2,9 @@ package com.baeldung.dddhexagonalspring.infrastracture.repository;
import com.baeldung.dddhexagonalspring.domain.Order;
import com.baeldung.dddhexagonalspring.domain.Product;
+import com.baeldung.dddhexagonalspring.infrastracture.repository.mongo.MongoDbOrderRepository;
+import com.baeldung.dddhexagonalspring.infrastracture.repository.mongo.SpringDataMongoOrderRepository;
+
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
@@ -14,12 +17,12 @@ import static org.mockito.Mockito.*;
class MongoDbOrderRepositoryUnitTest {
- private SpringDataOrderRepository springDataOrderRepository;
+ private SpringDataMongoOrderRepository springDataOrderRepository;
private MongoDbOrderRepository tested;
@BeforeEach
- void setUp(){
- springDataOrderRepository = mock(SpringDataOrderRepository.class);
+ void setUp() {
+ springDataOrderRepository = mock(SpringDataMongoOrderRepository.class);
tested = new MongoDbOrderRepository(springDataOrderRepository);
}
diff --git a/ddd/src/test/resources/com/baeldung/dddhexagonalspring/README.md b/ddd/src/test/resources/com/baeldung/dddhexagonalspring/README.md
index e0337498fc..1355514a3d 100644
--- a/ddd/src/test/resources/com/baeldung/dddhexagonalspring/README.md
+++ b/ddd/src/test/resources/com/baeldung/dddhexagonalspring/README.md
@@ -4,4 +4,6 @@ To run this project, follow these steps:
* Run the application database by executing `docker-compose up` in this directory.
* Launch the Spring Boot Application (DomainLayerApplication).
-* By default, application will connect to this database (configuration in *ddd-layers.properties*)
\ No newline at end of file
+* By default, the application will connect to the one of the two databases (configuration in *ddd-layers.properties*)
+ * check `CassandraDbOrderRepository.java` and `MongoDbOrderRepository.java`
+ * switch between the databases by making one of the above beans primary using the `@Primary` annotation
\ No newline at end of file
diff --git a/ddd/src/test/resources/com/baeldung/dddhexagonalspring/cassandra-init.cql b/ddd/src/test/resources/com/baeldung/dddhexagonalspring/cassandra-init.cql
new file mode 100644
index 0000000000..cbb22d2525
--- /dev/null
+++ b/ddd/src/test/resources/com/baeldung/dddhexagonalspring/cassandra-init.cql
@@ -0,0 +1,12 @@
+CREATE KEYSPACE IF NOT exists order_database
+WITH replication = {'class':'SimpleStrategy', 'replication_factor':1};
+
+CREATE TYPE IF NOT EXISTS order_database.orderitementity (productid uuid, price decimal);
+
+CREATE TABLE IF NOT EXISTS order_database.orderentity(
+ id uuid,
+ status text,
+ orderitementities list>,
+ price decimal,
+ primary key(id)
+);
diff --git a/ddd/src/test/resources/com/baeldung/dddhexagonalspring/docker-compose.yml b/ddd/src/test/resources/com/baeldung/dddhexagonalspring/docker-compose.yml
index d85ddf4a0e..7de0d30d43 100644
--- a/ddd/src/test/resources/com/baeldung/dddhexagonalspring/docker-compose.yml
+++ b/ddd/src/test/resources/com/baeldung/dddhexagonalspring/docker-compose.yml
@@ -3,6 +3,7 @@ version: '3'
services:
order-mongo-database:
image: mongo:3.4.13
+ container_name: order-mongo-db
restart: always
ports:
- 27017:27017
@@ -11,4 +12,19 @@ services:
MONGO_INITDB_ROOT_PASSWORD: admin
MONGO_INITDB_DATABASE: order-database
volumes:
- - ./mongo-init.js:/docker-entrypoint-initdb.d/mongo-init.js:ro
\ No newline at end of file
+ - ./mongo-init.js:/docker-entrypoint-initdb.d/mongo-init.js:ro
+ order-cassandra-database:
+ image: cassandra:3.11.5
+ container_name: order-cassandra-db
+ restart: always
+ ports:
+ - 9042:9042
+ order-cassandra-init:
+ image: cassandra:3.11.5
+ container_name: order-cassandra-db-init
+ depends_on:
+ - order-cassandra-database
+ volumes:
+ - ./cassandra-init.cql:/cassandra-init.cql:ro
+ command: bin/bash -c "echo Initializing cassandra schema... && sleep 30 && cqlsh -u cassandra -p cassandra -f cassandra-init.cql order-cassandra-db"
+
\ No newline at end of file
diff --git a/ddd/src/test/resources/ddd-layers-test.properties b/ddd/src/test/resources/ddd-layers-test.properties
new file mode 100644
index 0000000000..d41689d91b
--- /dev/null
+++ b/ddd/src/test/resources/ddd-layers-test.properties
@@ -0,0 +1,12 @@
+spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.mongo.embedded.EmbeddedMongoAutoConfiguration,org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
+spring.data.mongodb.host=127.0.0.1
+spring.data.mongodb.port=27017
+spring.data.mongodb.database=order-database
+spring.data.mongodb.username=order
+spring.data.mongodb.password=order
+
+spring.data.cassandra.keyspaceName=order_database
+spring.data.cassandra.username=cassandra
+spring.data.cassandra.password=cassandra
+spring.data.cassandra.contactPoints=127.0.0.1
+spring.data.cassandra.port=9042
\ No newline at end of file
diff --git a/persistence-modules/spring-data-couchbase-2/README.md b/persistence-modules/spring-data-couchbase-2/README.md
index 3145fc653a..aa6f7375cb 100644
--- a/persistence-modules/spring-data-couchbase-2/README.md
+++ b/persistence-modules/spring-data-couchbase-2/README.md
@@ -1,9 +1,9 @@
## Spring Data Couchbase Tutorial Project
### Relevant Articles:
-- [Intro to Spring Data Couchbase](http://www.baeldung.com/spring-data-couchbase)
-- [Entity Validation, Optimistic Locking, and Query Consistency in Spring Data Couchbase](http://www.baeldung.com/entity-validation-locking-and-query-consistency-in-spring-data-couchbase)
-- [Multiple Buckets and Spatial View Queries in Spring Data Couchbase](http://www.baeldung.com/spring-data-couchbase-buckets-and-spatial-view-queries)
+- [Intro to Spring Data Couchbase](https://www.baeldung.com/spring-data-couchbase)
+- [Entity Validation, Optimistic Locking, and Query Consistency in Spring Data Couchbase](https://www.baeldung.com/entity-validation-locking-and-query-consistency-in-spring-data-couchbase)
+- [Multiple Buckets and Spatial View Queries in Spring Data Couchbase](https://www.baeldung.com/spring-data-couchbase-buckets-and-spatial-view-queries)
### Overview
This Maven project contains the Java code for Spring Data Couchbase
@@ -25,14 +25,14 @@ mvn clean install
### Package Organization
Java classes for the first two tutorials listed above are in src/main/java in the package hierarchy
-org.baeldung.spring.data.couchbase
+com.baeldung.spring.data.couchbase
Java classes for the multiple-bucket tutorials are in src/main/java in the package hierarchy
-org.baeldung.spring.data.couchbase2b
+com.baeldung.spring.data.couchbase2b
### Running the tests
The test classes for the single-bucket tutorials are in src/test/java in the package
-org.baeldung.spring.data.couchbase.service:
+com.baeldung.spring.data.couchbase.service:
- PersonServiceTest (abstract)
- PersonRepositoryTest (concrete)
- PersonTemplateServiceTest (concrete)
@@ -41,7 +41,7 @@ org.baeldung.spring.data.couchbase.service:
- StudentTemplateServiceTest (concrete)
The concrete test classes for the multiple-bucket tutorial are in src/test/java in the package
-org.baeldung.spring.data.couchbase2b.service:
+com.baeldung.spring.data.couchbase2b.service:
- CampusRepositoryServiceImplTest
- PersonRepositoryServiceImplTest
- StudentRepositoryServiceImplTest
diff --git a/persistence-modules/spring-data-couchbase-2/pom.xml b/persistence-modules/spring-data-couchbase-2/pom.xml
index 484561ddaa..0a20a3ff0e 100644
--- a/persistence-modules/spring-data-couchbase-2/pom.xml
+++ b/persistence-modules/spring-data-couchbase-2/pom.xml
@@ -3,7 +3,7 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
- org.baeldung
+ com.baeldung
spring-data-couchbase-2
0.1-SNAPSHOT
spring-data-couchbase-2
diff --git a/persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/model/Campus.java b/persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase/model/Campus.java
similarity index 97%
rename from persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/model/Campus.java
rename to persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase/model/Campus.java
index c357ab8596..d710a35796 100644
--- a/persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/model/Campus.java
+++ b/persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase/model/Campus.java
@@ -1,4 +1,4 @@
-package org.baeldung.spring.data.couchbase.model;
+package com.baeldung.spring.data.couchbase.model;
import javax.validation.constraints.NotNull;
diff --git a/persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/model/Person.java b/persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase/model/Person.java
similarity index 97%
rename from persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/model/Person.java
rename to persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase/model/Person.java
index fd41427d20..1e081f01da 100644
--- a/persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/model/Person.java
+++ b/persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase/model/Person.java
@@ -1,4 +1,4 @@
-package org.baeldung.spring.data.couchbase.model;
+package com.baeldung.spring.data.couchbase.model;
import javax.validation.constraints.NotNull;
diff --git a/persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/model/Student.java b/persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase/model/Student.java
similarity index 98%
rename from persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/model/Student.java
rename to persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase/model/Student.java
index 726ed2347e..e979eca864 100644
--- a/persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/model/Student.java
+++ b/persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase/model/Student.java
@@ -1,4 +1,4 @@
-package org.baeldung.spring.data.couchbase.model;
+package com.baeldung.spring.data.couchbase.model;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Past;
diff --git a/persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/repos/CustomStudentRepository.java b/persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase/repos/CustomStudentRepository.java
similarity index 54%
rename from persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/repos/CustomStudentRepository.java
rename to persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase/repos/CustomStudentRepository.java
index 9a5bf21492..2aef524caf 100644
--- a/persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/repos/CustomStudentRepository.java
+++ b/persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase/repos/CustomStudentRepository.java
@@ -1,8 +1,8 @@
-package org.baeldung.spring.data.couchbase.repos;
+package com.baeldung.spring.data.couchbase.repos;
import java.util.List;
-import org.baeldung.spring.data.couchbase.model.Student;
+import com.baeldung.spring.data.couchbase.model.Student;
public interface CustomStudentRepository {
List findByFirstNameStartsWith(String s);
diff --git a/persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/repos/CustomStudentRepositoryImpl.java b/persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase/repos/CustomStudentRepositoryImpl.java
similarity index 85%
rename from persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/repos/CustomStudentRepositoryImpl.java
rename to persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase/repos/CustomStudentRepositoryImpl.java
index 751895502c..c4742ac44a 100644
--- a/persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/repos/CustomStudentRepositoryImpl.java
+++ b/persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase/repos/CustomStudentRepositoryImpl.java
@@ -1,8 +1,8 @@
-package org.baeldung.spring.data.couchbase.repos;
+package com.baeldung.spring.data.couchbase.repos;
import java.util.List;
-import org.baeldung.spring.data.couchbase.model.Student;
+import com.baeldung.spring.data.couchbase.model.Student;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.couchbase.core.CouchbaseTemplate;
diff --git a/persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/repos/PersonRepository.java b/persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase/repos/PersonRepository.java
similarity index 71%
rename from persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/repos/PersonRepository.java
rename to persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase/repos/PersonRepository.java
index 717feb858f..dc9a20ffa2 100644
--- a/persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/repos/PersonRepository.java
+++ b/persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase/repos/PersonRepository.java
@@ -1,8 +1,8 @@
-package org.baeldung.spring.data.couchbase.repos;
+package com.baeldung.spring.data.couchbase.repos;
import java.util.List;
-import org.baeldung.spring.data.couchbase.model.Person;
+import com.baeldung.spring.data.couchbase.model.Person;
import org.springframework.data.repository.CrudRepository;
public interface PersonRepository extends CrudRepository {
diff --git a/persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/repos/StudentRepository.java b/persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase/repos/StudentRepository.java
similarity index 73%
rename from persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/repos/StudentRepository.java
rename to persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase/repos/StudentRepository.java
index 9bbdeec642..7ea9433f21 100644
--- a/persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/repos/StudentRepository.java
+++ b/persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase/repos/StudentRepository.java
@@ -1,8 +1,8 @@
-package org.baeldung.spring.data.couchbase.repos;
+package com.baeldung.spring.data.couchbase.repos;
import java.util.List;
-import org.baeldung.spring.data.couchbase.model.Student;
+import com.baeldung.spring.data.couchbase.model.Student;
import org.springframework.data.repository.CrudRepository;
public interface StudentRepository extends CrudRepository, CustomStudentRepository {
diff --git a/persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/service/PersonRepositoryService.java b/persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase/service/PersonRepositoryService.java
similarity index 89%
rename from persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/service/PersonRepositoryService.java
rename to persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase/service/PersonRepositoryService.java
index 49548bdbfb..4051585e31 100644
--- a/persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/service/PersonRepositoryService.java
+++ b/persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase/service/PersonRepositoryService.java
@@ -1,11 +1,11 @@
-package org.baeldung.spring.data.couchbase.service;
+package com.baeldung.spring.data.couchbase.service;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
-import org.baeldung.spring.data.couchbase.model.Person;
-import org.baeldung.spring.data.couchbase.repos.PersonRepository;
+import com.baeldung.spring.data.couchbase.model.Person;
+import com.baeldung.spring.data.couchbase.repos.PersonRepository;
import org.joda.time.DateTime;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
diff --git a/persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/service/PersonService.java b/persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase/service/PersonService.java
similarity index 75%
rename from persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/service/PersonService.java
rename to persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase/service/PersonService.java
index a823908b01..f321eba94e 100644
--- a/persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/service/PersonService.java
+++ b/persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase/service/PersonService.java
@@ -1,8 +1,8 @@
-package org.baeldung.spring.data.couchbase.service;
+package com.baeldung.spring.data.couchbase.service;
import java.util.List;
-import org.baeldung.spring.data.couchbase.model.Person;
+import com.baeldung.spring.data.couchbase.model.Person;
public interface PersonService {
diff --git a/persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/service/PersonTemplateService.java b/persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase/service/PersonTemplateService.java
similarity index 93%
rename from persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/service/PersonTemplateService.java
rename to persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase/service/PersonTemplateService.java
index 8398847f65..5e49465a25 100644
--- a/persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/service/PersonTemplateService.java
+++ b/persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase/service/PersonTemplateService.java
@@ -1,8 +1,8 @@
-package org.baeldung.spring.data.couchbase.service;
+package com.baeldung.spring.data.couchbase.service;
import java.util.List;
-import org.baeldung.spring.data.couchbase.model.Person;
+import com.baeldung.spring.data.couchbase.model.Person;
import org.joda.time.DateTime;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
diff --git a/persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/service/StudentRepositoryService.java b/persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase/service/StudentRepositoryService.java
similarity index 89%
rename from persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/service/StudentRepositoryService.java
rename to persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase/service/StudentRepositoryService.java
index 65f5a6e78e..ff9657260a 100644
--- a/persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/service/StudentRepositoryService.java
+++ b/persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase/service/StudentRepositoryService.java
@@ -1,11 +1,11 @@
-package org.baeldung.spring.data.couchbase.service;
+package com.baeldung.spring.data.couchbase.service;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
-import org.baeldung.spring.data.couchbase.model.Student;
-import org.baeldung.spring.data.couchbase.repos.StudentRepository;
+import com.baeldung.spring.data.couchbase.model.Student;
+import com.baeldung.spring.data.couchbase.repos.StudentRepository;
import org.joda.time.DateTime;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
diff --git a/persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/service/StudentService.java b/persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase/service/StudentService.java
similarity index 75%
rename from persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/service/StudentService.java
rename to persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase/service/StudentService.java
index f483ef0fb6..aa99a770cd 100644
--- a/persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/service/StudentService.java
+++ b/persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase/service/StudentService.java
@@ -1,8 +1,8 @@
-package org.baeldung.spring.data.couchbase.service;
+package com.baeldung.spring.data.couchbase.service;
import java.util.List;
-import org.baeldung.spring.data.couchbase.model.Student;
+import com.baeldung.spring.data.couchbase.model.Student;
public interface StudentService {
diff --git a/persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/service/StudentTemplateService.java b/persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase/service/StudentTemplateService.java
similarity index 93%
rename from persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/service/StudentTemplateService.java
rename to persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase/service/StudentTemplateService.java
index 8d1292b5e4..9110f68276 100644
--- a/persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/service/StudentTemplateService.java
+++ b/persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase/service/StudentTemplateService.java
@@ -1,8 +1,8 @@
-package org.baeldung.spring.data.couchbase.service;
+package com.baeldung.spring.data.couchbase.service;
import java.util.List;
-import org.baeldung.spring.data.couchbase.model.Student;
+import com.baeldung.spring.data.couchbase.model.Student;
import org.joda.time.DateTime;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
diff --git a/persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/repos/CampusRepository.java b/persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase2b/repos/CampusRepository.java
similarity index 85%
rename from persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/repos/CampusRepository.java
rename to persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase2b/repos/CampusRepository.java
index b1857222c5..1120b7c55d 100644
--- a/persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/repos/CampusRepository.java
+++ b/persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase2b/repos/CampusRepository.java
@@ -1,8 +1,8 @@
-package org.baeldung.spring.data.couchbase2b.repos;
+package com.baeldung.spring.data.couchbase2b.repos;
import java.util.Set;
-import org.baeldung.spring.data.couchbase.model.Campus;
+import com.baeldung.spring.data.couchbase.model.Campus;
import org.springframework.data.couchbase.core.query.Dimensional;
import org.springframework.data.couchbase.core.query.View;
import org.springframework.data.geo.Distance;
diff --git a/persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/repos/PersonRepository.java b/persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase2b/repos/PersonRepository.java
similarity index 71%
rename from persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/repos/PersonRepository.java
rename to persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase2b/repos/PersonRepository.java
index ef37106c6d..ec50dec471 100644
--- a/persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/repos/PersonRepository.java
+++ b/persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase2b/repos/PersonRepository.java
@@ -1,8 +1,8 @@
-package org.baeldung.spring.data.couchbase2b.repos;
+package com.baeldung.spring.data.couchbase2b.repos;
import java.util.List;
-import org.baeldung.spring.data.couchbase.model.Person;
+import com.baeldung.spring.data.couchbase.model.Person;
import org.springframework.data.repository.CrudRepository;
public interface PersonRepository extends CrudRepository {
diff --git a/persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/repos/StudentRepository.java b/persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase2b/repos/StudentRepository.java
similarity index 71%
rename from persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/repos/StudentRepository.java
rename to persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase2b/repos/StudentRepository.java
index 0d790d2f39..3fd4a717f9 100644
--- a/persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/repos/StudentRepository.java
+++ b/persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase2b/repos/StudentRepository.java
@@ -1,8 +1,8 @@
-package org.baeldung.spring.data.couchbase2b.repos;
+package com.baeldung.spring.data.couchbase2b.repos;
import java.util.List;
-import org.baeldung.spring.data.couchbase.model.Student;
+import com.baeldung.spring.data.couchbase.model.Student;
import org.springframework.data.repository.CrudRepository;
public interface StudentRepository extends CrudRepository {
diff --git a/persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/CampusService.java b/persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase2b/service/CampusService.java
similarity index 75%
rename from persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/CampusService.java
rename to persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase2b/service/CampusService.java
index 58f00dda25..567ffa2a7f 100644
--- a/persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/CampusService.java
+++ b/persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase2b/service/CampusService.java
@@ -1,8 +1,8 @@
-package org.baeldung.spring.data.couchbase2b.service;
+package com.baeldung.spring.data.couchbase2b.service;
import java.util.Set;
-import org.baeldung.spring.data.couchbase.model.Campus;
+import com.baeldung.spring.data.couchbase.model.Campus;
import org.springframework.data.geo.Distance;
import org.springframework.data.geo.Point;
diff --git a/persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/CampusServiceImpl.java b/persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase2b/service/CampusServiceImpl.java
similarity index 87%
rename from persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/CampusServiceImpl.java
rename to persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase2b/service/CampusServiceImpl.java
index 586f5f0dc1..03e2dced1b 100644
--- a/persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/CampusServiceImpl.java
+++ b/persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase2b/service/CampusServiceImpl.java
@@ -1,11 +1,11 @@
-package org.baeldung.spring.data.couchbase2b.service;
+package com.baeldung.spring.data.couchbase2b.service;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
-import org.baeldung.spring.data.couchbase.model.Campus;
-import org.baeldung.spring.data.couchbase2b.repos.CampusRepository;
+import com.baeldung.spring.data.couchbase2b.repos.CampusRepository;
+import com.baeldung.spring.data.couchbase.model.Campus;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.geo.Distance;
import org.springframework.data.geo.Point;
diff --git a/persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/PersonService.java b/persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase2b/service/PersonService.java
similarity index 74%
rename from persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/PersonService.java
rename to persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase2b/service/PersonService.java
index c2c96ffb9c..7dc30ead11 100644
--- a/persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/PersonService.java
+++ b/persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase2b/service/PersonService.java
@@ -1,8 +1,8 @@
-package org.baeldung.spring.data.couchbase2b.service;
+package com.baeldung.spring.data.couchbase2b.service;
import java.util.List;
-import org.baeldung.spring.data.couchbase.model.Person;
+import com.baeldung.spring.data.couchbase.model.Person;
public interface PersonService {
diff --git a/persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/PersonServiceImpl.java b/persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase2b/service/PersonServiceImpl.java
similarity index 88%
rename from persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/PersonServiceImpl.java
rename to persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase2b/service/PersonServiceImpl.java
index fe0a9e48cd..af08bd4ca8 100644
--- a/persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/PersonServiceImpl.java
+++ b/persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase2b/service/PersonServiceImpl.java
@@ -1,11 +1,11 @@
-package org.baeldung.spring.data.couchbase2b.service;
+package com.baeldung.spring.data.couchbase2b.service;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
-import org.baeldung.spring.data.couchbase.model.Person;
-import org.baeldung.spring.data.couchbase2b.repos.PersonRepository;
+import com.baeldung.spring.data.couchbase2b.repos.PersonRepository;
+import com.baeldung.spring.data.couchbase.model.Person;
import org.joda.time.DateTime;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
diff --git a/persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/StudentService.java b/persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase2b/service/StudentService.java
similarity index 75%
rename from persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/StudentService.java
rename to persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase2b/service/StudentService.java
index 5b83b403bb..3f318e1af1 100644
--- a/persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/StudentService.java
+++ b/persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase2b/service/StudentService.java
@@ -1,8 +1,8 @@
-package org.baeldung.spring.data.couchbase2b.service;
+package com.baeldung.spring.data.couchbase2b.service;
import java.util.List;
-import org.baeldung.spring.data.couchbase.model.Student;
+import com.baeldung.spring.data.couchbase.model.Student;
public interface StudentService {
diff --git a/persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/StudentServiceImpl.java b/persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase2b/service/StudentServiceImpl.java
similarity index 88%
rename from persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/StudentServiceImpl.java
rename to persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase2b/service/StudentServiceImpl.java
index 248d824081..53feaead10 100644
--- a/persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/StudentServiceImpl.java
+++ b/persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase2b/service/StudentServiceImpl.java
@@ -1,11 +1,11 @@
-package org.baeldung.spring.data.couchbase2b.service;
+package com.baeldung.spring.data.couchbase2b.service;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
-import org.baeldung.spring.data.couchbase.model.Student;
-import org.baeldung.spring.data.couchbase2b.repos.StudentRepository;
+import com.baeldung.spring.data.couchbase2b.repos.StudentRepository;
+import com.baeldung.spring.data.couchbase.model.Student;
import org.joda.time.DateTime;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
diff --git a/persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/SpringContextLiveTest.java b/persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/SpringContextLiveTest.java
similarity index 83%
rename from persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/SpringContextLiveTest.java
rename to persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/SpringContextLiveTest.java
index 5e20a98a1d..553520e6e6 100644
--- a/persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/SpringContextLiveTest.java
+++ b/persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/SpringContextLiveTest.java
@@ -1,7 +1,7 @@
-package org.baeldung;
+package com.baeldung;
-import org.baeldung.spring.data.couchbase2b.MultiBucketCouchbaseConfig;
-import org.baeldung.spring.data.couchbase2b.MultiBucketIntegrationTestConfig;
+import com.baeldung.spring.data.couchbase2b.MultiBucketCouchbaseConfig;
+import com.baeldung.spring.data.couchbase2b.MultiBucketIntegrationTestConfig;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
@@ -25,7 +25,7 @@ import org.springframework.test.context.support.DependencyInjectionTestExecution
* {@code
* function (doc) {
* if (doc.location &&
- * doc._class == "org.baeldung.spring.data.couchbase.model.Campus") {
+ * doc._class == "com.baeldung.spring.data.couchbase.model.Campus") {
* emit([doc.location.x, doc.location.y], null);
* }
* }}
@@ -34,7 +34,7 @@ import org.springframework.test.context.support.DependencyInjectionTestExecution
* 2.4.1- view 'all' with function:
* {@code
* function (doc, meta) {
- * if(doc._class == "org.baeldung.spring.data.couchbase.model.Campus") {
+ * if(doc._class == "com.baeldung.spring.data.couchbase.model.Campus") {
* emit(meta.id, null);
* }
* }}
@@ -42,7 +42,7 @@ import org.springframework.test.context.support.DependencyInjectionTestExecution
* 2.4.2- view 'byName' with function:
* {@code
* function (doc, meta) {
- * if(doc._class == "org.baeldung.spring.data.couchbase.model.Campus" &&
+ * if(doc._class == "com.baeldung.spring.data.couchbase.model.Campus" &&
* doc.name) {
* emit(doc.name, null);
* }
diff --git a/persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/CustomTypeKeyCouchbaseConfig.java b/persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase/CustomTypeKeyCouchbaseConfig.java
similarity index 86%
rename from persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/CustomTypeKeyCouchbaseConfig.java
rename to persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase/CustomTypeKeyCouchbaseConfig.java
index 0e2e8d5dd3..403c012194 100644
--- a/persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/CustomTypeKeyCouchbaseConfig.java
+++ b/persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase/CustomTypeKeyCouchbaseConfig.java
@@ -1,4 +1,4 @@
-package org.baeldung.spring.data.couchbase;
+package com.baeldung.spring.data.couchbase;
import org.springframework.data.couchbase.core.convert.MappingCouchbaseConverter;
diff --git a/persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/IntegrationTest.java b/persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase/IntegrationTest.java
similarity index 92%
rename from persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/IntegrationTest.java
rename to persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase/IntegrationTest.java
index ce2daa92cd..df2802a15c 100644
--- a/persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/IntegrationTest.java
+++ b/persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase/IntegrationTest.java
@@ -1,4 +1,4 @@
-package org.baeldung.spring.data.couchbase;
+package com.baeldung.spring.data.couchbase;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
diff --git a/persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/IntegrationTestConfig.java b/persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase/IntegrationTestConfig.java
similarity index 62%
rename from persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/IntegrationTestConfig.java
rename to persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase/IntegrationTestConfig.java
index 6f040c34db..6abb879236 100644
--- a/persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/IntegrationTestConfig.java
+++ b/persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase/IntegrationTestConfig.java
@@ -1,9 +1,9 @@
-package org.baeldung.spring.data.couchbase;
+package com.baeldung.spring.data.couchbase;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
-@ComponentScan(basePackages = "org.baeldung.spring.data.couchbase")
+@ComponentScan(basePackages = "com.baeldung.spring.data.couchbase")
public class IntegrationTestConfig {
}
diff --git a/persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/MyCouchbaseConfig.java b/persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase/MyCouchbaseConfig.java
similarity index 93%
rename from persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/MyCouchbaseConfig.java
rename to persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase/MyCouchbaseConfig.java
index a37e918101..5a2180f4b8 100644
--- a/persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/MyCouchbaseConfig.java
+++ b/persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase/MyCouchbaseConfig.java
@@ -1,4 +1,4 @@
-package org.baeldung.spring.data.couchbase;
+package com.baeldung.spring.data.couchbase;
import java.util.Arrays;
import java.util.List;
@@ -12,7 +12,7 @@ import org.springframework.data.couchbase.repository.config.EnableCouchbaseRepos
import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean;
@Configuration
-@EnableCouchbaseRepositories(basePackages = { "org.baeldung.spring.data.couchbase" })
+@EnableCouchbaseRepositories(basePackages = { "com.baeldung.spring.data.couchbase" })
public class MyCouchbaseConfig extends AbstractCouchbaseConfiguration {
public static final List NODE_LIST = Arrays.asList("localhost");
diff --git a/persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/ReadYourOwnWritesCouchbaseConfig.java b/persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase/ReadYourOwnWritesCouchbaseConfig.java
similarity index 85%
rename from persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/ReadYourOwnWritesCouchbaseConfig.java
rename to persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase/ReadYourOwnWritesCouchbaseConfig.java
index b4a372487e..b989bb39d8 100644
--- a/persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/ReadYourOwnWritesCouchbaseConfig.java
+++ b/persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase/ReadYourOwnWritesCouchbaseConfig.java
@@ -1,4 +1,4 @@
-package org.baeldung.spring.data.couchbase;
+package com.baeldung.spring.data.couchbase;
import org.springframework.data.couchbase.core.query.Consistency;
diff --git a/persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/PersonRepositoryServiceLiveTest.java b/persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase/service/PersonRepositoryServiceLiveTest.java
similarity index 87%
rename from persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/PersonRepositoryServiceLiveTest.java
rename to persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase/service/PersonRepositoryServiceLiveTest.java
index 899c21691d..ee3716030f 100644
--- a/persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/PersonRepositoryServiceLiveTest.java
+++ b/persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase/service/PersonRepositoryServiceLiveTest.java
@@ -1,4 +1,4 @@
-package org.baeldung.spring.data.couchbase.service;
+package com.baeldung.spring.data.couchbase.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
diff --git a/persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/PersonServiceLiveTest.java b/persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase/service/PersonServiceLiveTest.java
similarity index 95%
rename from persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/PersonServiceLiveTest.java
rename to persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase/service/PersonServiceLiveTest.java
index 08d641dc2c..804bbdd2c8 100644
--- a/persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/PersonServiceLiveTest.java
+++ b/persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase/service/PersonServiceLiveTest.java
@@ -1,4 +1,4 @@
-package org.baeldung.spring.data.couchbase.service;
+package com.baeldung.spring.data.couchbase.service;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
@@ -7,9 +7,9 @@ import static org.junit.Assert.assertTrue;
import java.util.List;
-import org.baeldung.spring.data.couchbase.IntegrationTest;
-import org.baeldung.spring.data.couchbase.MyCouchbaseConfig;
-import org.baeldung.spring.data.couchbase.model.Person;
+import com.baeldung.spring.data.couchbase.IntegrationTest;
+import com.baeldung.spring.data.couchbase.MyCouchbaseConfig;
+import com.baeldung.spring.data.couchbase.model.Person;
import org.joda.time.DateTime;
import org.junit.BeforeClass;
import org.junit.Test;
diff --git a/persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/PersonTemplateServiceLiveTest.java b/persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase/service/PersonTemplateServiceLiveTest.java
similarity index 87%
rename from persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/PersonTemplateServiceLiveTest.java
rename to persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase/service/PersonTemplateServiceLiveTest.java
index 3bc99d28df..a665fd756d 100644
--- a/persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/PersonTemplateServiceLiveTest.java
+++ b/persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase/service/PersonTemplateServiceLiveTest.java
@@ -1,4 +1,4 @@
-package org.baeldung.spring.data.couchbase.service;
+package com.baeldung.spring.data.couchbase.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
diff --git a/persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/StudentRepositoryServiceLiveTest.java b/persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase/service/StudentRepositoryServiceLiveTest.java
similarity index 87%
rename from persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/StudentRepositoryServiceLiveTest.java
rename to persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase/service/StudentRepositoryServiceLiveTest.java
index 162619db3e..9abf93b003 100644
--- a/persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/StudentRepositoryServiceLiveTest.java
+++ b/persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase/service/StudentRepositoryServiceLiveTest.java
@@ -1,4 +1,4 @@
-package org.baeldung.spring.data.couchbase.service;
+package com.baeldung.spring.data.couchbase.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
diff --git a/persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/StudentServiceLiveTest.java b/persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase/service/StudentServiceLiveTest.java
similarity index 96%
rename from persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/StudentServiceLiveTest.java
rename to persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase/service/StudentServiceLiveTest.java
index 6a18922007..c13b4930ca 100644
--- a/persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/StudentServiceLiveTest.java
+++ b/persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase/service/StudentServiceLiveTest.java
@@ -1,4 +1,4 @@
-package org.baeldung.spring.data.couchbase.service;
+package com.baeldung.spring.data.couchbase.service;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
@@ -9,9 +9,9 @@ import java.util.List;
import javax.validation.ConstraintViolationException;
-import org.baeldung.spring.data.couchbase.IntegrationTest;
-import org.baeldung.spring.data.couchbase.MyCouchbaseConfig;
-import org.baeldung.spring.data.couchbase.model.Student;
+import com.baeldung.spring.data.couchbase.IntegrationTest;
+import com.baeldung.spring.data.couchbase.MyCouchbaseConfig;
+import com.baeldung.spring.data.couchbase.model.Student;
import org.joda.time.DateTime;
import org.junit.BeforeClass;
import org.junit.Test;
diff --git a/persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/StudentTemplateServiceLiveTest.java b/persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase/service/StudentTemplateServiceLiveTest.java
similarity index 87%
rename from persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/StudentTemplateServiceLiveTest.java
rename to persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase/service/StudentTemplateServiceLiveTest.java
index c666e004af..92a4a23baf 100644
--- a/persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/StudentTemplateServiceLiveTest.java
+++ b/persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase/service/StudentTemplateServiceLiveTest.java
@@ -1,4 +1,4 @@
-package org.baeldung.spring.data.couchbase.service;
+package com.baeldung.spring.data.couchbase.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
diff --git a/persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/MultiBucketCouchbaseConfig.java b/persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase2b/MultiBucketCouchbaseConfig.java
similarity index 93%
rename from persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/MultiBucketCouchbaseConfig.java
rename to persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase2b/MultiBucketCouchbaseConfig.java
index fe32305feb..488819aaf5 100644
--- a/persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/MultiBucketCouchbaseConfig.java
+++ b/persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase2b/MultiBucketCouchbaseConfig.java
@@ -1,9 +1,9 @@
-package org.baeldung.spring.data.couchbase2b;
+package com.baeldung.spring.data.couchbase2b;
import java.util.Arrays;
import java.util.List;
-import org.baeldung.spring.data.couchbase.model.Campus;
+import com.baeldung.spring.data.couchbase.model.Campus;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.couchbase.config.AbstractCouchbaseConfiguration;
@@ -17,7 +17,7 @@ import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean;
import com.couchbase.client.java.Bucket;
@Configuration
-@EnableCouchbaseRepositories(basePackages = { "org.baeldung.spring.data.couchbase2b" })
+@EnableCouchbaseRepositories(basePackages = { "com.baeldung.spring.data.couchbase2b" })
public class MultiBucketCouchbaseConfig extends AbstractCouchbaseConfiguration {
public static final List NODE_LIST = Arrays.asList("localhost");
diff --git a/persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/MultiBucketIntegrationTestConfig.java b/persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase2b/MultiBucketIntegrationTestConfig.java
similarity index 64%
rename from persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/MultiBucketIntegrationTestConfig.java
rename to persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase2b/MultiBucketIntegrationTestConfig.java
index 94a95b06bb..c082a0d77c 100644
--- a/persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/MultiBucketIntegrationTestConfig.java
+++ b/persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase2b/MultiBucketIntegrationTestConfig.java
@@ -1,10 +1,10 @@
-package org.baeldung.spring.data.couchbase2b;
+package com.baeldung.spring.data.couchbase2b;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
-@ComponentScan(basePackages = { "org.baeldung.spring.data.couchbase2b" })
+@ComponentScan(basePackages = { "com.baeldung.spring.data.couchbase2b" })
public class MultiBucketIntegrationTestConfig {
}
diff --git a/persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/MultiBucketLiveTest.java b/persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase2b/MultiBucketLiveTest.java
similarity index 92%
rename from persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/MultiBucketLiveTest.java
rename to persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase2b/MultiBucketLiveTest.java
index 3b406a851e..334af40866 100644
--- a/persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/MultiBucketLiveTest.java
+++ b/persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase2b/MultiBucketLiveTest.java
@@ -1,4 +1,4 @@
-package org.baeldung.spring.data.couchbase2b;
+package com.baeldung.spring.data.couchbase2b;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
diff --git a/persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/service/CampusServiceImplLiveTest.java b/persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase2b/service/CampusServiceImplLiveTest.java
similarity index 94%
rename from persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/service/CampusServiceImplLiveTest.java
rename to persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase2b/service/CampusServiceImplLiveTest.java
index 5e7a12f292..e94c09e6cd 100644
--- a/persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/service/CampusServiceImplLiveTest.java
+++ b/persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase2b/service/CampusServiceImplLiveTest.java
@@ -1,4 +1,4 @@
-package org.baeldung.spring.data.couchbase2b.service;
+package com.baeldung.spring.data.couchbase2b.service;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
@@ -9,9 +9,9 @@ import java.util.Set;
import javax.annotation.PostConstruct;
-import org.baeldung.spring.data.couchbase.model.Campus;
-import org.baeldung.spring.data.couchbase2b.MultiBucketLiveTest;
-import org.baeldung.spring.data.couchbase2b.repos.CampusRepository;
+import com.baeldung.spring.data.couchbase.model.Campus;
+import com.baeldung.spring.data.couchbase2b.MultiBucketLiveTest;
+import com.baeldung.spring.data.couchbase2b.repos.CampusRepository;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.geo.Distance;
diff --git a/persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/service/PersonServiceImplLiveTest.java b/persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase2b/service/PersonServiceImplLiveTest.java
similarity index 95%
rename from persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/service/PersonServiceImplLiveTest.java
rename to persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase2b/service/PersonServiceImplLiveTest.java
index 9543d8fe12..3f98c1950a 100644
--- a/persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/service/PersonServiceImplLiveTest.java
+++ b/persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase2b/service/PersonServiceImplLiveTest.java
@@ -1,4 +1,4 @@
-package org.baeldung.spring.data.couchbase2b.service;
+package com.baeldung.spring.data.couchbase2b.service;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
@@ -7,9 +7,9 @@ import static org.junit.Assert.assertTrue;
import java.util.List;
-import org.baeldung.spring.data.couchbase.model.Person;
-import org.baeldung.spring.data.couchbase2b.MultiBucketCouchbaseConfig;
-import org.baeldung.spring.data.couchbase2b.MultiBucketLiveTest;
+import com.baeldung.spring.data.couchbase.model.Person;
+import com.baeldung.spring.data.couchbase2b.MultiBucketLiveTest;
+import com.baeldung.spring.data.couchbase2b.MultiBucketCouchbaseConfig;
import org.joda.time.DateTime;
import org.junit.BeforeClass;
import org.junit.Test;
diff --git a/persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/service/StudentServiceImplLiveTest.java b/persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase2b/service/StudentServiceImplLiveTest.java
similarity index 96%
rename from persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/service/StudentServiceImplLiveTest.java
rename to persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase2b/service/StudentServiceImplLiveTest.java
index 52b9113e8f..004258a37e 100644
--- a/persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/service/StudentServiceImplLiveTest.java
+++ b/persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase2b/service/StudentServiceImplLiveTest.java
@@ -1,4 +1,4 @@
-package org.baeldung.spring.data.couchbase2b.service;
+package com.baeldung.spring.data.couchbase2b.service;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
@@ -9,9 +9,9 @@ import java.util.List;
import javax.validation.ConstraintViolationException;
-import org.baeldung.spring.data.couchbase.model.Student;
-import org.baeldung.spring.data.couchbase2b.MultiBucketCouchbaseConfig;
-import org.baeldung.spring.data.couchbase2b.MultiBucketLiveTest;
+import com.baeldung.spring.data.couchbase.model.Student;
+import com.baeldung.spring.data.couchbase2b.MultiBucketCouchbaseConfig;
+import com.baeldung.spring.data.couchbase2b.MultiBucketLiveTest;
import org.joda.time.DateTime;
import org.junit.BeforeClass;
import org.junit.Test;
diff --git a/persistence-modules/spring-data-eclipselink/README.md b/persistence-modules/spring-data-eclipselink/README.md
index 3bad63d7ef..2056031c45 100644
--- a/persistence-modules/spring-data-eclipselink/README.md
+++ b/persistence-modules/spring-data-eclipselink/README.md
@@ -4,5 +4,5 @@ This module contains articles about Spring Data with EclipseLink.
### Relevant articles
-- [A Guide to EclipseLink with Spring](http://www.baeldung.com/spring-eclipselink)
+- [A Guide to EclipseLink with Spring](https://www.baeldung.com/spring-eclipselink)
- [Pessimistic Locking in JPA](https://www.baeldung.com/jpa-pessimistic-locking)
diff --git a/persistence-modules/spring-data-eclipselink/src/test/java/org/baeldung/SpringContextTest.java b/persistence-modules/spring-data-eclipselink/src/test/java/com/baeldung/SpringContextTest.java
similarity index 95%
rename from persistence-modules/spring-data-eclipselink/src/test/java/org/baeldung/SpringContextTest.java
rename to persistence-modules/spring-data-eclipselink/src/test/java/com/baeldung/SpringContextTest.java
index 4c69245f65..842c61ffbd 100644
--- a/persistence-modules/spring-data-eclipselink/src/test/java/org/baeldung/SpringContextTest.java
+++ b/persistence-modules/spring-data-eclipselink/src/test/java/com/baeldung/SpringContextTest.java
@@ -1,4 +1,4 @@
-package org.baeldung;
+package com.baeldung;
import org.junit.Test;
import org.junit.runner.RunWith;
diff --git a/persistence-modules/spring-data-elasticsearch/README.md b/persistence-modules/spring-data-elasticsearch/README.md
index 840db617f6..22126c2f00 100644
--- a/persistence-modules/spring-data-elasticsearch/README.md
+++ b/persistence-modules/spring-data-elasticsearch/README.md
@@ -1,11 +1,11 @@
## Spring Data Elasticsearch
### Relevant Articles:
-- [Introduction to Spring Data Elasticsearch](http://www.baeldung.com/spring-data-elasticsearch-tutorial)
-- [Elasticsearch Queries with Spring Data](http://www.baeldung.com/spring-data-elasticsearch-queries)
-- [Guide to Elasticsearch in Java](http://www.baeldung.com/elasticsearch-java)
-- [Geospatial Support in ElasticSearch](http://www.baeldung.com/elasticsearch-geo-spatial)
-- [A Simple Tagging Implementation with Elasticsearch](http://www.baeldung.com/elasticsearch-tagging)
+- [Introduction to Spring Data Elasticsearch](https://www.baeldung.com/spring-data-elasticsearch-tutorial)
+- [Elasticsearch Queries with Spring Data](https://www.baeldung.com/spring-data-elasticsearch-queries)
+- [Guide to Elasticsearch in Java](https://www.baeldung.com/elasticsearch-java)
+- [Geospatial Support in ElasticSearch](https://www.baeldung.com/elasticsearch-geo-spatial)
+- [A Simple Tagging Implementation with Elasticsearch](https://www.baeldung.com/elasticsearch-tagging)
### Build the Project with Tests Running
```
diff --git a/persistence-modules/spring-data-elasticsearch/src/test/java/org/baeldung/SpringContextManualTest.java b/persistence-modules/spring-data-elasticsearch/src/test/java/com/baeldung/SpringContextManualTest.java
similarity index 96%
rename from persistence-modules/spring-data-elasticsearch/src/test/java/org/baeldung/SpringContextManualTest.java
rename to persistence-modules/spring-data-elasticsearch/src/test/java/com/baeldung/SpringContextManualTest.java
index c6f095eae9..c69deeb77c 100644
--- a/persistence-modules/spring-data-elasticsearch/src/test/java/org/baeldung/SpringContextManualTest.java
+++ b/persistence-modules/spring-data-elasticsearch/src/test/java/com/baeldung/SpringContextManualTest.java
@@ -1,4 +1,4 @@
-package org.baeldung;
+package com.baeldung;
import org.junit.Test;
import org.junit.runner.RunWith;
diff --git a/persistence-modules/spring-data-gemfire/README.md b/persistence-modules/spring-data-gemfire/README.md
index 78199e90d0..4eb28c1678 100644
--- a/persistence-modules/spring-data-gemfire/README.md
+++ b/persistence-modules/spring-data-gemfire/README.md
@@ -1,3 +1,3 @@
### Relevant articles
-- [A Guide to GemFire with Spring Data](http://www.baeldung.com/spring-data-gemfire)
+- [A Guide to GemFire with Spring Data](https://www.baeldung.com/spring-data-gemfire)
diff --git a/persistence-modules/spring-data-gemfire/src/test/java/org/baeldung/SpringContextTest.java b/persistence-modules/spring-data-gemfire/src/test/java/com/baeldung/SpringContextTest.java
similarity index 96%
rename from persistence-modules/spring-data-gemfire/src/test/java/org/baeldung/SpringContextTest.java
rename to persistence-modules/spring-data-gemfire/src/test/java/com/baeldung/SpringContextTest.java
index 3772e22137..53ab8800d9 100644
--- a/persistence-modules/spring-data-gemfire/src/test/java/org/baeldung/SpringContextTest.java
+++ b/persistence-modules/spring-data-gemfire/src/test/java/com/baeldung/SpringContextTest.java
@@ -1,4 +1,4 @@
-package org.baeldung;
+package com.baeldung;
import org.junit.Test;
import org.junit.runner.RunWith;
diff --git a/persistence-modules/spring-data-jpa/src/test/java/org/baeldung/SpringContextTest.java b/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/SpringContextTest.java
similarity index 94%
rename from persistence-modules/spring-data-jpa/src/test/java/org/baeldung/SpringContextTest.java
rename to persistence-modules/spring-data-jpa/src/test/java/com/baeldung/SpringContextTest.java
index db7b156415..eaccf4acba 100644
--- a/persistence-modules/spring-data-jpa/src/test/java/org/baeldung/SpringContextTest.java
+++ b/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/SpringContextTest.java
@@ -1,4 +1,4 @@
-package org.baeldung;
+package com.baeldung;
import org.junit.Test;
import org.junit.runner.RunWith;
diff --git a/persistence-modules/spring-data-jpa/src/test/java/org/baeldung/SpringJpaContextIntegrationTest.java b/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/SpringJpaContextIntegrationTest.java
similarity index 97%
rename from persistence-modules/spring-data-jpa/src/test/java/org/baeldung/SpringJpaContextIntegrationTest.java
rename to persistence-modules/spring-data-jpa/src/test/java/com/baeldung/SpringJpaContextIntegrationTest.java
index 4a36407884..f3697bf39f 100644
--- a/persistence-modules/spring-data-jpa/src/test/java/org/baeldung/SpringJpaContextIntegrationTest.java
+++ b/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/SpringJpaContextIntegrationTest.java
@@ -1,4 +1,4 @@
-package org.baeldung;
+package com.baeldung;
import org.junit.Test;
import org.junit.runner.RunWith;
diff --git a/persistence-modules/spring-data-keyvalue/README.md b/persistence-modules/spring-data-keyvalue/README.md
index 9f53a11b2c..93cde8ce93 100644
--- a/persistence-modules/spring-data-keyvalue/README.md
+++ b/persistence-modules/spring-data-keyvalue/README.md
@@ -3,4 +3,4 @@
This module contains articles about Spring Data Key-Value
### Relevant Articles:
-- [A Guide to Spring Data Key Value](http://www.baeldung.com/spring-data-key-value)
+- [A Guide to Spring Data Key Value](https://www.baeldung.com/spring-data-key-value)
diff --git a/persistence-modules/spring-data-keyvalue/src/test/java/org/baeldung/SpringContextTest.java b/persistence-modules/spring-data-keyvalue/src/test/java/com/baeldung/SpringContextTest.java
similarity index 95%
rename from persistence-modules/spring-data-keyvalue/src/test/java/org/baeldung/SpringContextTest.java
rename to persistence-modules/spring-data-keyvalue/src/test/java/com/baeldung/SpringContextTest.java
index e6cc5c15af..aca177d1a7 100644
--- a/persistence-modules/spring-data-keyvalue/src/test/java/org/baeldung/SpringContextTest.java
+++ b/persistence-modules/spring-data-keyvalue/src/test/java/com/baeldung/SpringContextTest.java
@@ -1,4 +1,4 @@
-package org.baeldung;
+package com.baeldung;
import org.junit.Test;
import org.junit.runner.RunWith;
diff --git a/persistence-modules/spring-data-neo4j/README.md b/persistence-modules/spring-data-neo4j/README.md
index 03c9ed333d..dc54de0e31 100644
--- a/persistence-modules/spring-data-neo4j/README.md
+++ b/persistence-modules/spring-data-neo4j/README.md
@@ -1,8 +1,8 @@
## Spring Data Neo4j
### Relevant Articles:
-- [Introduction to Spring Data Neo4j](http://www.baeldung.com/spring-data-neo4j-intro)
-- [A Guide to Neo4J with Java](http://www.baeldung.com/java-neo4j)
+- [Introduction to Spring Data Neo4j](https://www.baeldung.com/spring-data-neo4j-intro)
+- [A Guide to Neo4J with Java](https://www.baeldung.com/java-neo4j)
### Build the Project with Tests Running
```
diff --git a/persistence-modules/spring-data-neo4j/src/test/java/org/baeldung/SpringContextTest.java b/persistence-modules/spring-data-neo4j/src/test/java/com/baeldung/SpringContextTest.java
similarity index 96%
rename from persistence-modules/spring-data-neo4j/src/test/java/org/baeldung/SpringContextTest.java
rename to persistence-modules/spring-data-neo4j/src/test/java/com/baeldung/SpringContextTest.java
index 5bf54fc0bd..7029905c49 100644
--- a/persistence-modules/spring-data-neo4j/src/test/java/org/baeldung/SpringContextTest.java
+++ b/persistence-modules/spring-data-neo4j/src/test/java/com/baeldung/SpringContextTest.java
@@ -1,4 +1,4 @@
-package org.baeldung;
+package com.baeldung;
import org.junit.Test;
import org.junit.runner.RunWith;
diff --git a/persistence-modules/spring-data-redis/README.md b/persistence-modules/spring-data-redis/README.md
index a20f5052f0..e4a528ae91 100644
--- a/persistence-modules/spring-data-redis/README.md
+++ b/persistence-modules/spring-data-redis/README.md
@@ -1,8 +1,8 @@
## Spring Data Redis
### Relevant Articles:
-- [Introduction to Spring Data Redis](http://www.baeldung.com/spring-data-redis-tutorial)
-- [PubSub Messaging with Spring Data Redis](http://www.baeldung.com/spring-data-redis-pub-sub)
+- [Introduction to Spring Data Redis](https://www.baeldung.com/spring-data-redis-tutorial)
+- [PubSub Messaging with Spring Data Redis](https://www.baeldung.com/spring-data-redis-pub-sub)
- [An Introduction to Spring Data Redis Reactive](https://www.baeldung.com/spring-data-redis-reactive)
### Build the Project with Tests Running
diff --git a/persistence-modules/spring-data-redis/src/test/java/org/baeldung/SpringContextTest.java b/persistence-modules/spring-data-redis/src/test/java/com/baeldung/SpringContextTest.java
similarity index 95%
rename from persistence-modules/spring-data-redis/src/test/java/org/baeldung/SpringContextTest.java
rename to persistence-modules/spring-data-redis/src/test/java/com/baeldung/SpringContextTest.java
index 6652345595..4df0cbd0ad 100644
--- a/persistence-modules/spring-data-redis/src/test/java/org/baeldung/SpringContextTest.java
+++ b/persistence-modules/spring-data-redis/src/test/java/com/baeldung/SpringContextTest.java
@@ -1,4 +1,4 @@
-package org.baeldung;
+package com.baeldung;
import org.junit.Test;
import org.junit.runner.RunWith;
diff --git a/persistence-modules/spring-data-solr/README.md b/persistence-modules/spring-data-solr/README.md
index c282fd2ce7..3d58d2d44c 100644
--- a/persistence-modules/spring-data-solr/README.md
+++ b/persistence-modules/spring-data-solr/README.md
@@ -3,4 +3,4 @@
This module contains articles about Spring Data with Solr.
### Relevant Articles:
-- [Introduction to Spring Data Solr](http://www.baeldung.com/spring-data-solr)
+- [Introduction to Spring Data Solr](https://www.baeldung.com/spring-data-solr)
diff --git a/persistence-modules/spring-data-solr/src/test/java/org/baeldung/SpringContextTest.java b/persistence-modules/spring-data-solr/src/test/java/com/baeldung/SpringContextTest.java
similarity index 95%
rename from persistence-modules/spring-data-solr/src/test/java/org/baeldung/SpringContextTest.java
rename to persistence-modules/spring-data-solr/src/test/java/com/baeldung/SpringContextTest.java
index 09bf0255a0..f445a550a3 100644
--- a/persistence-modules/spring-data-solr/src/test/java/org/baeldung/SpringContextTest.java
+++ b/persistence-modules/spring-data-solr/src/test/java/com/baeldung/SpringContextTest.java
@@ -1,4 +1,4 @@
-package org.baeldung;
+package com.baeldung;
import org.junit.Test;
import org.junit.runner.RunWith;
diff --git a/spring-boot-modules/spring-boot-properties/src/main/resources/build.properties b/spring-boot-modules/spring-boot-properties/src/main/resources/build.properties
index f3d2e9b15b..5bd0a50a17 100644
--- a/spring-boot-modules/spring-boot-properties/src/main/resources/build.properties
+++ b/spring-boot-modules/spring-boot-properties/src/main/resources/build.properties
@@ -1 +1,2 @@
-application-version=@project.version@
\ No newline at end of file
+application-version=@project.version@
+application-description=@project.description@
\ No newline at end of file
diff --git a/spring-boot-modules/spring-boot-properties/src/test/java/com/baeldung/buildproperties/BuildInfoServiceIntegrationTest.java b/spring-boot-modules/spring-boot-properties/src/test/java/com/baeldung/buildproperties/BuildInfoServiceIntegrationTest.java
index cb056fe56d..2cb27e1844 100644
--- a/spring-boot-modules/spring-boot-properties/src/test/java/com/baeldung/buildproperties/BuildInfoServiceIntegrationTest.java
+++ b/spring-boot-modules/spring-boot-properties/src/test/java/com/baeldung/buildproperties/BuildInfoServiceIntegrationTest.java
@@ -18,7 +18,7 @@ class BuildInfoServiceIntegrationTest {
@Test
void whenGetApplicationDescription_thenSuccess() {
- assertThat(service.getApplicationDescription(), Matchers.is("This is simple boot application for Spring boot actuator test"));
+ assertThat(service.getApplicationDescription(), Matchers.is("Spring Boot Properties Module"));
assertThat(service.getApplicationVersion(), Matchers.is("0.0.1-SNAPSHOT"));
}
}
diff --git a/spring-cloud/spring-cloud-zuul/spring-zuul-post-filter/src/main/java/com/baeldung/filters/ResponseLogFilter.java b/spring-cloud/spring-cloud-zuul/spring-zuul-post-filter/src/main/java/com/baeldung/filters/ResponseLogFilter.java
index e589e27d46..b0e4f7e313 100644
--- a/spring-cloud/spring-cloud-zuul/spring-zuul-post-filter/src/main/java/com/baeldung/filters/ResponseLogFilter.java
+++ b/spring-cloud/spring-cloud-zuul/spring-zuul-post-filter/src/main/java/com/baeldung/filters/ResponseLogFilter.java
@@ -12,6 +12,7 @@ import java.io.InputStream;
import java.io.InputStreamReader;
import static org.springframework.cloud.netflix.zuul.filters.support.FilterConstants.POST_TYPE;
+import static org.springframework.http.HttpStatus.INTERNAL_SERVER_ERROR;
@Component
public class ResponseLogFilter extends ZuulFilter {
@@ -49,8 +50,8 @@ public class ResponseLogFilter extends ZuulFilter {
context.setResponseBody(responseData);
}
- catch (Throwable e) {
- e.printStackTrace();
+ catch (Exception e) {
+ throw new ZuulException(e, INTERNAL_SERVER_ERROR.value(), e.getMessage());
}
return null;
diff --git a/spring-core-3/pom.xml b/spring-core-3/pom.xml
index cd82f23320..205259e8e4 100644
--- a/spring-core-3/pom.xml
+++ b/spring-core-3/pom.xml
@@ -1,72 +1,88 @@
-
-
- 4.0.0
- spring-core-3
- spring-core-3
-
-
- com.baeldung
- parent-spring-5
- 0.0.1-SNAPSHOT
- ../parent-spring-5
-
-
-
-
- org.springframework
- spring-beans
- ${spring.version}
-
-
- org.springframework
- spring-context
- ${spring.version}
-
-
- org.springframework
- spring-core
- ${spring.version}
-
-
- javax.annotation
- javax.annotation-api
- ${annotation-api.version}
-
-
- org.springframework
- spring-test
- ${spring.version}
- test
-
-
- org.junit.jupiter
- junit-jupiter-engine
- ${junit-jupiter.version}
- test
-
-
- org.junit.jupiter
- junit-jupiter-api
- ${junit-jupiter.version}
- test
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-surefire-plugin
- ${maven.surefire.version}
-
-
-
-
-
- 2.22.1
- 1.3.2
-
-
+
+
+ 4.0.0
+ spring-core-3
+ spring-core-3
+
+
+ com.baeldung
+ parent-spring-5
+ 0.0.1-SNAPSHOT
+ ../parent-spring-5
+
+
+
+
+ org.springframework
+ spring-beans
+ ${spring.version}
+
+
+ org.springframework
+ spring-tx
+ ${spring.version}
+
+
+ org.springframework
+ spring-jdbc
+ ${spring.version}
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+ ${spring.boot.version}
+
+
+ org.springframework
+ spring-context
+ ${spring.version}
+
+
+ org.springframework
+ spring-core
+ ${spring.version}
+
+
+ javax.annotation
+ javax.annotation-api
+ ${annotation-api.version}
+
+
+ org.springframework
+ spring-test
+ ${spring.version}
+ test
+
+
+ org.junit.jupiter
+ junit-jupiter-engine
+ ${junit-jupiter.version}
+ test
+
+
+ org.junit.jupiter
+ junit-jupiter-api
+ ${junit-jupiter.version}
+ test
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+ ${maven.surefire.version}
+
+
+
+
+
+ 2.22.1
+ 1.3.2
+ 2.2.2.RELEASE
+
+
\ No newline at end of file
diff --git a/spring-core-3/src/main/java/com/baeldung/spring/patterns/factory/Application.java b/spring-core-3/src/main/java/com/baeldung/spring/patterns/factory/Application.java
new file mode 100644
index 0000000000..8f0134d83c
--- /dev/null
+++ b/spring-core-3/src/main/java/com/baeldung/spring/patterns/factory/Application.java
@@ -0,0 +1,19 @@
+package com.baeldung.spring.patterns.factory;
+
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.annotation.AnnotationConfigApplicationContext;
+
+public class Application {
+
+ @SuppressWarnings("resource")
+ public static void main(String[] args) {
+
+ ApplicationContext context = new AnnotationConfigApplicationContext(ApplicationConfig.class);
+
+ Foo foo = context.getBean(Foo.class);
+ Bar bar = context.getBean(Bar.class, "Some name");
+
+ System.out.println(foo);
+ System.out.println("Bar's name: " + bar.getName());
+ }
+}
diff --git a/spring-core-3/src/main/java/com/baeldung/spring/patterns/factory/ApplicationConfig.java b/spring-core-3/src/main/java/com/baeldung/spring/patterns/factory/ApplicationConfig.java
new file mode 100644
index 0000000000..626947cfd5
--- /dev/null
+++ b/spring-core-3/src/main/java/com/baeldung/spring/patterns/factory/ApplicationConfig.java
@@ -0,0 +1,9 @@
+package com.baeldung.spring.patterns.factory;
+
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+@ComponentScan(basePackageClasses = ApplicationConfig.class)
+public class ApplicationConfig {
+}
diff --git a/spring-core-3/src/main/java/com/baeldung/spring/patterns/factory/Bar.java b/spring-core-3/src/main/java/com/baeldung/spring/patterns/factory/Bar.java
new file mode 100644
index 0000000000..8bd742c481
--- /dev/null
+++ b/spring-core-3/src/main/java/com/baeldung/spring/patterns/factory/Bar.java
@@ -0,0 +1,20 @@
+package com.baeldung.spring.patterns.factory;
+
+import org.springframework.beans.factory.config.ConfigurableBeanFactory;
+import org.springframework.context.annotation.Scope;
+import org.springframework.stereotype.Component;
+
+@Component
+@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
+public class Bar {
+
+ private String name;
+
+ public Bar(String name) {
+ this.name = name;
+ }
+
+ public String getName() {
+ return name;
+ }
+}
diff --git a/spring-core-3/src/main/java/com/baeldung/spring/patterns/factory/Foo.java b/spring-core-3/src/main/java/com/baeldung/spring/patterns/factory/Foo.java
new file mode 100644
index 0000000000..5edba6c50d
--- /dev/null
+++ b/spring-core-3/src/main/java/com/baeldung/spring/patterns/factory/Foo.java
@@ -0,0 +1,7 @@
+package com.baeldung.spring.patterns.factory;
+
+import org.springframework.stereotype.Component;
+
+@Component
+public class Foo {
+}
diff --git a/spring-core-3/src/main/java/com/baeldung/spring/patterns/proxy/Application.java b/spring-core-3/src/main/java/com/baeldung/spring/patterns/proxy/Application.java
new file mode 100644
index 0000000000..d00f51ec96
--- /dev/null
+++ b/spring-core-3/src/main/java/com/baeldung/spring/patterns/proxy/Application.java
@@ -0,0 +1,12 @@
+package com.baeldung.spring.patterns.proxy;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class Application {
+
+ public static void main(String[] args) {
+ SpringApplication.run(Application.class, args);
+ }
+}
diff --git a/spring-core-3/src/main/java/com/baeldung/spring/patterns/proxy/Book.java b/spring-core-3/src/main/java/com/baeldung/spring/patterns/proxy/Book.java
new file mode 100644
index 0000000000..112396e232
--- /dev/null
+++ b/spring-core-3/src/main/java/com/baeldung/spring/patterns/proxy/Book.java
@@ -0,0 +1,18 @@
+package com.baeldung.spring.patterns.proxy;
+
+public class Book {
+
+ private String author;
+
+ public Book(String author) {
+ this.author = author;
+ }
+
+ public String getAuthor() {
+ return author;
+ }
+
+ public void setAuthor(String author) {
+ this.author = author;
+ }
+}
diff --git a/spring-core-3/src/main/java/com/baeldung/spring/patterns/proxy/BookController.java b/spring-core-3/src/main/java/com/baeldung/spring/patterns/proxy/BookController.java
new file mode 100644
index 0000000000..ab192826b8
--- /dev/null
+++ b/spring-core-3/src/main/java/com/baeldung/spring/patterns/proxy/BookController.java
@@ -0,0 +1,18 @@
+package com.baeldung.spring.patterns.proxy;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+public class BookController {
+
+ @Autowired
+ private BookManager manager;
+
+ @PostMapping("/book")
+ public Book create(@RequestParam String author) {
+ return manager.create(author);
+ }
+}
diff --git a/spring-core-3/src/main/java/com/baeldung/spring/patterns/proxy/BookManager.java b/spring-core-3/src/main/java/com/baeldung/spring/patterns/proxy/BookManager.java
new file mode 100644
index 0000000000..d82218e404
--- /dev/null
+++ b/spring-core-3/src/main/java/com/baeldung/spring/patterns/proxy/BookManager.java
@@ -0,0 +1,18 @@
+package com.baeldung.spring.patterns.proxy;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+@Service
+public class BookManager {
+
+ @Autowired
+ private BookRepository repository;
+
+ @Transactional
+ public Book create(String author) {
+ System.out.println(repository.getClass().getName());
+ return repository.create(author);
+ }
+}
diff --git a/spring-core-3/src/main/java/com/baeldung/spring/patterns/proxy/BookRepository.java b/spring-core-3/src/main/java/com/baeldung/spring/patterns/proxy/BookRepository.java
new file mode 100644
index 0000000000..b100bc0a61
--- /dev/null
+++ b/spring-core-3/src/main/java/com/baeldung/spring/patterns/proxy/BookRepository.java
@@ -0,0 +1,11 @@
+package com.baeldung.spring.patterns.proxy;
+
+import org.springframework.stereotype.Repository;
+
+@Repository
+public class BookRepository {
+
+ public Book create(String author) {
+ return new Book(author);
+ }
+}
diff --git a/spring-core-3/src/main/java/com/baeldung/spring/patterns/singleton/Application.java b/spring-core-3/src/main/java/com/baeldung/spring/patterns/singleton/Application.java
new file mode 100644
index 0000000000..5d7545790a
--- /dev/null
+++ b/spring-core-3/src/main/java/com/baeldung/spring/patterns/singleton/Application.java
@@ -0,0 +1,12 @@
+package com.baeldung.spring.patterns.singleton;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class Application {
+
+ public static void main(String[] args) {
+ SpringApplication.run(Application.class, args);
+ }
+}
diff --git a/spring-core-3/src/main/java/com/baeldung/spring/patterns/singleton/Book.java b/spring-core-3/src/main/java/com/baeldung/spring/patterns/singleton/Book.java
new file mode 100644
index 0000000000..31d9d83683
--- /dev/null
+++ b/spring-core-3/src/main/java/com/baeldung/spring/patterns/singleton/Book.java
@@ -0,0 +1,4 @@
+package com.baeldung.spring.patterns.singleton;
+
+public class Book {
+}
diff --git a/spring-core-3/src/main/java/com/baeldung/spring/patterns/singleton/BookController.java b/spring-core-3/src/main/java/com/baeldung/spring/patterns/singleton/BookController.java
new file mode 100644
index 0000000000..aa4bdb8371
--- /dev/null
+++ b/spring-core-3/src/main/java/com/baeldung/spring/patterns/singleton/BookController.java
@@ -0,0 +1,19 @@
+package com.baeldung.spring.patterns.singleton;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+public class BookController {
+
+ @Autowired
+ private BookRepository repository;
+
+ @GetMapping("/book/{id}")
+ public Book findById(@PathVariable long id) {
+ System.out.println(repository);
+ return repository.findById(id).get();
+ }
+}
diff --git a/spring-core-3/src/main/java/com/baeldung/spring/patterns/singleton/BookRepository.java b/spring-core-3/src/main/java/com/baeldung/spring/patterns/singleton/BookRepository.java
new file mode 100644
index 0000000000..3fde153f31
--- /dev/null
+++ b/spring-core-3/src/main/java/com/baeldung/spring/patterns/singleton/BookRepository.java
@@ -0,0 +1,17 @@
+package com.baeldung.spring.patterns.singleton;
+
+import java.util.Optional;
+
+import org.springframework.stereotype.Repository;
+
+@Repository
+public class BookRepository {
+
+ public long count() {
+ return 1;
+ }
+
+ public Optional findById(long id) {
+ return Optional.of(new Book());
+ }
+}
diff --git a/spring-core-3/src/main/java/com/baeldung/spring/patterns/singleton/LibraryController.java b/spring-core-3/src/main/java/com/baeldung/spring/patterns/singleton/LibraryController.java
new file mode 100644
index 0000000000..76e273e2fb
--- /dev/null
+++ b/spring-core-3/src/main/java/com/baeldung/spring/patterns/singleton/LibraryController.java
@@ -0,0 +1,18 @@
+package com.baeldung.spring.patterns.singleton;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+public class LibraryController {
+
+ @Autowired
+ private BookRepository repository;
+
+ @GetMapping("/count")
+ public Long findCount() {
+ System.out.println(repository);
+ return repository.count();
+ }
+}
diff --git a/spring-core-3/src/main/java/com/baeldung/spring/patterns/template/Book.java b/spring-core-3/src/main/java/com/baeldung/spring/patterns/template/Book.java
new file mode 100644
index 0000000000..d601f01c67
--- /dev/null
+++ b/spring-core-3/src/main/java/com/baeldung/spring/patterns/template/Book.java
@@ -0,0 +1,32 @@
+package com.baeldung.spring.patterns.template;
+
+public class Book {
+
+ private long id;
+ private String title;
+ private String author;
+
+ public long getId() {
+ return id;
+ }
+
+ public void setId(long id) {
+ this.id = id;
+ }
+
+ public String getTitle() {
+ return title;
+ }
+
+ public void setTitle(String title) {
+ this.title = title;
+ }
+
+ public String getAuthor() {
+ return author;
+ }
+
+ public void setAuthor(String author) {
+ this.author = author;
+ }
+}
diff --git a/spring-core-3/src/main/java/com/baeldung/spring/patterns/template/BookRowMapper.java b/spring-core-3/src/main/java/com/baeldung/spring/patterns/template/BookRowMapper.java
new file mode 100644
index 0000000000..3fe7bb8e59
--- /dev/null
+++ b/spring-core-3/src/main/java/com/baeldung/spring/patterns/template/BookRowMapper.java
@@ -0,0 +1,21 @@
+package com.baeldung.spring.patterns.template;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
+import org.springframework.jdbc.core.RowMapper;
+
+public class BookRowMapper implements RowMapper {
+
+ @Override
+ public Book mapRow(ResultSet rs, int rowNum) throws SQLException {
+
+ Book book = new Book();
+
+ book.setId(rs.getLong("id"));
+ book.setTitle(rs.getString("title"));
+ book.setAuthor(rs.getString("author"));
+
+ return book;
+ }
+}
diff --git a/spring-core-3/src/test/java/com/baeldung/spring/patterns/factory/AnnotationConfigApplicationContextUnitTest.java b/spring-core-3/src/test/java/com/baeldung/spring/patterns/factory/AnnotationConfigApplicationContextUnitTest.java
new file mode 100644
index 0000000000..66e01f261f
--- /dev/null
+++ b/spring-core-3/src/test/java/com/baeldung/spring/patterns/factory/AnnotationConfigApplicationContextUnitTest.java
@@ -0,0 +1,36 @@
+package com.baeldung.spring.patterns.factory;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.annotation.AnnotationConfigApplicationContext;
+
+public class AnnotationConfigApplicationContextUnitTest {
+
+ @Test
+ @SuppressWarnings("resource")
+ public void whenGetSimpleBean_thenReturnConstructedBean() {
+
+ ApplicationContext context = new AnnotationConfigApplicationContext(ApplicationConfig.class);
+
+ Foo foo = context.getBean(Foo.class);
+
+ assertNotNull(foo);
+ }
+
+ @Test
+ @SuppressWarnings("resource")
+ public void whenGetPrototypeBean_thenReturnConstructedBean() {
+
+ String expectedName = "Some name";
+ ApplicationContext context = new AnnotationConfigApplicationContext(ApplicationConfig.class);
+
+ Bar bar = context.getBean(Bar.class, expectedName);
+
+ assertNotNull(bar);
+ assertThat(bar.getName(), is(expectedName));
+ }
+}
diff --git a/spring-core-3/src/test/java/com/baeldung/spring/patterns/factory/ApplicationConfig.java b/spring-core-3/src/test/java/com/baeldung/spring/patterns/factory/ApplicationConfig.java
new file mode 100644
index 0000000000..626947cfd5
--- /dev/null
+++ b/spring-core-3/src/test/java/com/baeldung/spring/patterns/factory/ApplicationConfig.java
@@ -0,0 +1,9 @@
+package com.baeldung.spring.patterns.factory;
+
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+@ComponentScan(basePackageClasses = ApplicationConfig.class)
+public class ApplicationConfig {
+}
diff --git a/spring-core-3/src/test/java/com/baeldung/spring/patterns/factory/Bar.java b/spring-core-3/src/test/java/com/baeldung/spring/patterns/factory/Bar.java
new file mode 100644
index 0000000000..e2f825aab3
--- /dev/null
+++ b/spring-core-3/src/test/java/com/baeldung/spring/patterns/factory/Bar.java
@@ -0,0 +1,20 @@
+package com.baeldung.spring.patterns.factory;
+
+import org.springframework.beans.factory.config.ConfigurableBeanFactory;
+import org.springframework.context.annotation.Scope;
+import org.springframework.stereotype.Component;
+
+@Component
+@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
+public class Bar {
+
+ private String name;
+
+ public Bar(String name) {
+ this.name = name;
+ }
+
+ public String getName() {
+ return name;
+ }
+}
\ No newline at end of file
diff --git a/spring-core-3/src/test/java/com/baeldung/spring/patterns/factory/ClassPathXmlApplicationContextUnitTest.java b/spring-core-3/src/test/java/com/baeldung/spring/patterns/factory/ClassPathXmlApplicationContextUnitTest.java
new file mode 100644
index 0000000000..bb9988317e
--- /dev/null
+++ b/spring-core-3/src/test/java/com/baeldung/spring/patterns/factory/ClassPathXmlApplicationContextUnitTest.java
@@ -0,0 +1,36 @@
+package com.baeldung.spring.patterns.factory;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+
+public class ClassPathXmlApplicationContextUnitTest {
+
+ @Test
+ @SuppressWarnings("resource")
+ public void givenXmlConfiguration_whenGetSimpleBean_thenReturnConstructedBean() {
+
+ ApplicationContext context = new ClassPathXmlApplicationContext("patterns-context.xml");
+
+ Foo foo = context.getBean(Foo.class);
+
+ assertNotNull(foo);
+ }
+
+ @Test
+ @SuppressWarnings("resource")
+ public void givenXmlConfiguration_whenGetPrototypeBean_thenReturnConstructedBean() {
+
+ String expectedName = "Some name";
+ ApplicationContext context = new ClassPathXmlApplicationContext("patterns-context.xml");
+
+ Bar bar = context.getBean(Bar.class, expectedName);
+
+ assertNotNull(bar);
+ assertThat(bar.getName(), is(expectedName));
+ }
+}
diff --git a/spring-core-3/src/test/java/com/baeldung/spring/patterns/factory/Foo.java b/spring-core-3/src/test/java/com/baeldung/spring/patterns/factory/Foo.java
new file mode 100644
index 0000000000..5edba6c50d
--- /dev/null
+++ b/spring-core-3/src/test/java/com/baeldung/spring/patterns/factory/Foo.java
@@ -0,0 +1,7 @@
+package com.baeldung.spring.patterns.factory;
+
+import org.springframework.stereotype.Component;
+
+@Component
+public class Foo {
+}
diff --git a/spring-core-3/src/test/resources/patterns-context.xml b/spring-core-3/src/test/resources/patterns-context.xml
new file mode 100644
index 0000000000..106cde79a0
--- /dev/null
+++ b/spring-core-3/src/test/resources/patterns-context.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/spring-mvc-java-2/src/main/java/com/baeldung/cache/CacheControlController.java b/spring-mvc-java-2/src/main/java/com/baeldung/cache/CacheControlController.java
index 5bf095888e..7305f836cf 100644
--- a/spring-mvc-java-2/src/main/java/com/baeldung/cache/CacheControlController.java
+++ b/spring-mvc-java-2/src/main/java/com/baeldung/cache/CacheControlController.java
@@ -3,9 +3,8 @@ package com.baeldung.cache;
import org.springframework.http.CacheControl;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.context.request.WebRequest;
import javax.servlet.http.HttpServletResponse;
@@ -16,28 +15,28 @@ import java.util.concurrent.TimeUnit;
@Controller
public class CacheControlController {
- @RequestMapping(value = "/hello/{name}", method = RequestMethod.GET)
- public ResponseEntity helloWorld(@PathVariable String name) {
+ @GetMapping(value = "/hello/{name}")
+ public ResponseEntity hello(@PathVariable String name) {
CacheControl cacheControl = CacheControl.maxAge(60, TimeUnit.SECONDS)
- .noTransform()
- .mustRevalidate();
+ .noTransform()
+ .mustRevalidate();
return ResponseEntity.ok()
- .cacheControl(cacheControl)
- .body("Hello " + name);
+ .cacheControl(cacheControl)
+ .body("Hello " + name);
}
- @RequestMapping(value = "/home/{name}", method = RequestMethod.GET)
+ @GetMapping(value = "/home/{name}")
public String home(@PathVariable String name, final HttpServletResponse response) {
response.addHeader("Cache-Control", "max-age=60, must-revalidate, no-transform");
return "home";
}
- @RequestMapping(value = "/cache/{name}", method = RequestMethod.GET)
+ @GetMapping(value = "/login/{name}")
public ResponseEntity intercept(@PathVariable String name) {
return ResponseEntity.ok().body("Hello " + name);
}
- @RequestMapping(value = "/validate/{name}", method = RequestMethod.GET)
+ @GetMapping(value = "/productInfo/{name}")
public ResponseEntity validate(@PathVariable String name, WebRequest request) {
ZoneId zoneId = ZoneId.of("GMT");
diff --git a/spring-mvc-java-2/src/main/java/com/baeldung/cache/WebConfig.java b/spring-mvc-java-2/src/main/java/com/baeldung/cache/WebConfig.java
index 728479979c..2f07912e80 100644
--- a/spring-mvc-java-2/src/main/java/com/baeldung/cache/WebConfig.java
+++ b/spring-mvc-java-2/src/main/java/com/baeldung/cache/WebConfig.java
@@ -35,7 +35,7 @@ public class WebConfig implements WebMvcConfigurer {
WebContentInterceptor interceptor = new WebContentInterceptor();
interceptor.addCacheMapping(CacheControl.maxAge(60, TimeUnit.SECONDS)
.noTransform()
- .mustRevalidate(), "/cache/*");
+ .mustRevalidate(), "/login/*");
registry.addInterceptor(interceptor);
}
}
\ No newline at end of file
diff --git a/spring-mvc-java-2/src/test/java/com/baeldung/cache/CacheControlControllerIntegrationTest.java b/spring-mvc-java-2/src/test/java/com/baeldung/cache/CacheControlControllerIntegrationTest.java
index ef408038ae..7acfe5e480 100644
--- a/spring-mvc-java-2/src/test/java/com/baeldung/cache/CacheControlControllerIntegrationTest.java
+++ b/spring-mvc-java-2/src/test/java/com/baeldung/cache/CacheControlControllerIntegrationTest.java
@@ -37,7 +37,8 @@ public class CacheControlControllerIntegrationTest {
this.mockMvc.perform(MockMvcRequestBuilders.get("/hello/baeldung"))
.andDo(MockMvcResultHandlers.print())
.andExpect(MockMvcResultMatchers.status().isOk())
- .andExpect(MockMvcResultMatchers.header().string("Cache-Control","max-age=60, must-revalidate, no-transform"));
+ .andExpect(MockMvcResultMatchers.header()
+ .string("Cache-Control","max-age=60, must-revalidate, no-transform"));
}
@Test
@@ -59,7 +60,7 @@ public class CacheControlControllerIntegrationTest {
@Test
void whenInterceptor_thenReturnCacheHeader() throws Exception {
- this.mockMvc.perform(MockMvcRequestBuilders.get("/cache/baeldung"))
+ this.mockMvc.perform(MockMvcRequestBuilders.get("/login/baeldung"))
.andDo(MockMvcResultHandlers.print())
.andExpect(MockMvcResultMatchers.status().isOk())
.andExpect(MockMvcResultMatchers.header().string("Cache-Control","max-age=60, must-revalidate, no-transform"));
@@ -69,7 +70,7 @@ public class CacheControlControllerIntegrationTest {
void whenValidate_thenReturnCacheHeader() throws Exception {
HttpHeaders headers = new HttpHeaders();
headers.add(IF_UNMODIFIED_SINCE, "Tue, 04 Feb 2020 19:57:25 GMT");
- this.mockMvc.perform(MockMvcRequestBuilders.get("/validate/baeldung").headers(headers))
+ this.mockMvc.perform(MockMvcRequestBuilders.get("/productInfo/baeldung").headers(headers))
.andDo(MockMvcResultHandlers.print())
.andExpect(MockMvcResultMatchers.status().is(304));
}