diff --git a/cas-secured-app/.mvn/wrapper/maven-wrapper.jar b/cas-secured-app/.mvn/wrapper/maven-wrapper.jar
deleted file mode 100644
index 9cc84ea9b4..0000000000
Binary files a/cas-secured-app/.mvn/wrapper/maven-wrapper.jar and /dev/null differ
diff --git a/cas-secured-app/.mvn/wrapper/maven-wrapper.properties b/cas-secured-app/.mvn/wrapper/maven-wrapper.properties
deleted file mode 100644
index c315043703..0000000000
--- a/cas-secured-app/.mvn/wrapper/maven-wrapper.properties
+++ /dev/null
@@ -1 +0,0 @@
-distributionUrl=https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.5.0/apache-maven-3.5.0-bin.zip
diff --git a/cas-secured-app/README.md b/cas-secured-app/README.md
deleted file mode 100644
index ff12555376..0000000000
--- a/cas-secured-app/README.md
+++ /dev/null
@@ -1 +0,0 @@
-## Relevant articles:
diff --git a/cas-secured-app/mvnw b/cas-secured-app/mvnw
deleted file mode 100644
index 5bf251c077..0000000000
--- a/cas-secured-app/mvnw
+++ /dev/null
@@ -1,225 +0,0 @@
-#!/bin/sh
-# ----------------------------------------------------------------------------
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations
-# under the License.
-# ----------------------------------------------------------------------------
-
-# ----------------------------------------------------------------------------
-# Maven2 Start Up Batch script
-#
-# Required ENV vars:
-# ------------------
-# JAVA_HOME - location of a JDK home dir
-#
-# Optional ENV vars
-# -----------------
-# M2_HOME - location of maven2's installed home dir
-# MAVEN_OPTS - parameters passed to the Java VM when running Maven
-# e.g. to debug Maven itself, use
-# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
-# MAVEN_SKIP_RC - flag to disable loading of mavenrc files
-# ----------------------------------------------------------------------------
-
-if [ -z "$MAVEN_SKIP_RC" ] ; then
-
- if [ -f /etc/mavenrc ] ; then
- . /etc/mavenrc
- fi
-
- if [ -f "$HOME/.mavenrc" ] ; then
- . "$HOME/.mavenrc"
- fi
-
-fi
-
-# OS specific support. $var _must_ be set to either true or false.
-cygwin=false;
-darwin=false;
-mingw=false
-case "`uname`" in
- CYGWIN*) cygwin=true ;;
- MINGW*) mingw=true;;
- Darwin*) darwin=true
- # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home
- # See https://developer.apple.com/library/mac/qa/qa1170/_index.html
- if [ -z "$JAVA_HOME" ]; then
- if [ -x "/usr/libexec/java_home" ]; then
- export JAVA_HOME="`/usr/libexec/java_home`"
- else
- export JAVA_HOME="/Library/Java/Home"
- fi
- fi
- ;;
-esac
-
-if [ -z "$JAVA_HOME" ] ; then
- if [ -r /etc/gentoo-release ] ; then
- JAVA_HOME=`java-config --jre-home`
- fi
-fi
-
-if [ -z "$M2_HOME" ] ; then
- ## resolve links - $0 may be a link to maven's home
- PRG="$0"
-
- # need this for relative symlinks
- while [ -h "$PRG" ] ; do
- ls=`ls -ld "$PRG"`
- link=`expr "$ls" : '.*-> \(.*\)$'`
- if expr "$link" : '/.*' > /dev/null; then
- PRG="$link"
- else
- PRG="`dirname "$PRG"`/$link"
- fi
- done
-
- saveddir=`pwd`
-
- M2_HOME=`dirname "$PRG"`/..
-
- # make it fully qualified
- M2_HOME=`cd "$M2_HOME" && pwd`
-
- cd "$saveddir"
- # echo Using m2 at $M2_HOME
-fi
-
-# For Cygwin, ensure paths are in UNIX format before anything is touched
-if $cygwin ; then
- [ -n "$M2_HOME" ] &&
- M2_HOME=`cygpath --unix "$M2_HOME"`
- [ -n "$JAVA_HOME" ] &&
- JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
- [ -n "$CLASSPATH" ] &&
- CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
-fi
-
-# For Migwn, ensure paths are in UNIX format before anything is touched
-if $mingw ; then
- [ -n "$M2_HOME" ] &&
- M2_HOME="`(cd "$M2_HOME"; pwd)`"
- [ -n "$JAVA_HOME" ] &&
- JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`"
- # TODO classpath?
-fi
-
-if [ -z "$JAVA_HOME" ]; then
- javaExecutable="`which javac`"
- if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then
- # readlink(1) is not available as standard on Solaris 10.
- readLink=`which readlink`
- if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then
- if $darwin ; then
- javaHome="`dirname \"$javaExecutable\"`"
- javaExecutable="`cd \"$javaHome\" && pwd -P`/javac"
- else
- javaExecutable="`readlink -f \"$javaExecutable\"`"
- fi
- javaHome="`dirname \"$javaExecutable\"`"
- javaHome=`expr "$javaHome" : '\(.*\)/bin'`
- JAVA_HOME="$javaHome"
- export JAVA_HOME
- fi
- fi
-fi
-
-if [ -z "$JAVACMD" ] ; then
- if [ -n "$JAVA_HOME" ] ; then
- if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
- # IBM's JDK on AIX uses strange locations for the executables
- JAVACMD="$JAVA_HOME/jre/sh/java"
- else
- JAVACMD="$JAVA_HOME/bin/java"
- fi
- else
- JAVACMD="`which java`"
- fi
-fi
-
-if [ ! -x "$JAVACMD" ] ; then
- echo "Error: JAVA_HOME is not defined correctly." >&2
- echo " We cannot execute $JAVACMD" >&2
- exit 1
-fi
-
-if [ -z "$JAVA_HOME" ] ; then
- echo "Warning: JAVA_HOME environment variable is not set."
-fi
-
-CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher
-
-# traverses directory structure from process work directory to filesystem root
-# first directory with .mvn subdirectory is considered project base directory
-find_maven_basedir() {
-
- if [ -z "$1" ]
- then
- echo "Path not specified to find_maven_basedir"
- return 1
- fi
-
- basedir="$1"
- wdir="$1"
- while [ "$wdir" != '/' ] ; do
- if [ -d "$wdir"/.mvn ] ; then
- basedir=$wdir
- break
- fi
- # workaround for JBEAP-8937 (on Solaris 10/Sparc)
- if [ -d "${wdir}" ]; then
- wdir=`cd "$wdir/.."; pwd`
- fi
- # end of workaround
- done
- echo "${basedir}"
-}
-
-# concatenates all lines of a file
-concat_lines() {
- if [ -f "$1" ]; then
- echo "$(tr -s '\n' ' ' < "$1")"
- fi
-}
-
-BASE_DIR=`find_maven_basedir "$(pwd)"`
-if [ -z "$BASE_DIR" ]; then
- exit 1;
-fi
-
-export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}
-echo $MAVEN_PROJECTBASEDIR
-MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
-
-# For Cygwin, switch paths to Windows format before running java
-if $cygwin; then
- [ -n "$M2_HOME" ] &&
- M2_HOME=`cygpath --path --windows "$M2_HOME"`
- [ -n "$JAVA_HOME" ] &&
- JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
- [ -n "$CLASSPATH" ] &&
- CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
- [ -n "$MAVEN_PROJECTBASEDIR" ] &&
- MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"`
-fi
-
-WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
-
-exec "$JAVACMD" \
- $MAVEN_OPTS \
- -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
- "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
- ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"
diff --git a/cas-secured-app/mvnw.cmd b/cas-secured-app/mvnw.cmd
deleted file mode 100644
index 019bd74d76..0000000000
--- a/cas-secured-app/mvnw.cmd
+++ /dev/null
@@ -1,143 +0,0 @@
-@REM ----------------------------------------------------------------------------
-@REM Licensed to the Apache Software Foundation (ASF) under one
-@REM or more contributor license agreements. See the NOTICE file
-@REM distributed with this work for additional information
-@REM regarding copyright ownership. The ASF licenses this file
-@REM to you under the Apache License, Version 2.0 (the
-@REM "License"); you may not use this file except in compliance
-@REM with the License. You may obtain a copy of the License at
-@REM
-@REM http://www.apache.org/licenses/LICENSE-2.0
-@REM
-@REM Unless required by applicable law or agreed to in writing,
-@REM software distributed under the License is distributed on an
-@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-@REM KIND, either express or implied. See the License for the
-@REM specific language governing permissions and limitations
-@REM under the License.
-@REM ----------------------------------------------------------------------------
-
-@REM ----------------------------------------------------------------------------
-@REM Maven2 Start Up Batch script
-@REM
-@REM Required ENV vars:
-@REM JAVA_HOME - location of a JDK home dir
-@REM
-@REM Optional ENV vars
-@REM M2_HOME - location of maven2's installed home dir
-@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
-@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending
-@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
-@REM e.g. to debug Maven itself, use
-@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
-@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
-@REM ----------------------------------------------------------------------------
-
-@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
-@echo off
-@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on'
-@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO%
-
-@REM set %HOME% to equivalent of $HOME
-if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
-
-@REM Execute a user defined script before this one
-if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
-@REM check for pre script, once with legacy .bat ending and once with .cmd ending
-if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat"
-if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd"
-:skipRcPre
-
-@setlocal
-
-set ERROR_CODE=0
-
-@REM To isolate internal variables from possible post scripts, we use another setlocal
-@setlocal
-
-@REM ==== START VALIDATION ====
-if not "%JAVA_HOME%" == "" goto OkJHome
-
-echo.
-echo Error: JAVA_HOME not found in your environment. >&2
-echo Please set the JAVA_HOME variable in your environment to match the >&2
-echo location of your Java installation. >&2
-echo.
-goto error
-
-:OkJHome
-if exist "%JAVA_HOME%\bin\java.exe" goto init
-
-echo.
-echo Error: JAVA_HOME is set to an invalid directory. >&2
-echo JAVA_HOME = "%JAVA_HOME%" >&2
-echo Please set the JAVA_HOME variable in your environment to match the >&2
-echo location of your Java installation. >&2
-echo.
-goto error
-
-@REM ==== END VALIDATION ====
-
-:init
-
-@REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
-@REM Fallback to current working directory if not found.
-
-set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
-IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
-
-set EXEC_DIR=%CD%
-set WDIR=%EXEC_DIR%
-:findBaseDir
-IF EXIST "%WDIR%"\.mvn goto baseDirFound
-cd ..
-IF "%WDIR%"=="%CD%" goto baseDirNotFound
-set WDIR=%CD%
-goto findBaseDir
-
-:baseDirFound
-set MAVEN_PROJECTBASEDIR=%WDIR%
-cd "%EXEC_DIR%"
-goto endDetectBaseDir
-
-:baseDirNotFound
-set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
-cd "%EXEC_DIR%"
-
-:endDetectBaseDir
-
-IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
-
-@setlocal EnableExtensions EnableDelayedExpansion
-for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
-@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
-
-:endReadAdditionalConfig
-
-SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
-
-set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar"
-set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
-
-%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %*
-if ERRORLEVEL 1 goto error
-goto end
-
-:error
-set ERROR_CODE=1
-
-:end
-@endlocal & set ERROR_CODE=%ERROR_CODE%
-
-if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost
-@REM check for post script, once with legacy .bat ending and once with .cmd ending
-if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat"
-if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd"
-:skipRcPost
-
-@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
-if "%MAVEN_BATCH_PAUSE%" == "on" pause
-
-if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE%
-
-exit /B %ERROR_CODE%
diff --git a/cas-secured-app/.gitignore b/cas/cas-secured-app/.gitignore
similarity index 87%
rename from cas-secured-app/.gitignore
rename to cas/cas-secured-app/.gitignore
index 2af7cefb0a..cd4878159f 100644
--- a/cas-secured-app/.gitignore
+++ b/cas/cas-secured-app/.gitignore
@@ -21,4 +21,7 @@ build/
nbbuild/
dist/
nbdist/
-.nb-gradle/
\ No newline at end of file
+.nb-gradle/
+/.mvn/
+/mvnw
+/mvnw.cmd
\ No newline at end of file
diff --git a/cas-secured-app/pom.xml b/cas/cas-secured-app/pom.xml
similarity index 63%
rename from cas-secured-app/pom.xml
rename to cas/cas-secured-app/pom.xml
index 0548e0c315..f66d54ae67 100644
--- a/cas-secured-app/pom.xml
+++ b/cas/cas-secured-app/pom.xml
@@ -106,75 +106,5 @@
-
-
- integration
-
-
-
- org.apache.maven.plugins
- maven-surefire-plugin
-
-
- integration-test
-
- test
-
-
-
- **/*LiveTest.java
- **/AutoconfigurationTest.java
-
-
- **/*IntegrationTest.java
-
-
-
-
-
-
- json
-
-
-
-
-
-
-
- autoconfiguration
-
-
-
- org.apache.maven.plugins
- maven-surefire-plugin
-
-
- integration-test
-
- test
-
-
-
- **/*LiveTest.java
- **/*IntegrationTest.java
-
-
- **/AutoconfigurationTest.java
-
-
-
-
-
-
- json
-
-
-
-
-
-
-
-
-
diff --git a/cas-secured-app/src/main/java/com/baeldung/cassecuredapp/CasSecuredAppApplication.java b/cas/cas-secured-app/src/main/java/com/baeldung/cassecuredapp/CasSecuredAppApplication.java
similarity index 100%
rename from cas-secured-app/src/main/java/com/baeldung/cassecuredapp/CasSecuredAppApplication.java
rename to cas/cas-secured-app/src/main/java/com/baeldung/cassecuredapp/CasSecuredAppApplication.java
diff --git a/cas-secured-app/src/main/java/com/baeldung/cassecuredapp/config/SecurityConfig.java b/cas/cas-secured-app/src/main/java/com/baeldung/cassecuredapp/config/SecurityConfig.java
similarity index 100%
rename from cas-secured-app/src/main/java/com/baeldung/cassecuredapp/config/SecurityConfig.java
rename to cas/cas-secured-app/src/main/java/com/baeldung/cassecuredapp/config/SecurityConfig.java
diff --git a/cas-secured-app/src/main/java/com/baeldung/cassecuredapp/controllers/AuthController.java b/cas/cas-secured-app/src/main/java/com/baeldung/cassecuredapp/controllers/AuthController.java
similarity index 100%
rename from cas-secured-app/src/main/java/com/baeldung/cassecuredapp/controllers/AuthController.java
rename to cas/cas-secured-app/src/main/java/com/baeldung/cassecuredapp/controllers/AuthController.java
diff --git a/cas-secured-app/src/main/java/com/baeldung/cassecuredapp/controllers/IndexController.java b/cas/cas-secured-app/src/main/java/com/baeldung/cassecuredapp/controllers/IndexController.java
similarity index 100%
rename from cas-secured-app/src/main/java/com/baeldung/cassecuredapp/controllers/IndexController.java
rename to cas/cas-secured-app/src/main/java/com/baeldung/cassecuredapp/controllers/IndexController.java
diff --git a/cas-secured-app/src/main/java/com/baeldung/cassecuredapp/controllers/SecuredPageController.java b/cas/cas-secured-app/src/main/java/com/baeldung/cassecuredapp/controllers/SecuredPageController.java
similarity index 100%
rename from cas-secured-app/src/main/java/com/baeldung/cassecuredapp/controllers/SecuredPageController.java
rename to cas/cas-secured-app/src/main/java/com/baeldung/cassecuredapp/controllers/SecuredPageController.java
diff --git a/cas-secured-app/src/main/resources/application.properties b/cas/cas-secured-app/src/main/resources/application.properties
similarity index 100%
rename from cas-secured-app/src/main/resources/application.properties
rename to cas/cas-secured-app/src/main/resources/application.properties
diff --git a/cas-secured-app/src/main/resources/templates/auth/logout.ftl b/cas/cas-secured-app/src/main/resources/templates/auth/logout.ftl
similarity index 100%
rename from cas-secured-app/src/main/resources/templates/auth/logout.ftl
rename to cas/cas-secured-app/src/main/resources/templates/auth/logout.ftl
diff --git a/cas-secured-app/src/main/resources/templates/index.ftl b/cas/cas-secured-app/src/main/resources/templates/index.ftl
similarity index 100%
rename from cas-secured-app/src/main/resources/templates/index.ftl
rename to cas/cas-secured-app/src/main/resources/templates/index.ftl
diff --git a/cas-secured-app/src/main/resources/templates/secure/index.ftl b/cas/cas-secured-app/src/main/resources/templates/secure/index.ftl
similarity index 100%
rename from cas-secured-app/src/main/resources/templates/secure/index.ftl
rename to cas/cas-secured-app/src/main/resources/templates/secure/index.ftl
diff --git a/cas-secured-app/src/test/java/com/baeldung/cassecuredapp/CasSecuredAppApplicationIntegrationTest.java b/cas/cas-secured-app/src/test/java/com/baeldung/cassecuredapp/CasSecuredAppApplicationTests.java
similarity index 84%
rename from cas-secured-app/src/test/java/com/baeldung/cassecuredapp/CasSecuredAppApplicationIntegrationTest.java
rename to cas/cas-secured-app/src/test/java/com/baeldung/cassecuredapp/CasSecuredAppApplicationTests.java
index 2f2644e2ea..09dbaf0c61 100644
--- a/cas-secured-app/src/test/java/com/baeldung/cassecuredapp/CasSecuredAppApplicationIntegrationTest.java
+++ b/cas/cas-secured-app/src/test/java/com/baeldung/cassecuredapp/CasSecuredAppApplicationTests.java
@@ -7,7 +7,7 @@ import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest
-public class CasSecuredAppApplicationIntegrationTest {
+public class CasSecuredAppApplicationTests {
@Test
public void contextLoads() {
diff --git a/cas-server/.gitignore b/cas/cas-server/.gitignore
similarity index 100%
rename from cas-server/.gitignore
rename to cas/cas-server/.gitignore
diff --git a/cas-server/LICENSE.txt b/cas/cas-server/LICENSE.txt
similarity index 100%
rename from cas-server/LICENSE.txt
rename to cas/cas-server/LICENSE.txt
diff --git a/cas-server/README.md b/cas/cas-server/README.md
similarity index 100%
rename from cas-server/README.md
rename to cas/cas-server/README.md
diff --git a/cas-server/build.cmd b/cas/cas-server/build.cmd
similarity index 100%
rename from cas-server/build.cmd
rename to cas/cas-server/build.cmd
diff --git a/cas-server/build.sh b/cas/cas-server/build.sh
similarity index 100%
rename from cas-server/build.sh
rename to cas/cas-server/build.sh
diff --git a/cas-server/etc/cas/config/application.yml b/cas/cas-server/etc/cas/config/application.yml
similarity index 100%
rename from cas-server/etc/cas/config/application.yml
rename to cas/cas-server/etc/cas/config/application.yml
diff --git a/cas-server/etc/cas/config/cas.properties b/cas/cas-server/etc/cas/config/cas.properties
similarity index 100%
rename from cas-server/etc/cas/config/cas.properties
rename to cas/cas-server/etc/cas/config/cas.properties
diff --git a/cas-server/etc/cas/config/log4j2.xml b/cas/cas-server/etc/cas/config/log4j2.xml
similarity index 100%
rename from cas-server/etc/cas/config/log4j2.xml
rename to cas/cas-server/etc/cas/config/log4j2.xml
diff --git a/cas-server/etc/cas/thekeystore b/cas/cas-server/etc/cas/thekeystore
similarity index 100%
rename from cas-server/etc/cas/thekeystore
rename to cas/cas-server/etc/cas/thekeystore
diff --git a/cas-server/etc/cas/thekeystore.crt b/cas/cas-server/etc/cas/thekeystore.crt
similarity index 100%
rename from cas-server/etc/cas/thekeystore.crt
rename to cas/cas-server/etc/cas/thekeystore.crt
diff --git a/cas-server/maven/maven-wrapper.properties b/cas/cas-server/maven/maven-wrapper.properties
similarity index 100%
rename from cas-server/maven/maven-wrapper.properties
rename to cas/cas-server/maven/maven-wrapper.properties
diff --git a/cas-server/mvnw b/cas/cas-server/mvnw
similarity index 100%
rename from cas-server/mvnw
rename to cas/cas-server/mvnw
diff --git a/cas-server/mvnw.bat b/cas/cas-server/mvnw.bat
similarity index 100%
rename from cas-server/mvnw.bat
rename to cas/cas-server/mvnw.bat
diff --git a/cas-server/pom.xml b/cas/cas-server/pom.xml
similarity index 100%
rename from cas-server/pom.xml
rename to cas/cas-server/pom.xml
diff --git a/cas-server/src/main/resources/application.properties b/cas/cas-server/src/main/resources/application.properties
similarity index 100%
rename from cas-server/src/main/resources/application.properties
rename to cas/cas-server/src/main/resources/application.properties
diff --git a/cas-server/src/main/resources/cas.properties b/cas/cas-server/src/main/resources/cas.properties
similarity index 100%
rename from cas-server/src/main/resources/cas.properties
rename to cas/cas-server/src/main/resources/cas.properties
diff --git a/cas-server/src/main/resources/services/casSecuredApp.json b/cas/cas-server/src/main/resources/services/casSecuredApp.json
similarity index 100%
rename from cas-server/src/main/resources/services/casSecuredApp.json
rename to cas/cas-server/src/main/resources/services/casSecuredApp.json
diff --git a/core-java-concurrency/src/test/java/com/baeldung/concurrent/runnable/RunnableVsThreadTest.java b/core-java-concurrency/src/test/java/com/baeldung/concurrent/runnable/RunnableVsThreadTest.java
index d0f4460f51..4bd4848905 100644
--- a/core-java-concurrency/src/test/java/com/baeldung/concurrent/runnable/RunnableVsThreadTest.java
+++ b/core-java-concurrency/src/test/java/com/baeldung/concurrent/runnable/RunnableVsThreadTest.java
@@ -8,7 +8,9 @@ import java.util.concurrent.Future;
import org.apache.commons.lang3.RandomUtils;
import org.junit.After;
+import org.junit.AfterClass;
import org.junit.Before;
+import org.junit.BeforeClass;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -18,22 +20,34 @@ public class RunnableVsThreadTest {
private static Logger log =
LoggerFactory.getLogger(RunnableVsThreadTest.class);
+ private static ExecutorService executorService;
+
+ @BeforeClass
+ public static void setup() {
+ executorService = Executors.newCachedThreadPool();
+ }
+
@Test
public void givenARunnable_whenRunIt_thenResult() throws Exception{
Thread thread = new Thread(new SimpleRunnable(
"SimpleRunnable executed using Thread"));
thread.start();
thread.join();
-
- ExecutorService executorService =
- Executors.newCachedThreadPool();
+ }
+
+ @Test
+ public void givenARunnable_whenSubmitToES_thenResult() throws Exception{
executorService.submit(new SimpleRunnable(
"SimpleRunnable executed using ExecutorService")).get();
+ }
+
+ @Test
+ public void givenARunnableLambda_whenSubmitToES_thenResult()
+ throws Exception{
executorService.submit(()->
log.info("Lambda runnable executed!!!")).get();
- executorService.shutdown();
}
@Test
@@ -42,26 +56,39 @@ public class RunnableVsThreadTest {
"SimpleThread executed using Thread");
thread.start();
thread.join();
+ }
+
+ @Test
+ public void givenAThread_whenSubmitToES_thenResult() throws Exception{
- ExecutorService executorService =
- Executors.newCachedThreadPool();
executorService.submit(new SimpleThread(
"SimpleThread executed using ExecutorService")).get();
}
@Test
- public void givenACallable_whenRunIt_thenResult() throws Exception {
- ExecutorService executorService =
- Executors.newCachedThreadPool();
+ public void givenACallable_whenSubmitToES_thenResult() throws Exception {
- Future future = executorService.submit(new SimpleCallable());
+ Future future = executorService.submit(
+ new SimpleCallable());
log.info("Result from callable: {}", future.get());
+ }
+
+ @Test
+ public void givenACallableAsLambda_whenSubmitToES_thenResult()
+ throws Exception {
- future = executorService.submit(() -> {
+ Future future = executorService.submit(() -> {
return RandomUtils.nextInt(0, 100);
- });
+ });
+
log.info("Result from callable: {}", future.get());
-
+ }
+
+ @AfterClass
+ public static void tearDown() {
+ if ( executorService != null && !executorService.isShutdown()) {
+ executorService.shutdown();
+ }
}
}
@@ -107,4 +134,5 @@ class SimpleCallable implements Callable {
return RandomUtils.nextInt(0, 100);
}
-}
\ No newline at end of file
+}
+
diff --git a/core-kotlin/src/main/kotlin/com/baeldung/datetime/UseDuration.kt b/core-kotlin/src/main/kotlin/com/baeldung/datetime/UseDuration.kt
new file mode 100644
index 0000000000..40fb161c08
--- /dev/null
+++ b/core-kotlin/src/main/kotlin/com/baeldung/datetime/UseDuration.kt
@@ -0,0 +1,15 @@
+package com.baeldung.datetime
+
+import java.time.Duration
+import java.time.LocalTime
+
+class UseDuration {
+
+ fun modifyDates(localTime: LocalTime, duration: Duration): LocalTime {
+ return localTime.plus(duration)
+ }
+
+ fun getDifferenceBetweenDates(localTime1: LocalTime, localTime2: LocalTime): Duration {
+ return Duration.between(localTime1, localTime2)
+ }
+}
\ No newline at end of file
diff --git a/core-kotlin/src/main/kotlin/com/baeldung/datetime/UseLocalDate.kt b/core-kotlin/src/main/kotlin/com/baeldung/datetime/UseLocalDate.kt
new file mode 100644
index 0000000000..250c071bbe
--- /dev/null
+++ b/core-kotlin/src/main/kotlin/com/baeldung/datetime/UseLocalDate.kt
@@ -0,0 +1,42 @@
+package com.baeldung.datetime
+
+import java.time.DayOfWeek
+import java.time.LocalDate
+import java.time.LocalDateTime
+import java.time.temporal.ChronoUnit
+import java.time.temporal.TemporalAdjusters
+
+class UseLocalDate {
+
+ fun getLocalDateUsingFactoryOfMethod(year: Int, month: Int, dayOfMonth: Int): LocalDate {
+ return LocalDate.of(year, month, dayOfMonth)
+ }
+
+ fun getLocalDateUsingParseMethod(representation: String): LocalDate {
+ return LocalDate.parse(representation)
+ }
+
+ fun getLocalDateFromClock(): LocalDate {
+ return LocalDate.now()
+ }
+
+ fun getNextDay(localDate: LocalDate): LocalDate {
+ return localDate.plusDays(1)
+ }
+
+ fun getPreviousDay(localDate: LocalDate): LocalDate {
+ return localDate.minus(1, ChronoUnit.DAYS)
+ }
+
+ fun getDayOfWeek(localDate: LocalDate): DayOfWeek {
+ return localDate.dayOfWeek
+ }
+
+ fun getFirstDayOfMonth(): LocalDate {
+ return LocalDate.now().with(TemporalAdjusters.firstDayOfMonth())
+ }
+
+ fun getStartOfDay(localDate: LocalDate): LocalDateTime {
+ return localDate.atStartOfDay()
+ }
+}
\ No newline at end of file
diff --git a/core-kotlin/src/main/kotlin/com/baeldung/datetime/UseLocalDateTime.kt b/core-kotlin/src/main/kotlin/com/baeldung/datetime/UseLocalDateTime.kt
new file mode 100644
index 0000000000..ab7bbfcee1
--- /dev/null
+++ b/core-kotlin/src/main/kotlin/com/baeldung/datetime/UseLocalDateTime.kt
@@ -0,0 +1,10 @@
+package com.baeldung.datetime
+
+import java.time.LocalDateTime
+
+class UseLocalDateTime {
+
+ fun getLocalDateTimeUsingParseMethod(representation: String): LocalDateTime {
+ return LocalDateTime.parse(representation)
+ }
+}
\ No newline at end of file
diff --git a/core-kotlin/src/main/kotlin/com/baeldung/datetime/UseLocalTime.kt b/core-kotlin/src/main/kotlin/com/baeldung/datetime/UseLocalTime.kt
new file mode 100644
index 0000000000..152515621f
--- /dev/null
+++ b/core-kotlin/src/main/kotlin/com/baeldung/datetime/UseLocalTime.kt
@@ -0,0 +1,32 @@
+package com.baeldung.datetime
+
+import java.time.LocalDateTime
+import java.time.LocalTime
+import java.time.temporal.ChronoUnit
+
+class UseLocalTime {
+
+ fun getLocalTimeUsingFactoryOfMethod(hour: Int, min: Int, seconds: Int): LocalTime {
+ return LocalTime.of(hour, min, seconds)
+ }
+
+ fun getLocalTimeUsingParseMethod(timeRepresentation: String): LocalTime {
+ return LocalTime.parse(timeRepresentation)
+ }
+
+ fun getLocalTimeFromClock(): LocalTime {
+ return LocalTime.now()
+ }
+
+ fun addAnHour(localTime: LocalTime): LocalTime {
+ return localTime.plus(1, ChronoUnit.HOURS)
+ }
+
+ fun getHourFromLocalTime(localTime: LocalTime): Int {
+ return localTime.hour
+ }
+
+ fun getLocalTimeWithMinuteSetToValue(localTime: LocalTime, minute: Int): LocalTime {
+ return localTime.withMinute(minute)
+ }
+}
\ No newline at end of file
diff --git a/core-kotlin/src/main/kotlin/com/baeldung/datetime/UsePeriod.kt b/core-kotlin/src/main/kotlin/com/baeldung/datetime/UsePeriod.kt
new file mode 100644
index 0000000000..df66a3d546
--- /dev/null
+++ b/core-kotlin/src/main/kotlin/com/baeldung/datetime/UsePeriod.kt
@@ -0,0 +1,15 @@
+package com.baeldung.datetime
+
+import java.time.LocalDate
+import java.time.Period
+
+class UsePeriod {
+
+ fun modifyDates(localDate: LocalDate, period: Period): LocalDate {
+ return localDate.plus(period)
+ }
+
+ fun getDifferenceBetweenDates(localDate1: LocalDate, localDate2: LocalDate): Period {
+ return Period.between(localDate1, localDate2)
+ }
+}
\ No newline at end of file
diff --git a/core-kotlin/src/main/kotlin/com/baeldung/datetime/UseZonedDateTime.kt b/core-kotlin/src/main/kotlin/com/baeldung/datetime/UseZonedDateTime.kt
new file mode 100644
index 0000000000..fd1838bd2d
--- /dev/null
+++ b/core-kotlin/src/main/kotlin/com/baeldung/datetime/UseZonedDateTime.kt
@@ -0,0 +1,12 @@
+package com.baeldung.datetime
+
+import java.time.LocalDateTime
+import java.time.ZoneId
+import java.time.ZonedDateTime
+
+class UseZonedDateTime {
+
+ fun getZonedDateTime(localDateTime: LocalDateTime, zoneId: ZoneId): ZonedDateTime {
+ return ZonedDateTime.of(localDateTime, zoneId)
+ }
+}
\ No newline at end of file
diff --git a/core-kotlin/src/test/kotlin/com/baeldung/kotlin/datetime/UseLocalDateTimeUnitTest.kt b/core-kotlin/src/test/kotlin/com/baeldung/kotlin/datetime/UseLocalDateTimeUnitTest.kt
new file mode 100644
index 0000000000..8f9f8374ed
--- /dev/null
+++ b/core-kotlin/src/test/kotlin/com/baeldung/kotlin/datetime/UseLocalDateTimeUnitTest.kt
@@ -0,0 +1,23 @@
+package com.baeldung.kotlin.datetime
+
+import com.baeldung.datetime.UseLocalDateTime
+import java.time.LocalDate
+import java.time.LocalTime
+import java.time.Month
+
+import org.junit.Test
+
+import org.junit.Assert.assertEquals
+
+class UseLocalDateTimeUnitTest {
+
+ var useLocalDateTime = UseLocalDateTime()
+
+ @Test
+ fun givenString_whenUsingParse_thenLocalDateTime() {
+ assertEquals(LocalDate.of(2016, Month.MAY, 10), useLocalDateTime.getLocalDateTimeUsingParseMethod("2016-05-10T06:30")
+ .toLocalDate())
+ assertEquals(LocalTime.of(6, 30), useLocalDateTime.getLocalDateTimeUsingParseMethod("2016-05-10T06:30")
+ .toLocalTime())
+ }
+}
\ No newline at end of file
diff --git a/core-kotlin/src/test/kotlin/com/baeldung/kotlin/datetime/UseLocalDateUnitTest.kt b/core-kotlin/src/test/kotlin/com/baeldung/kotlin/datetime/UseLocalDateUnitTest.kt
new file mode 100644
index 0000000000..ac42e91c6c
--- /dev/null
+++ b/core-kotlin/src/test/kotlin/com/baeldung/kotlin/datetime/UseLocalDateUnitTest.kt
@@ -0,0 +1,59 @@
+package com.baeldung.kotlin.datetime
+
+import com.baeldung.datetime.UseLocalDate
+import org.junit.Assert
+import org.junit.Test
+import java.time.DayOfWeek
+import java.time.LocalDate
+import java.time.LocalDateTime
+
+class UseLocalDateUnitTest {
+
+ var useLocalDate = UseLocalDate()
+
+ @Test
+ fun givenValues_whenUsingFactoryOf_thenLocalDate() {
+ Assert.assertEquals("2016-05-10", useLocalDate.getLocalDateUsingFactoryOfMethod(2016, 5, 10)
+ .toString())
+ }
+
+ @Test
+ fun givenString_whenUsingParse_thenLocalDate() {
+ Assert.assertEquals("2016-05-10", useLocalDate.getLocalDateUsingParseMethod("2016-05-10")
+ .toString())
+ }
+
+ @Test
+ fun whenUsingClock_thenLocalDate() {
+ Assert.assertEquals(LocalDate.now(), useLocalDate.getLocalDateFromClock())
+ }
+
+ @Test
+ fun givenDate_whenUsingPlus_thenNextDay() {
+ Assert.assertEquals(LocalDate.now()
+ .plusDays(1), useLocalDate.getNextDay(LocalDate.now()))
+ }
+
+ @Test
+ fun givenDate_whenUsingMinus_thenPreviousDay() {
+ Assert.assertEquals(LocalDate.now()
+ .minusDays(1), useLocalDate.getPreviousDay(LocalDate.now()))
+ }
+
+ @Test
+ fun givenToday_whenUsingGetDayOfWeek_thenDayOfWeek() {
+ Assert.assertEquals(DayOfWeek.SUNDAY, useLocalDate.getDayOfWeek(LocalDate.parse("2016-05-22")))
+ }
+
+ @Test
+ fun givenToday_whenUsingWithTemporalAdjuster_thenFirstDayOfMonth() {
+ Assert.assertEquals(1, useLocalDate.getFirstDayOfMonth()
+ .dayOfMonth.toLong())
+ }
+
+ @Test
+ fun givenLocalDate_whenUsingAtStartOfDay_thenReturnMidnight() {
+ Assert.assertEquals(LocalDateTime.parse("2016-05-22T00:00:00"), useLocalDate.getStartOfDay(LocalDate.parse("2016-05-22")))
+ }
+
+}
\ No newline at end of file
diff --git a/core-kotlin/src/test/kotlin/com/baeldung/kotlin/datetime/UseLocalTimeUnitTest.kt b/core-kotlin/src/test/kotlin/com/baeldung/kotlin/datetime/UseLocalTimeUnitTest.kt
new file mode 100644
index 0000000000..83fc57f850
--- /dev/null
+++ b/core-kotlin/src/test/kotlin/com/baeldung/kotlin/datetime/UseLocalTimeUnitTest.kt
@@ -0,0 +1,37 @@
+package com.baeldung.kotlin.datetime
+
+import com.baeldung.datetime.UseLocalTime
+import java.time.LocalTime
+
+import org.junit.Assert
+import org.junit.Test
+
+class UseLocalTimeUnitTest {
+
+ internal var useLocalTime = UseLocalTime()
+
+ @Test
+ fun givenValues_whenUsingFactoryOf_thenLocalTime() {
+ Assert.assertEquals("07:07:07", useLocalTime.getLocalTimeUsingFactoryOfMethod(7, 7, 7).toString())
+ }
+
+ @Test
+ fun givenString_whenUsingParse_thenLocalTime() {
+ Assert.assertEquals("06:30", useLocalTime.getLocalTimeUsingParseMethod("06:30").toString())
+ }
+
+ @Test
+ fun givenTime_whenAddHour_thenLocalTime() {
+ Assert.assertEquals("07:30", useLocalTime.addAnHour(LocalTime.of(6, 30)).toString())
+ }
+
+ @Test
+ fun getHourFromLocalTime() {
+ Assert.assertEquals(1, useLocalTime.getHourFromLocalTime(LocalTime.of(1, 1)).toLong())
+ }
+
+ @Test
+ fun getLocalTimeWithMinuteSetToValue() {
+ Assert.assertEquals(LocalTime.of(10, 20), useLocalTime.getLocalTimeWithMinuteSetToValue(LocalTime.of(10, 10), 20))
+ }
+}
\ No newline at end of file
diff --git a/core-kotlin/src/test/kotlin/com/baeldung/kotlin/datetime/UsePeriodUnitTest.kt b/core-kotlin/src/test/kotlin/com/baeldung/kotlin/datetime/UsePeriodUnitTest.kt
new file mode 100644
index 0000000000..48be72feb0
--- /dev/null
+++ b/core-kotlin/src/test/kotlin/com/baeldung/kotlin/datetime/UsePeriodUnitTest.kt
@@ -0,0 +1,28 @@
+package com.baeldung.kotlin.datetime
+
+import com.baeldung.datetime.UsePeriod
+import java.time.LocalDate
+import java.time.Period
+
+import org.junit.Assert
+import org.junit.Test
+
+class UsePeriodUnitTest {
+
+ var usingPeriod = UsePeriod()
+
+ @Test
+ fun givenPeriodAndLocalDate_thenCalculateModifiedDate() {
+ val period = Period.ofDays(1)
+ val localDate = LocalDate.parse("2007-05-10")
+ Assert.assertEquals(localDate.plusDays(1), usingPeriod.modifyDates(localDate, period))
+ }
+
+ @Test
+ fun givenDates_thenGetPeriod() {
+ val localDate1 = LocalDate.parse("2007-05-10")
+ val localDate2 = LocalDate.parse("2007-05-15")
+
+ Assert.assertEquals(Period.ofDays(5), usingPeriod.getDifferenceBetweenDates(localDate1, localDate2))
+ }
+}
\ No newline at end of file
diff --git a/core-kotlin/src/test/kotlin/com/baeldung/kotlin/datetime/UseZonedDateTimeUnitTest.kt b/core-kotlin/src/test/kotlin/com/baeldung/kotlin/datetime/UseZonedDateTimeUnitTest.kt
new file mode 100644
index 0000000000..a9d7d973ef
--- /dev/null
+++ b/core-kotlin/src/test/kotlin/com/baeldung/kotlin/datetime/UseZonedDateTimeUnitTest.kt
@@ -0,0 +1,19 @@
+package com.baeldung.kotlin.datetime
+
+import com.baeldung.datetime.UseZonedDateTime
+import org.junit.Assert
+import org.junit.Test
+import java.time.LocalDateTime
+import java.time.ZoneId
+
+class UseZonedDateTimeUnitTest {
+
+ internal var zonedDateTime = UseZonedDateTime()
+
+ @Test
+ fun givenZoneId_thenZonedDateTime() {
+ val zoneId = ZoneId.of("Europe/Paris")
+ val zonedDatetime = zonedDateTime.getZonedDateTime(LocalDateTime.parse("2016-05-20T06:30"), zoneId)
+ Assert.assertEquals(zoneId, ZoneId.from(zonedDatetime))
+ }
+}
\ No newline at end of file
diff --git a/ejb/wildfly/wildfly-jpa/src/main/resources/META-INF/persistence.xml b/ejb/wildfly/wildfly-jpa/src/main/resources/META-INF/persistence.xml
index 1a3fc32381..2aa6bc2cd7 100644
--- a/ejb/wildfly/wildfly-jpa/src/main/resources/META-INF/persistence.xml
+++ b/ejb/wildfly/wildfly-jpa/src/main/resources/META-INF/persistence.xml
@@ -3,7 +3,13 @@
xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
- java:/PostgresDS
+ java:/H2DS
model.User
+
+
+
+
+
+
diff --git a/ejb/wildfly/wildfly-jpa/src/main/resources/data.sql b/ejb/wildfly/wildfly-jpa/src/main/resources/data.sql
new file mode 100644
index 0000000000..03eafa534e
--- /dev/null
+++ b/ejb/wildfly/wildfly-jpa/src/main/resources/data.sql
@@ -0,0 +1 @@
+INSERT INTO users (username, email, postal_number) VALUES ('user1', 'user1@baeldung.com', 1000), ('user2', 'user2@baeldung.com', 2);
\ No newline at end of file
diff --git a/hibernate5/pom.xml b/hibernate5/pom.xml
index c501b7f11d..8543d1dae3 100644
--- a/hibernate5/pom.xml
+++ b/hibernate5/pom.xml
@@ -22,13 +22,19 @@
org.hibernate
hibernate-core
- 5.2.9.Final
+ 5.2.12.Final
junit
junit
4.12
+
+ org.assertj
+ assertj-core
+ 3.8.0
+ test
+
com.h2database
h2
diff --git a/hibernate5/src/main/java/com/baeldung/hibernate/HibernateMultiTenantUtil.java b/hibernate5/src/main/java/com/baeldung/hibernate/HibernateMultiTenantUtil.java
index 5a10b2ba56..30f3c3cf53 100644
--- a/hibernate5/src/main/java/com/baeldung/hibernate/HibernateMultiTenantUtil.java
+++ b/hibernate5/src/main/java/com/baeldung/hibernate/HibernateMultiTenantUtil.java
@@ -68,7 +68,7 @@ public class HibernateMultiTenantUtil {
Properties properties = new Properties();
URL propertiesURL = Thread.currentThread()
.getContextClassLoader()
- .getResource("hibernate.properties");
+ .getResource("hibernate-multitenancy.properties");
FileInputStream inputStream = new FileInputStream(propertiesURL.getFile());
properties.load(inputStream);
System.out.println("LOADED PROPERTIES FROM hibernate.properties");
diff --git a/hibernate5/src/main/java/com/baeldung/hibernate/HibernateUtil.java b/hibernate5/src/main/java/com/baeldung/hibernate/HibernateUtil.java
index c1f7301d46..91392bd454 100644
--- a/hibernate5/src/main/java/com/baeldung/hibernate/HibernateUtil.java
+++ b/hibernate5/src/main/java/com/baeldung/hibernate/HibernateUtil.java
@@ -1,24 +1,58 @@
package com.baeldung.hibernate;
+import com.baeldung.hibernate.pojo.Employee;
+import com.baeldung.hibernate.pojo.EntityDescription;
+import com.baeldung.hibernate.pojo.Phone;
import org.hibernate.SessionFactory;
-import org.hibernate.cfg.Configuration;
+import org.hibernate.boot.Metadata;
+import org.hibernate.boot.MetadataSources;
+import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
+import org.hibernate.service.ServiceRegistry;
+
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.net.URL;
+import java.util.Properties;
public class HibernateUtil {
+ private static SessionFactory sessionFactory;
- private static final SessionFactory sessionFactory;
-
- static {
- try {
- Configuration configuration = new Configuration().configure();
- sessionFactory = configuration.buildSessionFactory();
-
- } catch (Throwable ex) {
- System.err.println("Initial SessionFactory creation failed." + ex);
- throw new ExceptionInInitializerError(ex);
+ public static SessionFactory getSessionFactory() throws IOException {
+ if (sessionFactory == null) {
+ ServiceRegistry serviceRegistry = configureServiceRegistry();
+ sessionFactory = makeSessionFactory(serviceRegistry);
}
- }
-
- public static SessionFactory getSessionFactory() {
return sessionFactory;
}
+
+ private static SessionFactory makeSessionFactory(ServiceRegistry serviceRegistry) {
+ MetadataSources metadataSources = new MetadataSources(serviceRegistry);
+ metadataSources.addPackage("com.baeldung.hibernate.pojo");
+ metadataSources.addAnnotatedClass(Employee.class);
+ metadataSources.addAnnotatedClass(Phone.class);
+ metadataSources.addAnnotatedClass(EntityDescription.class);
+
+ Metadata metadata = metadataSources.buildMetadata();
+ return metadata.getSessionFactoryBuilder()
+ .build();
+
+ }
+
+ private static ServiceRegistry configureServiceRegistry() throws IOException {
+ Properties properties = getProperties();
+ return new StandardServiceRegistryBuilder().applySettings(properties)
+ .build();
+ }
+
+ private static Properties getProperties() throws IOException {
+ Properties properties = new Properties();
+ URL propertiesURL = Thread.currentThread()
+ .getContextClassLoader()
+ .getResource("hibernate.properties");
+ try (FileInputStream inputStream = new FileInputStream(propertiesURL.getFile())) {
+ properties.load(inputStream);
+ }
+ return properties;
+ }
+
}
\ No newline at end of file
diff --git a/hibernate5/src/main/java/com/baeldung/hibernate/pojo/Employee.java b/hibernate5/src/main/java/com/baeldung/hibernate/pojo/Employee.java
new file mode 100644
index 0000000000..e9732b2b67
--- /dev/null
+++ b/hibernate5/src/main/java/com/baeldung/hibernate/pojo/Employee.java
@@ -0,0 +1,87 @@
+package com.baeldung.hibernate.pojo;
+
+import org.hibernate.annotations.*;
+
+import javax.persistence.Entity;
+import javax.persistence.*;
+import java.io.Serializable;
+import java.util.HashSet;
+import java.util.Set;
+
+@Entity
+@Where(clause = "deleted = false")
+@FilterDef(name = "incomeLevelFilter", parameters = @ParamDef(name = "incomeLimit", type = "int"))
+@Filter(name = "incomeLevelFilter", condition = "grossIncome > :incomeLimit")
+public class Employee implements Serializable {
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ private Integer id;
+
+ private long grossIncome;
+
+ private int taxInPercents;
+
+ private boolean deleted;
+
+ public long getTaxJavaWay() {
+ return grossIncome * taxInPercents / 100;
+ }
+
+ @Formula("grossIncome * taxInPercents / 100")
+ private long tax;
+
+ @OneToMany
+ @JoinColumn(name = "employee_id")
+ @Where(clause = "deleted = false")
+ private Set phones = new HashSet<>(0);
+
+ public Employee() {
+ }
+
+ public Employee(long grossIncome, int taxInPercents) {
+ this.grossIncome = grossIncome;
+ this.taxInPercents = taxInPercents;
+ }
+
+ public Integer getId() {
+ return id;
+ }
+
+ public long getGrossIncome() {
+ return grossIncome;
+ }
+
+ public int getTaxInPercents() {
+ return taxInPercents;
+ }
+
+ public long getTax() {
+ return tax;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public void setGrossIncome(long grossIncome) {
+ this.grossIncome = grossIncome;
+ }
+
+ public void setTaxInPercents(int taxInPercents) {
+ this.taxInPercents = taxInPercents;
+ }
+
+ public boolean getDeleted() {
+ return deleted;
+ }
+
+ public void setDeleted(boolean deleted) {
+ this.deleted = deleted;
+ }
+
+ public Set getPhones() {
+ return phones;
+ }
+
+}
diff --git a/hibernate5/src/main/java/com/baeldung/hibernate/pojo/EntityDescription.java b/hibernate5/src/main/java/com/baeldung/hibernate/pojo/EntityDescription.java
new file mode 100644
index 0000000000..131bb73a80
--- /dev/null
+++ b/hibernate5/src/main/java/com/baeldung/hibernate/pojo/EntityDescription.java
@@ -0,0 +1,55 @@
+package com.baeldung.hibernate.pojo;
+
+import org.hibernate.annotations.Any;
+
+import javax.persistence.*;
+import java.io.Serializable;
+
+@Entity
+public class EntityDescription implements Serializable {
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ private Integer id;
+
+ private String description;
+
+ @Any(
+ metaDef = "EntityDescriptionMetaDef",
+ metaColumn = @Column(name = "entity_type")
+ )
+ @JoinColumn(name = "entity_id")
+ private Serializable entity;
+
+ public EntityDescription() {
+ }
+
+ public EntityDescription(String description, Serializable entity) {
+ this.description = description;
+ this.entity = entity;
+ }
+
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ public Serializable getEntity() {
+ return entity;
+ }
+
+ public void setEntity(Serializable entity) {
+ this.entity = entity;
+ }
+}
diff --git a/hibernate5/src/main/java/com/baeldung/hibernate/pojo/Phone.java b/hibernate5/src/main/java/com/baeldung/hibernate/pojo/Phone.java
new file mode 100644
index 0000000000..d923bda5de
--- /dev/null
+++ b/hibernate5/src/main/java/com/baeldung/hibernate/pojo/Phone.java
@@ -0,0 +1,50 @@
+package com.baeldung.hibernate.pojo;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import java.io.Serializable;
+
+@Entity
+public class Phone implements Serializable {
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ private Integer id;
+
+ private boolean deleted;
+
+ private String number;
+
+ public Phone() {
+ }
+
+ public Phone(String number) {
+ this.number = number;
+ }
+
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public boolean isDeleted() {
+ return deleted;
+ }
+
+ public void setDeleted(boolean deleted) {
+ this.deleted = deleted;
+ }
+
+ public String getNumber() {
+ return number;
+ }
+
+ public void setNumber(String number) {
+ this.number = number;
+ }
+}
diff --git a/hibernate5/src/main/java/com/baeldung/hibernate/pojo/package-info.java b/hibernate5/src/main/java/com/baeldung/hibernate/pojo/package-info.java
new file mode 100644
index 0000000000..992cda7c1d
--- /dev/null
+++ b/hibernate5/src/main/java/com/baeldung/hibernate/pojo/package-info.java
@@ -0,0 +1,9 @@
+@AnyMetaDef(name = "EntityDescriptionMetaDef", metaType = "string", idType = "int",
+ metaValues = {
+ @MetaValue(value = "Employee", targetEntity = Employee.class),
+ @MetaValue(value = "Phone", targetEntity = Phone.class)
+ })
+package com.baeldung.hibernate.pojo;
+
+import org.hibernate.annotations.AnyMetaDef;
+import org.hibernate.annotations.MetaValue;
\ No newline at end of file
diff --git a/hibernate5/src/test/java/com/baeldung/hibernate/DynamicMappingIntegrationTest.java b/hibernate5/src/test/java/com/baeldung/hibernate/DynamicMappingIntegrationTest.java
new file mode 100644
index 0000000000..b207d6630a
--- /dev/null
+++ b/hibernate5/src/test/java/com/baeldung/hibernate/DynamicMappingIntegrationTest.java
@@ -0,0 +1,164 @@
+package com.baeldung.hibernate;
+
+import com.baeldung.hibernate.pojo.Employee;
+import com.baeldung.hibernate.pojo.EntityDescription;
+import com.baeldung.hibernate.pojo.Phone;
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import java.io.IOException;
+import java.util.List;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+public class DynamicMappingIntegrationTest {
+
+ private Session session;
+
+ private Transaction transaction;
+
+ @Before
+ public void setUp() throws IOException {
+ session = HibernateUtil.getSessionFactory().openSession();
+ transaction = session.beginTransaction();
+
+ session.createNativeQuery("delete from phone").executeUpdate();
+ session.createNativeQuery("delete from employee").executeUpdate();
+
+ transaction.commit();
+ transaction = session.beginTransaction();
+ }
+
+ @After
+ public void tearDown() {
+ transaction.rollback();
+ session.close();
+ }
+
+ @Test
+ public void givenEntity_whenFieldMappedWithFormula_thenFieldIsCalculated() {
+ Employee employee = new Employee(10_000L, 25);
+ assertThat(employee.getTaxJavaWay()).isEqualTo(2_500L);
+
+ session.save(employee);
+ session.flush();
+ session.clear();
+
+ employee = session.get(Employee.class, employee.getId());
+ assertThat(employee.getTax()).isEqualTo(2_500L);
+ }
+
+ @Test
+ public void givenEntityMappedWithWhere_whenDeletedIsTrue_thenEntityNotFetched() {
+ Employee employee = new Employee();
+
+ session.save(employee);
+ session.clear();
+
+ employee = session.find(Employee.class, employee.getId());
+ assertThat(employee).isNotNull();
+
+ employee.setDeleted(true);
+ session.flush();
+
+ employee = session.find(Employee.class, employee.getId());
+ assertThat(employee).isNotNull();
+
+ session.clear();
+
+ employee = session.find(Employee.class, employee.getId());
+ assertThat(employee).isNull();
+
+ }
+
+ @Test
+ public void givenCollectionMappedWithWhere_whenDeletedIsTrue_thenEntityNotFetched() {
+ Employee employee = new Employee();
+ Phone phone1 = new Phone("555-45-67");
+ Phone phone2 = new Phone("555-89-01");
+ employee.getPhones().add(phone1);
+ employee.getPhones().add(phone2);
+
+ session.save(phone1);
+ session.save(phone2);
+ session.save(employee);
+ session.flush();
+ session.clear();
+
+ employee = session.find(Employee.class, employee.getId());
+ assertThat(employee.getPhones()).hasSize(2);
+
+ employee.getPhones().iterator().next().setDeleted(true);
+ session.flush();
+ session.clear();
+
+ employee = session.find(Employee.class, employee.getId());
+ assertThat(employee.getPhones()).hasSize(1);
+
+ List fullPhoneList = session.createQuery("from Phone").getResultList();
+ assertThat(fullPhoneList).hasSize(2);
+
+ }
+
+ @Test
+ public void givenFilterByIncome_whenIncomeLimitSet_thenFilterIsApplied() throws IOException {
+ session.save(new Employee(10_000, 25));
+ session.save(new Employee(12_000, 25));
+ session.save(new Employee(15_000, 25));
+
+ session.flush();
+ session.clear();
+
+ session.enableFilter("incomeLevelFilter")
+ .setParameter("incomeLimit", 11_000);
+
+ List employees = session.createQuery("from Employee").getResultList();
+
+ assertThat(employees).hasSize(2);
+
+ Employee employee = session.get(Employee.class, 1);
+ assertThat(employee.getGrossIncome()).isEqualTo(10_000);
+
+ session.close();
+
+ session = HibernateUtil.getSessionFactory().openSession();
+ transaction = session.beginTransaction();
+
+ employees = session.createQuery("from Employee").getResultList();
+
+ assertThat(employees).hasSize(3);
+
+ }
+
+ @Test
+ public void givenMappingWithAny_whenDescriptionAddedToEntity_thenDescriptionCanReferAnyEntity() {
+ Employee employee = new Employee();
+ Phone phone1 = new Phone("555-45-67");
+ Phone phone2 = new Phone("555-89-01");
+ employee.getPhones().add(phone1);
+ employee.getPhones().add(phone2);
+
+ EntityDescription employeeDescription = new EntityDescription("Send to conference next year", employee);
+ EntityDescription phone1Description = new EntityDescription("Home phone (do not call after 10PM)", phone1);
+ EntityDescription phone2Description = new EntityDescription("Work phone", phone1);
+
+ session.save(phone1);
+ session.save(phone2);
+ session.save(employee);
+ session.save(employeeDescription);
+ session.save(phone1Description);
+ session.save(phone2Description);
+ session.flush();
+ session.clear();
+
+ List descriptions = session.createQuery("from EntityDescription").getResultList();
+
+ assertThat(Employee.class.isAssignableFrom(descriptions.get(0).getEntity().getClass())).isTrue();
+ assertThat(Phone.class.isAssignableFrom(descriptions.get(1).getEntity().getClass())).isTrue();
+ assertThat(Phone.class.isAssignableFrom(descriptions.get(2).getEntity().getClass())).isTrue();
+ }
+
+}
diff --git a/hibernate5/src/test/resources/hibernate-multitenancy.properties b/hibernate5/src/test/resources/hibernate-multitenancy.properties
new file mode 100644
index 0000000000..298ecd05d3
--- /dev/null
+++ b/hibernate5/src/test/resources/hibernate-multitenancy.properties
@@ -0,0 +1,9 @@
+hibernate.connection.driver_class=org.h2.Driver
+hibernate.connection.url=jdbc:h2:mem:mydb1;DB_CLOSE_DELAY=-1
+hibernate.connection.username=sa
+hibernate.connection.autocommit=true
+jdbc.password=
+
+hibernate.dialect=org.hibernate.dialect.H2Dialect
+hibernate.show_sql=true
+hibernate.multiTenancy=DATABASE
diff --git a/hibernate5/src/test/resources/hibernate.properties b/hibernate5/src/test/resources/hibernate.properties
index 298ecd05d3..7b8764637b 100644
--- a/hibernate5/src/test/resources/hibernate.properties
+++ b/hibernate5/src/test/resources/hibernate.properties
@@ -6,4 +6,4 @@ jdbc.password=
hibernate.dialect=org.hibernate.dialect.H2Dialect
hibernate.show_sql=true
-hibernate.multiTenancy=DATABASE
+hibernate.hbm2ddl.auto=create-drop
\ No newline at end of file
diff --git a/junit5/README.md b/junit5/README.md
index a3bb8fc1be..d0fa19bd83 100644
--- a/junit5/README.md
+++ b/junit5/README.md
@@ -6,4 +6,4 @@
- [Guide to Dynamic Tests in Junit 5](http://www.baeldung.com/junit5-dynamic-tests)
- [A Guied to JUnit 5 Extensions](http://www.baeldung.com/junit-5-extensions)
- [Inject Parameters into JUnit Jupiter Unit Tests](http://www.baeldung.com/junit-5-parameters)
-
+- [Mockito and JUnit 5 – Using ExtendWith](http://www.baeldung.com/mockito-junit-5-extension)
diff --git a/java-cassandra/README.md b/persistence-modules/java-cassandra/README.md
similarity index 100%
rename from java-cassandra/README.md
rename to persistence-modules/java-cassandra/README.md
diff --git a/java-cassandra/pom.xml b/persistence-modules/java-cassandra/pom.xml
similarity index 98%
rename from java-cassandra/pom.xml
rename to persistence-modules/java-cassandra/pom.xml
index 12df920e7d..faaabb9e2e 100644
--- a/java-cassandra/pom.xml
+++ b/persistence-modules/java-cassandra/pom.xml
@@ -11,6 +11,7 @@
com.baeldung
parent-modules
1.0.0-SNAPSHOT
+ ../
diff --git a/java-cassandra/src/main/java/com/baeldung/cassandra/java/client/CassandraClient.java b/persistence-modules/java-cassandra/src/main/java/com/baeldung/cassandra/java/client/CassandraClient.java
similarity index 100%
rename from java-cassandra/src/main/java/com/baeldung/cassandra/java/client/CassandraClient.java
rename to persistence-modules/java-cassandra/src/main/java/com/baeldung/cassandra/java/client/CassandraClient.java
diff --git a/java-cassandra/src/main/java/com/baeldung/cassandra/java/client/CassandraConnector.java b/persistence-modules/java-cassandra/src/main/java/com/baeldung/cassandra/java/client/CassandraConnector.java
similarity index 100%
rename from java-cassandra/src/main/java/com/baeldung/cassandra/java/client/CassandraConnector.java
rename to persistence-modules/java-cassandra/src/main/java/com/baeldung/cassandra/java/client/CassandraConnector.java
diff --git a/java-cassandra/src/main/java/com/baeldung/cassandra/java/client/domain/Book.java b/persistence-modules/java-cassandra/src/main/java/com/baeldung/cassandra/java/client/domain/Book.java
similarity index 100%
rename from java-cassandra/src/main/java/com/baeldung/cassandra/java/client/domain/Book.java
rename to persistence-modules/java-cassandra/src/main/java/com/baeldung/cassandra/java/client/domain/Book.java
diff --git a/java-cassandra/src/main/java/com/baeldung/cassandra/java/client/repository/BookRepository.java b/persistence-modules/java-cassandra/src/main/java/com/baeldung/cassandra/java/client/repository/BookRepository.java
similarity index 100%
rename from java-cassandra/src/main/java/com/baeldung/cassandra/java/client/repository/BookRepository.java
rename to persistence-modules/java-cassandra/src/main/java/com/baeldung/cassandra/java/client/repository/BookRepository.java
diff --git a/java-cassandra/src/main/java/com/baeldung/cassandra/java/client/repository/KeyspaceRepository.java b/persistence-modules/java-cassandra/src/main/java/com/baeldung/cassandra/java/client/repository/KeyspaceRepository.java
similarity index 100%
rename from java-cassandra/src/main/java/com/baeldung/cassandra/java/client/repository/KeyspaceRepository.java
rename to persistence-modules/java-cassandra/src/main/java/com/baeldung/cassandra/java/client/repository/KeyspaceRepository.java
diff --git a/java-cassandra/src/test/java/com/baeldung/cassandra/java/client/repository/BookRepositoryIntegrationTest.java b/persistence-modules/java-cassandra/src/test/java/com/baeldung/cassandra/java/client/repository/BookRepositoryIntegrationTest.java
similarity index 100%
rename from java-cassandra/src/test/java/com/baeldung/cassandra/java/client/repository/BookRepositoryIntegrationTest.java
rename to persistence-modules/java-cassandra/src/test/java/com/baeldung/cassandra/java/client/repository/BookRepositoryIntegrationTest.java
diff --git a/java-cassandra/src/test/java/com/baeldung/cassandra/java/client/repository/KeyspaceRepositoryIntegrationTest.java b/persistence-modules/java-cassandra/src/test/java/com/baeldung/cassandra/java/client/repository/KeyspaceRepositoryIntegrationTest.java
similarity index 100%
rename from java-cassandra/src/test/java/com/baeldung/cassandra/java/client/repository/KeyspaceRepositoryIntegrationTest.java
rename to persistence-modules/java-cassandra/src/test/java/com/baeldung/cassandra/java/client/repository/KeyspaceRepositoryIntegrationTest.java
diff --git a/java-mongodb/.gitignore b/persistence-modules/java-mongodb/.gitignore
similarity index 100%
rename from java-mongodb/.gitignore
rename to persistence-modules/java-mongodb/.gitignore
diff --git a/java-mongodb/README.md b/persistence-modules/java-mongodb/README.md
similarity index 100%
rename from java-mongodb/README.md
rename to persistence-modules/java-mongodb/README.md
diff --git a/java-mongodb/pom.xml b/persistence-modules/java-mongodb/pom.xml
similarity index 97%
rename from java-mongodb/pom.xml
rename to persistence-modules/java-mongodb/pom.xml
index 304d961b0a..aab48921a6 100644
--- a/java-mongodb/pom.xml
+++ b/persistence-modules/java-mongodb/pom.xml
@@ -11,6 +11,7 @@
com.baeldung
parent-modules
1.0.0-SNAPSHOT
+ ../
diff --git a/java-mongodb/src/main/java/com/baeldung/MongoExample.java b/persistence-modules/java-mongodb/src/main/java/com/baeldung/MongoExample.java
similarity index 100%
rename from java-mongodb/src/main/java/com/baeldung/MongoExample.java
rename to persistence-modules/java-mongodb/src/main/java/com/baeldung/MongoExample.java
diff --git a/java-mongodb/src/test/java/com/baeldung/AppIntegrationTest.java b/persistence-modules/java-mongodb/src/test/java/com/baeldung/AppIntegrationTest.java
similarity index 100%
rename from java-mongodb/src/test/java/com/baeldung/AppIntegrationTest.java
rename to persistence-modules/java-mongodb/src/test/java/com/baeldung/AppIntegrationTest.java
diff --git a/liquibase/README.md b/persistence-modules/liquibase/README.md
similarity index 100%
rename from liquibase/README.md
rename to persistence-modules/liquibase/README.md
diff --git a/liquibase/pom.xml b/persistence-modules/liquibase/pom.xml
similarity index 96%
rename from liquibase/pom.xml
rename to persistence-modules/liquibase/pom.xml
index d26acc8c98..020c2516a2 100644
--- a/liquibase/pom.xml
+++ b/persistence-modules/liquibase/pom.xml
@@ -6,6 +6,7 @@
parent-modules
com.baeldung
1.0.0-SNAPSHOT
+ ../
4.0.0
diff --git a/liquibase/src/main/resources/liquibase/db-changelog.xml b/persistence-modules/liquibase/src/main/resources/liquibase/db-changelog.xml
similarity index 100%
rename from liquibase/src/main/resources/liquibase/db-changelog.xml
rename to persistence-modules/liquibase/src/main/resources/liquibase/db-changelog.xml
diff --git a/liquibase/src/main/resources/liquibase/liquibase.properties b/persistence-modules/liquibase/src/main/resources/liquibase/liquibase.properties
similarity index 100%
rename from liquibase/src/main/resources/liquibase/liquibase.properties
rename to persistence-modules/liquibase/src/main/resources/liquibase/liquibase.properties
diff --git a/querydsl/README.md b/persistence-modules/querydsl/README.md
similarity index 100%
rename from querydsl/README.md
rename to persistence-modules/querydsl/README.md
diff --git a/querydsl/pom.xml b/persistence-modules/querydsl/pom.xml
similarity index 99%
rename from querydsl/pom.xml
rename to persistence-modules/querydsl/pom.xml
index 6c968f01e4..27f383e0c6 100644
--- a/querydsl/pom.xml
+++ b/persistence-modules/querydsl/pom.xml
@@ -15,6 +15,7 @@
com.baeldung
parent-modules
1.0.0-SNAPSHOT
+ ../
diff --git a/querydsl/src/main/java/org/baeldung/dao/PersonDao.java b/persistence-modules/querydsl/src/main/java/org/baeldung/dao/PersonDao.java
similarity index 100%
rename from querydsl/src/main/java/org/baeldung/dao/PersonDao.java
rename to persistence-modules/querydsl/src/main/java/org/baeldung/dao/PersonDao.java
diff --git a/querydsl/src/main/java/org/baeldung/dao/PersonDaoImpl.java b/persistence-modules/querydsl/src/main/java/org/baeldung/dao/PersonDaoImpl.java
similarity index 100%
rename from querydsl/src/main/java/org/baeldung/dao/PersonDaoImpl.java
rename to persistence-modules/querydsl/src/main/java/org/baeldung/dao/PersonDaoImpl.java
diff --git a/querydsl/src/main/java/org/baeldung/entity/Person.java b/persistence-modules/querydsl/src/main/java/org/baeldung/entity/Person.java
similarity index 100%
rename from querydsl/src/main/java/org/baeldung/entity/Person.java
rename to persistence-modules/querydsl/src/main/java/org/baeldung/entity/Person.java
diff --git a/querydsl/src/main/java/org/baeldung/querydsl/intro/entities/BlogPost.java b/persistence-modules/querydsl/src/main/java/org/baeldung/querydsl/intro/entities/BlogPost.java
similarity index 100%
rename from querydsl/src/main/java/org/baeldung/querydsl/intro/entities/BlogPost.java
rename to persistence-modules/querydsl/src/main/java/org/baeldung/querydsl/intro/entities/BlogPost.java
diff --git a/querydsl/src/main/java/org/baeldung/querydsl/intro/entities/User.java b/persistence-modules/querydsl/src/main/java/org/baeldung/querydsl/intro/entities/User.java
similarity index 100%
rename from querydsl/src/main/java/org/baeldung/querydsl/intro/entities/User.java
rename to persistence-modules/querydsl/src/main/java/org/baeldung/querydsl/intro/entities/User.java
diff --git a/querydsl/src/main/resources/META-INF/persistence.xml b/persistence-modules/querydsl/src/main/resources/META-INF/persistence.xml
similarity index 100%
rename from querydsl/src/main/resources/META-INF/persistence.xml
rename to persistence-modules/querydsl/src/main/resources/META-INF/persistence.xml
diff --git a/querydsl/src/main/resources/logback.xml b/persistence-modules/querydsl/src/main/resources/logback.xml
similarity index 100%
rename from querydsl/src/main/resources/logback.xml
rename to persistence-modules/querydsl/src/main/resources/logback.xml
diff --git a/querydsl/src/test/java/org/baeldung/dao/PersonDaoIntegrationTest.java b/persistence-modules/querydsl/src/test/java/org/baeldung/dao/PersonDaoIntegrationTest.java
similarity index 100%
rename from querydsl/src/test/java/org/baeldung/dao/PersonDaoIntegrationTest.java
rename to persistence-modules/querydsl/src/test/java/org/baeldung/dao/PersonDaoIntegrationTest.java
diff --git a/querydsl/src/test/java/org/baeldung/querydsl/intro/QueryDSLIntegrationTest.java b/persistence-modules/querydsl/src/test/java/org/baeldung/querydsl/intro/QueryDSLIntegrationTest.java
similarity index 100%
rename from querydsl/src/test/java/org/baeldung/querydsl/intro/QueryDSLIntegrationTest.java
rename to persistence-modules/querydsl/src/test/java/org/baeldung/querydsl/intro/QueryDSLIntegrationTest.java
diff --git a/querydsl/src/test/resources/db.properties b/persistence-modules/querydsl/src/test/resources/db.properties
similarity index 100%
rename from querydsl/src/test/resources/db.properties
rename to persistence-modules/querydsl/src/test/resources/db.properties
diff --git a/querydsl/src/test/resources/test-context.xml b/persistence-modules/querydsl/src/test/resources/test-context.xml
similarity index 100%
rename from querydsl/src/test/resources/test-context.xml
rename to persistence-modules/querydsl/src/test/resources/test-context.xml
diff --git a/querydsl/src/test/resources/test-db.xml b/persistence-modules/querydsl/src/test/resources/test-db.xml
similarity index 100%
rename from querydsl/src/test/resources/test-db.xml
rename to persistence-modules/querydsl/src/test/resources/test-db.xml
diff --git a/redis/README.md b/persistence-modules/redis/README.md
similarity index 100%
rename from redis/README.md
rename to persistence-modules/redis/README.md
diff --git a/redis/pom.xml b/persistence-modules/redis/pom.xml
similarity index 96%
rename from redis/pom.xml
rename to persistence-modules/redis/pom.xml
index db454188a7..ef081a2c69 100644
--- a/redis/pom.xml
+++ b/persistence-modules/redis/pom.xml
@@ -15,6 +15,7 @@
com.baeldung
parent-modules
1.0.0-SNAPSHOT
+ ../
diff --git a/redis/src/main/java/com/baeldung/CustomMessage.java b/persistence-modules/redis/src/main/java/com/baeldung/CustomMessage.java
similarity index 100%
rename from redis/src/main/java/com/baeldung/CustomMessage.java
rename to persistence-modules/redis/src/main/java/com/baeldung/CustomMessage.java
diff --git a/redis/src/main/java/com/baeldung/Ledger.java b/persistence-modules/redis/src/main/java/com/baeldung/Ledger.java
similarity index 100%
rename from redis/src/main/java/com/baeldung/Ledger.java
rename to persistence-modules/redis/src/main/java/com/baeldung/Ledger.java
diff --git a/redis/src/main/java/com/baeldung/LedgerLiveObject.java b/persistence-modules/redis/src/main/java/com/baeldung/LedgerLiveObject.java
similarity index 100%
rename from redis/src/main/java/com/baeldung/LedgerLiveObject.java
rename to persistence-modules/redis/src/main/java/com/baeldung/LedgerLiveObject.java
diff --git a/redis/src/main/java/com/baeldung/LedgerServiceImpl.java b/persistence-modules/redis/src/main/java/com/baeldung/LedgerServiceImpl.java
similarity index 100%
rename from redis/src/main/java/com/baeldung/LedgerServiceImpl.java
rename to persistence-modules/redis/src/main/java/com/baeldung/LedgerServiceImpl.java
diff --git a/redis/src/main/java/com/baeldung/LedgerServiceInterface.java b/persistence-modules/redis/src/main/java/com/baeldung/LedgerServiceInterface.java
similarity index 100%
rename from redis/src/main/java/com/baeldung/LedgerServiceInterface.java
rename to persistence-modules/redis/src/main/java/com/baeldung/LedgerServiceInterface.java
diff --git a/redis/src/main/resources/singleNodeConfig.json b/persistence-modules/redis/src/main/resources/singleNodeConfig.json
similarity index 100%
rename from redis/src/main/resources/singleNodeConfig.json
rename to persistence-modules/redis/src/main/resources/singleNodeConfig.json
diff --git a/redis/src/main/resources/singleNodeConfig.yaml b/persistence-modules/redis/src/main/resources/singleNodeConfig.yaml
similarity index 100%
rename from redis/src/main/resources/singleNodeConfig.yaml
rename to persistence-modules/redis/src/main/resources/singleNodeConfig.yaml
diff --git a/redis/src/test/java/com/baeldung/JedisIntegrationTest.java b/persistence-modules/redis/src/test/java/com/baeldung/JedisIntegrationTest.java
similarity index 100%
rename from redis/src/test/java/com/baeldung/JedisIntegrationTest.java
rename to persistence-modules/redis/src/test/java/com/baeldung/JedisIntegrationTest.java
diff --git a/redis/src/test/java/com/baeldung/RedissonConfigurationIntegrationTest.java b/persistence-modules/redis/src/test/java/com/baeldung/RedissonConfigurationIntegrationTest.java
similarity index 100%
rename from redis/src/test/java/com/baeldung/RedissonConfigurationIntegrationTest.java
rename to persistence-modules/redis/src/test/java/com/baeldung/RedissonConfigurationIntegrationTest.java
diff --git a/redis/src/test/java/com/baeldung/RedissonIntegrationTest.java b/persistence-modules/redis/src/test/java/com/baeldung/RedissonIntegrationTest.java
similarity index 100%
rename from redis/src/test/java/com/baeldung/RedissonIntegrationTest.java
rename to persistence-modules/redis/src/test/java/com/baeldung/RedissonIntegrationTest.java
diff --git a/solr/README.md b/persistence-modules/solr/README.md
similarity index 100%
rename from solr/README.md
rename to persistence-modules/solr/README.md
diff --git a/solr/pom.xml b/persistence-modules/solr/pom.xml
similarity index 93%
rename from solr/pom.xml
rename to persistence-modules/solr/pom.xml
index 1b26a21edc..2fd0bdd721 100644
--- a/solr/pom.xml
+++ b/persistence-modules/solr/pom.xml
@@ -12,6 +12,7 @@
com.baeldung
parent-modules
1.0.0-SNAPSHOT
+ ../
diff --git a/solr/src/main/java/com/baeldung/solr/fulltext/search/model/Item.java b/persistence-modules/solr/src/main/java/com/baeldung/solr/fulltext/search/model/Item.java
similarity index 100%
rename from solr/src/main/java/com/baeldung/solr/fulltext/search/model/Item.java
rename to persistence-modules/solr/src/main/java/com/baeldung/solr/fulltext/search/model/Item.java
diff --git a/solr/src/main/java/com/baeldung/solr/fulltext/search/service/ItemSearchService.java b/persistence-modules/solr/src/main/java/com/baeldung/solr/fulltext/search/service/ItemSearchService.java
similarity index 100%
rename from solr/src/main/java/com/baeldung/solr/fulltext/search/service/ItemSearchService.java
rename to persistence-modules/solr/src/main/java/com/baeldung/solr/fulltext/search/service/ItemSearchService.java
diff --git a/solr/src/main/java/com/baeldung/solr/fulltext/search/service/ItemSearchServiceImpl.java b/persistence-modules/solr/src/main/java/com/baeldung/solr/fulltext/search/service/ItemSearchServiceImpl.java
similarity index 100%
rename from solr/src/main/java/com/baeldung/solr/fulltext/search/service/ItemSearchServiceImpl.java
rename to persistence-modules/solr/src/main/java/com/baeldung/solr/fulltext/search/service/ItemSearchServiceImpl.java
diff --git a/solr/src/test/java/com/baeldung/solr/fulltext/search/service/ItemSearchServiceLiveTest.java b/persistence-modules/solr/src/test/java/com/baeldung/solr/fulltext/search/service/ItemSearchServiceLiveTest.java
similarity index 100%
rename from solr/src/test/java/com/baeldung/solr/fulltext/search/service/ItemSearchServiceLiveTest.java
rename to persistence-modules/solr/src/test/java/com/baeldung/solr/fulltext/search/service/ItemSearchServiceLiveTest.java
diff --git a/spring-data-cassandra/README.md b/persistence-modules/spring-data-cassandra/README.md
similarity index 100%
rename from spring-data-cassandra/README.md
rename to persistence-modules/spring-data-cassandra/README.md
diff --git a/spring-data-cassandra/pom.xml b/persistence-modules/spring-data-cassandra/pom.xml
similarity index 99%
rename from spring-data-cassandra/pom.xml
rename to persistence-modules/spring-data-cassandra/pom.xml
index fbc2071134..607d7b90ba 100644
--- a/spring-data-cassandra/pom.xml
+++ b/persistence-modules/spring-data-cassandra/pom.xml
@@ -13,6 +13,7 @@
com.baeldung
parent-modules
1.0.0-SNAPSHOT
+ ../
diff --git a/spring-data-cassandra/src/main/java/org/baeldung/spring/data/cassandra/config/CassandraConfig.java b/persistence-modules/spring-data-cassandra/src/main/java/org/baeldung/spring/data/cassandra/config/CassandraConfig.java
similarity index 100%
rename from spring-data-cassandra/src/main/java/org/baeldung/spring/data/cassandra/config/CassandraConfig.java
rename to persistence-modules/spring-data-cassandra/src/main/java/org/baeldung/spring/data/cassandra/config/CassandraConfig.java
diff --git a/spring-data-cassandra/src/main/java/org/baeldung/spring/data/cassandra/model/Book.java b/persistence-modules/spring-data-cassandra/src/main/java/org/baeldung/spring/data/cassandra/model/Book.java
similarity index 100%
rename from spring-data-cassandra/src/main/java/org/baeldung/spring/data/cassandra/model/Book.java
rename to persistence-modules/spring-data-cassandra/src/main/java/org/baeldung/spring/data/cassandra/model/Book.java
diff --git a/spring-data-cassandra/src/main/java/org/baeldung/spring/data/cassandra/repository/BookRepository.java b/persistence-modules/spring-data-cassandra/src/main/java/org/baeldung/spring/data/cassandra/repository/BookRepository.java
similarity index 100%
rename from spring-data-cassandra/src/main/java/org/baeldung/spring/data/cassandra/repository/BookRepository.java
rename to persistence-modules/spring-data-cassandra/src/main/java/org/baeldung/spring/data/cassandra/repository/BookRepository.java
diff --git a/spring-data-cassandra/src/main/resources/cassandra.properties b/persistence-modules/spring-data-cassandra/src/main/resources/cassandra.properties
similarity index 100%
rename from spring-data-cassandra/src/main/resources/cassandra.properties
rename to persistence-modules/spring-data-cassandra/src/main/resources/cassandra.properties
diff --git a/spring-data-cassandra/src/main/resources/logback.xml b/persistence-modules/spring-data-cassandra/src/main/resources/logback.xml
similarity index 100%
rename from spring-data-cassandra/src/main/resources/logback.xml
rename to persistence-modules/spring-data-cassandra/src/main/resources/logback.xml
diff --git a/spring-data-cassandra/src/main/resources/test.png b/persistence-modules/spring-data-cassandra/src/main/resources/test.png
similarity index 100%
rename from spring-data-cassandra/src/main/resources/test.png
rename to persistence-modules/spring-data-cassandra/src/main/resources/test.png
diff --git a/spring-data-cassandra/src/test/java/org/baeldung/spring/data/cassandra/repository/BookRepositoryIntegrationTest.java b/persistence-modules/spring-data-cassandra/src/test/java/org/baeldung/spring/data/cassandra/repository/BookRepositoryIntegrationTest.java
similarity index 100%
rename from spring-data-cassandra/src/test/java/org/baeldung/spring/data/cassandra/repository/BookRepositoryIntegrationTest.java
rename to persistence-modules/spring-data-cassandra/src/test/java/org/baeldung/spring/data/cassandra/repository/BookRepositoryIntegrationTest.java
diff --git a/spring-data-cassandra/src/test/java/org/baeldung/spring/data/cassandra/repository/CassandraTemplateIntegrationTest.java b/persistence-modules/spring-data-cassandra/src/test/java/org/baeldung/spring/data/cassandra/repository/CassandraTemplateIntegrationTest.java
similarity index 100%
rename from spring-data-cassandra/src/test/java/org/baeldung/spring/data/cassandra/repository/CassandraTemplateIntegrationTest.java
rename to persistence-modules/spring-data-cassandra/src/test/java/org/baeldung/spring/data/cassandra/repository/CassandraTemplateIntegrationTest.java
diff --git a/spring-data-cassandra/src/test/java/org/baeldung/spring/data/cassandra/repository/CqlQueriesIntegrationTest.java b/persistence-modules/spring-data-cassandra/src/test/java/org/baeldung/spring/data/cassandra/repository/CqlQueriesIntegrationTest.java
similarity index 100%
rename from spring-data-cassandra/src/test/java/org/baeldung/spring/data/cassandra/repository/CqlQueriesIntegrationTest.java
rename to persistence-modules/spring-data-cassandra/src/test/java/org/baeldung/spring/data/cassandra/repository/CqlQueriesIntegrationTest.java
diff --git a/spring-data-dynamodb/.gitignore b/persistence-modules/spring-data-dynamodb/.gitignore
similarity index 100%
rename from spring-data-dynamodb/.gitignore
rename to persistence-modules/spring-data-dynamodb/.gitignore
diff --git a/spring-data-dynamodb/README.MD b/persistence-modules/spring-data-dynamodb/README.MD
similarity index 100%
rename from spring-data-dynamodb/README.MD
rename to persistence-modules/spring-data-dynamodb/README.MD
diff --git a/spring-data-dynamodb/pom.xml b/persistence-modules/spring-data-dynamodb/pom.xml
similarity index 96%
rename from spring-data-dynamodb/pom.xml
rename to persistence-modules/spring-data-dynamodb/pom.xml
index 11bbbdf40f..bf90779c29 100644
--- a/spring-data-dynamodb/pom.xml
+++ b/persistence-modules/spring-data-dynamodb/pom.xml
@@ -12,7 +12,7 @@
parent-boot-5
com.baeldung
0.0.1-SNAPSHOT
- ../parent-boot-5
+ ../../parent-boot-5
diff --git a/spring-data-dynamodb/src/main/java/com/baeldung/Application.java b/persistence-modules/spring-data-dynamodb/src/main/java/com/baeldung/Application.java
similarity index 100%
rename from spring-data-dynamodb/src/main/java/com/baeldung/Application.java
rename to persistence-modules/spring-data-dynamodb/src/main/java/com/baeldung/Application.java
diff --git a/spring-data-dynamodb/src/main/java/com/baeldung/spring/data/dynamodb/config/DynamoDBConfig.java b/persistence-modules/spring-data-dynamodb/src/main/java/com/baeldung/spring/data/dynamodb/config/DynamoDBConfig.java
similarity index 100%
rename from spring-data-dynamodb/src/main/java/com/baeldung/spring/data/dynamodb/config/DynamoDBConfig.java
rename to persistence-modules/spring-data-dynamodb/src/main/java/com/baeldung/spring/data/dynamodb/config/DynamoDBConfig.java
diff --git a/spring-data-dynamodb/src/main/java/com/baeldung/spring/data/dynamodb/model/ProductInfo.java b/persistence-modules/spring-data-dynamodb/src/main/java/com/baeldung/spring/data/dynamodb/model/ProductInfo.java
similarity index 100%
rename from spring-data-dynamodb/src/main/java/com/baeldung/spring/data/dynamodb/model/ProductInfo.java
rename to persistence-modules/spring-data-dynamodb/src/main/java/com/baeldung/spring/data/dynamodb/model/ProductInfo.java
diff --git a/spring-data-dynamodb/src/main/java/com/baeldung/spring/data/dynamodb/repositories/ProductInfoRepository.java b/persistence-modules/spring-data-dynamodb/src/main/java/com/baeldung/spring/data/dynamodb/repositories/ProductInfoRepository.java
similarity index 100%
rename from spring-data-dynamodb/src/main/java/com/baeldung/spring/data/dynamodb/repositories/ProductInfoRepository.java
rename to persistence-modules/spring-data-dynamodb/src/main/java/com/baeldung/spring/data/dynamodb/repositories/ProductInfoRepository.java
diff --git a/spring-data-dynamodb/src/main/resources/application.properties b/persistence-modules/spring-data-dynamodb/src/main/resources/application.properties
similarity index 100%
rename from spring-data-dynamodb/src/main/resources/application.properties
rename to persistence-modules/spring-data-dynamodb/src/main/resources/application.properties
diff --git a/spring-data-dynamodb/src/main/resources/demo.properties b/persistence-modules/spring-data-dynamodb/src/main/resources/demo.properties
similarity index 100%
rename from spring-data-dynamodb/src/main/resources/demo.properties
rename to persistence-modules/spring-data-dynamodb/src/main/resources/demo.properties
diff --git a/spring-data-dynamodb/src/main/resources/logback.xml b/persistence-modules/spring-data-dynamodb/src/main/resources/logback.xml
similarity index 100%
rename from spring-data-dynamodb/src/main/resources/logback.xml
rename to persistence-modules/spring-data-dynamodb/src/main/resources/logback.xml
diff --git a/spring-data-dynamodb/src/main/resources/templates/index.html b/persistence-modules/spring-data-dynamodb/src/main/resources/templates/index.html
similarity index 100%
rename from spring-data-dynamodb/src/main/resources/templates/index.html
rename to persistence-modules/spring-data-dynamodb/src/main/resources/templates/index.html
diff --git a/spring-data-dynamodb/src/test/java/com/baeldung/spring/data/dynamodb/repository/ProductInfoRepositoryIntegrationTest.java b/persistence-modules/spring-data-dynamodb/src/test/java/com/baeldung/spring/data/dynamodb/repository/ProductInfoRepositoryIntegrationTest.java
similarity index 100%
rename from spring-data-dynamodb/src/test/java/com/baeldung/spring/data/dynamodb/repository/ProductInfoRepositoryIntegrationTest.java
rename to persistence-modules/spring-data-dynamodb/src/test/java/com/baeldung/spring/data/dynamodb/repository/ProductInfoRepositoryIntegrationTest.java
diff --git a/spring-data-dynamodb/src/test/resources/application.properties b/persistence-modules/spring-data-dynamodb/src/test/resources/application.properties
similarity index 100%
rename from spring-data-dynamodb/src/test/resources/application.properties
rename to persistence-modules/spring-data-dynamodb/src/test/resources/application.properties
diff --git a/spring-data-dynamodb/src/test/resources/exception-hibernate.properties b/persistence-modules/spring-data-dynamodb/src/test/resources/exception-hibernate.properties
similarity index 100%
rename from spring-data-dynamodb/src/test/resources/exception-hibernate.properties
rename to persistence-modules/spring-data-dynamodb/src/test/resources/exception-hibernate.properties
diff --git a/spring-data-dynamodb/src/test/resources/exception.properties b/persistence-modules/spring-data-dynamodb/src/test/resources/exception.properties
similarity index 100%
rename from spring-data-dynamodb/src/test/resources/exception.properties
rename to persistence-modules/spring-data-dynamodb/src/test/resources/exception.properties
diff --git a/spring-data-gemfire/README.md b/persistence-modules/spring-data-gemfire/README.md
similarity index 100%
rename from spring-data-gemfire/README.md
rename to persistence-modules/spring-data-gemfire/README.md
diff --git a/spring-data-gemfire/pom.xml b/persistence-modules/spring-data-gemfire/pom.xml
similarity index 97%
rename from spring-data-gemfire/pom.xml
rename to persistence-modules/spring-data-gemfire/pom.xml
index ae7612d719..9108865b4c 100644
--- a/spring-data-gemfire/pom.xml
+++ b/persistence-modules/spring-data-gemfire/pom.xml
@@ -12,6 +12,7 @@
com.baeldung
parent-modules
1.0.0-SNAPSHOT
+ ../
diff --git a/spring-data-gemfire/src/main/java/com/baeldung/spring/data/gemfire/function/FunctionExecution.java b/persistence-modules/spring-data-gemfire/src/main/java/com/baeldung/spring/data/gemfire/function/FunctionExecution.java
similarity index 100%
rename from spring-data-gemfire/src/main/java/com/baeldung/spring/data/gemfire/function/FunctionExecution.java
rename to persistence-modules/spring-data-gemfire/src/main/java/com/baeldung/spring/data/gemfire/function/FunctionExecution.java
diff --git a/spring-data-gemfire/src/main/java/com/baeldung/spring/data/gemfire/function/FunctionImpl.java b/persistence-modules/spring-data-gemfire/src/main/java/com/baeldung/spring/data/gemfire/function/FunctionImpl.java
similarity index 100%
rename from spring-data-gemfire/src/main/java/com/baeldung/spring/data/gemfire/function/FunctionImpl.java
rename to persistence-modules/spring-data-gemfire/src/main/java/com/baeldung/spring/data/gemfire/function/FunctionImpl.java
diff --git a/spring-data-gemfire/src/main/java/com/baeldung/spring/data/gemfire/function/GemfireConfiguration.java b/persistence-modules/spring-data-gemfire/src/main/java/com/baeldung/spring/data/gemfire/function/GemfireConfiguration.java
similarity index 100%
rename from spring-data-gemfire/src/main/java/com/baeldung/spring/data/gemfire/function/GemfireConfiguration.java
rename to persistence-modules/spring-data-gemfire/src/main/java/com/baeldung/spring/data/gemfire/function/GemfireConfiguration.java
diff --git a/spring-data-gemfire/src/main/java/com/baeldung/spring/data/gemfire/model/Employee.java b/persistence-modules/spring-data-gemfire/src/main/java/com/baeldung/spring/data/gemfire/model/Employee.java
similarity index 100%
rename from spring-data-gemfire/src/main/java/com/baeldung/spring/data/gemfire/model/Employee.java
rename to persistence-modules/spring-data-gemfire/src/main/java/com/baeldung/spring/data/gemfire/model/Employee.java
diff --git a/spring-data-gemfire/src/main/java/com/baeldung/spring/data/gemfire/repository/EmployeeRepository.java b/persistence-modules/spring-data-gemfire/src/main/java/com/baeldung/spring/data/gemfire/repository/EmployeeRepository.java
similarity index 100%
rename from spring-data-gemfire/src/main/java/com/baeldung/spring/data/gemfire/repository/EmployeeRepository.java
rename to persistence-modules/spring-data-gemfire/src/main/java/com/baeldung/spring/data/gemfire/repository/EmployeeRepository.java
diff --git a/spring-data-gemfire/src/main/resources/application-context.xml b/persistence-modules/spring-data-gemfire/src/main/resources/application-context.xml
similarity index 100%
rename from spring-data-gemfire/src/main/resources/application-context.xml
rename to persistence-modules/spring-data-gemfire/src/main/resources/application-context.xml
diff --git a/spring-data-gemfire/src/test/java/com/baeldung/spring/data/gemfire/repository/EmployeeRepositoryIntegrationTest.java b/persistence-modules/spring-data-gemfire/src/test/java/com/baeldung/spring/data/gemfire/repository/EmployeeRepositoryIntegrationTest.java
similarity index 100%
rename from spring-data-gemfire/src/test/java/com/baeldung/spring/data/gemfire/repository/EmployeeRepositoryIntegrationTest.java
rename to persistence-modules/spring-data-gemfire/src/test/java/com/baeldung/spring/data/gemfire/repository/EmployeeRepositoryIntegrationTest.java
diff --git a/spring-data-neo4j/README.md b/persistence-modules/spring-data-neo4j/README.md
similarity index 100%
rename from spring-data-neo4j/README.md
rename to persistence-modules/spring-data-neo4j/README.md
diff --git a/spring-data-neo4j/pom.xml b/persistence-modules/spring-data-neo4j/pom.xml
similarity index 99%
rename from spring-data-neo4j/pom.xml
rename to persistence-modules/spring-data-neo4j/pom.xml
index e01e7d7294..0055850ec3 100644
--- a/spring-data-neo4j/pom.xml
+++ b/persistence-modules/spring-data-neo4j/pom.xml
@@ -10,6 +10,7 @@
com.baeldung
parent-modules
1.0.0-SNAPSHOT
+ ../
diff --git a/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/config/MovieDatabaseNeo4jConfiguration.java b/persistence-modules/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/config/MovieDatabaseNeo4jConfiguration.java
similarity index 100%
rename from spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/config/MovieDatabaseNeo4jConfiguration.java
rename to persistence-modules/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/config/MovieDatabaseNeo4jConfiguration.java
diff --git a/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/config/MovieDatabaseNeo4jTestConfiguration.java b/persistence-modules/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/config/MovieDatabaseNeo4jTestConfiguration.java
similarity index 100%
rename from spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/config/MovieDatabaseNeo4jTestConfiguration.java
rename to persistence-modules/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/config/MovieDatabaseNeo4jTestConfiguration.java
diff --git a/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/domain/Car.java b/persistence-modules/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/domain/Car.java
similarity index 100%
rename from spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/domain/Car.java
rename to persistence-modules/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/domain/Car.java
diff --git a/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/domain/Company.java b/persistence-modules/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/domain/Company.java
similarity index 100%
rename from spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/domain/Company.java
rename to persistence-modules/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/domain/Company.java
diff --git a/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/domain/Movie.java b/persistence-modules/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/domain/Movie.java
similarity index 100%
rename from spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/domain/Movie.java
rename to persistence-modules/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/domain/Movie.java
diff --git a/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/domain/Person.java b/persistence-modules/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/domain/Person.java
similarity index 100%
rename from spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/domain/Person.java
rename to persistence-modules/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/domain/Person.java
diff --git a/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/domain/Role.java b/persistence-modules/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/domain/Role.java
similarity index 100%
rename from spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/domain/Role.java
rename to persistence-modules/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/domain/Role.java
diff --git a/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/repostory/MovieRepository.java b/persistence-modules/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/repostory/MovieRepository.java
similarity index 100%
rename from spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/repostory/MovieRepository.java
rename to persistence-modules/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/repostory/MovieRepository.java
diff --git a/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/repostory/PersonRepository.java b/persistence-modules/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/repostory/PersonRepository.java
similarity index 100%
rename from spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/repostory/PersonRepository.java
rename to persistence-modules/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/repostory/PersonRepository.java
diff --git a/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/services/MovieService.java b/persistence-modules/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/services/MovieService.java
similarity index 100%
rename from spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/services/MovieService.java
rename to persistence-modules/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/services/MovieService.java
diff --git a/spring-data-neo4j/src/main/resources/logback.xml b/persistence-modules/spring-data-neo4j/src/main/resources/logback.xml
similarity index 100%
rename from spring-data-neo4j/src/main/resources/logback.xml
rename to persistence-modules/spring-data-neo4j/src/main/resources/logback.xml
diff --git a/spring-data-neo4j/src/main/resources/test.png b/persistence-modules/spring-data-neo4j/src/main/resources/test.png
similarity index 100%
rename from spring-data-neo4j/src/main/resources/test.png
rename to persistence-modules/spring-data-neo4j/src/main/resources/test.png
diff --git a/spring-data-neo4j/src/test/java/com/baeldung/neo4j/Neo4JServerLiveTest.java b/persistence-modules/spring-data-neo4j/src/test/java/com/baeldung/neo4j/Neo4JServerLiveTest.java
similarity index 100%
rename from spring-data-neo4j/src/test/java/com/baeldung/neo4j/Neo4JServerLiveTest.java
rename to persistence-modules/spring-data-neo4j/src/test/java/com/baeldung/neo4j/Neo4JServerLiveTest.java
diff --git a/spring-data-neo4j/src/test/java/com/baeldung/neo4j/Neo4jLiveTest.java b/persistence-modules/spring-data-neo4j/src/test/java/com/baeldung/neo4j/Neo4jLiveTest.java
similarity index 100%
rename from spring-data-neo4j/src/test/java/com/baeldung/neo4j/Neo4jLiveTest.java
rename to persistence-modules/spring-data-neo4j/src/test/java/com/baeldung/neo4j/Neo4jLiveTest.java
diff --git a/spring-data-neo4j/src/test/java/com/baeldung/neo4j/Neo4jOgmLiveTest.java b/persistence-modules/spring-data-neo4j/src/test/java/com/baeldung/neo4j/Neo4jOgmLiveTest.java
similarity index 100%
rename from spring-data-neo4j/src/test/java/com/baeldung/neo4j/Neo4jOgmLiveTest.java
rename to persistence-modules/spring-data-neo4j/src/test/java/com/baeldung/neo4j/Neo4jOgmLiveTest.java
diff --git a/spring-data-neo4j/src/test/java/com/baeldung/spring/data/neo4j/MovieRepositoryIntegrationTest.java b/persistence-modules/spring-data-neo4j/src/test/java/com/baeldung/spring/data/neo4j/MovieRepositoryIntegrationTest.java
similarity index 100%
rename from spring-data-neo4j/src/test/java/com/baeldung/spring/data/neo4j/MovieRepositoryIntegrationTest.java
rename to persistence-modules/spring-data-neo4j/src/test/java/com/baeldung/spring/data/neo4j/MovieRepositoryIntegrationTest.java
diff --git a/spring-data-neo4j/src/test/resources/logback.xml b/persistence-modules/spring-data-neo4j/src/test/resources/logback.xml
similarity index 100%
rename from spring-data-neo4j/src/test/resources/logback.xml
rename to persistence-modules/spring-data-neo4j/src/test/resources/logback.xml
diff --git a/spring-data-redis/README.md b/persistence-modules/spring-data-redis/README.md
similarity index 100%
rename from spring-data-redis/README.md
rename to persistence-modules/spring-data-redis/README.md
diff --git a/spring-data-redis/pom.xml b/persistence-modules/spring-data-redis/pom.xml
similarity index 98%
rename from spring-data-redis/pom.xml
rename to persistence-modules/spring-data-redis/pom.xml
index d2835595da..b184d7e369 100644
--- a/spring-data-redis/pom.xml
+++ b/persistence-modules/spring-data-redis/pom.xml
@@ -11,6 +11,7 @@
com.baeldung
parent-modules
1.0.0-SNAPSHOT
+ ../
diff --git a/spring-data-redis/src/main/java/com/baeldung/spring/data/redis/config/RedisConfig.java b/persistence-modules/spring-data-redis/src/main/java/com/baeldung/spring/data/redis/config/RedisConfig.java
similarity index 100%
rename from spring-data-redis/src/main/java/com/baeldung/spring/data/redis/config/RedisConfig.java
rename to persistence-modules/spring-data-redis/src/main/java/com/baeldung/spring/data/redis/config/RedisConfig.java
diff --git a/spring-data-redis/src/main/java/com/baeldung/spring/data/redis/model/Student.java b/persistence-modules/spring-data-redis/src/main/java/com/baeldung/spring/data/redis/model/Student.java
similarity index 100%
rename from spring-data-redis/src/main/java/com/baeldung/spring/data/redis/model/Student.java
rename to persistence-modules/spring-data-redis/src/main/java/com/baeldung/spring/data/redis/model/Student.java
diff --git a/spring-data-redis/src/main/java/com/baeldung/spring/data/redis/queue/MessagePublisher.java b/persistence-modules/spring-data-redis/src/main/java/com/baeldung/spring/data/redis/queue/MessagePublisher.java
similarity index 100%
rename from spring-data-redis/src/main/java/com/baeldung/spring/data/redis/queue/MessagePublisher.java
rename to persistence-modules/spring-data-redis/src/main/java/com/baeldung/spring/data/redis/queue/MessagePublisher.java
diff --git a/spring-data-redis/src/main/java/com/baeldung/spring/data/redis/queue/RedisMessagePublisher.java b/persistence-modules/spring-data-redis/src/main/java/com/baeldung/spring/data/redis/queue/RedisMessagePublisher.java
similarity index 100%
rename from spring-data-redis/src/main/java/com/baeldung/spring/data/redis/queue/RedisMessagePublisher.java
rename to persistence-modules/spring-data-redis/src/main/java/com/baeldung/spring/data/redis/queue/RedisMessagePublisher.java
diff --git a/spring-data-redis/src/main/java/com/baeldung/spring/data/redis/queue/RedisMessageSubscriber.java b/persistence-modules/spring-data-redis/src/main/java/com/baeldung/spring/data/redis/queue/RedisMessageSubscriber.java
similarity index 100%
rename from spring-data-redis/src/main/java/com/baeldung/spring/data/redis/queue/RedisMessageSubscriber.java
rename to persistence-modules/spring-data-redis/src/main/java/com/baeldung/spring/data/redis/queue/RedisMessageSubscriber.java
diff --git a/spring-data-redis/src/main/java/com/baeldung/spring/data/redis/repo/StudentRepository.java b/persistence-modules/spring-data-redis/src/main/java/com/baeldung/spring/data/redis/repo/StudentRepository.java
similarity index 100%
rename from spring-data-redis/src/main/java/com/baeldung/spring/data/redis/repo/StudentRepository.java
rename to persistence-modules/spring-data-redis/src/main/java/com/baeldung/spring/data/redis/repo/StudentRepository.java
diff --git a/spring-data-redis/src/main/java/com/baeldung/spring/data/redis/repo/StudentRepositoryImpl.java b/persistence-modules/spring-data-redis/src/main/java/com/baeldung/spring/data/redis/repo/StudentRepositoryImpl.java
similarity index 100%
rename from spring-data-redis/src/main/java/com/baeldung/spring/data/redis/repo/StudentRepositoryImpl.java
rename to persistence-modules/spring-data-redis/src/main/java/com/baeldung/spring/data/redis/repo/StudentRepositoryImpl.java
diff --git a/spring-data-redis/src/main/resources/logback.xml b/persistence-modules/spring-data-redis/src/main/resources/logback.xml
similarity index 100%
rename from spring-data-redis/src/main/resources/logback.xml
rename to persistence-modules/spring-data-redis/src/main/resources/logback.xml
diff --git a/spring-data-redis/src/main/resources/test.png b/persistence-modules/spring-data-redis/src/main/resources/test.png
similarity index 100%
rename from spring-data-redis/src/main/resources/test.png
rename to persistence-modules/spring-data-redis/src/main/resources/test.png
diff --git a/spring-data-redis/src/test/java/com/baeldung/spring/data/redis/RedisMessageListenerIntegrationTest.java b/persistence-modules/spring-data-redis/src/test/java/com/baeldung/spring/data/redis/RedisMessageListenerIntegrationTest.java
similarity index 100%
rename from spring-data-redis/src/test/java/com/baeldung/spring/data/redis/RedisMessageListenerIntegrationTest.java
rename to persistence-modules/spring-data-redis/src/test/java/com/baeldung/spring/data/redis/RedisMessageListenerIntegrationTest.java
diff --git a/spring-data-redis/src/test/java/com/baeldung/spring/data/redis/repo/StudentRepositoryIntegrationTest.java b/persistence-modules/spring-data-redis/src/test/java/com/baeldung/spring/data/redis/repo/StudentRepositoryIntegrationTest.java
similarity index 100%
rename from spring-data-redis/src/test/java/com/baeldung/spring/data/redis/repo/StudentRepositoryIntegrationTest.java
rename to persistence-modules/spring-data-redis/src/test/java/com/baeldung/spring/data/redis/repo/StudentRepositoryIntegrationTest.java
diff --git a/spring-data-solr/README.md b/persistence-modules/spring-data-solr/README.md
similarity index 100%
rename from spring-data-solr/README.md
rename to persistence-modules/spring-data-solr/README.md
diff --git a/spring-data-solr/pom.xml b/persistence-modules/spring-data-solr/pom.xml
similarity index 97%
rename from spring-data-solr/pom.xml
rename to persistence-modules/spring-data-solr/pom.xml
index 48ddaa7085..0759c1dbc0 100644
--- a/spring-data-solr/pom.xml
+++ b/persistence-modules/spring-data-solr/pom.xml
@@ -12,6 +12,7 @@
com.baeldung
parent-modules
1.0.0-SNAPSHOT
+ ../
diff --git a/spring-data-solr/src/main/java/com/baeldung/spring/data/solr/config/SolrConfig.java b/persistence-modules/spring-data-solr/src/main/java/com/baeldung/spring/data/solr/config/SolrConfig.java
similarity index 100%
rename from spring-data-solr/src/main/java/com/baeldung/spring/data/solr/config/SolrConfig.java
rename to persistence-modules/spring-data-solr/src/main/java/com/baeldung/spring/data/solr/config/SolrConfig.java
diff --git a/spring-data-solr/src/main/java/com/baeldung/spring/data/solr/model/Product.java b/persistence-modules/spring-data-solr/src/main/java/com/baeldung/spring/data/solr/model/Product.java
similarity index 100%
rename from spring-data-solr/src/main/java/com/baeldung/spring/data/solr/model/Product.java
rename to persistence-modules/spring-data-solr/src/main/java/com/baeldung/spring/data/solr/model/Product.java
diff --git a/spring-data-solr/src/main/java/com/baeldung/spring/data/solr/repository/ProductRepository.java b/persistence-modules/spring-data-solr/src/main/java/com/baeldung/spring/data/solr/repository/ProductRepository.java
similarity index 100%
rename from spring-data-solr/src/main/java/com/baeldung/spring/data/solr/repository/ProductRepository.java
rename to persistence-modules/spring-data-solr/src/main/java/com/baeldung/spring/data/solr/repository/ProductRepository.java
diff --git a/spring-data-solr/src/main/resources/solr-named-queries.properties b/persistence-modules/spring-data-solr/src/main/resources/solr-named-queries.properties
similarity index 100%
rename from spring-data-solr/src/main/resources/solr-named-queries.properties
rename to persistence-modules/spring-data-solr/src/main/resources/solr-named-queries.properties
diff --git a/spring-data-solr/src/test/java/com/baeldung/spring/data/solr/repo/ProductRepositoryIntegrationTest.java b/persistence-modules/spring-data-solr/src/test/java/com/baeldung/spring/data/solr/repo/ProductRepositoryIntegrationTest.java
similarity index 100%
rename from spring-data-solr/src/test/java/com/baeldung/spring/data/solr/repo/ProductRepositoryIntegrationTest.java
rename to persistence-modules/spring-data-solr/src/test/java/com/baeldung/spring/data/solr/repo/ProductRepositoryIntegrationTest.java
diff --git a/spring-hibernate3/.gitignore b/persistence-modules/spring-hibernate-3/.gitignore
similarity index 100%
rename from spring-hibernate3/.gitignore
rename to persistence-modules/spring-hibernate-3/.gitignore
diff --git a/spring-hibernate3/README.md b/persistence-modules/spring-hibernate-3/README.md
similarity index 100%
rename from spring-hibernate3/README.md
rename to persistence-modules/spring-hibernate-3/README.md
diff --git a/spring-hibernate3/pom.xml b/persistence-modules/spring-hibernate-3/pom.xml
similarity index 96%
rename from spring-hibernate3/pom.xml
rename to persistence-modules/spring-hibernate-3/pom.xml
index c36b1c0522..8eee819572 100644
--- a/spring-hibernate3/pom.xml
+++ b/persistence-modules/spring-hibernate-3/pom.xml
@@ -2,15 +2,16 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
com.baeldung
- spring-hibernate3
+ spring-hibernate-3
0.1-SNAPSHOT
- spring-hibernate3
+ spring-hibernate-3
com.baeldung
parent-modules
1.0.0-SNAPSHOT
+ ../
@@ -87,7 +88,7 @@
- spring-hibernate3
+ spring-hibernate-3
src/main/resources
diff --git a/spring-hibernate3/src/main/java/org/baeldung/persistence/dao/AbstractHibernateDao.java b/persistence-modules/spring-hibernate-3/src/main/java/org/baeldung/persistence/dao/AbstractHibernateDao.java
similarity index 100%
rename from spring-hibernate3/src/main/java/org/baeldung/persistence/dao/AbstractHibernateDao.java
rename to persistence-modules/spring-hibernate-3/src/main/java/org/baeldung/persistence/dao/AbstractHibernateDao.java
diff --git a/spring-hibernate3/src/main/java/org/baeldung/persistence/dao/EventDao.java b/persistence-modules/spring-hibernate-3/src/main/java/org/baeldung/persistence/dao/EventDao.java
similarity index 100%
rename from spring-hibernate3/src/main/java/org/baeldung/persistence/dao/EventDao.java
rename to persistence-modules/spring-hibernate-3/src/main/java/org/baeldung/persistence/dao/EventDao.java
diff --git a/spring-hibernate3/src/main/java/org/baeldung/persistence/dao/FooDao.java b/persistence-modules/spring-hibernate-3/src/main/java/org/baeldung/persistence/dao/FooDao.java
similarity index 100%
rename from spring-hibernate3/src/main/java/org/baeldung/persistence/dao/FooDao.java
rename to persistence-modules/spring-hibernate-3/src/main/java/org/baeldung/persistence/dao/FooDao.java
diff --git a/spring-hibernate3/src/main/java/org/baeldung/persistence/dao/IEventDao.java b/persistence-modules/spring-hibernate-3/src/main/java/org/baeldung/persistence/dao/IEventDao.java
similarity index 100%
rename from spring-hibernate3/src/main/java/org/baeldung/persistence/dao/IEventDao.java
rename to persistence-modules/spring-hibernate-3/src/main/java/org/baeldung/persistence/dao/IEventDao.java
diff --git a/spring-hibernate3/src/main/java/org/baeldung/persistence/dao/IFooDao.java b/persistence-modules/spring-hibernate-3/src/main/java/org/baeldung/persistence/dao/IFooDao.java
similarity index 100%
rename from spring-hibernate3/src/main/java/org/baeldung/persistence/dao/IFooDao.java
rename to persistence-modules/spring-hibernate-3/src/main/java/org/baeldung/persistence/dao/IFooDao.java
diff --git a/spring-hibernate3/src/main/java/org/baeldung/persistence/dao/IOperations.java b/persistence-modules/spring-hibernate-3/src/main/java/org/baeldung/persistence/dao/IOperations.java
similarity index 100%
rename from spring-hibernate3/src/main/java/org/baeldung/persistence/dao/IOperations.java
rename to persistence-modules/spring-hibernate-3/src/main/java/org/baeldung/persistence/dao/IOperations.java
diff --git a/spring-hibernate3/src/main/java/org/baeldung/persistence/model/Event.java b/persistence-modules/spring-hibernate-3/src/main/java/org/baeldung/persistence/model/Event.java
similarity index 100%
rename from spring-hibernate3/src/main/java/org/baeldung/persistence/model/Event.java
rename to persistence-modules/spring-hibernate-3/src/main/java/org/baeldung/persistence/model/Event.java
diff --git a/spring-hibernate3/src/main/java/org/baeldung/persistence/model/Foo.java b/persistence-modules/spring-hibernate-3/src/main/java/org/baeldung/persistence/model/Foo.java
similarity index 100%
rename from spring-hibernate3/src/main/java/org/baeldung/persistence/model/Foo.java
rename to persistence-modules/spring-hibernate-3/src/main/java/org/baeldung/persistence/model/Foo.java
diff --git a/spring-hibernate3/src/main/java/org/baeldung/persistence/service/EventService.java b/persistence-modules/spring-hibernate-3/src/main/java/org/baeldung/persistence/service/EventService.java
similarity index 100%
rename from spring-hibernate3/src/main/java/org/baeldung/persistence/service/EventService.java
rename to persistence-modules/spring-hibernate-3/src/main/java/org/baeldung/persistence/service/EventService.java
diff --git a/spring-hibernate3/src/main/java/org/baeldung/persistence/service/FooService.java b/persistence-modules/spring-hibernate-3/src/main/java/org/baeldung/persistence/service/FooService.java
similarity index 100%
rename from spring-hibernate3/src/main/java/org/baeldung/persistence/service/FooService.java
rename to persistence-modules/spring-hibernate-3/src/main/java/org/baeldung/persistence/service/FooService.java
diff --git a/spring-hibernate3/src/main/java/org/baeldung/spring/PersistenceConfig.java b/persistence-modules/spring-hibernate-3/src/main/java/org/baeldung/spring/PersistenceConfig.java
similarity index 100%
rename from spring-hibernate3/src/main/java/org/baeldung/spring/PersistenceConfig.java
rename to persistence-modules/spring-hibernate-3/src/main/java/org/baeldung/spring/PersistenceConfig.java
diff --git a/spring-hibernate3/src/main/java/org/baeldung/spring/PersistenceXmlConfig.java b/persistence-modules/spring-hibernate-3/src/main/java/org/baeldung/spring/PersistenceXmlConfig.java
similarity index 100%
rename from spring-hibernate3/src/main/java/org/baeldung/spring/PersistenceXmlConfig.java
rename to persistence-modules/spring-hibernate-3/src/main/java/org/baeldung/spring/PersistenceXmlConfig.java
diff --git a/spring-hibernate3/src/main/resources/exceptionDemo.cfg.xml b/persistence-modules/spring-hibernate-3/src/main/resources/exceptionDemo.cfg.xml
similarity index 100%
rename from spring-hibernate3/src/main/resources/exceptionDemo.cfg.xml
rename to persistence-modules/spring-hibernate-3/src/main/resources/exceptionDemo.cfg.xml
diff --git a/spring-hibernate3/src/main/resources/exceptionDemoPersistenceConfig.xml b/persistence-modules/spring-hibernate-3/src/main/resources/exceptionDemoPersistenceConfig.xml
similarity index 100%
rename from spring-hibernate3/src/main/resources/exceptionDemoPersistenceConfig.xml
rename to persistence-modules/spring-hibernate-3/src/main/resources/exceptionDemoPersistenceConfig.xml
diff --git a/spring-hibernate3/src/main/resources/logback.xml b/persistence-modules/spring-hibernate-3/src/main/resources/logback.xml
similarity index 100%
rename from spring-hibernate3/src/main/resources/logback.xml
rename to persistence-modules/spring-hibernate-3/src/main/resources/logback.xml
diff --git a/spring-hibernate3/src/main/resources/persistence-h2.properties b/persistence-modules/spring-hibernate-3/src/main/resources/persistence-h2.properties
similarity index 100%
rename from spring-hibernate3/src/main/resources/persistence-h2.properties
rename to persistence-modules/spring-hibernate-3/src/main/resources/persistence-h2.properties
diff --git a/spring-hibernate3/src/main/resources/persistence-mysql.properties b/persistence-modules/spring-hibernate-3/src/main/resources/persistence-mysql.properties
similarity index 100%
rename from spring-hibernate3/src/main/resources/persistence-mysql.properties
rename to persistence-modules/spring-hibernate-3/src/main/resources/persistence-mysql.properties
diff --git a/spring-hibernate3/src/main/resources/persistenceConfig.xml b/persistence-modules/spring-hibernate-3/src/main/resources/persistenceConfig.xml
similarity index 100%
rename from spring-hibernate3/src/main/resources/persistenceConfig.xml
rename to persistence-modules/spring-hibernate-3/src/main/resources/persistenceConfig.xml
diff --git a/spring-hibernate3/src/main/webapp/WEB-INF/view/sample.jsp b/persistence-modules/spring-hibernate-3/src/main/webapp/WEB-INF/view/sample.jsp
similarity index 100%
rename from spring-hibernate3/src/main/webapp/WEB-INF/view/sample.jsp
rename to persistence-modules/spring-hibernate-3/src/main/webapp/WEB-INF/view/sample.jsp
diff --git a/spring-hibernate3/src/main/webapp/WEB-INF/web.xml b/persistence-modules/spring-hibernate-3/src/main/webapp/WEB-INF/web.xml
similarity index 100%
rename from spring-hibernate3/src/main/webapp/WEB-INF/web.xml
rename to persistence-modules/spring-hibernate-3/src/main/webapp/WEB-INF/web.xml
diff --git a/spring-hibernate3/src/test/java/org/baeldung/persistence/service/FooServicePersistenceIntegrationTest.java b/persistence-modules/spring-hibernate-3/src/test/java/org/baeldung/persistence/service/FooServicePersistenceIntegrationTest.java
similarity index 100%
rename from spring-hibernate3/src/test/java/org/baeldung/persistence/service/FooServicePersistenceIntegrationTest.java
rename to persistence-modules/spring-hibernate-3/src/test/java/org/baeldung/persistence/service/FooServicePersistenceIntegrationTest.java
diff --git a/spring-hibernate3/src/test/java/org/baeldung/persistence/service/NoHibernateSessBoundUsingAnnoSessionBeanMainIntegrationTest.java b/persistence-modules/spring-hibernate-3/src/test/java/org/baeldung/persistence/service/NoHibernateSessBoundUsingAnnoSessionBeanMainIntegrationTest.java
similarity index 100%
rename from spring-hibernate3/src/test/java/org/baeldung/persistence/service/NoHibernateSessBoundUsingAnnoSessionBeanMainIntegrationTest.java
rename to persistence-modules/spring-hibernate-3/src/test/java/org/baeldung/persistence/service/NoHibernateSessBoundUsingAnnoSessionBeanMainIntegrationTest.java
diff --git a/spring-hibernate3/src/test/java/org/baeldung/persistence/service/NoHibernateSessBoundUsingLocalSessionBeanMainIntegrationTest.java b/persistence-modules/spring-hibernate-3/src/test/java/org/baeldung/persistence/service/NoHibernateSessBoundUsingLocalSessionBeanMainIntegrationTest.java
similarity index 100%
rename from spring-hibernate3/src/test/java/org/baeldung/persistence/service/NoHibernateSessBoundUsingLocalSessionBeanMainIntegrationTest.java
rename to persistence-modules/spring-hibernate-3/src/test/java/org/baeldung/persistence/service/NoHibernateSessBoundUsingLocalSessionBeanMainIntegrationTest.java
diff --git a/spring-hibernate3/src/test/resources/.gitignore b/persistence-modules/spring-hibernate-3/src/test/resources/.gitignore
similarity index 100%
rename from spring-hibernate3/src/test/resources/.gitignore
rename to persistence-modules/spring-hibernate-3/src/test/resources/.gitignore
diff --git a/spring-hibernate5/.gitignore b/persistence-modules/spring-hibernate-5/.gitignore
similarity index 100%
rename from spring-hibernate5/.gitignore
rename to persistence-modules/spring-hibernate-5/.gitignore
diff --git a/spring-hibernate5/README.md b/persistence-modules/spring-hibernate-5/README.md
similarity index 100%
rename from spring-hibernate5/README.md
rename to persistence-modules/spring-hibernate-5/README.md
diff --git a/spring-hibernate5/pom.xml b/persistence-modules/spring-hibernate-5/pom.xml
similarity index 97%
rename from spring-hibernate5/pom.xml
rename to persistence-modules/spring-hibernate-5/pom.xml
index dac43c4dd3..f1f3d10347 100644
--- a/spring-hibernate5/pom.xml
+++ b/persistence-modules/spring-hibernate-5/pom.xml
@@ -2,15 +2,16 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
com.baeldung
- spring-hibernate5
+ spring-hibernate-5
0.1-SNAPSHOT
- spring-hibernate5
+ spring-hibernate-5
com.baeldung
parent-modules
1.0.0-SNAPSHOT
+ ../
@@ -136,7 +137,7 @@
- spring-hibernate5
+ spring-hibernate-5
src/main/resources
diff --git a/spring-hibernate5/src/main/java/com/baeldung/hibernate/immutable/entities/Event.java b/persistence-modules/spring-hibernate-5/src/main/java/com/baeldung/hibernate/immutable/entities/Event.java
similarity index 100%
rename from spring-hibernate5/src/main/java/com/baeldung/hibernate/immutable/entities/Event.java
rename to persistence-modules/spring-hibernate-5/src/main/java/com/baeldung/hibernate/immutable/entities/Event.java
diff --git a/spring-hibernate5/src/main/java/com/baeldung/hibernate/immutable/entities/EventGeneratedId.java b/persistence-modules/spring-hibernate-5/src/main/java/com/baeldung/hibernate/immutable/entities/EventGeneratedId.java
similarity index 100%
rename from spring-hibernate5/src/main/java/com/baeldung/hibernate/immutable/entities/EventGeneratedId.java
rename to persistence-modules/spring-hibernate-5/src/main/java/com/baeldung/hibernate/immutable/entities/EventGeneratedId.java
diff --git a/spring-hibernate5/src/main/java/com/baeldung/hibernate/immutable/util/HibernateUtil.java b/persistence-modules/spring-hibernate-5/src/main/java/com/baeldung/hibernate/immutable/util/HibernateUtil.java
similarity index 100%
rename from spring-hibernate5/src/main/java/com/baeldung/hibernate/immutable/util/HibernateUtil.java
rename to persistence-modules/spring-hibernate-5/src/main/java/com/baeldung/hibernate/immutable/util/HibernateUtil.java
diff --git a/spring-hibernate5/src/main/java/com/baeldung/hibernate/manytomany/model/Employee.java b/persistence-modules/spring-hibernate-5/src/main/java/com/baeldung/hibernate/manytomany/model/Employee.java
similarity index 100%
rename from spring-hibernate5/src/main/java/com/baeldung/hibernate/manytomany/model/Employee.java
rename to persistence-modules/spring-hibernate-5/src/main/java/com/baeldung/hibernate/manytomany/model/Employee.java
diff --git a/spring-hibernate5/src/main/java/com/baeldung/hibernate/manytomany/model/Project.java b/persistence-modules/spring-hibernate-5/src/main/java/com/baeldung/hibernate/manytomany/model/Project.java
similarity index 100%
rename from spring-hibernate5/src/main/java/com/baeldung/hibernate/manytomany/model/Project.java
rename to persistence-modules/spring-hibernate-5/src/main/java/com/baeldung/hibernate/manytomany/model/Project.java
diff --git a/spring-hibernate5/src/main/java/com/baeldung/hibernate/manytomany/util/HibernateUtil.java b/persistence-modules/spring-hibernate-5/src/main/java/com/baeldung/hibernate/manytomany/util/HibernateUtil.java
similarity index 100%
rename from spring-hibernate5/src/main/java/com/baeldung/hibernate/manytomany/util/HibernateUtil.java
rename to persistence-modules/spring-hibernate-5/src/main/java/com/baeldung/hibernate/manytomany/util/HibernateUtil.java
diff --git a/spring-hibernate5/src/main/java/com/baeldung/manytomany/spring/PersistenceConfig.java b/persistence-modules/spring-hibernate-5/src/main/java/com/baeldung/manytomany/spring/PersistenceConfig.java
similarity index 100%
rename from spring-hibernate5/src/main/java/com/baeldung/manytomany/spring/PersistenceConfig.java
rename to persistence-modules/spring-hibernate-5/src/main/java/com/baeldung/manytomany/spring/PersistenceConfig.java
diff --git a/spring-hibernate5/src/main/java/com/baeldung/persistence/dao/IFooDao.java b/persistence-modules/spring-hibernate-5/src/main/java/com/baeldung/persistence/dao/IFooDao.java
similarity index 100%
rename from spring-hibernate5/src/main/java/com/baeldung/persistence/dao/IFooDao.java
rename to persistence-modules/spring-hibernate-5/src/main/java/com/baeldung/persistence/dao/IFooDao.java
diff --git a/spring-hibernate5/src/main/java/com/baeldung/persistence/dao/common/AbstractDao.java b/persistence-modules/spring-hibernate-5/src/main/java/com/baeldung/persistence/dao/common/AbstractDao.java
similarity index 100%
rename from spring-hibernate5/src/main/java/com/baeldung/persistence/dao/common/AbstractDao.java
rename to persistence-modules/spring-hibernate-5/src/main/java/com/baeldung/persistence/dao/common/AbstractDao.java
diff --git a/spring-hibernate5/src/main/java/com/baeldung/persistence/dao/common/AbstractHibernateDao.java b/persistence-modules/spring-hibernate-5/src/main/java/com/baeldung/persistence/dao/common/AbstractHibernateDao.java
similarity index 100%
rename from spring-hibernate5/src/main/java/com/baeldung/persistence/dao/common/AbstractHibernateDao.java
rename to persistence-modules/spring-hibernate-5/src/main/java/com/baeldung/persistence/dao/common/AbstractHibernateDao.java
diff --git a/spring-hibernate5/src/main/java/com/baeldung/persistence/dao/common/IOperations.java b/persistence-modules/spring-hibernate-5/src/main/java/com/baeldung/persistence/dao/common/IOperations.java
similarity index 100%
rename from spring-hibernate5/src/main/java/com/baeldung/persistence/dao/common/IOperations.java
rename to persistence-modules/spring-hibernate-5/src/main/java/com/baeldung/persistence/dao/common/IOperations.java
diff --git a/spring-hibernate5/src/main/java/com/baeldung/persistence/dao/impl/FooHibernateDao.java b/persistence-modules/spring-hibernate-5/src/main/java/com/baeldung/persistence/dao/impl/FooHibernateDao.java
similarity index 100%
rename from spring-hibernate5/src/main/java/com/baeldung/persistence/dao/impl/FooHibernateDao.java
rename to persistence-modules/spring-hibernate-5/src/main/java/com/baeldung/persistence/dao/impl/FooHibernateDao.java
diff --git a/spring-hibernate5/src/main/java/com/baeldung/persistence/manytomany/dao/IEmployeeDao.java b/persistence-modules/spring-hibernate-5/src/main/java/com/baeldung/persistence/manytomany/dao/IEmployeeDao.java
similarity index 100%
rename from spring-hibernate5/src/main/java/com/baeldung/persistence/manytomany/dao/IEmployeeDao.java
rename to persistence-modules/spring-hibernate-5/src/main/java/com/baeldung/persistence/manytomany/dao/IEmployeeDao.java
diff --git a/spring-hibernate5/src/main/java/com/baeldung/persistence/manytomany/dao/IProjectDao.java b/persistence-modules/spring-hibernate-5/src/main/java/com/baeldung/persistence/manytomany/dao/IProjectDao.java
similarity index 100%
rename from spring-hibernate5/src/main/java/com/baeldung/persistence/manytomany/dao/IProjectDao.java
rename to persistence-modules/spring-hibernate-5/src/main/java/com/baeldung/persistence/manytomany/dao/IProjectDao.java
diff --git a/spring-hibernate5/src/main/java/com/baeldung/persistence/manytomany/dao/impl/EmployeeDao.java b/persistence-modules/spring-hibernate-5/src/main/java/com/baeldung/persistence/manytomany/dao/impl/EmployeeDao.java
similarity index 100%
rename from spring-hibernate5/src/main/java/com/baeldung/persistence/manytomany/dao/impl/EmployeeDao.java
rename to persistence-modules/spring-hibernate-5/src/main/java/com/baeldung/persistence/manytomany/dao/impl/EmployeeDao.java
diff --git a/spring-hibernate5/src/main/java/com/baeldung/persistence/manytomany/dao/impl/ProjectDao.java b/persistence-modules/spring-hibernate-5/src/main/java/com/baeldung/persistence/manytomany/dao/impl/ProjectDao.java
similarity index 100%
rename from spring-hibernate5/src/main/java/com/baeldung/persistence/manytomany/dao/impl/ProjectDao.java
rename to persistence-modules/spring-hibernate-5/src/main/java/com/baeldung/persistence/manytomany/dao/impl/ProjectDao.java
diff --git a/spring-hibernate5/src/main/java/com/baeldung/persistence/model/Foo.java b/persistence-modules/spring-hibernate-5/src/main/java/com/baeldung/persistence/model/Foo.java
similarity index 100%
rename from spring-hibernate5/src/main/java/com/baeldung/persistence/model/Foo.java
rename to persistence-modules/spring-hibernate-5/src/main/java/com/baeldung/persistence/model/Foo.java
diff --git a/spring-hibernate5/src/main/java/com/baeldung/spring/PersistenceConfig.java b/persistence-modules/spring-hibernate-5/src/main/java/com/baeldung/spring/PersistenceConfig.java
similarity index 100%
rename from spring-hibernate5/src/main/java/com/baeldung/spring/PersistenceConfig.java
rename to persistence-modules/spring-hibernate-5/src/main/java/com/baeldung/spring/PersistenceConfig.java
diff --git a/spring-hibernate5/src/main/java/com/baeldung/spring/PersistenceXmlConfig.java b/persistence-modules/spring-hibernate-5/src/main/java/com/baeldung/spring/PersistenceXmlConfig.java
similarity index 100%
rename from spring-hibernate5/src/main/java/com/baeldung/spring/PersistenceXmlConfig.java
rename to persistence-modules/spring-hibernate-5/src/main/java/com/baeldung/spring/PersistenceXmlConfig.java
diff --git a/spring-hibernate5/src/main/resources/hibernate5Config.xml b/persistence-modules/spring-hibernate-5/src/main/resources/hibernate5Config.xml
similarity index 100%
rename from spring-hibernate5/src/main/resources/hibernate5Config.xml
rename to persistence-modules/spring-hibernate-5/src/main/resources/hibernate5Config.xml
diff --git a/spring-hibernate5/src/main/resources/immutable.cfg.xml b/persistence-modules/spring-hibernate-5/src/main/resources/immutable.cfg.xml
similarity index 100%
rename from spring-hibernate5/src/main/resources/immutable.cfg.xml
rename to persistence-modules/spring-hibernate-5/src/main/resources/immutable.cfg.xml
diff --git a/spring-hibernate5/src/main/resources/logback.xml b/persistence-modules/spring-hibernate-5/src/main/resources/logback.xml
similarity index 100%
rename from spring-hibernate5/src/main/resources/logback.xml
rename to persistence-modules/spring-hibernate-5/src/main/resources/logback.xml
diff --git a/spring-hibernate5/src/main/resources/manytomany.cfg.xml b/persistence-modules/spring-hibernate-5/src/main/resources/manytomany.cfg.xml
similarity index 100%
rename from spring-hibernate5/src/main/resources/manytomany.cfg.xml
rename to persistence-modules/spring-hibernate-5/src/main/resources/manytomany.cfg.xml
diff --git a/spring-hibernate5/src/main/resources/persistence-h2.properties b/persistence-modules/spring-hibernate-5/src/main/resources/persistence-h2.properties
similarity index 100%
rename from spring-hibernate5/src/main/resources/persistence-h2.properties
rename to persistence-modules/spring-hibernate-5/src/main/resources/persistence-h2.properties
diff --git a/spring-hibernate5/src/main/resources/persistence-mysql.properties b/persistence-modules/spring-hibernate-5/src/main/resources/persistence-mysql.properties
similarity index 100%
rename from spring-hibernate5/src/main/resources/persistence-mysql.properties
rename to persistence-modules/spring-hibernate-5/src/main/resources/persistence-mysql.properties
diff --git a/spring-hibernate5/src/test/java/com/baeldung/hibernate/immutable/HibernateImmutableIntegrationTest.java b/persistence-modules/spring-hibernate-5/src/test/java/com/baeldung/hibernate/immutable/HibernateImmutableIntegrationTest.java
similarity index 100%
rename from spring-hibernate5/src/test/java/com/baeldung/hibernate/immutable/HibernateImmutableIntegrationTest.java
rename to persistence-modules/spring-hibernate-5/src/test/java/com/baeldung/hibernate/immutable/HibernateImmutableIntegrationTest.java
diff --git a/spring-hibernate5/src/test/java/com/baeldung/hibernate/manytomany/HibernateManyToManyAnnotationJavaConfigMainIntegrationTest.java b/persistence-modules/spring-hibernate-5/src/test/java/com/baeldung/hibernate/manytomany/HibernateManyToManyAnnotationJavaConfigMainIntegrationTest.java
similarity index 100%
rename from spring-hibernate5/src/test/java/com/baeldung/hibernate/manytomany/HibernateManyToManyAnnotationJavaConfigMainIntegrationTest.java
rename to persistence-modules/spring-hibernate-5/src/test/java/com/baeldung/hibernate/manytomany/HibernateManyToManyAnnotationJavaConfigMainIntegrationTest.java
diff --git a/spring-hibernate5/src/test/java/com/baeldung/hibernate/manytomany/HibernateManyToManyAnnotationMainIntegrationTest.java b/persistence-modules/spring-hibernate-5/src/test/java/com/baeldung/hibernate/manytomany/HibernateManyToManyAnnotationMainIntegrationTest.java
similarity index 100%
rename from spring-hibernate5/src/test/java/com/baeldung/hibernate/manytomany/HibernateManyToManyAnnotationMainIntegrationTest.java
rename to persistence-modules/spring-hibernate-5/src/test/java/com/baeldung/hibernate/manytomany/HibernateManyToManyAnnotationMainIntegrationTest.java
diff --git a/spring-hibernate5/src/test/java/com/baeldung/persistence/dao/common/HibernateDaoIntegrationTest.java b/persistence-modules/spring-hibernate-5/src/test/java/com/baeldung/persistence/dao/common/HibernateDaoIntegrationTest.java
similarity index 100%
rename from spring-hibernate5/src/test/java/com/baeldung/persistence/dao/common/HibernateDaoIntegrationTest.java
rename to persistence-modules/spring-hibernate-5/src/test/java/com/baeldung/persistence/dao/common/HibernateDaoIntegrationTest.java
diff --git a/spring-hibernate5/src/test/resources/.gitignore b/persistence-modules/spring-hibernate-5/src/test/resources/.gitignore
similarity index 100%
rename from spring-hibernate5/src/test/resources/.gitignore
rename to persistence-modules/spring-hibernate-5/src/test/resources/.gitignore
diff --git a/pom.xml b/pom.xml
index d537adf08e..1f7a7996bf 100644
--- a/pom.xml
+++ b/pom.xml
@@ -49,8 +49,8 @@
core-java-8
core-java-concurrency
couchbase
- cas-server
- cas-secured-app
+ cas/cas-server
+ cas/cas-secured-app
deltaspike
dozer
@@ -85,7 +85,7 @@
immutables
jackson
-
+
vavr
javax-servlets
javaxval
@@ -124,11 +124,11 @@
pdf
protobuffer
- querydsl
+ persistence-modules/querydsl
reactor-core
- redis
+ persistence-modules/redis
rest-assured
rest-testing
resteasy
@@ -136,7 +136,7 @@
spring-swagger-codegen
selenium-junit-testng
- solr
+ persistence-modules/solr
spark-java
spring-5-mvc
@@ -149,26 +149,27 @@
spring-batch
spring-bom
spring-boot
+ spring-boot-bootstrap
spring-cloud-data-flow
spring-cloud
spring-core
spring-cucumber
spring-aop
- spring-data-cassandra
+ persistence-modules/spring-data-cassandra
spring-data-couchbase-2
- spring-data-dynamodb
+ persistence-modules/spring-data-dynamodb
spring-data-elasticsearch
spring-data-mongodb
- spring-data-neo4j
- spring-data-redis
+ persistence-modules/spring-data-neo4j
+ persistence-modules/spring-data-redis
spring-data-rest
- spring-data-solr
+ persistence-modules/spring-data-solr
spring-dispatcher-servlet
spring-exceptions
spring-freemarker
- spring-hibernate3
+ persistence-modules/spring-hibernate-3
spring-hibernate4
- spring-hibernate5
+ persistence-modules/spring-hibernate-5
spring-integration
spring-jersey
spring-jmeter-jenkins
@@ -244,11 +245,11 @@
rabbitmq
vertx
- spring-data-gemfire
+ persistence-modules/spring-data-gemfire
mybatis
spring-drools
drools
- liquibase
+ persistence-modules/liquibase
spring-boot-property-exp
mockserver
undertow
diff --git a/rest-testing/pom.xml b/rest-testing/pom.xml
index b99dfac571..74ea5760c4 100644
--- a/rest-testing/pom.xml
+++ b/rest-testing/pom.xml
@@ -88,6 +88,19 @@
${jbehave.version}
test
+
+
+ com.intuit.karate
+ karate-apache
+ ${karate.version}
+
+
+
+ com.intuit.karate
+ karate-junit4
+ ${karate.version}
+ test
+
@@ -150,6 +163,7 @@
2.9.0
1.2.5
2.4.1
+ 0.6.1
4.4.5
4.5.2
diff --git a/rest-testing/src/main/resources/Feature/cucumber.feature b/rest-testing/src/main/resources/karate/cucumber.feature
similarity index 100%
rename from rest-testing/src/main/resources/Feature/cucumber.feature
rename to rest-testing/src/main/resources/karate/cucumber.feature
diff --git a/rest-testing/src/test/java/com/baeldung/rest/karate/KarateUnitTest.java b/rest-testing/src/test/java/com/baeldung/rest/karate/KarateUnitTest.java
new file mode 100644
index 0000000000..f942721504
--- /dev/null
+++ b/rest-testing/src/test/java/com/baeldung/rest/karate/KarateUnitTest.java
@@ -0,0 +1,44 @@
+package com.baeldung.rest.karate;
+
+import com.github.tomakehurst.wiremock.WireMockServer;
+import com.intuit.karate.junit4.Karate;
+import cucumber.api.CucumberOptions;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.runner.RunWith;
+
+import static com.github.tomakehurst.wiremock.client.WireMock.*;
+import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
+
+@RunWith(Karate.class)
+@CucumberOptions(features = "classpath:karate")
+public class KarateUnitTest {
+
+ private static final WireMockServer wireMockServer = new WireMockServer();
+
+ @BeforeClass
+ public static void setUp() throws Exception {
+ wireMockServer.start();
+
+ configureFor("localhost", 8080);
+ stubFor(get(urlEqualTo("/user/get"))
+ .willReturn(aResponse()
+ .withStatus(200)
+ .withHeader("Content-Type", "application/json")
+ .withBody("{ \"id\": \"1234\", name: \"John Smith\" }")));
+ stubFor(post(urlEqualTo("/user/create"))
+ .withHeader("content-type", equalTo("application/json"))
+ .withRequestBody(containing("id"))
+ .willReturn(aResponse()
+ .withStatus(200)
+ .withHeader("Content-Type", "application/json")
+ .withBody("{ \"id\": \"1234\", name: \"John Smith\" }")));
+
+ }
+
+ @AfterClass
+ public static void tearDown() throws Exception {
+ wireMockServer.stop();
+ }
+
+}
diff --git a/rest-testing/src/test/resources/karate/user.feature b/rest-testing/src/test/resources/karate/user.feature
new file mode 100644
index 0000000000..d9f0f12a9c
--- /dev/null
+++ b/rest-testing/src/test/resources/karate/user.feature
@@ -0,0 +1,42 @@
+Feature: Testing a REST API with Karate
+
+Scenario: Testing valid GET endpoint
+ Given url 'http://localhost:8080/user/get'
+ When method GET
+ Then status 200
+
+Scenario: Testing an invalid GET endpoint - 404
+ Given url 'http://localhost:8080/user/wrong'
+ When method GET
+ Then status 404
+
+Scenario: Testing the exact response of a GET endpoint
+ Given url 'http://localhost:8080/user/get'
+ When method GET
+ Then status 200
+ And match $ == {id:"1234",name:"John Smith"}
+
+Scenario: Testing the exact response field value of a GET endpoint
+ Given url 'http://localhost:8080/user/get'
+ When method GET
+ Then status 200
+ And match $.id == "1234"
+
+Scenario: Testing that GET response contains specific field
+ Given url 'http://localhost:8080/user/get'
+ When method GET
+ Then status 200
+ And match $ contains {id:"1234"}
+
+Scenario: Test GET response using markers
+ Given url 'http://localhost:8080/user/get'
+ When method GET
+ Then status 200
+ And match $ == {id:"#notnull",name:"John Smith"}
+
+Scenario: Testing a POST endpoint with request body
+ Given url 'http://localhost:8080/user/create'
+ And request { id: '1234' , name: 'John Smith'}
+ When method POST
+ Then status 200
+ And match $ contains {id:"#notnull"}
diff --git a/spring-5/src/main/java/com/baeldung/web/reactive/client/WebClientController.java b/spring-5/src/main/java/com/baeldung/web/reactive/client/WebClientController.java
index 7bab288bab..a218c6b7cf 100644
--- a/spring-5/src/main/java/com/baeldung/web/reactive/client/WebClientController.java
+++ b/spring-5/src/main/java/com/baeldung/web/reactive/client/WebClientController.java
@@ -43,7 +43,8 @@ public class WebClientController {
WebClient.RequestHeadersSpec> requestSpec2 = uri2.body(BodyInserters.fromObject("data"));
// inserters
- BodyInserter, ReactiveHttpOutputMessage> inserter1 = BodyInserters.fromPublisher(Subscriber::onComplete, String.class);
+ BodyInserter, ReactiveHttpOutputMessage> inserter1 = BodyInserters
+ .fromPublisher(Subscriber::onComplete, String.class);
LinkedMultiValueMap map = new LinkedMultiValueMap<>();
map.add("key1", "value1");
diff --git a/spring-boot-bootstrap/pom.xml b/spring-boot-bootstrap/pom.xml
index 9da37a3261..5ad8330a89 100644
--- a/spring-boot-bootstrap/pom.xml
+++ b/spring-boot-bootstrap/pom.xml
@@ -12,10 +12,10 @@
Demo project for Spring Boot
- org.springframework.boot
- spring-boot-starter-parent
- 1.5.3.RELEASE
-
+ parent-boot-5
+ com.baeldung
+ 0.0.1-SNAPSHOT
+ ../parent-boot-5
+
+
+
+ UTF-8
+ UTF-8
+ 1.8
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+ org.springframework.boot
+ spring-boot-starter-data-jpa
+
+
+ org.springframework.boot
+ spring-boot-starter-data-rest
+
+
+
+
+ com.h2database
+ h2
+ runtime
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+
+
+
diff --git a/spring-rest-shell/src/main/java/com/baeldung/Application.java b/spring-rest-shell/src/main/java/com/baeldung/Application.java
new file mode 100644
index 0000000000..37dbe7dab8
--- /dev/null
+++ b/spring-rest-shell/src/main/java/com/baeldung/Application.java
@@ -0,0 +1,13 @@
+package com.baeldung;
+
+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-rest-shell/src/main/java/com/baeldung/acticle/Article.java b/spring-rest-shell/src/main/java/com/baeldung/acticle/Article.java
new file mode 100644
index 0000000000..6a55517f9f
--- /dev/null
+++ b/spring-rest-shell/src/main/java/com/baeldung/acticle/Article.java
@@ -0,0 +1,40 @@
+package com.baeldung.acticle;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+@Entity
+public final class Article {
+
+ @Id
+ @GeneratedValue
+ private Long id;
+ private String title;
+ private String content;
+
+ 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 getContent() {
+ return content;
+ }
+
+ public void setContent(String content) {
+ this.content = content;
+ }
+
+}
diff --git a/spring-rest-shell/src/main/java/com/baeldung/acticle/ArticleRepository.java b/spring-rest-shell/src/main/java/com/baeldung/acticle/ArticleRepository.java
new file mode 100644
index 0000000000..83daf819f0
--- /dev/null
+++ b/spring-rest-shell/src/main/java/com/baeldung/acticle/ArticleRepository.java
@@ -0,0 +1,18 @@
+package com.baeldung.acticle;
+
+import org.springframework.data.repository.CrudRepository;
+import org.springframework.data.repository.query.Param;
+import org.springframework.data.rest.core.annotation.RepositoryRestResource;
+
+import java.util.Optional;
+
+@RepositoryRestResource(
+ path = "articles",
+ collectionResourceRel = "articles",
+ itemResourceRel = "article"
+)
+public interface ArticleRepository extends CrudRepository {
+
+ Optional findByTitle(@Param("title") String title);
+
+}