From 36be6908fe524b05ee79e491673483e9a3298cfb Mon Sep 17 00:00:00 2001 From: Johnathan Gilday Date: Thu, 12 Dec 2019 22:41:02 -0500 Subject: [PATCH 001/149] :construction: Gradle 6 - Publish Gradle Module Metadata --- gradle-6/.gitignore | 18 ++ gradle-6/build.gradle.kts | 15 ++ gradle-6/gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 58702 bytes .../gradle/wrapper/gradle-wrapper.properties | 5 + gradle-6/gradlew | 183 ++++++++++++++++++ gradle-6/gradlew.bat | 100 ++++++++++ gradle-6/settings.gradle.kts | 1 + .../java/com/baeldung/gradle/HelloWorld.java | 8 + 8 files changed, 330 insertions(+) create mode 100644 gradle-6/.gitignore create mode 100644 gradle-6/build.gradle.kts create mode 100644 gradle-6/gradle/wrapper/gradle-wrapper.jar create mode 100644 gradle-6/gradle/wrapper/gradle-wrapper.properties create mode 100755 gradle-6/gradlew create mode 100644 gradle-6/gradlew.bat create mode 100644 gradle-6/settings.gradle.kts create mode 100644 gradle-6/src/main/java/com/baeldung/gradle/HelloWorld.java diff --git a/gradle-6/.gitignore b/gradle-6/.gitignore new file mode 100644 index 0000000000..75efe642c0 --- /dev/null +++ b/gradle-6/.gitignore @@ -0,0 +1,18 @@ + +# Gradle + +.gradle +/build/ + +# Ignore Gradle GUI config +gradle-app.setting + +# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored) +!gradle-wrapper.jar + +# Cache of project +.gradletasknamecache + +# # Work around https://youtrack.jetbrains.com/issue/IDEA-116898 +# gradle/wrapper/gradle-wrapper.properties + diff --git a/gradle-6/build.gradle.kts b/gradle-6/build.gradle.kts new file mode 100644 index 0000000000..8933572db7 --- /dev/null +++ b/gradle-6/build.gradle.kts @@ -0,0 +1,15 @@ +plugins { + `java-library` + `maven-publish` +} + +group = "com.baeldung" +version = "1.0.0" + +publishing { + publications { + register("mavenJava", MavenPublication::class) { + from(components["java"]) + } + } +} \ No newline at end of file diff --git a/gradle-6/gradle/wrapper/gradle-wrapper.jar b/gradle-6/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..cc4fdc293d0e50b0ad9b65c16e7ddd1db2f6025b GIT binary patch literal 58702 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

@up^y4&I8N>~wvL%f(S2W%NN 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 D613UA literal 0 HcmV?d00001 diff --git a/gradle-6/gradle/wrapper/gradle-wrapper.properties b/gradle-6/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000000..94920145f3 --- /dev/null +++ b/gradle-6/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-6.0.1-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/gradle-6/gradlew b/gradle-6/gradlew new file mode 100755 index 0000000000..2fe81a7d95 --- /dev/null +++ b/gradle-6/gradlew @@ -0,0 +1,183 @@ +#!/usr/bin/env sh + +# +# Copyright 2015 the original author or authors. +# +# Licensed 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 +# +# https://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. +# + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +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 +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn () { + echo "$*" +} + +die () { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +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 + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin or MSYS, switch paths to Windows format before running java +if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=`expr $i + 1` + done + case $i in + 0) set -- ;; + 1) set -- "$args0" ;; + 2) set -- "$args0" "$args1" ;; + 3) set -- "$args0" "$args1" "$args2" ;; + 4) set -- "$args0" "$args1" "$args2" "$args3" ;; + 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=`save "$@"` + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +exec "$JAVACMD" "$@" diff --git a/gradle-6/gradlew.bat b/gradle-6/gradlew.bat new file mode 100644 index 0000000000..24467a141f --- /dev/null +++ b/gradle-6/gradlew.bat @@ -0,0 +1,100 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windows variants + +if not "%OS%" == "Windows_NT" goto win9xME_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/gradle-6/settings.gradle.kts b/gradle-6/settings.gradle.kts new file mode 100644 index 0000000000..8866408745 --- /dev/null +++ b/gradle-6/settings.gradle.kts @@ -0,0 +1 @@ +rootProject.name = "gradle-6" diff --git a/gradle-6/src/main/java/com/baeldung/gradle/HelloWorld.java b/gradle-6/src/main/java/com/baeldung/gradle/HelloWorld.java new file mode 100644 index 0000000000..4f947330eb --- /dev/null +++ b/gradle-6/src/main/java/com/baeldung/gradle/HelloWorld.java @@ -0,0 +1,8 @@ +package com.baeldung.gradle; + +public class HelloWorld { + + public String sayHello() { + return "Hello, world!"; + } +} From f95a1a2011faca59d810c88cec07e7a3b710eb1f Mon Sep 17 00:00:00 2001 From: Johnathan Gilday Date: Tue, 17 Dec 2019 20:46:47 -0500 Subject: [PATCH 002/149] :construction: Gradle 6 - Dependency constraints --- gradle-6/build.gradle.kts | 29 ++++++++++++++++++- .../java/com/baeldung/gradle/HelloWorld.java | 8 ----- .../com/baeldung/gradle/RxHelloWorld.java | 18 ++++++++++++ .../baeldung/gradle/RxHelloWorldUnitTest.java | 14 +++++++++ 4 files changed, 60 insertions(+), 9 deletions(-) delete mode 100644 gradle-6/src/main/java/com/baeldung/gradle/HelloWorld.java create mode 100644 gradle-6/src/main/java/com/baeldung/gradle/RxHelloWorld.java create mode 100644 gradle-6/src/test/java/com/baeldung/gradle/RxHelloWorldUnitTest.java diff --git a/gradle-6/build.gradle.kts b/gradle-6/build.gradle.kts index 8933572db7..d9876dfe28 100644 --- a/gradle-6/build.gradle.kts +++ b/gradle-6/build.gradle.kts @@ -6,9 +6,36 @@ plugins { group = "com.baeldung" version = "1.0.0" +repositories { + mavenCentral() +} + +dependencies { + api("io.reactivex.rxjava2:rxjava:2.2.16") + implementation("com.google.guava:guava") { + version { + require("2.0") + prefer("28.1-jre") + because("Only uses ImmutableList type, so any version since 2.0 will do, but tested with 28.1-jre") + } + } + + testImplementation("org.junit.jupiter:junit-jupiter-api:5.5.2") + testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.5.2") +} + +tasks.compileJava { + sourceCompatibility = "1.8" + targetCompatibility = "1.8" +} + +tasks.test { + useJUnitPlatform() +} + publishing { publications { - register("mavenJava", MavenPublication::class) { + register("mavenJava") { from(components["java"]) } } diff --git a/gradle-6/src/main/java/com/baeldung/gradle/HelloWorld.java b/gradle-6/src/main/java/com/baeldung/gradle/HelloWorld.java deleted file mode 100644 index 4f947330eb..0000000000 --- a/gradle-6/src/main/java/com/baeldung/gradle/HelloWorld.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.baeldung.gradle; - -public class HelloWorld { - - public String sayHello() { - return "Hello, world!"; - } -} diff --git a/gradle-6/src/main/java/com/baeldung/gradle/RxHelloWorld.java b/gradle-6/src/main/java/com/baeldung/gradle/RxHelloWorld.java new file mode 100644 index 0000000000..efb0ca3197 --- /dev/null +++ b/gradle-6/src/main/java/com/baeldung/gradle/RxHelloWorld.java @@ -0,0 +1,18 @@ +package com.baeldung.gradle; + +import com.google.common.collect.ImmutableList; +import io.reactivex.Observable; +import java.util.List; + +/** Demonstrates a library type that returns an RxJava type. */ +public class RxHelloWorld { + + /** @return an {@link Observable} that emits events "hello" and "world" before completing. */ + public static Observable hello() { + // Guava ImmutableList class is an implementation detail. + List values = ImmutableList.of("hello", "world"); + return Observable.fromIterable(values); + } + + private RxHelloWorld() {} +} diff --git a/gradle-6/src/test/java/com/baeldung/gradle/RxHelloWorldUnitTest.java b/gradle-6/src/test/java/com/baeldung/gradle/RxHelloWorldUnitTest.java new file mode 100644 index 0000000000..bc64148c64 --- /dev/null +++ b/gradle-6/src/test/java/com/baeldung/gradle/RxHelloWorldUnitTest.java @@ -0,0 +1,14 @@ +package com.baeldung.gradle; + +import static com.baeldung.gradle.RxHelloWorld.hello; + +import org.junit.jupiter.api.Test; + +/** Unit test for {@link RxHelloWorld}. */ +final class RxHelloWorldUnitTest { + + @Test + void it_emits_hello_world_values() { + hello().test().assertValues("hello", "world").assertComplete(); + } +} From 0c2d3121869be7ab0411fb5dbbbf9e1b777156fe Mon Sep 17 00:00:00 2001 From: Johnathan Gilday Date: Tue, 17 Dec 2019 21:18:54 -0500 Subject: [PATCH 003/149] :construction: Gradle 6 - Platforms --- gradle-6/.gitignore | 2 +- gradle-6/build.gradle.kts | 43 ++----------------- .../dependency-constraints/build.gradle.kts | 29 +++++++++++++ .../com/baeldung/gradle/RxHelloWorld.java | 0 .../baeldung/gradle/RxHelloWorldUnitTest.java | 0 gradle-6/httpclient-platform/build.gradle.kts | 11 +++++ .../build.gradle.kts | 12 ++++++ gradle-6/person-rest-client/build.gradle.kts | 8 ++++ gradle-6/settings.gradle.kts | 6 +++ gradle-6/widget-rest-client/build.gradle.kts | 8 ++++ 10 files changed, 78 insertions(+), 41 deletions(-) create mode 100644 gradle-6/dependency-constraints/build.gradle.kts rename gradle-6/{ => dependency-constraints}/src/main/java/com/baeldung/gradle/RxHelloWorld.java (100%) rename gradle-6/{ => dependency-constraints}/src/test/java/com/baeldung/gradle/RxHelloWorldUnitTest.java (100%) create mode 100644 gradle-6/httpclient-platform/build.gradle.kts create mode 100644 gradle-6/module-metadata-publishing/build.gradle.kts create mode 100644 gradle-6/person-rest-client/build.gradle.kts create mode 100644 gradle-6/widget-rest-client/build.gradle.kts diff --git a/gradle-6/.gitignore b/gradle-6/.gitignore index 75efe642c0..6987887957 100644 --- a/gradle-6/.gitignore +++ b/gradle-6/.gitignore @@ -2,7 +2,7 @@ # Gradle .gradle -/build/ +build # Ignore Gradle GUI config gradle-app.setting diff --git a/gradle-6/build.gradle.kts b/gradle-6/build.gradle.kts index d9876dfe28..fb3c3f88a2 100644 --- a/gradle-6/build.gradle.kts +++ b/gradle-6/build.gradle.kts @@ -1,42 +1,5 @@ -plugins { - `java-library` - `maven-publish` -} - -group = "com.baeldung" -version = "1.0.0" - -repositories { - mavenCentral() -} - -dependencies { - api("io.reactivex.rxjava2:rxjava:2.2.16") - implementation("com.google.guava:guava") { - version { - require("2.0") - prefer("28.1-jre") - because("Only uses ImmutableList type, so any version since 2.0 will do, but tested with 28.1-jre") - } - } - - testImplementation("org.junit.jupiter:junit-jupiter-api:5.5.2") - testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.5.2") -} - -tasks.compileJava { - sourceCompatibility = "1.8" - targetCompatibility = "1.8" -} - -tasks.test { - useJUnitPlatform() -} - -publishing { - publications { - register("mavenJava") { - from(components["java"]) - } +subprojects { + repositories { + mavenCentral() } } \ No newline at end of file diff --git a/gradle-6/dependency-constraints/build.gradle.kts b/gradle-6/dependency-constraints/build.gradle.kts new file mode 100644 index 0000000000..41336d3c91 --- /dev/null +++ b/gradle-6/dependency-constraints/build.gradle.kts @@ -0,0 +1,29 @@ +plugins { + `java-library` +} + +group = "com.baeldung" +version = "1.0.0" + +dependencies { + api("io.reactivex.rxjava2:rxjava:2.2.16") + implementation("com.google.guava:guava") { + version { + require("10.0") + prefer("28.1-jre") + because("Only uses ImmutableList type, so any version since 2.0 will do, but tested with 28.1-jre") + } + } + + testImplementation("org.junit.jupiter:junit-jupiter-api:5.5.2") + testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.5.2") +} + +tasks.compileJava { + sourceCompatibility = "1.8" + targetCompatibility = "1.8" +} + +tasks.test { + useJUnitPlatform() +} diff --git a/gradle-6/src/main/java/com/baeldung/gradle/RxHelloWorld.java b/gradle-6/dependency-constraints/src/main/java/com/baeldung/gradle/RxHelloWorld.java similarity index 100% rename from gradle-6/src/main/java/com/baeldung/gradle/RxHelloWorld.java rename to gradle-6/dependency-constraints/src/main/java/com/baeldung/gradle/RxHelloWorld.java diff --git a/gradle-6/src/test/java/com/baeldung/gradle/RxHelloWorldUnitTest.java b/gradle-6/dependency-constraints/src/test/java/com/baeldung/gradle/RxHelloWorldUnitTest.java similarity index 100% rename from gradle-6/src/test/java/com/baeldung/gradle/RxHelloWorldUnitTest.java rename to gradle-6/dependency-constraints/src/test/java/com/baeldung/gradle/RxHelloWorldUnitTest.java diff --git a/gradle-6/httpclient-platform/build.gradle.kts b/gradle-6/httpclient-platform/build.gradle.kts new file mode 100644 index 0000000000..a021bff013 --- /dev/null +++ b/gradle-6/httpclient-platform/build.gradle.kts @@ -0,0 +1,11 @@ +plugins { + `java-platform` +} + +dependencies { + constraints { + api("org.apache.httpcomponents:fluent-hc:4.5.10") + api("org.apache.httpcomponents:httpclient:4.5.10") + runtime("commons-logging:commons-logging:1.2") + } +} \ No newline at end of file diff --git a/gradle-6/module-metadata-publishing/build.gradle.kts b/gradle-6/module-metadata-publishing/build.gradle.kts new file mode 100644 index 0000000000..9812c72f6f --- /dev/null +++ b/gradle-6/module-metadata-publishing/build.gradle.kts @@ -0,0 +1,12 @@ +plugins { + java + `maven-publish` +} + +publishing { + publications { + register("mavenJava") { + from(components["java"]) + } + } +} \ No newline at end of file diff --git a/gradle-6/person-rest-client/build.gradle.kts b/gradle-6/person-rest-client/build.gradle.kts new file mode 100644 index 0000000000..c562b3e164 --- /dev/null +++ b/gradle-6/person-rest-client/build.gradle.kts @@ -0,0 +1,8 @@ +plugins { + `java-library` +} + +dependencies { + api(platform(project(":httpclient-platform"))) + implementation("org.apache.httpcomponents:fluent-hc") +} \ No newline at end of file diff --git a/gradle-6/settings.gradle.kts b/gradle-6/settings.gradle.kts index 8866408745..d84d0ff54e 100644 --- a/gradle-6/settings.gradle.kts +++ b/gradle-6/settings.gradle.kts @@ -1 +1,7 @@ rootProject.name = "gradle-6" + +include("dependency-constraints") +include("httpclient-platform") +include("module-metadata-publishing") +include("person-rest-client") +include("widget-rest-client") \ No newline at end of file diff --git a/gradle-6/widget-rest-client/build.gradle.kts b/gradle-6/widget-rest-client/build.gradle.kts new file mode 100644 index 0000000000..e1af4b7f71 --- /dev/null +++ b/gradle-6/widget-rest-client/build.gradle.kts @@ -0,0 +1,8 @@ +plugins { + `java-library` +} + +dependencies { + api(platform(project(":httpclient-platform"))) + implementation("org.apache.httpcomponents:httpclient") +} \ No newline at end of file From 99e94be7d0e4462735eeda36ea3e44265fa0be3a Mon Sep 17 00:00:00 2001 From: Johnathan Gilday Date: Tue, 17 Dec 2019 22:09:33 -0500 Subject: [PATCH 004/149] :construction: Gradle 6 - Test Fixtures --- gradle-6/fibonacci-recursive/build.gradle.kts | 17 ++++++++++ .../fibonacci/impl/RecursiveFibonacci.java | 20 ++++++++++++ .../impl/RecursiveFibonacciUnitTest.java | 16 ++++++++++ gradle-6/fibonacci-spi/build.gradle.kts | 13 ++++++++ .../fibonacci/FibonacciSequenceGenerator.java | 11 +++++++ .../FibonacciSequenceGeneratorFixture.java | 31 +++++++++++++++++++ gradle-6/gradle.properties | 1 + gradle-6/settings.gradle.kts | 2 ++ 8 files changed, 111 insertions(+) create mode 100644 gradle-6/fibonacci-recursive/build.gradle.kts create mode 100644 gradle-6/fibonacci-recursive/src/main/java/com/baeldung/fibonacci/impl/RecursiveFibonacci.java create mode 100644 gradle-6/fibonacci-recursive/src/test/java/com/baeldung/fibonacci/impl/RecursiveFibonacciUnitTest.java create mode 100644 gradle-6/fibonacci-spi/build.gradle.kts create mode 100644 gradle-6/fibonacci-spi/src/main/java/com/baeldung/fibonacci/FibonacciSequenceGenerator.java create mode 100644 gradle-6/fibonacci-spi/src/testFixtures/java/com/baeldung/fibonacci/FibonacciSequenceGeneratorFixture.java create mode 100644 gradle-6/gradle.properties diff --git a/gradle-6/fibonacci-recursive/build.gradle.kts b/gradle-6/fibonacci-recursive/build.gradle.kts new file mode 100644 index 0000000000..0872a52472 --- /dev/null +++ b/gradle-6/fibonacci-recursive/build.gradle.kts @@ -0,0 +1,17 @@ +plugins { + `java-library` +} + +dependencies { + api(project(":fibonacci-spi")) + compileOnly("com.google.auto.service:auto-service-annotations:1.0-rc6") + annotationProcessor("com.google.auto.service:auto-service:1.0-rc6") + + testImplementation(testFixtures(project(":fibonacci-spi"))) + testImplementation("org.junit.jupiter:junit-jupiter-api:5.5.2") + testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.5.2") +} + +tasks.test { + useJUnitPlatform() +} \ No newline at end of file diff --git a/gradle-6/fibonacci-recursive/src/main/java/com/baeldung/fibonacci/impl/RecursiveFibonacci.java b/gradle-6/fibonacci-recursive/src/main/java/com/baeldung/fibonacci/impl/RecursiveFibonacci.java new file mode 100644 index 0000000000..97eccde054 --- /dev/null +++ b/gradle-6/fibonacci-recursive/src/main/java/com/baeldung/fibonacci/impl/RecursiveFibonacci.java @@ -0,0 +1,20 @@ +package com.baeldung.fibonacci.impl; + +import com.baeldung.fibonacci.FibonacciSequenceGenerator; +import com.google.auto.service.AutoService; + +/** Recursive implementation of the {@link FibonacciSequenceGenerator}. */ +@AutoService(FibonacciSequenceGenerator.class) +public final class RecursiveFibonacci implements FibonacciSequenceGenerator { + + @Override + public int generate(int nth) { + if (nth < 0) { + throw new IllegalArgumentException("sequence number must be 0 or greater"); + } + if (nth <= 1) { + return nth; + } + return generate(nth - 1) + generate(nth - 2); + } +} diff --git a/gradle-6/fibonacci-recursive/src/test/java/com/baeldung/fibonacci/impl/RecursiveFibonacciUnitTest.java b/gradle-6/fibonacci-recursive/src/test/java/com/baeldung/fibonacci/impl/RecursiveFibonacciUnitTest.java new file mode 100644 index 0000000000..1e46e75106 --- /dev/null +++ b/gradle-6/fibonacci-recursive/src/test/java/com/baeldung/fibonacci/impl/RecursiveFibonacciUnitTest.java @@ -0,0 +1,16 @@ +package com.baeldung.fibonacci.impl; + +import com.baeldung.fibonacci.FibonacciSequenceGenerator; +import com.baeldung.fibonacci.FibonacciSequenceGeneratorFixture; + +/** + * Unit test which reuses the {@link FibonacciSequenceGeneratorFixture} test mix-in exported from + * the fibonacci-spi project. + */ +final class RecursiveFibonacciUnitTest implements FibonacciSequenceGeneratorFixture { + + @Override + public FibonacciSequenceGenerator provide() { + return new RecursiveFibonacci(); + } +} diff --git a/gradle-6/fibonacci-spi/build.gradle.kts b/gradle-6/fibonacci-spi/build.gradle.kts new file mode 100644 index 0000000000..e571f329a9 --- /dev/null +++ b/gradle-6/fibonacci-spi/build.gradle.kts @@ -0,0 +1,13 @@ +plugins { + `java-library` + `java-test-fixtures` +} + +dependencies { + testFixturesApi("org.junit.jupiter:junit-jupiter-api:5.5.2") + testFixturesImplementation("org.junit.jupiter:junit-jupiter-engine:5.5.2") +} + +tasks.test { + useJUnitPlatform() +} \ No newline at end of file diff --git a/gradle-6/fibonacci-spi/src/main/java/com/baeldung/fibonacci/FibonacciSequenceGenerator.java b/gradle-6/fibonacci-spi/src/main/java/com/baeldung/fibonacci/FibonacciSequenceGenerator.java new file mode 100644 index 0000000000..1e9de21257 --- /dev/null +++ b/gradle-6/fibonacci-spi/src/main/java/com/baeldung/fibonacci/FibonacciSequenceGenerator.java @@ -0,0 +1,11 @@ +package com.baeldung.fibonacci; + +/** Describes an SPI for a Fibonacci sequence generator function. */ +public interface FibonacciSequenceGenerator { + + /** + * @param nth the index of the number in the fibonacci sequence + * @return the nth number in the fibonacci sequence + */ + int generate(int nth); +} diff --git a/gradle-6/fibonacci-spi/src/testFixtures/java/com/baeldung/fibonacci/FibonacciSequenceGeneratorFixture.java b/gradle-6/fibonacci-spi/src/testFixtures/java/com/baeldung/fibonacci/FibonacciSequenceGeneratorFixture.java new file mode 100644 index 0000000000..0b7988f640 --- /dev/null +++ b/gradle-6/fibonacci-spi/src/testFixtures/java/com/baeldung/fibonacci/FibonacciSequenceGeneratorFixture.java @@ -0,0 +1,31 @@ +package com.baeldung.fibonacci; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; + +import org.junit.jupiter.api.Test; + +/** + * Reusable test fixture for {@link FibonacciSequenceGenerator} implementations. Tests will be + * skipped if no such implementation exists. + */ +public interface FibonacciSequenceGeneratorFixture { + + /** @return the implementation of {@link FibonacciSequenceGenerator} to test. Must not be null */ + FibonacciSequenceGenerator provide(); + + @Test + default void when_sequence_index_is_negative_then_throws() { + final FibonacciSequenceGenerator generator = provide(); + assertThrows(IllegalArgumentException.class, () -> generator.generate(-1)); + } + + @Test + default void when_given_index_then_generates_fibonacci_number() { + final FibonacciSequenceGenerator generator = provide(); + final int[] sequence = {0, 1, 1, 2, 3, 5, 8}; + for (int i = 0; i < sequence.length; i++) { + assertEquals(sequence[i], generator.generate(i)); + } + } +} diff --git a/gradle-6/gradle.properties b/gradle-6/gradle.properties new file mode 100644 index 0000000000..f97ebb7d33 --- /dev/null +++ b/gradle-6/gradle.properties @@ -0,0 +1 @@ +org.gradle.parallel=true diff --git a/gradle-6/settings.gradle.kts b/gradle-6/settings.gradle.kts index d84d0ff54e..babe431175 100644 --- a/gradle-6/settings.gradle.kts +++ b/gradle-6/settings.gradle.kts @@ -1,6 +1,8 @@ rootProject.name = "gradle-6" include("dependency-constraints") +include("fibonacci-spi") +include("fibonacci-recursive") include("httpclient-platform") include("module-metadata-publishing") include("person-rest-client") From dfb9147fc91d6a8b565a4f4075b6624b9870b315 Mon Sep 17 00:00:00 2001 From: Johnathan Gilday Date: Fri, 20 Dec 2019 09:50:52 -0500 Subject: [PATCH 005/149] :construction: Gradle 6 - Task Configuration Avoidance --- .../configuration-avoidance/build.gradle.kts | 37 +++++++++++++++++++ gradle-6/gradle.properties | 1 + gradle-6/settings.gradle.kts | 1 + 3 files changed, 39 insertions(+) create mode 100644 gradle-6/configuration-avoidance/build.gradle.kts diff --git a/gradle-6/configuration-avoidance/build.gradle.kts b/gradle-6/configuration-avoidance/build.gradle.kts new file mode 100644 index 0000000000..e84f08bf93 --- /dev/null +++ b/gradle-6/configuration-avoidance/build.gradle.kts @@ -0,0 +1,37 @@ +plugins { + base +} + +description = """ + Demonstrates Gradle Configuraiton Avoidance API. Creates a new configuration "extralibs" to + which we add dependencies. The custom task "copyExtraLibs" copies those dependencies to a new + build directory "extra-libs". This build uses the Task Configuraion Avoidance APIs which have + been marked stable in Gradle 6.0 +""".trimIndent() + +// extraLibs is a NamedDomainObjectProvider - the Configuration object will not be +// realized until it is needed. In the meantime, the build may reference it by name +val extralibs by configurations.registering + +dependencies { + // we can call extralibs.name without causing the extralibs to be realized + add(extralibs.name, "junit:junit:4.12") +} + +// extraLibsDir is a Provider - the Directory object will not be realized until it is +// needed +val extraLibsDir = project.layout.buildDirectory.dir("extra-libs") + +// copyExtraLibs is a TaskProvider - the task will not be realized until it is needed +val copyExtraLibs by tasks.registering(Copy::class) { + // the copy task's "from" and "into" APIs accept Provider types to support configuration + // avoidance + from(extralibs) + into(extraLibsDir) +} + +// configures the "build" task only if it needs to be +tasks.build { + // dependsOn accepts a TaskProvider to avoid realizing the copyExtraLibs needlessly + dependsOn(copyExtraLibs) +} diff --git a/gradle-6/gradle.properties b/gradle-6/gradle.properties index f97ebb7d33..7da8b3d72a 100644 --- a/gradle-6/gradle.properties +++ b/gradle-6/gradle.properties @@ -1 +1,2 @@ org.gradle.parallel=true +org.gradle.configureondemand=true diff --git a/gradle-6/settings.gradle.kts b/gradle-6/settings.gradle.kts index babe431175..88cf74c4d7 100644 --- a/gradle-6/settings.gradle.kts +++ b/gradle-6/settings.gradle.kts @@ -1,5 +1,6 @@ rootProject.name = "gradle-6" +include("configuration-avoidance") include("dependency-constraints") include("fibonacci-spi") include("fibonacci-recursive") From 3a26ab34603c4617d2fabd4cc5b7e26a0b04cb94 Mon Sep 17 00:00:00 2001 From: Johnathan Gilday Date: Fri, 20 Dec 2019 12:23:13 -0500 Subject: [PATCH 006/149] :art: Gradle 6 - Format code --- .../com/baeldung/gradle/RxHelloWorld.java | 16 ++++++---- .../baeldung/gradle/RxHelloWorldUnitTest.java | 11 +++---- .../fibonacci/impl/RecursiveFibonacci.java | 20 ++++++------ .../impl/RecursiveFibonacciUnitTest.java | 8 ++--- .../fibonacci/FibonacciSequenceGenerator.java | 10 +++--- .../FibonacciSequenceGeneratorFixture.java | 32 +++++++++---------- 6 files changed, 46 insertions(+), 51 deletions(-) diff --git a/gradle-6/dependency-constraints/src/main/java/com/baeldung/gradle/RxHelloWorld.java b/gradle-6/dependency-constraints/src/main/java/com/baeldung/gradle/RxHelloWorld.java index efb0ca3197..1c4e71541d 100644 --- a/gradle-6/dependency-constraints/src/main/java/com/baeldung/gradle/RxHelloWorld.java +++ b/gradle-6/dependency-constraints/src/main/java/com/baeldung/gradle/RxHelloWorld.java @@ -2,17 +2,19 @@ package com.baeldung.gradle; import com.google.common.collect.ImmutableList; import io.reactivex.Observable; + import java.util.List; /** Demonstrates a library type that returns an RxJava type. */ public class RxHelloWorld { - /** @return an {@link Observable} that emits events "hello" and "world" before completing. */ - public static Observable hello() { - // Guava ImmutableList class is an implementation detail. - List values = ImmutableList.of("hello", "world"); - return Observable.fromIterable(values); - } + /** @return an {@link Observable} that emits events "hello" and "world" before completing. */ + public static Observable hello() { + // Guava ImmutableList class is an implementation detail. + List values = ImmutableList.of("hello", "world"); + return Observable.fromIterable(values); + } - private RxHelloWorld() {} + private RxHelloWorld() { + } } diff --git a/gradle-6/dependency-constraints/src/test/java/com/baeldung/gradle/RxHelloWorldUnitTest.java b/gradle-6/dependency-constraints/src/test/java/com/baeldung/gradle/RxHelloWorldUnitTest.java index bc64148c64..232c7d7e02 100644 --- a/gradle-6/dependency-constraints/src/test/java/com/baeldung/gradle/RxHelloWorldUnitTest.java +++ b/gradle-6/dependency-constraints/src/test/java/com/baeldung/gradle/RxHelloWorldUnitTest.java @@ -1,14 +1,13 @@ package com.baeldung.gradle; -import static com.baeldung.gradle.RxHelloWorld.hello; - import org.junit.jupiter.api.Test; +import static com.baeldung.gradle.RxHelloWorld.hello; + /** Unit test for {@link RxHelloWorld}. */ final class RxHelloWorldUnitTest { - @Test - void it_emits_hello_world_values() { - hello().test().assertValues("hello", "world").assertComplete(); - } + @Test void it_emits_hello_world_values() { + hello().test().assertValues("hello", "world").assertComplete(); + } } diff --git a/gradle-6/fibonacci-recursive/src/main/java/com/baeldung/fibonacci/impl/RecursiveFibonacci.java b/gradle-6/fibonacci-recursive/src/main/java/com/baeldung/fibonacci/impl/RecursiveFibonacci.java index 97eccde054..764f4ad12c 100644 --- a/gradle-6/fibonacci-recursive/src/main/java/com/baeldung/fibonacci/impl/RecursiveFibonacci.java +++ b/gradle-6/fibonacci-recursive/src/main/java/com/baeldung/fibonacci/impl/RecursiveFibonacci.java @@ -4,17 +4,15 @@ import com.baeldung.fibonacci.FibonacciSequenceGenerator; import com.google.auto.service.AutoService; /** Recursive implementation of the {@link FibonacciSequenceGenerator}. */ -@AutoService(FibonacciSequenceGenerator.class) -public final class RecursiveFibonacci implements FibonacciSequenceGenerator { +@AutoService(FibonacciSequenceGenerator.class) public final class RecursiveFibonacci implements FibonacciSequenceGenerator { - @Override - public int generate(int nth) { - if (nth < 0) { - throw new IllegalArgumentException("sequence number must be 0 or greater"); + @Override public int generate(int nth) { + if (nth < 0) { + throw new IllegalArgumentException("sequence number must be 0 or greater"); + } + if (nth <= 1) { + return nth; + } + return generate(nth - 1) + generate(nth - 2); } - if (nth <= 1) { - return nth; - } - return generate(nth - 1) + generate(nth - 2); - } } diff --git a/gradle-6/fibonacci-recursive/src/test/java/com/baeldung/fibonacci/impl/RecursiveFibonacciUnitTest.java b/gradle-6/fibonacci-recursive/src/test/java/com/baeldung/fibonacci/impl/RecursiveFibonacciUnitTest.java index 1e46e75106..0703c97848 100644 --- a/gradle-6/fibonacci-recursive/src/test/java/com/baeldung/fibonacci/impl/RecursiveFibonacciUnitTest.java +++ b/gradle-6/fibonacci-recursive/src/test/java/com/baeldung/fibonacci/impl/RecursiveFibonacciUnitTest.java @@ -8,9 +8,7 @@ import com.baeldung.fibonacci.FibonacciSequenceGeneratorFixture; * the fibonacci-spi project. */ final class RecursiveFibonacciUnitTest implements FibonacciSequenceGeneratorFixture { - - @Override - public FibonacciSequenceGenerator provide() { - return new RecursiveFibonacci(); - } + @Override public FibonacciSequenceGenerator provide() { + return new RecursiveFibonacci(); + } } diff --git a/gradle-6/fibonacci-spi/src/main/java/com/baeldung/fibonacci/FibonacciSequenceGenerator.java b/gradle-6/fibonacci-spi/src/main/java/com/baeldung/fibonacci/FibonacciSequenceGenerator.java index 1e9de21257..e152b7b515 100644 --- a/gradle-6/fibonacci-spi/src/main/java/com/baeldung/fibonacci/FibonacciSequenceGenerator.java +++ b/gradle-6/fibonacci-spi/src/main/java/com/baeldung/fibonacci/FibonacciSequenceGenerator.java @@ -3,9 +3,9 @@ package com.baeldung.fibonacci; /** Describes an SPI for a Fibonacci sequence generator function. */ public interface FibonacciSequenceGenerator { - /** - * @param nth the index of the number in the fibonacci sequence - * @return the nth number in the fibonacci sequence - */ - int generate(int nth); + /** + * @param nth the index of the number in the fibonacci sequence + * @return the nth number in the fibonacci sequence + */ + int generate(int nth); } diff --git a/gradle-6/fibonacci-spi/src/testFixtures/java/com/baeldung/fibonacci/FibonacciSequenceGeneratorFixture.java b/gradle-6/fibonacci-spi/src/testFixtures/java/com/baeldung/fibonacci/FibonacciSequenceGeneratorFixture.java index 0b7988f640..e5bfe8117b 100644 --- a/gradle-6/fibonacci-spi/src/testFixtures/java/com/baeldung/fibonacci/FibonacciSequenceGeneratorFixture.java +++ b/gradle-6/fibonacci-spi/src/testFixtures/java/com/baeldung/fibonacci/FibonacciSequenceGeneratorFixture.java @@ -1,31 +1,29 @@ package com.baeldung.fibonacci; +import org.junit.jupiter.api.Test; + import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; -import org.junit.jupiter.api.Test; - /** * Reusable test fixture for {@link FibonacciSequenceGenerator} implementations. Tests will be * skipped if no such implementation exists. */ public interface FibonacciSequenceGeneratorFixture { - /** @return the implementation of {@link FibonacciSequenceGenerator} to test. Must not be null */ - FibonacciSequenceGenerator provide(); + /** @return the implementation of {@link FibonacciSequenceGenerator} to test. Must not be null */ + FibonacciSequenceGenerator provide(); - @Test - default void when_sequence_index_is_negative_then_throws() { - final FibonacciSequenceGenerator generator = provide(); - assertThrows(IllegalArgumentException.class, () -> generator.generate(-1)); - } - - @Test - default void when_given_index_then_generates_fibonacci_number() { - final FibonacciSequenceGenerator generator = provide(); - final int[] sequence = {0, 1, 1, 2, 3, 5, 8}; - for (int i = 0; i < sequence.length; i++) { - assertEquals(sequence[i], generator.generate(i)); + @Test default void when_sequence_index_is_negative_then_throws() { + final FibonacciSequenceGenerator generator = provide(); + assertThrows(IllegalArgumentException.class, () -> generator.generate(-1)); + } + + @Test default void when_given_index_then_generates_fibonacci_number() { + final FibonacciSequenceGenerator generator = provide(); + final int[] sequence = { 0, 1, 1, 2, 3, 5, 8 }; + for (int i = 0; i < sequence.length; i++) { + assertEquals(sequence[i], generator.generate(i)); + } } - } } From b9331afc8fad2e55c0051643e1fc3684da0cf15c Mon Sep 17 00:00:00 2001 From: Johnathan Gilday Date: Tue, 31 Dec 2019 11:17:56 -0500 Subject: [PATCH 007/149] :art: Gradle-6 Format JavaDoc --- .../src/main/java/com/baeldung/gradle/RxHelloWorld.java | 8 ++++++-- .../java/com/baeldung/gradle/RxHelloWorldUnitTest.java | 5 +++-- .../com/baeldung/fibonacci/impl/RecursiveFibonacci.java | 4 +++- .../fibonacci/impl/RecursiveFibonacciUnitTest.java | 3 +-- .../baeldung/fibonacci/FibonacciSequenceGenerator.java | 4 +++- .../fibonacci/FibonacciSequenceGeneratorFixture.java | 7 ++++--- 6 files changed, 20 insertions(+), 11 deletions(-) diff --git a/gradle-6/dependency-constraints/src/main/java/com/baeldung/gradle/RxHelloWorld.java b/gradle-6/dependency-constraints/src/main/java/com/baeldung/gradle/RxHelloWorld.java index 1c4e71541d..e4ebd9ba6b 100644 --- a/gradle-6/dependency-constraints/src/main/java/com/baeldung/gradle/RxHelloWorld.java +++ b/gradle-6/dependency-constraints/src/main/java/com/baeldung/gradle/RxHelloWorld.java @@ -5,10 +5,14 @@ import io.reactivex.Observable; import java.util.List; -/** Demonstrates a library type that returns an RxJava type. */ +/** + * Demonstrates a library type that returns an RxJava type. + */ public class RxHelloWorld { - /** @return an {@link Observable} that emits events "hello" and "world" before completing. */ + /** + * @return an {@link Observable} that emits events "hello" and "world" before completing. + */ public static Observable hello() { // Guava ImmutableList class is an implementation detail. List values = ImmutableList.of("hello", "world"); diff --git a/gradle-6/dependency-constraints/src/test/java/com/baeldung/gradle/RxHelloWorldUnitTest.java b/gradle-6/dependency-constraints/src/test/java/com/baeldung/gradle/RxHelloWorldUnitTest.java index 232c7d7e02..8a05fcfda3 100644 --- a/gradle-6/dependency-constraints/src/test/java/com/baeldung/gradle/RxHelloWorldUnitTest.java +++ b/gradle-6/dependency-constraints/src/test/java/com/baeldung/gradle/RxHelloWorldUnitTest.java @@ -4,9 +4,10 @@ import org.junit.jupiter.api.Test; import static com.baeldung.gradle.RxHelloWorld.hello; -/** Unit test for {@link RxHelloWorld}. */ +/** + * Unit test for {@link RxHelloWorld}. + */ final class RxHelloWorldUnitTest { - @Test void it_emits_hello_world_values() { hello().test().assertValues("hello", "world").assertComplete(); } diff --git a/gradle-6/fibonacci-recursive/src/main/java/com/baeldung/fibonacci/impl/RecursiveFibonacci.java b/gradle-6/fibonacci-recursive/src/main/java/com/baeldung/fibonacci/impl/RecursiveFibonacci.java index 764f4ad12c..def79521bd 100644 --- a/gradle-6/fibonacci-recursive/src/main/java/com/baeldung/fibonacci/impl/RecursiveFibonacci.java +++ b/gradle-6/fibonacci-recursive/src/main/java/com/baeldung/fibonacci/impl/RecursiveFibonacci.java @@ -3,7 +3,9 @@ package com.baeldung.fibonacci.impl; import com.baeldung.fibonacci.FibonacciSequenceGenerator; import com.google.auto.service.AutoService; -/** Recursive implementation of the {@link FibonacciSequenceGenerator}. */ +/** + * Recursive implementation of the {@link FibonacciSequenceGenerator}. + */ @AutoService(FibonacciSequenceGenerator.class) public final class RecursiveFibonacci implements FibonacciSequenceGenerator { @Override public int generate(int nth) { diff --git a/gradle-6/fibonacci-recursive/src/test/java/com/baeldung/fibonacci/impl/RecursiveFibonacciUnitTest.java b/gradle-6/fibonacci-recursive/src/test/java/com/baeldung/fibonacci/impl/RecursiveFibonacciUnitTest.java index 0703c97848..766f3b251b 100644 --- a/gradle-6/fibonacci-recursive/src/test/java/com/baeldung/fibonacci/impl/RecursiveFibonacciUnitTest.java +++ b/gradle-6/fibonacci-recursive/src/test/java/com/baeldung/fibonacci/impl/RecursiveFibonacciUnitTest.java @@ -4,8 +4,7 @@ import com.baeldung.fibonacci.FibonacciSequenceGenerator; import com.baeldung.fibonacci.FibonacciSequenceGeneratorFixture; /** - * Unit test which reuses the {@link FibonacciSequenceGeneratorFixture} test mix-in exported from - * the fibonacci-spi project. + * Unit test which reuses the {@link FibonacciSequenceGeneratorFixture} test mix-in exported from the fibonacci-spi project. */ final class RecursiveFibonacciUnitTest implements FibonacciSequenceGeneratorFixture { @Override public FibonacciSequenceGenerator provide() { diff --git a/gradle-6/fibonacci-spi/src/main/java/com/baeldung/fibonacci/FibonacciSequenceGenerator.java b/gradle-6/fibonacci-spi/src/main/java/com/baeldung/fibonacci/FibonacciSequenceGenerator.java index e152b7b515..5fd99100fc 100644 --- a/gradle-6/fibonacci-spi/src/main/java/com/baeldung/fibonacci/FibonacciSequenceGenerator.java +++ b/gradle-6/fibonacci-spi/src/main/java/com/baeldung/fibonacci/FibonacciSequenceGenerator.java @@ -1,6 +1,8 @@ package com.baeldung.fibonacci; -/** Describes an SPI for a Fibonacci sequence generator function. */ +/** + * Describes an SPI for a Fibonacci sequence generator function. + */ public interface FibonacciSequenceGenerator { /** diff --git a/gradle-6/fibonacci-spi/src/testFixtures/java/com/baeldung/fibonacci/FibonacciSequenceGeneratorFixture.java b/gradle-6/fibonacci-spi/src/testFixtures/java/com/baeldung/fibonacci/FibonacciSequenceGeneratorFixture.java index e5bfe8117b..5394590c03 100644 --- a/gradle-6/fibonacci-spi/src/testFixtures/java/com/baeldung/fibonacci/FibonacciSequenceGeneratorFixture.java +++ b/gradle-6/fibonacci-spi/src/testFixtures/java/com/baeldung/fibonacci/FibonacciSequenceGeneratorFixture.java @@ -6,12 +6,13 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; /** - * Reusable test fixture for {@link FibonacciSequenceGenerator} implementations. Tests will be - * skipped if no such implementation exists. + * Reusable test fixture for {@link FibonacciSequenceGenerator} implementations. Tests will be skipped if no such implementation exists. */ public interface FibonacciSequenceGeneratorFixture { - /** @return the implementation of {@link FibonacciSequenceGenerator} to test. Must not be null */ + /** + * @return the implementation of {@link FibonacciSequenceGenerator} to test. Must not be null + */ FibonacciSequenceGenerator provide(); @Test default void when_sequence_index_is_negative_then_throws() { From 1d579ff74fc8f1ad0eb723c030db2d9b6e8b3da3 Mon Sep 17 00:00:00 2001 From: Yavuz Tas Date: Sat, 11 Jan 2020 14:14:04 +0100 Subject: [PATCH 008/149] source code for BAEL-3303 --- ...itionOverrideExceptionIntegrationTest.java | 27 +++++++++++++++++++ .../TestConfiguration1.java | 26 ++++++++++++++++++ .../TestConfiguration2.java | 25 +++++++++++++++++ 3 files changed, 78 insertions(+) create mode 100644 spring-boot/src/test/java/com/baeldung/beandefinitionoverrideexception/SpringBootBeanDefinitionOverrideExceptionIntegrationTest.java create mode 100644 spring-boot/src/test/java/com/baeldung/beandefinitionoverrideexception/TestConfiguration1.java create mode 100644 spring-boot/src/test/java/com/baeldung/beandefinitionoverrideexception/TestConfiguration2.java diff --git a/spring-boot/src/test/java/com/baeldung/beandefinitionoverrideexception/SpringBootBeanDefinitionOverrideExceptionIntegrationTest.java b/spring-boot/src/test/java/com/baeldung/beandefinitionoverrideexception/SpringBootBeanDefinitionOverrideExceptionIntegrationTest.java new file mode 100644 index 0000000000..17787a86a8 --- /dev/null +++ b/spring-boot/src/test/java/com/baeldung/beandefinitionoverrideexception/SpringBootBeanDefinitionOverrideExceptionIntegrationTest.java @@ -0,0 +1,27 @@ +package com.baeldung.beandefinitionoverrideexception; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.context.ApplicationContext; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringRunner; + +import static org.assertj.core.api.Assertions.assertThat; + + +@RunWith(SpringRunner.class) +@SpringBootTest(classes = {TestConfiguration1.class, TestConfiguration2.class}, properties = {"spring.main.allow-bean-definition-overriding=true"}) +public class SpringBootBeanDefinitionOverrideExceptionIntegrationTest { + + @Autowired + private ApplicationContext applicationContext; + + @Test + public void whenBeanOverridingAllowed_thenTestBean2OverridesTestBean1() { + Object testBean = applicationContext.getBean("testBean"); + + assertThat(testBean.getClass()).isEqualTo(TestConfiguration2.TestBean2.class); + } +} diff --git a/spring-boot/src/test/java/com/baeldung/beandefinitionoverrideexception/TestConfiguration1.java b/spring-boot/src/test/java/com/baeldung/beandefinitionoverrideexception/TestConfiguration1.java new file mode 100644 index 0000000000..d22c4388ae --- /dev/null +++ b/spring-boot/src/test/java/com/baeldung/beandefinitionoverrideexception/TestConfiguration1.java @@ -0,0 +1,26 @@ +package com.baeldung.beandefinitionoverrideexception; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; + +@Configuration +@ComponentScan() +public class TestConfiguration1 { + + class TestBean1 { + + private String name; + + public String getName() { + return name; + } + + } + + @Bean + public TestBean1 testBean(){ + return new TestBean1(); + } + +} diff --git a/spring-boot/src/test/java/com/baeldung/beandefinitionoverrideexception/TestConfiguration2.java b/spring-boot/src/test/java/com/baeldung/beandefinitionoverrideexception/TestConfiguration2.java new file mode 100644 index 0000000000..1a96240002 --- /dev/null +++ b/spring-boot/src/test/java/com/baeldung/beandefinitionoverrideexception/TestConfiguration2.java @@ -0,0 +1,25 @@ +package com.baeldung.beandefinitionoverrideexception; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.stereotype.Component; + +@Configuration +public class TestConfiguration2 { + + class TestBean2 { + + private String name; + + public String getName() { + return name; + } + + } + + @Bean + public TestBean2 testBean(){ + return new TestBean2(); + } + +} From 24d0fd278154f94e0d23e1b4bb38cd592891b40d Mon Sep 17 00:00:00 2001 From: Yavuz Tas Date: Sat, 11 Jan 2020 15:51:34 +0100 Subject: [PATCH 009/149] source code for BAEL-3303 --- ...BootBeanDefinitionOverrideExceptionIntegrationTest.java | 1 - .../TestConfiguration1.java | 7 ++++--- .../TestConfiguration2.java | 7 +++++-- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/spring-boot/src/test/java/com/baeldung/beandefinitionoverrideexception/SpringBootBeanDefinitionOverrideExceptionIntegrationTest.java b/spring-boot/src/test/java/com/baeldung/beandefinitionoverrideexception/SpringBootBeanDefinitionOverrideExceptionIntegrationTest.java index 17787a86a8..c900bab26c 100644 --- a/spring-boot/src/test/java/com/baeldung/beandefinitionoverrideexception/SpringBootBeanDefinitionOverrideExceptionIntegrationTest.java +++ b/spring-boot/src/test/java/com/baeldung/beandefinitionoverrideexception/SpringBootBeanDefinitionOverrideExceptionIntegrationTest.java @@ -5,7 +5,6 @@ import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.context.ApplicationContext; -import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringRunner; import static org.assertj.core.api.Assertions.assertThat; diff --git a/spring-boot/src/test/java/com/baeldung/beandefinitionoverrideexception/TestConfiguration1.java b/spring-boot/src/test/java/com/baeldung/beandefinitionoverrideexception/TestConfiguration1.java index d22c4388ae..a0e8ea3028 100644 --- a/spring-boot/src/test/java/com/baeldung/beandefinitionoverrideexception/TestConfiguration1.java +++ b/spring-boot/src/test/java/com/baeldung/beandefinitionoverrideexception/TestConfiguration1.java @@ -1,11 +1,9 @@ package com.baeldung.beandefinitionoverrideexception; import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; @Configuration -@ComponentScan() public class TestConfiguration1 { class TestBean1 { @@ -16,10 +14,13 @@ public class TestConfiguration1 { return name; } + public void setName(String name) { + this.name = name; + } } @Bean - public TestBean1 testBean(){ + public TestBean1 testBean() { return new TestBean1(); } diff --git a/spring-boot/src/test/java/com/baeldung/beandefinitionoverrideexception/TestConfiguration2.java b/spring-boot/src/test/java/com/baeldung/beandefinitionoverrideexception/TestConfiguration2.java index 1a96240002..842b84c866 100644 --- a/spring-boot/src/test/java/com/baeldung/beandefinitionoverrideexception/TestConfiguration2.java +++ b/spring-boot/src/test/java/com/baeldung/beandefinitionoverrideexception/TestConfiguration2.java @@ -2,7 +2,6 @@ package com.baeldung.beandefinitionoverrideexception; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.stereotype.Component; @Configuration public class TestConfiguration2 { @@ -15,10 +14,14 @@ public class TestConfiguration2 { return name; } + public void setName(String name) { + this.name = name; + } + } @Bean - public TestBean2 testBean(){ + public TestBean2 testBean() { return new TestBean2(); } From b14ead250c9419f032554e9c1082a9f06193d375 Mon Sep 17 00:00:00 2001 From: Loredana Crusoveanu Date: Sat, 25 Jan 2020 14:44:21 +0200 Subject: [PATCH 010/149] Update README.md --- core-kotlin-modules/core-kotlin/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core-kotlin-modules/core-kotlin/README.md b/core-kotlin-modules/core-kotlin/README.md index 8815b0fadd..ae595bf18d 100644 --- a/core-kotlin-modules/core-kotlin/README.md +++ b/core-kotlin-modules/core-kotlin/README.md @@ -3,7 +3,7 @@ This module contains articles about Kotlin core features. ### Relevant articles: -- [Introduction to the Kotlin Language](https://www.baeldung.com/kotlin) +- [Introduction to the Kotlin Language](https://www.baeldung.com/kotlin-intro) - [Kotlin Java Interoperability](https://www.baeldung.com/kotlin-java-interoperability) - [Get a Random Number in Kotlin](https://www.baeldung.com/kotlin-random-number) - [Create a Java and Kotlin Project with Maven](https://www.baeldung.com/kotlin-maven-java-project) From 71a08d8d35880fd6a06a16c4687945c80b757fe7 Mon Sep 17 00:00:00 2001 From: Loredana Crusoveanu Date: Sat, 25 Jan 2020 14:46:26 +0200 Subject: [PATCH 011/149] Update README.md --- core-kotlin-modules/core-kotlin-2/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core-kotlin-modules/core-kotlin-2/README.md b/core-kotlin-modules/core-kotlin-2/README.md index 11593062c5..3e607eb61b 100644 --- a/core-kotlin-modules/core-kotlin-2/README.md +++ b/core-kotlin-modules/core-kotlin-2/README.md @@ -4,5 +4,5 @@ This module contains articles about Kotlin core features. ### Relevant articles: - [Working with Dates in Kotlin](https://www.baeldung.com/kotlin-dates) -- [Kotlin Ternary Conditional Operator](https://www.baeldung.com/kotlin-ternary-conditional-operator) +- [Kotlin Ternary Conditional Operator](https://www.baeldung.com/kotlin-ternary-operator) - [[<-- Prev]](/core-kotlin-modules/core-kotlin) From bd581da50b95708f61371db6094fa48b7b0c0725 Mon Sep 17 00:00:00 2001 From: Florin Hriscu Date: Sun, 26 Jan 2020 17:43:33 +0200 Subject: [PATCH 012/149] BAEL-3502 Arrays.deepEquals examples. --- .../arrays/ArraysDeepEqualsUnitTest.java | 97 +++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 core-java-modules/core-java-arrays-2/src/test/java/com/baeldung/arrays/ArraysDeepEqualsUnitTest.java diff --git a/core-java-modules/core-java-arrays-2/src/test/java/com/baeldung/arrays/ArraysDeepEqualsUnitTest.java b/core-java-modules/core-java-arrays-2/src/test/java/com/baeldung/arrays/ArraysDeepEqualsUnitTest.java new file mode 100644 index 0000000000..4998886215 --- /dev/null +++ b/core-java-modules/core-java-arrays-2/src/test/java/com/baeldung/arrays/ArraysDeepEqualsUnitTest.java @@ -0,0 +1,97 @@ +package com.baeldung.arrays; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import java.util.Arrays; +import java.util.Objects; + +import org.junit.jupiter.api.Test; + +public class ArraysDeepEqualsUnitTest { + + class Person { + private int id; + private String name; + private int age; + + Person(int id, String name, int age) { + this.id = id; + this.name = name; + this.age = age; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (!(obj instanceof Person)) + return false; + Person person = (Person) obj; + return id == person.id && name.equals(person.name) && age == person.age; + } + + @Override + public int hashCode() { + return Objects.hash(id, name, age); + } + } + + @Test + void givenTwoUnidimensionalObjectTypeArrays_whenUsingEqualsAndDeepEquals_thenBothShouldReturnTrue() { + Object[] anArray = new Object[] { "string1", "string2", "string3" }; + Object[] anotherArray = new Object[] { "string1", "string2", "string3" }; + + assertTrue(Arrays.equals(anArray, anotherArray)); + assertTrue(Arrays.deepEquals(anArray, anotherArray)); + } + + @Test + void givenTwoUnidimensionalObjectTypeArraysWithNullElements_whenUsingEqualsAndDeepEquals_thenBothShouldReturnTrue() { + Object[] anArray = new Object[] { "string1", null, "string3" }; + Object[] anotherArray = new Object[] { "string1", null, "string3" }; + + assertTrue(Arrays.equals(anArray, anotherArray)); + assertTrue(Arrays.deepEquals(anArray, anotherArray)); + } + + @Test + void givenTwoUnidimensionalObjectTypeArraysWithNestedElements_whenUsingEqualsAndDeepEquals_thenShouldReturnDifferently() { + Object[] anArray = new Object[] { "string1", null, new String[] { "nestedString1", "nestedString2" } }; + Object[] anotherArray = new Object[] { "string1", null, new String[] { "nestedString1", "nestedString2" } }; + + assertFalse(Arrays.equals(anArray, anotherArray)); + assertTrue(Arrays.deepEquals(anArray, anotherArray)); + } + + @Test + void givenTwoMultidimensionalPrimitiveTypeArrays_whenUsingEqualsAndDeepEquals_thenBothShouldReturnDifferently() { + int[][] anArray = { { 1, 2, 3 }, { 4, 5, 6, 9 }, { 7 } }; + int[][] anotherArray = { { 1, 2, 3 }, { 4, 5, 6, 9 }, { 7 } }; + + assertFalse(Arrays.equals(anArray, anotherArray)); + assertTrue(Arrays.deepEquals(anArray, anotherArray)); + } + + @Test + void givenTwoMultidimensionalObjectTypeArrays_whenUsingEqualsAndDeepEquals_thenBothShouldReturnDifferently() { + Person personArray1[][] = { { new Person(1, "John", 22), new Person(2, "Mike", 23) }, { new Person(3, "Steve", 27), new Person(4, "Gary", 28) } }; + Person personArray2[][] = { { new Person(1, "John", 22), new Person(2, "Mike", 23) }, { new Person(3, "Steve", 27), new Person(4, "Gary", 28) } }; + + assertFalse(Arrays.equals(personArray1, personArray2)); + assertTrue(Arrays.deepEquals(personArray1, personArray2)); + } + + @Test + void givenTwoMultidimensionalObjectTypeArrays_whenUsingDeepEqualsFromObjectsAndArraysClasses_thenBothShouldReturnTrue() { + Person personArray1[][] = { { new Person(1, "John", 22), new Person(2, "Mike", 23) }, { new Person(3, "Steve", 27), new Person(4, "Gary", 28) } }; + Person personArray2[][] = { { new Person(1, "John", 22), new Person(2, "Mike", 23) }, { new Person(3, "Steve", 27), new Person(4, "Gary", 28) } }; + + assertTrue(Objects.deepEquals(personArray1, personArray2)); + assertTrue(Arrays.deepEquals(personArray1, personArray2)); + } +} From a1837550e83c26bbcf3ea754732404c2955ee8ef Mon Sep 17 00:00:00 2001 From: Sorin Zamfir Date: Mon, 27 Jan 2020 20:40:24 +0200 Subject: [PATCH 013/149] BAEL-3777: First setup --- ddd/pom.xml | 8 ++++++- .../configuration/CassandraConfiguration.java | 10 ++++++++ .../configuration/MongoDBConfiguration.java | 4 ++-- .../CassandraDbOrderRepository.java | 23 +++++++++++++++++++ .../repository/MongoDbOrderRepository.java | 4 ++-- .../SpringDataCassandraOrderRepository.java | 11 +++++++++ ...va => SpringDataMongoOrderRepository.java} | 2 +- ddd/src/main/resources/ddd-layers.properties | 8 ++++++- .../MongoDbOrderRepositoryUnitTest.java | 4 ++-- .../dddhexagonalspring/docker-compose.yml | 7 +++++- 10 files changed, 71 insertions(+), 10 deletions(-) create mode 100644 ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/configuration/CassandraConfiguration.java create mode 100644 ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/CassandraDbOrderRepository.java create mode 100644 ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/SpringDataCassandraOrderRepository.java rename ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/{SpringDataOrderRepository.java => SpringDataMongoOrderRepository.java} (76%) diff --git a/ddd/pom.xml b/ddd/pom.xml index 9a0523a4c6..0893523c3b 100644 --- a/ddd/pom.xml +++ b/ddd/pom.xml @@ -20,14 +20,20 @@ org.springframework.boot spring-boot-starter-data-mongodb + + org.springframework.boot + spring-boot-starter-data-cassandra + org.junit.jupiter junit-jupiter-api + 5.6.0 test org.junit.jupiter junit-jupiter-engine + 5.6.0 test @@ -35,7 +41,7 @@ org.junit.platform junit-platform-launcher - ${junit-platform.version} + 1.6.0 test diff --git a/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/configuration/CassandraConfiguration.java b/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/configuration/CassandraConfiguration.java new file mode 100644 index 0000000000..76d7ad1aee --- /dev/null +++ b/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/configuration/CassandraConfiguration.java @@ -0,0 +1,10 @@ +package com.baeldung.dddhexagonalspring.infrastracture.configuration; + +import org.springframework.data.cassandra.repository.config.EnableCassandraRepositories; + +import com.baeldung.dddhexagonalspring.infrastracture.repository.SpringDataCassandraOrderRepository; + +@EnableCassandraRepositories(basePackageClasses = SpringDataCassandraOrderRepository.class) +public class CassandraConfiguration { + +} diff --git a/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/configuration/MongoDBConfiguration.java b/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/configuration/MongoDBConfiguration.java index fd76b2eb0e..e0f5e77671 100644 --- a/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/configuration/MongoDBConfiguration.java +++ b/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/configuration/MongoDBConfiguration.java @@ -1,8 +1,8 @@ package com.baeldung.dddhexagonalspring.infrastracture.configuration; -import com.baeldung.dddhexagonalspring.infrastracture.repository.SpringDataOrderRepository; +import com.baeldung.dddhexagonalspring.infrastracture.repository.SpringDataMongoOrderRepository; import org.springframework.data.mongodb.repository.config.EnableMongoRepositories; -@EnableMongoRepositories(basePackageClasses = SpringDataOrderRepository.class) +@EnableMongoRepositories(basePackageClasses = SpringDataMongoOrderRepository.class) public class MongoDBConfiguration { } diff --git a/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/CassandraDbOrderRepository.java b/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/CassandraDbOrderRepository.java new file mode 100644 index 0000000000..f16a546576 --- /dev/null +++ b/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/CassandraDbOrderRepository.java @@ -0,0 +1,23 @@ +package com.baeldung.dddhexagonalspring.infrastracture.repository; + +import java.util.Optional; +import java.util.UUID; + +import com.baeldung.dddhexagonalspring.domain.Order; +import com.baeldung.dddhexagonalspring.domain.repository.OrderRepository; + +public class CassandraDbOrderRepository implements OrderRepository { + + @Override + public Optional findById(UUID id) { + // TODO Auto-generated method stub + return null; + } + + @Override + public void save(Order order) { + // TODO Auto-generated method stub + + } + +} diff --git a/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/MongoDbOrderRepository.java b/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/MongoDbOrderRepository.java index 3123ef3e2f..bde0007ced 100644 --- a/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/MongoDbOrderRepository.java +++ b/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/MongoDbOrderRepository.java @@ -11,10 +11,10 @@ import java.util.UUID; @Component public class MongoDbOrderRepository implements OrderRepository { - private final SpringDataOrderRepository orderRepository; + private final SpringDataMongoOrderRepository orderRepository; @Autowired - public MongoDbOrderRepository(final SpringDataOrderRepository orderRepository) { + public MongoDbOrderRepository(final SpringDataMongoOrderRepository orderRepository) { this.orderRepository = orderRepository; } diff --git a/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/SpringDataCassandraOrderRepository.java b/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/SpringDataCassandraOrderRepository.java new file mode 100644 index 0000000000..9df128f035 --- /dev/null +++ b/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/SpringDataCassandraOrderRepository.java @@ -0,0 +1,11 @@ +package com.baeldung.dddhexagonalspring.infrastracture.repository; + +import java.util.UUID; + +import org.springframework.data.cassandra.repository.CassandraRepository; + +import com.baeldung.dddhexagonalspring.domain.Order; + +public interface SpringDataCassandraOrderRepository extends CassandraRepository{ + +} diff --git a/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/SpringDataOrderRepository.java b/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/SpringDataMongoOrderRepository.java similarity index 76% rename from ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/SpringDataOrderRepository.java rename to ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/SpringDataMongoOrderRepository.java index 0279a5ce4a..620ecb34af 100644 --- a/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/SpringDataOrderRepository.java +++ b/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/SpringDataMongoOrderRepository.java @@ -7,5 +7,5 @@ import org.springframework.stereotype.Repository; import java.util.UUID; @Repository -public interface SpringDataOrderRepository extends MongoRepository { +public interface SpringDataMongoOrderRepository extends MongoRepository { } diff --git a/ddd/src/main/resources/ddd-layers.properties b/ddd/src/main/resources/ddd-layers.properties index 0479996b17..3b2aa35efe 100644 --- a/ddd/src/main/resources/ddd-layers.properties +++ b/ddd/src/main/resources/ddd-layers.properties @@ -2,4 +2,10 @@ spring.data.mongodb.host=localhost spring.data.mongodb.port=27017 spring.data.mongodb.database=order-database spring.data.mongodb.username=order -spring.data.mongodb.password=order \ No newline at end of file +spring.data.mongodb.password=order + +spring.data.cassandra.keyspaceName=order-database +spring.data.cassandra.username=cassandra +spring.data.cassandra.password=cassandra +spring.data.cassandra.contactPoints=localhost +spring.data.cassandra.port=9042 \ No newline at end of file diff --git a/ddd/src/test/java/com/baeldung/dddhexagonalspring/infrastracture/repository/MongoDbOrderRepositoryUnitTest.java b/ddd/src/test/java/com/baeldung/dddhexagonalspring/infrastracture/repository/MongoDbOrderRepositoryUnitTest.java index 8f7e8260a3..8247d7c7bd 100644 --- a/ddd/src/test/java/com/baeldung/dddhexagonalspring/infrastracture/repository/MongoDbOrderRepositoryUnitTest.java +++ b/ddd/src/test/java/com/baeldung/dddhexagonalspring/infrastracture/repository/MongoDbOrderRepositoryUnitTest.java @@ -14,12 +14,12 @@ import static org.mockito.Mockito.*; class MongoDbOrderRepositoryUnitTest { - private SpringDataOrderRepository springDataOrderRepository; + private SpringDataMongoOrderRepository springDataOrderRepository; private MongoDbOrderRepository tested; @BeforeEach void setUp(){ - springDataOrderRepository = mock(SpringDataOrderRepository.class); + springDataOrderRepository = mock(SpringDataMongoOrderRepository.class); tested = new MongoDbOrderRepository(springDataOrderRepository); } diff --git a/ddd/src/test/resources/com/baeldung/dddhexagonalspring/docker-compose.yml b/ddd/src/test/resources/com/baeldung/dddhexagonalspring/docker-compose.yml index d85ddf4a0e..dfad875a2b 100644 --- a/ddd/src/test/resources/com/baeldung/dddhexagonalspring/docker-compose.yml +++ b/ddd/src/test/resources/com/baeldung/dddhexagonalspring/docker-compose.yml @@ -11,4 +11,9 @@ services: MONGO_INITDB_ROOT_PASSWORD: admin MONGO_INITDB_DATABASE: order-database volumes: - - ./mongo-init.js:/docker-entrypoint-initdb.d/mongo-init.js:ro \ No newline at end of file + - ./mongo-init.js:/docker-entrypoint-initdb.d/mongo-init.js:ro + order-cassandra-database: + image: cassandra:3.11.5 + restart: always + ports: + - 9042:9042 \ No newline at end of file From 8144040512b45445879570c4ac2b7a331e24b287 Mon Sep 17 00:00:00 2001 From: Sorin Zamfir Date: Mon, 27 Jan 2020 21:14:55 +0200 Subject: [PATCH 014/149] BAEL-3777: Fixed some spring init issues --- .../repository/CassandraDbOrderRepository.java | 11 +++++++++++ .../repository/MongoDbOrderRepository.java | 2 ++ .../SpringDataCassandraOrderRepository.java | 2 ++ ddd/src/main/resources/ddd-layers.properties | 2 +- 4 files changed, 16 insertions(+), 1 deletion(-) diff --git a/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/CassandraDbOrderRepository.java b/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/CassandraDbOrderRepository.java index f16a546576..a648a1f041 100644 --- a/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/CassandraDbOrderRepository.java +++ b/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/CassandraDbOrderRepository.java @@ -3,11 +3,22 @@ package com.baeldung.dddhexagonalspring.infrastracture.repository; import java.util.Optional; import java.util.UUID; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + import com.baeldung.dddhexagonalspring.domain.Order; import com.baeldung.dddhexagonalspring.domain.repository.OrderRepository; +@Component public class CassandraDbOrderRepository implements OrderRepository { + private final SpringDataCassandraOrderRepository orderRepository; + + @Autowired + public CassandraDbOrderRepository(SpringDataCassandraOrderRepository orderRepository) { + this.orderRepository = orderRepository; + } + @Override public Optional findById(UUID id) { // TODO Auto-generated method stub diff --git a/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/MongoDbOrderRepository.java b/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/MongoDbOrderRepository.java index bde0007ced..cf1d900821 100644 --- a/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/MongoDbOrderRepository.java +++ b/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/MongoDbOrderRepository.java @@ -3,12 +3,14 @@ package com.baeldung.dddhexagonalspring.infrastracture.repository; import com.baeldung.dddhexagonalspring.domain.Order; import com.baeldung.dddhexagonalspring.domain.repository.OrderRepository; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Primary; import org.springframework.stereotype.Component; import java.util.Optional; import java.util.UUID; @Component +@Primary public class MongoDbOrderRepository implements OrderRepository { private final SpringDataMongoOrderRepository orderRepository; diff --git a/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/SpringDataCassandraOrderRepository.java b/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/SpringDataCassandraOrderRepository.java index 9df128f035..dd7c7dbc81 100644 --- a/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/SpringDataCassandraOrderRepository.java +++ b/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/SpringDataCassandraOrderRepository.java @@ -3,9 +3,11 @@ package com.baeldung.dddhexagonalspring.infrastracture.repository; import java.util.UUID; import org.springframework.data.cassandra.repository.CassandraRepository; +import org.springframework.stereotype.Repository; import com.baeldung.dddhexagonalspring.domain.Order; +@Repository public interface SpringDataCassandraOrderRepository extends CassandraRepository{ } diff --git a/ddd/src/main/resources/ddd-layers.properties b/ddd/src/main/resources/ddd-layers.properties index 3b2aa35efe..d0ad343b66 100644 --- a/ddd/src/main/resources/ddd-layers.properties +++ b/ddd/src/main/resources/ddd-layers.properties @@ -4,7 +4,7 @@ spring.data.mongodb.database=order-database spring.data.mongodb.username=order spring.data.mongodb.password=order -spring.data.cassandra.keyspaceName=order-database +spring.data.cassandra.keyspaceName=order_database spring.data.cassandra.username=cassandra spring.data.cassandra.password=cassandra spring.data.cassandra.contactPoints=localhost From 9cbafc45df540b38501f9dc045d786f3d1410ccc Mon Sep 17 00:00:00 2001 From: Anshul BANSAL Date: Tue, 28 Jan 2020 11:34:42 +0200 Subject: [PATCH 015/149] Initial commit --- jcabi/pom.xml | 81 ++++++++++++++ .../com/baeldung/jcabi_aspectj/Example.java | 103 ++++++++++++++++++ .../java/com/baeldung/jcabi_aspectj/User.java | 5 + 3 files changed, 189 insertions(+) create mode 100644 jcabi/pom.xml create mode 100644 jcabi/src/main/java/com/baeldung/jcabi_aspectj/Example.java create mode 100644 jcabi/src/main/java/com/baeldung/jcabi_aspectj/User.java diff --git a/jcabi/pom.xml b/jcabi/pom.xml new file mode 100644 index 0000000000..7fb9c313c5 --- /dev/null +++ b/jcabi/pom.xml @@ -0,0 +1,81 @@ + + + + 4.0.0 + jcabi + 0.1.0-SNAPSHOT + jcabi + jar + + + com.baeldung + parent-java + 0.0.1-SNAPSHOT + ../parent-java + + + + + org.assertj + assertj-core + ${assertj.version} + test + + + + com.jcabi + jcabi-aspects + ${jcabi-aspects.version} + + + + org.aspectj + aspectjrt + ${aspectjrt.version} + runtime + + + + + + jcabi + + + com.jcabi + jcabi-maven-plugin + ${jcabi-maven-plugin.version} + + + + ajc + + + + + + org.aspectj + aspectjtools + ${aspectjtools.version} + + + org.aspectj + aspectjweaver + ${aspectjweaver.version} + + + + + + + + 3.14.0 + 0.22.6 + 1.9.5 + 0.14.1 + 1.9.1 + 1.9.1 + + + diff --git a/jcabi/src/main/java/com/baeldung/jcabi_aspectj/Example.java b/jcabi/src/main/java/com/baeldung/jcabi_aspectj/Example.java new file mode 100644 index 0000000000..0c688ceb22 --- /dev/null +++ b/jcabi/src/main/java/com/baeldung/jcabi_aspectj/Example.java @@ -0,0 +1,103 @@ +package com.baeldung.jcabi_aspectj; + +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.Future; +import java.util.concurrent.TimeUnit; + +import com.jcabi.aspects.Async; +import com.jcabi.aspects.Cacheable; +import com.jcabi.aspects.LogExceptions; +import com.jcabi.aspects.Loggable; +import com.jcabi.aspects.Parallel; +import com.jcabi.aspects.Quietly; +import com.jcabi.aspects.RetryOnFailure; +import com.jcabi.aspects.UnitedThrow; + +//@Loggable +public class Example { + + public static void main(String[] args) { + try { + tryAsync(); + asyncFactorial(10).get(); + System.out.println("calling 2..."); + System.out.println(called2()); + //called3(); + called4(); + System.out.println(called2()); + System.out.println(called2()); + called6(); + //called7(); + + + } catch(Exception e) { + + } + called5(); + called8(); + } + + @Async + public static void tryAsync() { + long result = factorial(10); + System.out.println(result); + } + + @Async + public static Future asyncFactorial(int number) { + Future factorialFuture = CompletableFuture.supplyAsync(() -> factorial(number)); + return factorialFuture; + } + + /** + * Finds factorial of a number + * @param number + * @return + */ + public static long factorial(int number) { + long result = 1; + for(int i=number;i>0;i--) { + result *= i; + } + return result; + } + + @Cacheable(lifetime = 5, unit = TimeUnit.SECONDS) + public static Double called2() { + return Math.random(); + } + + @LogExceptions + public static void called3() { + System.out.println(1/0); + } + + @Loggable + public static void called4() { + System.out.println("checking loggable"); + } + + @Quietly + public static void called5() { + int x = 1/0; + } + + @Parallel(threads = 4) + public static void called6() { + System.out.println("called6"); + } + + @RetryOnFailure + //@Quietly + public static void called7() { + System.out.println("called7..."); + int y = 1/0; + } + + @UnitedThrow //(IllegalStateException.class) + public static void called8() { + System.out.println("called8..."); + int y = 1/0; + } + +} diff --git a/jcabi/src/main/java/com/baeldung/jcabi_aspectj/User.java b/jcabi/src/main/java/com/baeldung/jcabi_aspectj/User.java new file mode 100644 index 0000000000..c918f8471c --- /dev/null +++ b/jcabi/src/main/java/com/baeldung/jcabi_aspectj/User.java @@ -0,0 +1,5 @@ +package com.baeldung.jcabi_aspectj; + +public class User { + +} From 226502b957dcedb2aadf19a3b253112afef662fc Mon Sep 17 00:00:00 2001 From: Justin Albano Date: Tue, 28 Jan 2020 19:44:21 -0500 Subject: [PATCH 016/149] BAEL-3744: Added examples of how design patterns are used in the Spring framework. --- spring-core-3/pom.xml | 144 ++++++++++-------- .../spring/patterns/factory/Application.java | 19 +++ .../patterns/factory/ApplicationConfig.java | 9 ++ .../baeldung/spring/patterns/factory/Bar.java | 20 +++ .../baeldung/spring/patterns/factory/Foo.java | 7 + .../spring/patterns/proxy/Application.java | 12 ++ .../baeldung/spring/patterns/proxy/Book.java | 18 +++ .../spring/patterns/proxy/BookController.java | 18 +++ .../spring/patterns/proxy/BookManager.java | 18 +++ .../spring/patterns/proxy/BookRepository.java | 11 ++ .../patterns/singleton/Application.java | 12 ++ .../spring/patterns/singleton/Book.java | 4 + .../patterns/singleton/BookController.java | 19 +++ .../patterns/singleton/BookRepository.java | 17 +++ .../patterns/singleton/LibraryController.java | 18 +++ .../spring/patterns/template/Book.java | 32 ++++ .../patterns/template/BookRowMapper.java | 21 +++ 17 files changed, 335 insertions(+), 64 deletions(-) create mode 100644 spring-core-3/src/main/java/com/baeldung/spring/patterns/factory/Application.java create mode 100644 spring-core-3/src/main/java/com/baeldung/spring/patterns/factory/ApplicationConfig.java create mode 100644 spring-core-3/src/main/java/com/baeldung/spring/patterns/factory/Bar.java create mode 100644 spring-core-3/src/main/java/com/baeldung/spring/patterns/factory/Foo.java create mode 100644 spring-core-3/src/main/java/com/baeldung/spring/patterns/proxy/Application.java create mode 100644 spring-core-3/src/main/java/com/baeldung/spring/patterns/proxy/Book.java create mode 100644 spring-core-3/src/main/java/com/baeldung/spring/patterns/proxy/BookController.java create mode 100644 spring-core-3/src/main/java/com/baeldung/spring/patterns/proxy/BookManager.java create mode 100644 spring-core-3/src/main/java/com/baeldung/spring/patterns/proxy/BookRepository.java create mode 100644 spring-core-3/src/main/java/com/baeldung/spring/patterns/singleton/Application.java create mode 100644 spring-core-3/src/main/java/com/baeldung/spring/patterns/singleton/Book.java create mode 100644 spring-core-3/src/main/java/com/baeldung/spring/patterns/singleton/BookController.java create mode 100644 spring-core-3/src/main/java/com/baeldung/spring/patterns/singleton/BookRepository.java create mode 100644 spring-core-3/src/main/java/com/baeldung/spring/patterns/singleton/LibraryController.java create mode 100644 spring-core-3/src/main/java/com/baeldung/spring/patterns/template/Book.java create mode 100644 spring-core-3/src/main/java/com/baeldung/spring/patterns/template/BookRowMapper.java diff --git a/spring-core-3/pom.xml b/spring-core-3/pom.xml index cd82f23320..ac6d1b2b3b 100644 --- a/spring-core-3/pom.xml +++ b/spring-core-3/pom.xml @@ -1,72 +1,88 @@ - 4.0.0 - spring-core-3 - spring-core-3 + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + 4.0.0 + spring-core-3 + spring-core-3 - - com.baeldung - parent-spring-5 - 0.0.1-SNAPSHOT - ../parent-spring-5 - + + com.baeldung + parent-spring-5 + 0.0.1-SNAPSHOT + ../parent-spring-5 + - - - org.springframework - spring-beans - ${spring.version} - - - org.springframework - spring-context - ${spring.version} - - - org.springframework - spring-core - ${spring.version} - - - javax.annotation - javax.annotation-api - ${annotation-api.version} - - - org.springframework - spring-test - ${spring.version} - test - - - org.junit.jupiter - junit-jupiter-engine - ${junit-jupiter.version} - test - - - org.junit.jupiter - junit-jupiter-api - ${junit-jupiter.version} - test - - + + + org.springframework.boot + spring-boot-starter-web + ${spring.boot.version} + + + org.springframework + spring-tx + ${spring.version} + + + org.springframework + spring-jdbc + ${spring.version} + + + org.springframework + spring-beans + ${spring.version} + + + org.springframework + spring-context + ${spring.version} + + + org.springframework + spring-core + ${spring.version} + + + javax.annotation + javax.annotation-api + ${annotation-api.version} + + + org.springframework + spring-test + ${spring.version} + test + + + org.junit.jupiter + junit-jupiter-engine + ${junit-jupiter.version} + test + + + org.junit.jupiter + junit-jupiter-api + ${junit-jupiter.version} + test + + - - - - org.apache.maven.plugins - maven-surefire-plugin - ${maven.surefire.version} - - - + + + + org.apache.maven.plugins + maven-surefire-plugin + ${maven.surefire.version} + + + - - 2.22.1 - 1.3.2 - + + 2.22.1 + 1.3.2 + 2.2.2.RELEASE + \ No newline at end of file diff --git a/spring-core-3/src/main/java/com/baeldung/spring/patterns/factory/Application.java b/spring-core-3/src/main/java/com/baeldung/spring/patterns/factory/Application.java new file mode 100644 index 0000000000..8f0134d83c --- /dev/null +++ b/spring-core-3/src/main/java/com/baeldung/spring/patterns/factory/Application.java @@ -0,0 +1,19 @@ +package com.baeldung.spring.patterns.factory; + +import org.springframework.context.ApplicationContext; +import org.springframework.context.annotation.AnnotationConfigApplicationContext; + +public class Application { + + @SuppressWarnings("resource") + public static void main(String[] args) { + + ApplicationContext context = new AnnotationConfigApplicationContext(ApplicationConfig.class); + + Foo foo = context.getBean(Foo.class); + Bar bar = context.getBean(Bar.class, "Some name"); + + System.out.println(foo); + System.out.println("Bar's name: " + bar.getName()); + } +} diff --git a/spring-core-3/src/main/java/com/baeldung/spring/patterns/factory/ApplicationConfig.java b/spring-core-3/src/main/java/com/baeldung/spring/patterns/factory/ApplicationConfig.java new file mode 100644 index 0000000000..626947cfd5 --- /dev/null +++ b/spring-core-3/src/main/java/com/baeldung/spring/patterns/factory/ApplicationConfig.java @@ -0,0 +1,9 @@ +package com.baeldung.spring.patterns.factory; + +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; + +@Configuration +@ComponentScan(basePackageClasses = ApplicationConfig.class) +public class ApplicationConfig { +} diff --git a/spring-core-3/src/main/java/com/baeldung/spring/patterns/factory/Bar.java b/spring-core-3/src/main/java/com/baeldung/spring/patterns/factory/Bar.java new file mode 100644 index 0000000000..8bd742c481 --- /dev/null +++ b/spring-core-3/src/main/java/com/baeldung/spring/patterns/factory/Bar.java @@ -0,0 +1,20 @@ +package com.baeldung.spring.patterns.factory; + +import org.springframework.beans.factory.config.ConfigurableBeanFactory; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Component; + +@Component +@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) +public class Bar { + + private String name; + + public Bar(String name) { + this.name = name; + } + + public String getName() { + return name; + } +} diff --git a/spring-core-3/src/main/java/com/baeldung/spring/patterns/factory/Foo.java b/spring-core-3/src/main/java/com/baeldung/spring/patterns/factory/Foo.java new file mode 100644 index 0000000000..5edba6c50d --- /dev/null +++ b/spring-core-3/src/main/java/com/baeldung/spring/patterns/factory/Foo.java @@ -0,0 +1,7 @@ +package com.baeldung.spring.patterns.factory; + +import org.springframework.stereotype.Component; + +@Component +public class Foo { +} diff --git a/spring-core-3/src/main/java/com/baeldung/spring/patterns/proxy/Application.java b/spring-core-3/src/main/java/com/baeldung/spring/patterns/proxy/Application.java new file mode 100644 index 0000000000..d00f51ec96 --- /dev/null +++ b/spring-core-3/src/main/java/com/baeldung/spring/patterns/proxy/Application.java @@ -0,0 +1,12 @@ +package com.baeldung.spring.patterns.proxy; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class Application { + + public static void main(String[] args) { + SpringApplication.run(Application.class, args); + } +} diff --git a/spring-core-3/src/main/java/com/baeldung/spring/patterns/proxy/Book.java b/spring-core-3/src/main/java/com/baeldung/spring/patterns/proxy/Book.java new file mode 100644 index 0000000000..112396e232 --- /dev/null +++ b/spring-core-3/src/main/java/com/baeldung/spring/patterns/proxy/Book.java @@ -0,0 +1,18 @@ +package com.baeldung.spring.patterns.proxy; + +public class Book { + + private String author; + + public Book(String author) { + this.author = author; + } + + public String getAuthor() { + return author; + } + + public void setAuthor(String author) { + this.author = author; + } +} diff --git a/spring-core-3/src/main/java/com/baeldung/spring/patterns/proxy/BookController.java b/spring-core-3/src/main/java/com/baeldung/spring/patterns/proxy/BookController.java new file mode 100644 index 0000000000..ab192826b8 --- /dev/null +++ b/spring-core-3/src/main/java/com/baeldung/spring/patterns/proxy/BookController.java @@ -0,0 +1,18 @@ +package com.baeldung.spring.patterns.proxy; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@RestController +public class BookController { + + @Autowired + private BookManager manager; + + @PostMapping("/book") + public Book create(@RequestParam String author) { + return manager.create(author); + } +} diff --git a/spring-core-3/src/main/java/com/baeldung/spring/patterns/proxy/BookManager.java b/spring-core-3/src/main/java/com/baeldung/spring/patterns/proxy/BookManager.java new file mode 100644 index 0000000000..d82218e404 --- /dev/null +++ b/spring-core-3/src/main/java/com/baeldung/spring/patterns/proxy/BookManager.java @@ -0,0 +1,18 @@ +package com.baeldung.spring.patterns.proxy; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +public class BookManager { + + @Autowired + private BookRepository repository; + + @Transactional + public Book create(String author) { + System.out.println(repository.getClass().getName()); + return repository.create(author); + } +} diff --git a/spring-core-3/src/main/java/com/baeldung/spring/patterns/proxy/BookRepository.java b/spring-core-3/src/main/java/com/baeldung/spring/patterns/proxy/BookRepository.java new file mode 100644 index 0000000000..b100bc0a61 --- /dev/null +++ b/spring-core-3/src/main/java/com/baeldung/spring/patterns/proxy/BookRepository.java @@ -0,0 +1,11 @@ +package com.baeldung.spring.patterns.proxy; + +import org.springframework.stereotype.Repository; + +@Repository +public class BookRepository { + + public Book create(String author) { + return new Book(author); + } +} diff --git a/spring-core-3/src/main/java/com/baeldung/spring/patterns/singleton/Application.java b/spring-core-3/src/main/java/com/baeldung/spring/patterns/singleton/Application.java new file mode 100644 index 0000000000..5d7545790a --- /dev/null +++ b/spring-core-3/src/main/java/com/baeldung/spring/patterns/singleton/Application.java @@ -0,0 +1,12 @@ +package com.baeldung.spring.patterns.singleton; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class Application { + + public static void main(String[] args) { + SpringApplication.run(Application.class, args); + } +} diff --git a/spring-core-3/src/main/java/com/baeldung/spring/patterns/singleton/Book.java b/spring-core-3/src/main/java/com/baeldung/spring/patterns/singleton/Book.java new file mode 100644 index 0000000000..31d9d83683 --- /dev/null +++ b/spring-core-3/src/main/java/com/baeldung/spring/patterns/singleton/Book.java @@ -0,0 +1,4 @@ +package com.baeldung.spring.patterns.singleton; + +public class Book { +} diff --git a/spring-core-3/src/main/java/com/baeldung/spring/patterns/singleton/BookController.java b/spring-core-3/src/main/java/com/baeldung/spring/patterns/singleton/BookController.java new file mode 100644 index 0000000000..aa4bdb8371 --- /dev/null +++ b/spring-core-3/src/main/java/com/baeldung/spring/patterns/singleton/BookController.java @@ -0,0 +1,19 @@ +package com.baeldung.spring.patterns.singleton; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RestController; + +@RestController +public class BookController { + + @Autowired + private BookRepository repository; + + @GetMapping("/book/{id}") + public Book findById(@PathVariable long id) { + System.out.println(repository); + return repository.findById(id).get(); + } +} diff --git a/spring-core-3/src/main/java/com/baeldung/spring/patterns/singleton/BookRepository.java b/spring-core-3/src/main/java/com/baeldung/spring/patterns/singleton/BookRepository.java new file mode 100644 index 0000000000..3fde153f31 --- /dev/null +++ b/spring-core-3/src/main/java/com/baeldung/spring/patterns/singleton/BookRepository.java @@ -0,0 +1,17 @@ +package com.baeldung.spring.patterns.singleton; + +import java.util.Optional; + +import org.springframework.stereotype.Repository; + +@Repository +public class BookRepository { + + public long count() { + return 1; + } + + public Optional findById(long id) { + return Optional.of(new Book()); + } +} diff --git a/spring-core-3/src/main/java/com/baeldung/spring/patterns/singleton/LibraryController.java b/spring-core-3/src/main/java/com/baeldung/spring/patterns/singleton/LibraryController.java new file mode 100644 index 0000000000..76e273e2fb --- /dev/null +++ b/spring-core-3/src/main/java/com/baeldung/spring/patterns/singleton/LibraryController.java @@ -0,0 +1,18 @@ +package com.baeldung.spring.patterns.singleton; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +public class LibraryController { + + @Autowired + private BookRepository repository; + + @GetMapping("/count") + public Long findCount() { + System.out.println(repository); + return repository.count(); + } +} diff --git a/spring-core-3/src/main/java/com/baeldung/spring/patterns/template/Book.java b/spring-core-3/src/main/java/com/baeldung/spring/patterns/template/Book.java new file mode 100644 index 0000000000..d601f01c67 --- /dev/null +++ b/spring-core-3/src/main/java/com/baeldung/spring/patterns/template/Book.java @@ -0,0 +1,32 @@ +package com.baeldung.spring.patterns.template; + +public class Book { + + private long id; + private String title; + private String author; + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getAuthor() { + return author; + } + + public void setAuthor(String author) { + this.author = author; + } +} diff --git a/spring-core-3/src/main/java/com/baeldung/spring/patterns/template/BookRowMapper.java b/spring-core-3/src/main/java/com/baeldung/spring/patterns/template/BookRowMapper.java new file mode 100644 index 0000000000..3fe7bb8e59 --- /dev/null +++ b/spring-core-3/src/main/java/com/baeldung/spring/patterns/template/BookRowMapper.java @@ -0,0 +1,21 @@ +package com.baeldung.spring.patterns.template; + +import java.sql.ResultSet; +import java.sql.SQLException; + +import org.springframework.jdbc.core.RowMapper; + +public class BookRowMapper implements RowMapper { + + @Override + public Book mapRow(ResultSet rs, int rowNum) throws SQLException { + + Book book = new Book(); + + book.setId(rs.getLong("id")); + book.setTitle(rs.getString("title")); + book.setAuthor(rs.getString("author")); + + return book; + } +} From a5e51972ec8dfc60a8d1f642aead2fa42f16d362 Mon Sep 17 00:00:00 2001 From: Krzysztof Woyke Date: Thu, 30 Jan 2020 10:02:25 +0100 Subject: [PATCH 017/149] BAEL-20886: Move spring-boot-security into spring-boot-modules --- pom.xml | 2 -- spring-boot-modules/pom.xml | 1 + .../spring-boot-security}/README.md | 0 .../spring-boot-security}/pom.xml | 2 +- .../baeldung/integrationtesting/MethodSecurityConfigurer.java | 0 .../com/baeldung/integrationtesting/SecuredApplication.java | 0 .../java/com/baeldung/integrationtesting/SecuredController.java | 0 .../java/com/baeldung/integrationtesting/SecuredService.java | 0 .../com/baeldung/integrationtesting/WebSecurityConfigurer.java | 0 .../autoconfig/SpringBootSecurityApplication.java | 0 .../autoconfig/config/BasicConfiguration.java | 2 +- .../oauth2resource/SpringBootOAuth2ResourceApplication.java | 0 .../oauth2server/SpringBootAuthorizationServerApplication.java | 0 .../oauth2server/config/AuthenticationMananagerConfig.java | 0 .../oauth2server/config/AuthorizationServerConfig.java | 0 .../oauth2server/config/WebSecurityConfiguration.java | 0 .../oauth2sso/SpringBootOAuth2SsoApplication.java | 0 .../java/com/baeldung/springsecuritytaglibs/HomeController.java | 0 .../SpringBootSecurityTagLibsApplication.java | 0 .../config/SpringBootSecurityTagLibsConfig.java | 0 .../src/main/resources/application-authz.properties | 0 .../src/main/resources/application-resource.properties | 0 .../src/main/resources/application-sso.properties | 0 .../src/main/resources/application-taglibs.properties | 0 .../src/main/resources/application.properties | 0 .../spring-boot-security}/src/main/resources/logback.xml | 0 .../spring-boot-security}/src/main/resources/static/index.html | 0 .../src/main/webapp/WEB-INF/views/home.jsp | 0 .../SecuredControllerRestTemplateIntegrationTest.java | 0 .../SecuredControllerSpringBootIntegrationTest.java | 0 .../SecuredControllerWebMvcIntegrationTest.java | 0 .../SecuredMethodSpringBootIntegrationTest.java | 0 .../autoconfig/config/BasicConfigurationIntegrationTest.java | 0 .../CustomConfigAuthorizationServerIntegrationTest.java | 0 .../DefaultConfigAuthorizationServerIntegrationTest.java | 0 .../oauth2server/OAuth2IntegrationTestSupport.java | 0 .../baeldung/springsecuritytaglibs/HomeControllerUnitTest.java | 0 37 files changed, 3 insertions(+), 4 deletions(-) rename {spring-boot-security => spring-boot-modules/spring-boot-security}/README.md (100%) rename {spring-boot-security => spring-boot-modules/spring-boot-security}/pom.xml (98%) rename {spring-boot-security => spring-boot-modules/spring-boot-security}/src/main/java/com/baeldung/integrationtesting/MethodSecurityConfigurer.java (100%) rename {spring-boot-security => spring-boot-modules/spring-boot-security}/src/main/java/com/baeldung/integrationtesting/SecuredApplication.java (100%) rename {spring-boot-security => spring-boot-modules/spring-boot-security}/src/main/java/com/baeldung/integrationtesting/SecuredController.java (100%) rename {spring-boot-security => spring-boot-modules/spring-boot-security}/src/main/java/com/baeldung/integrationtesting/SecuredService.java (100%) rename {spring-boot-security => spring-boot-modules/spring-boot-security}/src/main/java/com/baeldung/integrationtesting/WebSecurityConfigurer.java (100%) rename {spring-boot-security => spring-boot-modules/spring-boot-security}/src/main/java/com/baeldung/springbootsecurity/autoconfig/SpringBootSecurityApplication.java (100%) rename {spring-boot-security => spring-boot-modules/spring-boot-security}/src/main/java/com/baeldung/springbootsecurity/autoconfig/config/BasicConfiguration.java (96%) rename {spring-boot-security => spring-boot-modules/spring-boot-security}/src/main/java/com/baeldung/springbootsecurity/oauth2resource/SpringBootOAuth2ResourceApplication.java (100%) rename {spring-boot-security => spring-boot-modules/spring-boot-security}/src/main/java/com/baeldung/springbootsecurity/oauth2server/SpringBootAuthorizationServerApplication.java (100%) rename {spring-boot-security => spring-boot-modules/spring-boot-security}/src/main/java/com/baeldung/springbootsecurity/oauth2server/config/AuthenticationMananagerConfig.java (100%) rename {spring-boot-security => spring-boot-modules/spring-boot-security}/src/main/java/com/baeldung/springbootsecurity/oauth2server/config/AuthorizationServerConfig.java (100%) rename {spring-boot-security => spring-boot-modules/spring-boot-security}/src/main/java/com/baeldung/springbootsecurity/oauth2server/config/WebSecurityConfiguration.java (100%) rename {spring-boot-security => spring-boot-modules/spring-boot-security}/src/main/java/com/baeldung/springbootsecurity/oauth2sso/SpringBootOAuth2SsoApplication.java (100%) rename {spring-boot-security => spring-boot-modules/spring-boot-security}/src/main/java/com/baeldung/springsecuritytaglibs/HomeController.java (100%) rename {spring-boot-security => spring-boot-modules/spring-boot-security}/src/main/java/com/baeldung/springsecuritytaglibs/SpringBootSecurityTagLibsApplication.java (100%) rename {spring-boot-security => spring-boot-modules/spring-boot-security}/src/main/java/com/baeldung/springsecuritytaglibs/config/SpringBootSecurityTagLibsConfig.java (100%) rename {spring-boot-security => spring-boot-modules/spring-boot-security}/src/main/resources/application-authz.properties (100%) rename {spring-boot-security => spring-boot-modules/spring-boot-security}/src/main/resources/application-resource.properties (100%) rename {spring-boot-security => spring-boot-modules/spring-boot-security}/src/main/resources/application-sso.properties (100%) rename {spring-boot-security => spring-boot-modules/spring-boot-security}/src/main/resources/application-taglibs.properties (100%) rename {spring-boot-security => spring-boot-modules/spring-boot-security}/src/main/resources/application.properties (100%) rename {spring-boot-security => spring-boot-modules/spring-boot-security}/src/main/resources/logback.xml (100%) rename {spring-boot-security => spring-boot-modules/spring-boot-security}/src/main/resources/static/index.html (100%) rename {spring-boot-security => spring-boot-modules/spring-boot-security}/src/main/webapp/WEB-INF/views/home.jsp (100%) rename {spring-boot-security => spring-boot-modules/spring-boot-security}/src/test/java/com/baeldung/integrationtesting/SecuredControllerRestTemplateIntegrationTest.java (100%) rename {spring-boot-security => spring-boot-modules/spring-boot-security}/src/test/java/com/baeldung/integrationtesting/SecuredControllerSpringBootIntegrationTest.java (100%) rename {spring-boot-security => spring-boot-modules/spring-boot-security}/src/test/java/com/baeldung/integrationtesting/SecuredControllerWebMvcIntegrationTest.java (100%) rename {spring-boot-security => spring-boot-modules/spring-boot-security}/src/test/java/com/baeldung/integrationtesting/SecuredMethodSpringBootIntegrationTest.java (100%) rename {spring-boot-security => spring-boot-modules/spring-boot-security}/src/test/java/com/baeldung/springbootsecurity/autoconfig/config/BasicConfigurationIntegrationTest.java (100%) rename {spring-boot-security => spring-boot-modules/spring-boot-security}/src/test/java/com/baeldung/springbootsecurity/oauth2server/CustomConfigAuthorizationServerIntegrationTest.java (100%) rename {spring-boot-security => spring-boot-modules/spring-boot-security}/src/test/java/com/baeldung/springbootsecurity/oauth2server/DefaultConfigAuthorizationServerIntegrationTest.java (100%) rename {spring-boot-security => spring-boot-modules/spring-boot-security}/src/test/java/com/baeldung/springbootsecurity/oauth2server/OAuth2IntegrationTestSupport.java (100%) rename {spring-boot-security => spring-boot-modules/spring-boot-security}/src/test/java/com/baeldung/springsecuritytaglibs/HomeControllerUnitTest.java (100%) diff --git a/pom.xml b/pom.xml index 031d303229..11e7bfb82c 100644 --- a/pom.xml +++ b/pom.xml @@ -669,7 +669,6 @@ spring-boot-runtime/disabling-console-jul spring-boot-runtime/disabling-console-log4j2 spring-boot-runtime/disabling-console-logback - spring-boot-security spring-caching @@ -1200,7 +1199,6 @@ spring-boot-runtime/disabling-console-jul spring-boot-runtime/disabling-console-log4j2 spring-boot-runtime/disabling-console-logback - spring-boot-security spring-caching diff --git a/spring-boot-modules/pom.xml b/spring-boot-modules/pom.xml index e23f5aec90..4cf2ba0410 100644 --- a/spring-boot-modules/pom.xml +++ b/spring-boot-modules/pom.xml @@ -21,6 +21,7 @@ spring-boot-mvc-birt spring-boot-performance spring-boot-properties + spring-boot-security spring-boot-springdoc spring-boot-testing spring-boot-vue diff --git a/spring-boot-security/README.md b/spring-boot-modules/spring-boot-security/README.md similarity index 100% rename from spring-boot-security/README.md rename to spring-boot-modules/spring-boot-security/README.md diff --git a/spring-boot-security/pom.xml b/spring-boot-modules/spring-boot-security/pom.xml similarity index 98% rename from spring-boot-security/pom.xml rename to spring-boot-modules/spring-boot-security/pom.xml index 92397d42f8..a72113ce2f 100644 --- a/spring-boot-security/pom.xml +++ b/spring-boot-modules/spring-boot-security/pom.xml @@ -11,7 +11,7 @@ com.baeldung parent-boot-2 0.0.1-SNAPSHOT - ../parent-boot-2 + ../../parent-boot-2 diff --git a/spring-boot-security/src/main/java/com/baeldung/integrationtesting/MethodSecurityConfigurer.java b/spring-boot-modules/spring-boot-security/src/main/java/com/baeldung/integrationtesting/MethodSecurityConfigurer.java similarity index 100% rename from spring-boot-security/src/main/java/com/baeldung/integrationtesting/MethodSecurityConfigurer.java rename to spring-boot-modules/spring-boot-security/src/main/java/com/baeldung/integrationtesting/MethodSecurityConfigurer.java diff --git a/spring-boot-security/src/main/java/com/baeldung/integrationtesting/SecuredApplication.java b/spring-boot-modules/spring-boot-security/src/main/java/com/baeldung/integrationtesting/SecuredApplication.java similarity index 100% rename from spring-boot-security/src/main/java/com/baeldung/integrationtesting/SecuredApplication.java rename to spring-boot-modules/spring-boot-security/src/main/java/com/baeldung/integrationtesting/SecuredApplication.java diff --git a/spring-boot-security/src/main/java/com/baeldung/integrationtesting/SecuredController.java b/spring-boot-modules/spring-boot-security/src/main/java/com/baeldung/integrationtesting/SecuredController.java similarity index 100% rename from spring-boot-security/src/main/java/com/baeldung/integrationtesting/SecuredController.java rename to spring-boot-modules/spring-boot-security/src/main/java/com/baeldung/integrationtesting/SecuredController.java diff --git a/spring-boot-security/src/main/java/com/baeldung/integrationtesting/SecuredService.java b/spring-boot-modules/spring-boot-security/src/main/java/com/baeldung/integrationtesting/SecuredService.java similarity index 100% rename from spring-boot-security/src/main/java/com/baeldung/integrationtesting/SecuredService.java rename to spring-boot-modules/spring-boot-security/src/main/java/com/baeldung/integrationtesting/SecuredService.java diff --git a/spring-boot-security/src/main/java/com/baeldung/integrationtesting/WebSecurityConfigurer.java b/spring-boot-modules/spring-boot-security/src/main/java/com/baeldung/integrationtesting/WebSecurityConfigurer.java similarity index 100% rename from spring-boot-security/src/main/java/com/baeldung/integrationtesting/WebSecurityConfigurer.java rename to spring-boot-modules/spring-boot-security/src/main/java/com/baeldung/integrationtesting/WebSecurityConfigurer.java diff --git a/spring-boot-security/src/main/java/com/baeldung/springbootsecurity/autoconfig/SpringBootSecurityApplication.java b/spring-boot-modules/spring-boot-security/src/main/java/com/baeldung/springbootsecurity/autoconfig/SpringBootSecurityApplication.java similarity index 100% rename from spring-boot-security/src/main/java/com/baeldung/springbootsecurity/autoconfig/SpringBootSecurityApplication.java rename to spring-boot-modules/spring-boot-security/src/main/java/com/baeldung/springbootsecurity/autoconfig/SpringBootSecurityApplication.java diff --git a/spring-boot-security/src/main/java/com/baeldung/springbootsecurity/autoconfig/config/BasicConfiguration.java b/spring-boot-modules/spring-boot-security/src/main/java/com/baeldung/springbootsecurity/autoconfig/config/BasicConfiguration.java similarity index 96% rename from spring-boot-security/src/main/java/com/baeldung/springbootsecurity/autoconfig/config/BasicConfiguration.java rename to spring-boot-modules/spring-boot-security/src/main/java/com/baeldung/springbootsecurity/autoconfig/config/BasicConfiguration.java index 7060792df5..0a158a659c 100644 --- a/spring-boot-security/src/main/java/com/baeldung/springbootsecurity/autoconfig/config/BasicConfiguration.java +++ b/spring-boot-modules/spring-boot-security/src/main/java/com/baeldung/springbootsecurity/autoconfig/config/BasicConfiguration.java @@ -22,7 +22,7 @@ public class BasicConfiguration extends WebSecurityConfigurerAdapter { .roles("USER") .and() .withUser("admin") - .password(encoder.encode("admin")) + .password(encoder.encode("admin"))cl .roles("USER", "ADMIN"); } diff --git a/spring-boot-security/src/main/java/com/baeldung/springbootsecurity/oauth2resource/SpringBootOAuth2ResourceApplication.java b/spring-boot-modules/spring-boot-security/src/main/java/com/baeldung/springbootsecurity/oauth2resource/SpringBootOAuth2ResourceApplication.java similarity index 100% rename from spring-boot-security/src/main/java/com/baeldung/springbootsecurity/oauth2resource/SpringBootOAuth2ResourceApplication.java rename to spring-boot-modules/spring-boot-security/src/main/java/com/baeldung/springbootsecurity/oauth2resource/SpringBootOAuth2ResourceApplication.java diff --git a/spring-boot-security/src/main/java/com/baeldung/springbootsecurity/oauth2server/SpringBootAuthorizationServerApplication.java b/spring-boot-modules/spring-boot-security/src/main/java/com/baeldung/springbootsecurity/oauth2server/SpringBootAuthorizationServerApplication.java similarity index 100% rename from spring-boot-security/src/main/java/com/baeldung/springbootsecurity/oauth2server/SpringBootAuthorizationServerApplication.java rename to spring-boot-modules/spring-boot-security/src/main/java/com/baeldung/springbootsecurity/oauth2server/SpringBootAuthorizationServerApplication.java diff --git a/spring-boot-security/src/main/java/com/baeldung/springbootsecurity/oauth2server/config/AuthenticationMananagerConfig.java b/spring-boot-modules/spring-boot-security/src/main/java/com/baeldung/springbootsecurity/oauth2server/config/AuthenticationMananagerConfig.java similarity index 100% rename from spring-boot-security/src/main/java/com/baeldung/springbootsecurity/oauth2server/config/AuthenticationMananagerConfig.java rename to spring-boot-modules/spring-boot-security/src/main/java/com/baeldung/springbootsecurity/oauth2server/config/AuthenticationMananagerConfig.java diff --git a/spring-boot-security/src/main/java/com/baeldung/springbootsecurity/oauth2server/config/AuthorizationServerConfig.java b/spring-boot-modules/spring-boot-security/src/main/java/com/baeldung/springbootsecurity/oauth2server/config/AuthorizationServerConfig.java similarity index 100% rename from spring-boot-security/src/main/java/com/baeldung/springbootsecurity/oauth2server/config/AuthorizationServerConfig.java rename to spring-boot-modules/spring-boot-security/src/main/java/com/baeldung/springbootsecurity/oauth2server/config/AuthorizationServerConfig.java diff --git a/spring-boot-security/src/main/java/com/baeldung/springbootsecurity/oauth2server/config/WebSecurityConfiguration.java b/spring-boot-modules/spring-boot-security/src/main/java/com/baeldung/springbootsecurity/oauth2server/config/WebSecurityConfiguration.java similarity index 100% rename from spring-boot-security/src/main/java/com/baeldung/springbootsecurity/oauth2server/config/WebSecurityConfiguration.java rename to spring-boot-modules/spring-boot-security/src/main/java/com/baeldung/springbootsecurity/oauth2server/config/WebSecurityConfiguration.java diff --git a/spring-boot-security/src/main/java/com/baeldung/springbootsecurity/oauth2sso/SpringBootOAuth2SsoApplication.java b/spring-boot-modules/spring-boot-security/src/main/java/com/baeldung/springbootsecurity/oauth2sso/SpringBootOAuth2SsoApplication.java similarity index 100% rename from spring-boot-security/src/main/java/com/baeldung/springbootsecurity/oauth2sso/SpringBootOAuth2SsoApplication.java rename to spring-boot-modules/spring-boot-security/src/main/java/com/baeldung/springbootsecurity/oauth2sso/SpringBootOAuth2SsoApplication.java diff --git a/spring-boot-security/src/main/java/com/baeldung/springsecuritytaglibs/HomeController.java b/spring-boot-modules/spring-boot-security/src/main/java/com/baeldung/springsecuritytaglibs/HomeController.java similarity index 100% rename from spring-boot-security/src/main/java/com/baeldung/springsecuritytaglibs/HomeController.java rename to spring-boot-modules/spring-boot-security/src/main/java/com/baeldung/springsecuritytaglibs/HomeController.java diff --git a/spring-boot-security/src/main/java/com/baeldung/springsecuritytaglibs/SpringBootSecurityTagLibsApplication.java b/spring-boot-modules/spring-boot-security/src/main/java/com/baeldung/springsecuritytaglibs/SpringBootSecurityTagLibsApplication.java similarity index 100% rename from spring-boot-security/src/main/java/com/baeldung/springsecuritytaglibs/SpringBootSecurityTagLibsApplication.java rename to spring-boot-modules/spring-boot-security/src/main/java/com/baeldung/springsecuritytaglibs/SpringBootSecurityTagLibsApplication.java diff --git a/spring-boot-security/src/main/java/com/baeldung/springsecuritytaglibs/config/SpringBootSecurityTagLibsConfig.java b/spring-boot-modules/spring-boot-security/src/main/java/com/baeldung/springsecuritytaglibs/config/SpringBootSecurityTagLibsConfig.java similarity index 100% rename from spring-boot-security/src/main/java/com/baeldung/springsecuritytaglibs/config/SpringBootSecurityTagLibsConfig.java rename to spring-boot-modules/spring-boot-security/src/main/java/com/baeldung/springsecuritytaglibs/config/SpringBootSecurityTagLibsConfig.java diff --git a/spring-boot-security/src/main/resources/application-authz.properties b/spring-boot-modules/spring-boot-security/src/main/resources/application-authz.properties similarity index 100% rename from spring-boot-security/src/main/resources/application-authz.properties rename to spring-boot-modules/spring-boot-security/src/main/resources/application-authz.properties diff --git a/spring-boot-security/src/main/resources/application-resource.properties b/spring-boot-modules/spring-boot-security/src/main/resources/application-resource.properties similarity index 100% rename from spring-boot-security/src/main/resources/application-resource.properties rename to spring-boot-modules/spring-boot-security/src/main/resources/application-resource.properties diff --git a/spring-boot-security/src/main/resources/application-sso.properties b/spring-boot-modules/spring-boot-security/src/main/resources/application-sso.properties similarity index 100% rename from spring-boot-security/src/main/resources/application-sso.properties rename to spring-boot-modules/spring-boot-security/src/main/resources/application-sso.properties diff --git a/spring-boot-security/src/main/resources/application-taglibs.properties b/spring-boot-modules/spring-boot-security/src/main/resources/application-taglibs.properties similarity index 100% rename from spring-boot-security/src/main/resources/application-taglibs.properties rename to spring-boot-modules/spring-boot-security/src/main/resources/application-taglibs.properties diff --git a/spring-boot-security/src/main/resources/application.properties b/spring-boot-modules/spring-boot-security/src/main/resources/application.properties similarity index 100% rename from spring-boot-security/src/main/resources/application.properties rename to spring-boot-modules/spring-boot-security/src/main/resources/application.properties diff --git a/spring-boot-security/src/main/resources/logback.xml b/spring-boot-modules/spring-boot-security/src/main/resources/logback.xml similarity index 100% rename from spring-boot-security/src/main/resources/logback.xml rename to spring-boot-modules/spring-boot-security/src/main/resources/logback.xml diff --git a/spring-boot-security/src/main/resources/static/index.html b/spring-boot-modules/spring-boot-security/src/main/resources/static/index.html similarity index 100% rename from spring-boot-security/src/main/resources/static/index.html rename to spring-boot-modules/spring-boot-security/src/main/resources/static/index.html diff --git a/spring-boot-security/src/main/webapp/WEB-INF/views/home.jsp b/spring-boot-modules/spring-boot-security/src/main/webapp/WEB-INF/views/home.jsp similarity index 100% rename from spring-boot-security/src/main/webapp/WEB-INF/views/home.jsp rename to spring-boot-modules/spring-boot-security/src/main/webapp/WEB-INF/views/home.jsp diff --git a/spring-boot-security/src/test/java/com/baeldung/integrationtesting/SecuredControllerRestTemplateIntegrationTest.java b/spring-boot-modules/spring-boot-security/src/test/java/com/baeldung/integrationtesting/SecuredControllerRestTemplateIntegrationTest.java similarity index 100% rename from spring-boot-security/src/test/java/com/baeldung/integrationtesting/SecuredControllerRestTemplateIntegrationTest.java rename to spring-boot-modules/spring-boot-security/src/test/java/com/baeldung/integrationtesting/SecuredControllerRestTemplateIntegrationTest.java diff --git a/spring-boot-security/src/test/java/com/baeldung/integrationtesting/SecuredControllerSpringBootIntegrationTest.java b/spring-boot-modules/spring-boot-security/src/test/java/com/baeldung/integrationtesting/SecuredControllerSpringBootIntegrationTest.java similarity index 100% rename from spring-boot-security/src/test/java/com/baeldung/integrationtesting/SecuredControllerSpringBootIntegrationTest.java rename to spring-boot-modules/spring-boot-security/src/test/java/com/baeldung/integrationtesting/SecuredControllerSpringBootIntegrationTest.java diff --git a/spring-boot-security/src/test/java/com/baeldung/integrationtesting/SecuredControllerWebMvcIntegrationTest.java b/spring-boot-modules/spring-boot-security/src/test/java/com/baeldung/integrationtesting/SecuredControllerWebMvcIntegrationTest.java similarity index 100% rename from spring-boot-security/src/test/java/com/baeldung/integrationtesting/SecuredControllerWebMvcIntegrationTest.java rename to spring-boot-modules/spring-boot-security/src/test/java/com/baeldung/integrationtesting/SecuredControllerWebMvcIntegrationTest.java diff --git a/spring-boot-security/src/test/java/com/baeldung/integrationtesting/SecuredMethodSpringBootIntegrationTest.java b/spring-boot-modules/spring-boot-security/src/test/java/com/baeldung/integrationtesting/SecuredMethodSpringBootIntegrationTest.java similarity index 100% rename from spring-boot-security/src/test/java/com/baeldung/integrationtesting/SecuredMethodSpringBootIntegrationTest.java rename to spring-boot-modules/spring-boot-security/src/test/java/com/baeldung/integrationtesting/SecuredMethodSpringBootIntegrationTest.java diff --git a/spring-boot-security/src/test/java/com/baeldung/springbootsecurity/autoconfig/config/BasicConfigurationIntegrationTest.java b/spring-boot-modules/spring-boot-security/src/test/java/com/baeldung/springbootsecurity/autoconfig/config/BasicConfigurationIntegrationTest.java similarity index 100% rename from spring-boot-security/src/test/java/com/baeldung/springbootsecurity/autoconfig/config/BasicConfigurationIntegrationTest.java rename to spring-boot-modules/spring-boot-security/src/test/java/com/baeldung/springbootsecurity/autoconfig/config/BasicConfigurationIntegrationTest.java diff --git a/spring-boot-security/src/test/java/com/baeldung/springbootsecurity/oauth2server/CustomConfigAuthorizationServerIntegrationTest.java b/spring-boot-modules/spring-boot-security/src/test/java/com/baeldung/springbootsecurity/oauth2server/CustomConfigAuthorizationServerIntegrationTest.java similarity index 100% rename from spring-boot-security/src/test/java/com/baeldung/springbootsecurity/oauth2server/CustomConfigAuthorizationServerIntegrationTest.java rename to spring-boot-modules/spring-boot-security/src/test/java/com/baeldung/springbootsecurity/oauth2server/CustomConfigAuthorizationServerIntegrationTest.java diff --git a/spring-boot-security/src/test/java/com/baeldung/springbootsecurity/oauth2server/DefaultConfigAuthorizationServerIntegrationTest.java b/spring-boot-modules/spring-boot-security/src/test/java/com/baeldung/springbootsecurity/oauth2server/DefaultConfigAuthorizationServerIntegrationTest.java similarity index 100% rename from spring-boot-security/src/test/java/com/baeldung/springbootsecurity/oauth2server/DefaultConfigAuthorizationServerIntegrationTest.java rename to spring-boot-modules/spring-boot-security/src/test/java/com/baeldung/springbootsecurity/oauth2server/DefaultConfigAuthorizationServerIntegrationTest.java diff --git a/spring-boot-security/src/test/java/com/baeldung/springbootsecurity/oauth2server/OAuth2IntegrationTestSupport.java b/spring-boot-modules/spring-boot-security/src/test/java/com/baeldung/springbootsecurity/oauth2server/OAuth2IntegrationTestSupport.java similarity index 100% rename from spring-boot-security/src/test/java/com/baeldung/springbootsecurity/oauth2server/OAuth2IntegrationTestSupport.java rename to spring-boot-modules/spring-boot-security/src/test/java/com/baeldung/springbootsecurity/oauth2server/OAuth2IntegrationTestSupport.java diff --git a/spring-boot-security/src/test/java/com/baeldung/springsecuritytaglibs/HomeControllerUnitTest.java b/spring-boot-modules/spring-boot-security/src/test/java/com/baeldung/springsecuritytaglibs/HomeControllerUnitTest.java similarity index 100% rename from spring-boot-security/src/test/java/com/baeldung/springsecuritytaglibs/HomeControllerUnitTest.java rename to spring-boot-modules/spring-boot-security/src/test/java/com/baeldung/springsecuritytaglibs/HomeControllerUnitTest.java From 86bf2e97cb388db3f4bc90533fb4b2418f62fa6d Mon Sep 17 00:00:00 2001 From: Krzysztof Woyke Date: Thu, 30 Jan 2020 10:06:54 +0100 Subject: [PATCH 018/149] BAEL-20886: Fix a typo --- .../autoconfig/config/BasicConfiguration.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-boot-modules/spring-boot-security/src/main/java/com/baeldung/springbootsecurity/autoconfig/config/BasicConfiguration.java b/spring-boot-modules/spring-boot-security/src/main/java/com/baeldung/springbootsecurity/autoconfig/config/BasicConfiguration.java index 0a158a659c..7060792df5 100644 --- a/spring-boot-modules/spring-boot-security/src/main/java/com/baeldung/springbootsecurity/autoconfig/config/BasicConfiguration.java +++ b/spring-boot-modules/spring-boot-security/src/main/java/com/baeldung/springbootsecurity/autoconfig/config/BasicConfiguration.java @@ -22,7 +22,7 @@ public class BasicConfiguration extends WebSecurityConfigurerAdapter { .roles("USER") .and() .withUser("admin") - .password(encoder.encode("admin"))cl + .password(encoder.encode("admin")) .roles("USER", "ADMIN"); } From 1981d10ffdf1f6cf0c10547de0014274a437bdf3 Mon Sep 17 00:00:00 2001 From: Sorin Zamfir Date: Thu, 30 Jan 2020 18:55:50 +0200 Subject: [PATCH 019/149] BAEL-3777: Bumped spring boot version --- ddd/pom.xml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/ddd/pom.xml b/ddd/pom.xml index 0893523c3b..817e3b8899 100644 --- a/ddd/pom.xml +++ b/ddd/pom.xml @@ -27,13 +27,11 @@ org.junit.jupiter junit-jupiter-api - 5.6.0 test org.junit.jupiter junit-jupiter-engine - 5.6.0 test @@ -41,7 +39,6 @@ org.junit.platform junit-platform-launcher - 1.6.0 test @@ -96,7 +93,7 @@ 1.0.1 - 2.0.6.RELEASE + 2.2.4.RELEASE \ No newline at end of file From b05d42a6ea2246d803414d73a2d79dc46480bd4c Mon Sep 17 00:00:00 2001 From: Sorin Zamfir Date: Fri, 31 Jan 2020 23:32:37 +0200 Subject: [PATCH 020/149] BAEL-3777: Working version --- .../dddhexagonalspring/domain/Order.java | 17 +++++ .../CassandraDbOrderRepository.java | 15 ++-- .../repository/MongoDbOrderRepository.java | 1 - .../repository/OrderEntity.java | 75 +++++++++++++++++++ .../repository/OrderItemEntity.java | 44 +++++++++++ .../SpringDataCassandraOrderRepository.java | 2 +- ...andraDbOrderRepositoryIntegrationTest.java | 55 ++++++++++++++ ...MongoDbOrderRepositoryIntegrationTest.java | 54 +++++++++++++ .../baeldung/dddhexagonalspring/cassandra.cql | 12 +++ .../test/resources/ddd-layers-test.properties | 12 +++ 10 files changed, 280 insertions(+), 7 deletions(-) create mode 100644 ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/OrderEntity.java create mode 100644 ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/OrderItemEntity.java create mode 100644 ddd/src/test/java/com/baeldung/dddhexagonalspring/infrastracture/repository/CassandraDbOrderRepositoryIntegrationTest.java create mode 100644 ddd/src/test/java/com/baeldung/dddhexagonalspring/infrastracture/repository/MongoDbOrderRepositoryIntegrationTest.java create mode 100644 ddd/src/test/resources/com/baeldung/dddhexagonalspring/cassandra.cql create mode 100644 ddd/src/test/resources/ddd-layers-test.properties diff --git a/ddd/src/main/java/com/baeldung/dddhexagonalspring/domain/Order.java b/ddd/src/main/java/com/baeldung/dddhexagonalspring/domain/Order.java index 7d40007411..5ddc0f3500 100644 --- a/ddd/src/main/java/com/baeldung/dddhexagonalspring/domain/Order.java +++ b/ddd/src/main/java/com/baeldung/dddhexagonalspring/domain/Order.java @@ -4,6 +4,7 @@ import java.math.BigDecimal; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.Objects; import java.util.UUID; public class Order { @@ -77,6 +78,22 @@ public class Order { return Collections.unmodifiableList(orderItems); } + + @Override + public int hashCode() { + return Objects.hash(id, orderItems, price, status); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (!(obj instanceof Order)) + return false; + Order other = (Order) obj; + return Objects.equals(id, other.id) && Objects.equals(orderItems, other.orderItems) && Objects.equals(price, other.price) && status == other.status; + } + private Order() { } } diff --git a/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/CassandraDbOrderRepository.java b/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/CassandraDbOrderRepository.java index a648a1f041..c0aff0e11f 100644 --- a/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/CassandraDbOrderRepository.java +++ b/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/CassandraDbOrderRepository.java @@ -4,16 +4,18 @@ import java.util.Optional; import java.util.UUID; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Primary; import org.springframework.stereotype.Component; import com.baeldung.dddhexagonalspring.domain.Order; import com.baeldung.dddhexagonalspring.domain.repository.OrderRepository; @Component +@Primary public class CassandraDbOrderRepository implements OrderRepository { private final SpringDataCassandraOrderRepository orderRepository; - + @Autowired public CassandraDbOrderRepository(SpringDataCassandraOrderRepository orderRepository) { this.orderRepository = orderRepository; @@ -21,14 +23,17 @@ public class CassandraDbOrderRepository implements OrderRepository { @Override public Optional findById(UUID id) { - // TODO Auto-generated method stub - return null; + Optional orderEntity = orderRepository.findById(id); + if (orderEntity.isPresent()) { + return Optional.of(orderEntity.get().toOrder()); + } else { + return Optional.empty(); + } } @Override public void save(Order order) { - // TODO Auto-generated method stub - + orderRepository.save(new OrderEntity(order)); } } diff --git a/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/MongoDbOrderRepository.java b/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/MongoDbOrderRepository.java index cf1d900821..61ab93b707 100644 --- a/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/MongoDbOrderRepository.java +++ b/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/MongoDbOrderRepository.java @@ -10,7 +10,6 @@ import java.util.Optional; import java.util.UUID; @Component -@Primary public class MongoDbOrderRepository implements OrderRepository { private final SpringDataMongoOrderRepository orderRepository; diff --git a/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/OrderEntity.java b/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/OrderEntity.java new file mode 100644 index 0000000000..30c162a8ab --- /dev/null +++ b/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/OrderEntity.java @@ -0,0 +1,75 @@ +package com.baeldung.dddhexagonalspring.infrastracture.repository; + +import java.math.BigDecimal; +import java.util.List; +import java.util.UUID; +import java.util.stream.Collectors; + +import org.springframework.data.cassandra.core.mapping.PrimaryKey; + +import com.baeldung.dddhexagonalspring.domain.Order; +import com.baeldung.dddhexagonalspring.domain.OrderItem; +import com.baeldung.dddhexagonalspring.domain.OrderStatus; +import com.baeldung.dddhexagonalspring.domain.Product; + +public class OrderEntity { + + @PrimaryKey + private UUID id; + private OrderStatus status; + private List orderItemEntities; + private BigDecimal price; + + public OrderEntity(UUID id, OrderStatus status, List orderItemEntities, BigDecimal price) { + this.id = id; + this.status = status; + this.orderItemEntities = orderItemEntities; + this.price = price; + } + + public OrderEntity() { + } + + public OrderEntity(Order order) { + this.id = order.getId(); + this.price = order.getPrice(); + this.status = order.getStatus(); + this.orderItemEntities = order.getOrderItems() + .stream() + .map(OrderItemEntity::new) + .collect(Collectors.toList()); + + } + + public Order toOrder() { + List orderItems = orderItemEntities.stream() + .map(OrderItemEntity::toOrderItem) + .collect(Collectors.toList()); + List namelessProducts = orderItems.stream() + .map(orderItem -> new Product(orderItem.getProductId(), orderItem.getPrice(), "")) + .collect(Collectors.toList()); + Order order = new Order(id, namelessProducts.remove(0)); + namelessProducts.forEach(product -> order.addOrder(product)); + if (status == OrderStatus.COMPLETED) { + order.complete(); + } + return order; + } + + public UUID getId() { + return id; + } + + public OrderStatus getStatus() { + return status; + } + + public List getOrderItems() { + return orderItemEntities; + } + + public BigDecimal getPrice() { + return price; + } + +} diff --git a/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/OrderItemEntity.java b/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/OrderItemEntity.java new file mode 100644 index 0000000000..44af65b842 --- /dev/null +++ b/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/OrderItemEntity.java @@ -0,0 +1,44 @@ +package com.baeldung.dddhexagonalspring.infrastracture.repository; + +import java.math.BigDecimal; +import java.util.UUID; + +import org.springframework.data.cassandra.core.mapping.UserDefinedType; + +import com.baeldung.dddhexagonalspring.domain.OrderItem; +import com.baeldung.dddhexagonalspring.domain.Product; + +@UserDefinedType +public class OrderItemEntity { + + private UUID productId; + private BigDecimal price; + + public OrderItemEntity() { + } + + public OrderItemEntity(final OrderItem orderItem) { + this.productId = orderItem.getProductId(); + this.price = orderItem.getPrice(); + } + + public OrderItem toOrderItem() { + return new OrderItem(new Product(productId, price, "")); + } + + public UUID getProductId() { + return productId; + } + + public void setProductId(UUID productId) { + this.productId = productId; + } + + public BigDecimal getPrice() { + return price; + } + + public void setPrice(BigDecimal price) { + this.price = price; + } +} diff --git a/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/SpringDataCassandraOrderRepository.java b/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/SpringDataCassandraOrderRepository.java index dd7c7dbc81..eed265e877 100644 --- a/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/SpringDataCassandraOrderRepository.java +++ b/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/SpringDataCassandraOrderRepository.java @@ -8,6 +8,6 @@ import org.springframework.stereotype.Repository; import com.baeldung.dddhexagonalspring.domain.Order; @Repository -public interface SpringDataCassandraOrderRepository extends CassandraRepository{ +public interface SpringDataCassandraOrderRepository extends CassandraRepository{ } diff --git a/ddd/src/test/java/com/baeldung/dddhexagonalspring/infrastracture/repository/CassandraDbOrderRepositoryIntegrationTest.java b/ddd/src/test/java/com/baeldung/dddhexagonalspring/infrastracture/repository/CassandraDbOrderRepositoryIntegrationTest.java new file mode 100644 index 0000000000..aa1c8af43d --- /dev/null +++ b/ddd/src/test/java/com/baeldung/dddhexagonalspring/infrastracture/repository/CassandraDbOrderRepositoryIntegrationTest.java @@ -0,0 +1,55 @@ +package com.baeldung.dddhexagonalspring.infrastracture.repository; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.math.BigDecimal; +import java.util.Optional; +import java.util.UUID; + +import org.junit.After; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.TestPropertySource; +import org.springframework.test.context.junit.jupiter.SpringJUnitConfig; + +import com.baeldung.dddhexagonalspring.domain.Order; +import com.baeldung.dddhexagonalspring.domain.Product; +import com.baeldung.dddhexagonalspring.domain.repository.OrderRepository; + +@SpringJUnitConfig +@SpringBootTest +@TestPropertySource("classpath:ddd-layers-test.properties") +class CassandraDbOrderRepositoryIntegrationTest { + + @Autowired + private SpringDataCassandraOrderRepository cassandraOrderRepository; + + @Autowired + private OrderRepository orderRepository; + + @After + void cleanUp(){ + cassandraOrderRepository.deleteAll(); + } + + @Test + void shouldFindById_thenReturnOrder() { + + // given + final UUID id = UUID.randomUUID(); + final Order order = createOrder(id); + order.complete(); + + // when + orderRepository.save(order); + + final Optional result = orderRepository.findById(id); + + assertEquals(order, result.get()); + } + + private Order createOrder(UUID id) { + return new Order(id, new Product(UUID.randomUUID(), BigDecimal.TEN, "product")); + } +} \ No newline at end of file diff --git a/ddd/src/test/java/com/baeldung/dddhexagonalspring/infrastracture/repository/MongoDbOrderRepositoryIntegrationTest.java b/ddd/src/test/java/com/baeldung/dddhexagonalspring/infrastracture/repository/MongoDbOrderRepositoryIntegrationTest.java new file mode 100644 index 0000000000..538fff0b51 --- /dev/null +++ b/ddd/src/test/java/com/baeldung/dddhexagonalspring/infrastracture/repository/MongoDbOrderRepositoryIntegrationTest.java @@ -0,0 +1,54 @@ +package com.baeldung.dddhexagonalspring.infrastracture.repository; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.math.BigDecimal; +import java.util.Optional; +import java.util.UUID; + +import org.junit.After; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.TestPropertySource; +import org.springframework.test.context.junit.jupiter.SpringJUnitConfig; + +import com.baeldung.dddhexagonalspring.domain.Order; +import com.baeldung.dddhexagonalspring.domain.Product; +import com.baeldung.dddhexagonalspring.domain.repository.OrderRepository; + +@SpringJUnitConfig +@SpringBootTest +@TestPropertySource("classpath:ddd-layers-test.properties") +class MongoDbOrderRepositoryIntegrationTest { + + @Autowired + private SpringDataMongoOrderRepository mongoOrderRepository; + + @Autowired + private OrderRepository orderRepository; + + @After + void cleanUp(){ + mongoOrderRepository.deleteAll(); + } + + @Test + void shouldFindById_thenReturnOrder() { + + // given + final UUID id = UUID.randomUUID(); + final Order order = createOrder(id); + + // when + orderRepository.save(order); + + final Optional result = orderRepository.findById(id); + + assertEquals(order, result.get()); + } + + private Order createOrder(UUID id) { + return new Order(id, new Product(UUID.randomUUID(), BigDecimal.TEN, "product")); + } +} \ No newline at end of file diff --git a/ddd/src/test/resources/com/baeldung/dddhexagonalspring/cassandra.cql b/ddd/src/test/resources/com/baeldung/dddhexagonalspring/cassandra.cql new file mode 100644 index 0000000000..7adeda0a51 --- /dev/null +++ b/ddd/src/test/resources/com/baeldung/dddhexagonalspring/cassandra.cql @@ -0,0 +1,12 @@ +CREATE KEYSPACE IF NOT exists order_database +WITH replication = {'class':'SimpleStrategy', 'replication_factor':1}; + +CREATE TYPE order_database.orderitementity (productid uuid, price decimal); + +CREATE TABLE order_database.orderentity( + id uuid, + status text, + orderitementities list>, + price decimal, + primary key(id) +); diff --git a/ddd/src/test/resources/ddd-layers-test.properties b/ddd/src/test/resources/ddd-layers-test.properties new file mode 100644 index 0000000000..32307581aa --- /dev/null +++ b/ddd/src/test/resources/ddd-layers-test.properties @@ -0,0 +1,12 @@ +spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.mongo.embedded.EmbeddedMongoAutoConfiguration +spring.data.mongodb.host=127.0.0.1 +spring.data.mongodb.port=27017 +spring.data.mongodb.database=order-database +spring.data.mongodb.username=order +spring.data.mongodb.password=order + +spring.data.cassandra.keyspaceName=order_database +spring.data.cassandra.username=cassandra +spring.data.cassandra.password=cassandra +spring.data.cassandra.contactPoints=127.0.0.1 +spring.data.cassandra.port=9042 \ No newline at end of file From 8b49858bfe0de80b946a9666bb43f865f160cdc0 Mon Sep 17 00:00:00 2001 From: Sorin Zamfir Date: Sat, 1 Feb 2020 11:47:00 +0200 Subject: [PATCH 021/149] BAEL-3777: Fixed formatting --- .../dddhexagonalspring/domain/Order.java | 15 ++++++--------- .../configuration/CassandraConfiguration.java | 2 +- .../configuration/MongoDBConfiguration.java | 3 ++- .../CassandraDbOrderRepository.java | 2 +- .../repository/{ => cassandra}/OrderEntity.java | 2 +- .../{ => cassandra}/OrderItemEntity.java | 2 +- .../SpringDataCassandraOrderRepository.java | 2 +- .../{ => mongo}/MongoDbOrderRepository.java | 2 +- .../SpringDataMongoOrderRepository.java | 2 +- ...assandraDbOrderRepositoryIntegrationTest.java | 16 +++++++++------- .../MongoDbOrderRepositoryIntegrationTest.java | 15 ++++++++------- .../MongoDbOrderRepositoryUnitTest.java | 5 ++++- 12 files changed, 36 insertions(+), 32 deletions(-) rename ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/{ => cassandra}/CassandraDbOrderRepository.java (98%) rename ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/{ => cassandra}/OrderEntity.java (99%) rename ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/{ => cassandra}/OrderItemEntity.java (98%) rename ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/{ => cassandra}/SpringDataCassandraOrderRepository.java (96%) rename ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/{ => mongo}/MongoDbOrderRepository.java (99%) rename ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/{ => mongo}/SpringDataMongoOrderRepository.java (97%) diff --git a/ddd/src/main/java/com/baeldung/dddhexagonalspring/domain/Order.java b/ddd/src/main/java/com/baeldung/dddhexagonalspring/domain/Order.java index 5ddc0f3500..a8745eadbe 100644 --- a/ddd/src/main/java/com/baeldung/dddhexagonalspring/domain/Order.java +++ b/ddd/src/main/java/com/baeldung/dddhexagonalspring/domain/Order.java @@ -41,13 +41,11 @@ public class Order { } private OrderItem getOrderItem(final UUID id) { - return orderItems - .stream() - .filter(orderItem -> orderItem - .getProductId() - .equals(id)) - .findFirst() - .orElseThrow(() -> new DomainException("Product with " + id + " doesn't exist.")); + return orderItems.stream() + .filter(orderItem -> orderItem.getProductId() + .equals(id)) + .findFirst() + .orElseThrow(() -> new DomainException("Product with " + id + " doesn't exist.")); } private void validateState() { @@ -78,7 +76,6 @@ public class Order { return Collections.unmodifiableList(orderItems); } - @Override public int hashCode() { return Objects.hash(id, orderItems, price, status); @@ -93,7 +90,7 @@ public class Order { Order other = (Order) obj; return Objects.equals(id, other.id) && Objects.equals(orderItems, other.orderItems) && Objects.equals(price, other.price) && status == other.status; } - + private Order() { } } diff --git a/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/configuration/CassandraConfiguration.java b/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/configuration/CassandraConfiguration.java index 76d7ad1aee..3b5911979a 100644 --- a/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/configuration/CassandraConfiguration.java +++ b/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/configuration/CassandraConfiguration.java @@ -2,7 +2,7 @@ package com.baeldung.dddhexagonalspring.infrastracture.configuration; import org.springframework.data.cassandra.repository.config.EnableCassandraRepositories; -import com.baeldung.dddhexagonalspring.infrastracture.repository.SpringDataCassandraOrderRepository; +import com.baeldung.dddhexagonalspring.infrastracture.repository.cassandra.SpringDataCassandraOrderRepository; @EnableCassandraRepositories(basePackageClasses = SpringDataCassandraOrderRepository.class) public class CassandraConfiguration { diff --git a/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/configuration/MongoDBConfiguration.java b/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/configuration/MongoDBConfiguration.java index e0f5e77671..8ec6daf370 100644 --- a/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/configuration/MongoDBConfiguration.java +++ b/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/configuration/MongoDBConfiguration.java @@ -1,8 +1,9 @@ package com.baeldung.dddhexagonalspring.infrastracture.configuration; -import com.baeldung.dddhexagonalspring.infrastracture.repository.SpringDataMongoOrderRepository; import org.springframework.data.mongodb.repository.config.EnableMongoRepositories; +import com.baeldung.dddhexagonalspring.infrastracture.repository.mongo.SpringDataMongoOrderRepository; + @EnableMongoRepositories(basePackageClasses = SpringDataMongoOrderRepository.class) public class MongoDBConfiguration { } diff --git a/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/CassandraDbOrderRepository.java b/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/cassandra/CassandraDbOrderRepository.java similarity index 98% rename from ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/CassandraDbOrderRepository.java rename to ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/cassandra/CassandraDbOrderRepository.java index c0aff0e11f..98a69cbc88 100644 --- a/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/CassandraDbOrderRepository.java +++ b/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/cassandra/CassandraDbOrderRepository.java @@ -1,4 +1,4 @@ -package com.baeldung.dddhexagonalspring.infrastracture.repository; +package com.baeldung.dddhexagonalspring.infrastracture.repository.cassandra; import java.util.Optional; import java.util.UUID; diff --git a/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/OrderEntity.java b/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/cassandra/OrderEntity.java similarity index 99% rename from ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/OrderEntity.java rename to ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/cassandra/OrderEntity.java index 30c162a8ab..b9841a4433 100644 --- a/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/OrderEntity.java +++ b/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/cassandra/OrderEntity.java @@ -1,4 +1,4 @@ -package com.baeldung.dddhexagonalspring.infrastracture.repository; +package com.baeldung.dddhexagonalspring.infrastracture.repository.cassandra; import java.math.BigDecimal; import java.util.List; diff --git a/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/OrderItemEntity.java b/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/cassandra/OrderItemEntity.java similarity index 98% rename from ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/OrderItemEntity.java rename to ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/cassandra/OrderItemEntity.java index 44af65b842..2cf8ac7845 100644 --- a/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/OrderItemEntity.java +++ b/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/cassandra/OrderItemEntity.java @@ -1,4 +1,4 @@ -package com.baeldung.dddhexagonalspring.infrastracture.repository; +package com.baeldung.dddhexagonalspring.infrastracture.repository.cassandra; import java.math.BigDecimal; import java.util.UUID; diff --git a/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/SpringDataCassandraOrderRepository.java b/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/cassandra/SpringDataCassandraOrderRepository.java similarity index 96% rename from ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/SpringDataCassandraOrderRepository.java rename to ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/cassandra/SpringDataCassandraOrderRepository.java index eed265e877..ca460fb2c7 100644 --- a/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/SpringDataCassandraOrderRepository.java +++ b/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/cassandra/SpringDataCassandraOrderRepository.java @@ -1,4 +1,4 @@ -package com.baeldung.dddhexagonalspring.infrastracture.repository; +package com.baeldung.dddhexagonalspring.infrastracture.repository.cassandra; import java.util.UUID; diff --git a/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/MongoDbOrderRepository.java b/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/mongo/MongoDbOrderRepository.java similarity index 99% rename from ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/MongoDbOrderRepository.java rename to ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/mongo/MongoDbOrderRepository.java index 61ab93b707..f5d7b8f6c1 100644 --- a/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/MongoDbOrderRepository.java +++ b/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/mongo/MongoDbOrderRepository.java @@ -1,4 +1,4 @@ -package com.baeldung.dddhexagonalspring.infrastracture.repository; +package com.baeldung.dddhexagonalspring.infrastracture.repository.mongo; import com.baeldung.dddhexagonalspring.domain.Order; import com.baeldung.dddhexagonalspring.domain.repository.OrderRepository; diff --git a/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/SpringDataMongoOrderRepository.java b/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/mongo/SpringDataMongoOrderRepository.java similarity index 97% rename from ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/SpringDataMongoOrderRepository.java rename to ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/mongo/SpringDataMongoOrderRepository.java index 620ecb34af..73aa74e7d7 100644 --- a/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/SpringDataMongoOrderRepository.java +++ b/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/mongo/SpringDataMongoOrderRepository.java @@ -1,4 +1,4 @@ -package com.baeldung.dddhexagonalspring.infrastracture.repository; +package com.baeldung.dddhexagonalspring.infrastracture.repository.mongo; import com.baeldung.dddhexagonalspring.domain.Order; import org.springframework.data.mongodb.repository.MongoRepository; diff --git a/ddd/src/test/java/com/baeldung/dddhexagonalspring/infrastracture/repository/CassandraDbOrderRepositoryIntegrationTest.java b/ddd/src/test/java/com/baeldung/dddhexagonalspring/infrastracture/repository/CassandraDbOrderRepositoryIntegrationTest.java index aa1c8af43d..668d1e5e34 100644 --- a/ddd/src/test/java/com/baeldung/dddhexagonalspring/infrastracture/repository/CassandraDbOrderRepositoryIntegrationTest.java +++ b/ddd/src/test/java/com/baeldung/dddhexagonalspring/infrastracture/repository/CassandraDbOrderRepositoryIntegrationTest.java @@ -6,7 +6,7 @@ import java.math.BigDecimal; import java.util.Optional; import java.util.UUID; -import org.junit.After; +import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; @@ -16,6 +16,7 @@ import org.springframework.test.context.junit.jupiter.SpringJUnitConfig; import com.baeldung.dddhexagonalspring.domain.Order; import com.baeldung.dddhexagonalspring.domain.Product; import com.baeldung.dddhexagonalspring.domain.repository.OrderRepository; +import com.baeldung.dddhexagonalspring.infrastracture.repository.cassandra.SpringDataCassandraOrderRepository; @SpringJUnitConfig @SpringBootTest @@ -24,23 +25,24 @@ class CassandraDbOrderRepositoryIntegrationTest { @Autowired private SpringDataCassandraOrderRepository cassandraOrderRepository; - + @Autowired private OrderRepository orderRepository; - - @After - void cleanUp(){ + + @AfterEach + void cleanUp() { cassandraOrderRepository.deleteAll(); } @Test void shouldFindById_thenReturnOrder() { - + // given final UUID id = UUID.randomUUID(); final Order order = createOrder(id); + order.addOrder(new Product(UUID.randomUUID(), BigDecimal.TEN, "second")); order.complete(); - + // when orderRepository.save(order); diff --git a/ddd/src/test/java/com/baeldung/dddhexagonalspring/infrastracture/repository/MongoDbOrderRepositoryIntegrationTest.java b/ddd/src/test/java/com/baeldung/dddhexagonalspring/infrastracture/repository/MongoDbOrderRepositoryIntegrationTest.java index 538fff0b51..9a7736c419 100644 --- a/ddd/src/test/java/com/baeldung/dddhexagonalspring/infrastracture/repository/MongoDbOrderRepositoryIntegrationTest.java +++ b/ddd/src/test/java/com/baeldung/dddhexagonalspring/infrastracture/repository/MongoDbOrderRepositoryIntegrationTest.java @@ -6,7 +6,7 @@ import java.math.BigDecimal; import java.util.Optional; import java.util.UUID; -import org.junit.After; +import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; @@ -16,6 +16,7 @@ import org.springframework.test.context.junit.jupiter.SpringJUnitConfig; import com.baeldung.dddhexagonalspring.domain.Order; import com.baeldung.dddhexagonalspring.domain.Product; import com.baeldung.dddhexagonalspring.domain.repository.OrderRepository; +import com.baeldung.dddhexagonalspring.infrastracture.repository.mongo.SpringDataMongoOrderRepository; @SpringJUnitConfig @SpringBootTest @@ -24,22 +25,22 @@ class MongoDbOrderRepositoryIntegrationTest { @Autowired private SpringDataMongoOrderRepository mongoOrderRepository; - + @Autowired private OrderRepository orderRepository; - - @After - void cleanUp(){ + + @AfterEach + void cleanUp() { mongoOrderRepository.deleteAll(); } @Test void shouldFindById_thenReturnOrder() { - + // given final UUID id = UUID.randomUUID(); final Order order = createOrder(id); - + // when orderRepository.save(order); diff --git a/ddd/src/test/java/com/baeldung/dddhexagonalspring/infrastracture/repository/MongoDbOrderRepositoryUnitTest.java b/ddd/src/test/java/com/baeldung/dddhexagonalspring/infrastracture/repository/MongoDbOrderRepositoryUnitTest.java index 8247d7c7bd..4c75daaa4d 100644 --- a/ddd/src/test/java/com/baeldung/dddhexagonalspring/infrastracture/repository/MongoDbOrderRepositoryUnitTest.java +++ b/ddd/src/test/java/com/baeldung/dddhexagonalspring/infrastracture/repository/MongoDbOrderRepositoryUnitTest.java @@ -2,6 +2,9 @@ package com.baeldung.dddhexagonalspring.infrastracture.repository; import com.baeldung.dddhexagonalspring.domain.Order; import com.baeldung.dddhexagonalspring.domain.Product; +import com.baeldung.dddhexagonalspring.infrastracture.repository.mongo.MongoDbOrderRepository; +import com.baeldung.dddhexagonalspring.infrastracture.repository.mongo.SpringDataMongoOrderRepository; + import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -18,7 +21,7 @@ class MongoDbOrderRepositoryUnitTest { private MongoDbOrderRepository tested; @BeforeEach - void setUp(){ + void setUp() { springDataOrderRepository = mock(SpringDataMongoOrderRepository.class); tested = new MongoDbOrderRepository(springDataOrderRepository); From ef3570baaf9356a41867d353392caf6d37514009 Mon Sep 17 00:00:00 2001 From: Sorin Zamfir Date: Sat, 1 Feb 2020 12:47:34 +0200 Subject: [PATCH 022/149] BAEL-3777: Fixed init of cassandra --- .../{cassandra.cql => cassandra-init.cql} | 4 ++-- .../baeldung/dddhexagonalspring/docker-compose.yml | 13 ++++++++++++- ddd/src/test/resources/ddd-layers-test.properties | 2 +- 3 files changed, 15 insertions(+), 4 deletions(-) rename ddd/src/test/resources/com/baeldung/dddhexagonalspring/{cassandra.cql => cassandra-init.cql} (61%) diff --git a/ddd/src/test/resources/com/baeldung/dddhexagonalspring/cassandra.cql b/ddd/src/test/resources/com/baeldung/dddhexagonalspring/cassandra-init.cql similarity index 61% rename from ddd/src/test/resources/com/baeldung/dddhexagonalspring/cassandra.cql rename to ddd/src/test/resources/com/baeldung/dddhexagonalspring/cassandra-init.cql index 7adeda0a51..cbb22d2525 100644 --- a/ddd/src/test/resources/com/baeldung/dddhexagonalspring/cassandra.cql +++ b/ddd/src/test/resources/com/baeldung/dddhexagonalspring/cassandra-init.cql @@ -1,9 +1,9 @@ CREATE KEYSPACE IF NOT exists order_database WITH replication = {'class':'SimpleStrategy', 'replication_factor':1}; -CREATE TYPE order_database.orderitementity (productid uuid, price decimal); +CREATE TYPE IF NOT EXISTS order_database.orderitementity (productid uuid, price decimal); -CREATE TABLE order_database.orderentity( +CREATE TABLE IF NOT EXISTS order_database.orderentity( id uuid, status text, orderitementities list>, diff --git a/ddd/src/test/resources/com/baeldung/dddhexagonalspring/docker-compose.yml b/ddd/src/test/resources/com/baeldung/dddhexagonalspring/docker-compose.yml index dfad875a2b..7de0d30d43 100644 --- a/ddd/src/test/resources/com/baeldung/dddhexagonalspring/docker-compose.yml +++ b/ddd/src/test/resources/com/baeldung/dddhexagonalspring/docker-compose.yml @@ -3,6 +3,7 @@ version: '3' services: order-mongo-database: image: mongo:3.4.13 + container_name: order-mongo-db restart: always ports: - 27017:27017 @@ -14,6 +15,16 @@ services: - ./mongo-init.js:/docker-entrypoint-initdb.d/mongo-init.js:ro order-cassandra-database: image: cassandra:3.11.5 + container_name: order-cassandra-db restart: always ports: - - 9042:9042 \ No newline at end of file + - 9042:9042 + order-cassandra-init: + image: cassandra:3.11.5 + container_name: order-cassandra-db-init + depends_on: + - order-cassandra-database + volumes: + - ./cassandra-init.cql:/cassandra-init.cql:ro + command: bin/bash -c "echo Initializing cassandra schema... && sleep 30 && cqlsh -u cassandra -p cassandra -f cassandra-init.cql order-cassandra-db" + \ No newline at end of file diff --git a/ddd/src/test/resources/ddd-layers-test.properties b/ddd/src/test/resources/ddd-layers-test.properties index 32307581aa..d41689d91b 100644 --- a/ddd/src/test/resources/ddd-layers-test.properties +++ b/ddd/src/test/resources/ddd-layers-test.properties @@ -1,4 +1,4 @@ -spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.mongo.embedded.EmbeddedMongoAutoConfiguration +spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.mongo.embedded.EmbeddedMongoAutoConfiguration,org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration spring.data.mongodb.host=127.0.0.1 spring.data.mongodb.port=27017 spring.data.mongodb.database=order-database From 92640684d8e9d74f21d9b4c63cba895bbd7debd0 Mon Sep 17 00:00:00 2001 From: Sorin Zamfir Date: Sat, 1 Feb 2020 13:02:43 +0200 Subject: [PATCH 023/149] BAEL-3777: Cleanup --- .../SpringDataCassandraOrderRepository.java | 2 -- .../repository/mongo/MongoDbOrderRepository.java | 12 ++++++------ ddd/src/main/resources/ddd-layers.properties | 1 + .../com/baeldung/dddhexagonalspring/README.md | 4 +++- 4 files changed, 10 insertions(+), 9 deletions(-) diff --git a/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/cassandra/SpringDataCassandraOrderRepository.java b/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/cassandra/SpringDataCassandraOrderRepository.java index ca460fb2c7..3c89bd1b23 100644 --- a/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/cassandra/SpringDataCassandraOrderRepository.java +++ b/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/cassandra/SpringDataCassandraOrderRepository.java @@ -5,8 +5,6 @@ import java.util.UUID; import org.springframework.data.cassandra.repository.CassandraRepository; import org.springframework.stereotype.Repository; -import com.baeldung.dddhexagonalspring.domain.Order; - @Repository public interface SpringDataCassandraOrderRepository extends CassandraRepository{ diff --git a/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/mongo/MongoDbOrderRepository.java b/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/mongo/MongoDbOrderRepository.java index f5d7b8f6c1..e14cb88f5a 100644 --- a/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/mongo/MongoDbOrderRepository.java +++ b/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/mongo/MongoDbOrderRepository.java @@ -1,14 +1,14 @@ package com.baeldung.dddhexagonalspring.infrastracture.repository.mongo; -import com.baeldung.dddhexagonalspring.domain.Order; -import com.baeldung.dddhexagonalspring.domain.repository.OrderRepository; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Primary; -import org.springframework.stereotype.Component; - import java.util.Optional; import java.util.UUID; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import com.baeldung.dddhexagonalspring.domain.Order; +import com.baeldung.dddhexagonalspring.domain.repository.OrderRepository; + @Component public class MongoDbOrderRepository implements OrderRepository { diff --git a/ddd/src/main/resources/ddd-layers.properties b/ddd/src/main/resources/ddd-layers.properties index d0ad343b66..412c24eef7 100644 --- a/ddd/src/main/resources/ddd-layers.properties +++ b/ddd/src/main/resources/ddd-layers.properties @@ -1,3 +1,4 @@ +spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration spring.data.mongodb.host=localhost spring.data.mongodb.port=27017 spring.data.mongodb.database=order-database diff --git a/ddd/src/test/resources/com/baeldung/dddhexagonalspring/README.md b/ddd/src/test/resources/com/baeldung/dddhexagonalspring/README.md index e0337498fc..1355514a3d 100644 --- a/ddd/src/test/resources/com/baeldung/dddhexagonalspring/README.md +++ b/ddd/src/test/resources/com/baeldung/dddhexagonalspring/README.md @@ -4,4 +4,6 @@ To run this project, follow these steps: * Run the application database by executing `docker-compose up` in this directory. * Launch the Spring Boot Application (DomainLayerApplication). -* By default, application will connect to this database (configuration in *ddd-layers.properties*) \ No newline at end of file +* By default, the application will connect to the one of the two databases (configuration in *ddd-layers.properties*) + * check `CassandraDbOrderRepository.java` and `MongoDbOrderRepository.java` + * switch between the databases by making one of the above beans primary using the `@Primary` annotation \ No newline at end of file From a8617b62fa2d6eec253a87ed23b2736fecbc2135 Mon Sep 17 00:00:00 2001 From: Sorin Zamfir Date: Sat, 1 Feb 2020 15:50:49 +0200 Subject: [PATCH 024/149] BAEL-3777: Included CLI mode --- .../DomainLayerApplication.java | 40 ++++++++++++++++++- .../application/cli/CliOrderController.java | 38 ++++++++++++++++++ .../RestOrderController.java} | 6 +-- .../cassandra/CassandraDbOrderRepository.java | 1 - .../mongo/MongoDbOrderRepository.java | 2 + 5 files changed, 81 insertions(+), 6 deletions(-) create mode 100644 ddd/src/main/java/com/baeldung/dddhexagonalspring/application/cli/CliOrderController.java rename ddd/src/main/java/com/baeldung/dddhexagonalspring/application/{controller/OrderController.java => rest/RestOrderController.java} (91%) diff --git a/ddd/src/main/java/com/baeldung/dddhexagonalspring/DomainLayerApplication.java b/ddd/src/main/java/com/baeldung/dddhexagonalspring/DomainLayerApplication.java index 988f96042b..10fbc9c2f5 100644 --- a/ddd/src/main/java/com/baeldung/dddhexagonalspring/DomainLayerApplication.java +++ b/ddd/src/main/java/com/baeldung/dddhexagonalspring/DomainLayerApplication.java @@ -1,13 +1,49 @@ package com.baeldung.dddhexagonalspring; +import java.math.BigDecimal; +import java.util.UUID; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.annotation.PropertySource; +import com.baeldung.dddhexagonalspring.application.cli.CliOrderController; +import com.baeldung.dddhexagonalspring.domain.Product; + @SpringBootApplication @PropertySource(value = { "classpath:ddd-layers.properties" }) -public class DomainLayerApplication { +public class DomainLayerApplication implements CommandLineRunner { + private static final Logger LOG = LoggerFactory.getLogger(DomainLayerApplication.class); + public static void main(final String[] args) { - SpringApplication.run(DomainLayerApplication.class, args); + SpringApplication application = new SpringApplication(DomainLayerApplication.class); + // uncomment to run just the console application + // application.setWebApplicationType(WebApplicationType.NONE); + application.run(args); + } + + @Autowired + public CliOrderController orderController; + + @Autowired + public ConfigurableApplicationContext context; + + @Override + public void run(String... args) throws Exception { + LOG.info("Placing a new CLI order with two products"); + Product mobilePhone = new Product(UUID.randomUUID(), BigDecimal.valueOf(200), "mobile"); + Product razor = new Product(UUID.randomUUID(), BigDecimal.valueOf(50), "razor"); + LOG.info("Creating order with mobile phone"); + UUID orderId = orderController.createOrder(mobilePhone); + LOG.info("Adding a razor to the order"); + orderController.addProduct(orderId, razor); + LOG.info("Completing order"); + orderController.completeOrder(orderId); + LOG.info("Order placement complete"); } } diff --git a/ddd/src/main/java/com/baeldung/dddhexagonalspring/application/cli/CliOrderController.java b/ddd/src/main/java/com/baeldung/dddhexagonalspring/application/cli/CliOrderController.java new file mode 100644 index 0000000000..cf073f61c8 --- /dev/null +++ b/ddd/src/main/java/com/baeldung/dddhexagonalspring/application/cli/CliOrderController.java @@ -0,0 +1,38 @@ +package com.baeldung.dddhexagonalspring.application.cli; + +import java.util.UUID; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import com.baeldung.dddhexagonalspring.domain.Product; +import com.baeldung.dddhexagonalspring.domain.service.OrderService; + +@Component +public class CliOrderController{ + + private final OrderService orderService; + + @Autowired + public CliOrderController(OrderService orderService) { + this.orderService = orderService; + } + + public UUID createOrder(Product product) { + return orderService.createOrder(product); + } + + public void addProduct(UUID orderId, Product product) { + orderService.addProduct(orderId, product); + } + + public void deleteProduct(UUID orderId, UUID productId) { + orderService.deleteProduct(orderId, productId); + + } + + public void completeOrder(UUID orderId) { + orderService.completeOrder(orderId); + } + +} diff --git a/ddd/src/main/java/com/baeldung/dddhexagonalspring/application/controller/OrderController.java b/ddd/src/main/java/com/baeldung/dddhexagonalspring/application/rest/RestOrderController.java similarity index 91% rename from ddd/src/main/java/com/baeldung/dddhexagonalspring/application/controller/OrderController.java rename to ddd/src/main/java/com/baeldung/dddhexagonalspring/application/rest/RestOrderController.java index 80ba36d01b..9fcec44a30 100644 --- a/ddd/src/main/java/com/baeldung/dddhexagonalspring/application/controller/OrderController.java +++ b/ddd/src/main/java/com/baeldung/dddhexagonalspring/application/rest/RestOrderController.java @@ -1,4 +1,4 @@ -package com.baeldung.dddhexagonalspring.application.controller; +package com.baeldung.dddhexagonalspring.application.rest; import com.baeldung.dddhexagonalspring.application.request.AddProductRequest; import com.baeldung.dddhexagonalspring.application.request.CreateOrderRequest; @@ -12,12 +12,12 @@ import java.util.UUID; @RestController @RequestMapping("/orders") -public class OrderController { +public class RestOrderController { private final OrderService orderService; @Autowired - public OrderController(OrderService orderService) { + public RestOrderController(OrderService orderService) { this.orderService = orderService; } diff --git a/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/cassandra/CassandraDbOrderRepository.java b/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/cassandra/CassandraDbOrderRepository.java index 98a69cbc88..c14792ce75 100644 --- a/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/cassandra/CassandraDbOrderRepository.java +++ b/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/cassandra/CassandraDbOrderRepository.java @@ -11,7 +11,6 @@ import com.baeldung.dddhexagonalspring.domain.Order; import com.baeldung.dddhexagonalspring.domain.repository.OrderRepository; @Component -@Primary public class CassandraDbOrderRepository implements OrderRepository { private final SpringDataCassandraOrderRepository orderRepository; diff --git a/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/mongo/MongoDbOrderRepository.java b/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/mongo/MongoDbOrderRepository.java index e14cb88f5a..b48b738cbd 100644 --- a/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/mongo/MongoDbOrderRepository.java +++ b/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/mongo/MongoDbOrderRepository.java @@ -4,12 +4,14 @@ import java.util.Optional; import java.util.UUID; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Primary; import org.springframework.stereotype.Component; import com.baeldung.dddhexagonalspring.domain.Order; import com.baeldung.dddhexagonalspring.domain.repository.OrderRepository; @Component +@Primary public class MongoDbOrderRepository implements OrderRepository { private final SpringDataMongoOrderRepository orderRepository; From 783e5d9b72b44757620b1f391703abe0dab81605 Mon Sep 17 00:00:00 2001 From: Sorin Zamfir Date: Sat, 1 Feb 2020 15:58:48 +0200 Subject: [PATCH 025/149] BAEL-3777: Fixed formatting --- .../repository/cassandra/CassandraDbOrderRepository.java | 4 ++-- .../cassandra/SpringDataCassandraOrderRepository.java | 3 +-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/cassandra/CassandraDbOrderRepository.java b/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/cassandra/CassandraDbOrderRepository.java index c14792ce75..686fc428e7 100644 --- a/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/cassandra/CassandraDbOrderRepository.java +++ b/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/cassandra/CassandraDbOrderRepository.java @@ -4,7 +4,6 @@ import java.util.Optional; import java.util.UUID; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Primary; import org.springframework.stereotype.Component; import com.baeldung.dddhexagonalspring.domain.Order; @@ -24,7 +23,8 @@ public class CassandraDbOrderRepository implements OrderRepository { public Optional findById(UUID id) { Optional orderEntity = orderRepository.findById(id); if (orderEntity.isPresent()) { - return Optional.of(orderEntity.get().toOrder()); + return Optional.of(orderEntity.get() + .toOrder()); } else { return Optional.empty(); } diff --git a/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/cassandra/SpringDataCassandraOrderRepository.java b/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/cassandra/SpringDataCassandraOrderRepository.java index 3c89bd1b23..93cd7ab83f 100644 --- a/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/cassandra/SpringDataCassandraOrderRepository.java +++ b/ddd/src/main/java/com/baeldung/dddhexagonalspring/infrastracture/repository/cassandra/SpringDataCassandraOrderRepository.java @@ -6,6 +6,5 @@ import org.springframework.data.cassandra.repository.CassandraRepository; import org.springframework.stereotype.Repository; @Repository -public interface SpringDataCassandraOrderRepository extends CassandraRepository{ - +public interface SpringDataCassandraOrderRepository extends CassandraRepository { } From eec738467d66dd4af0fb5b3fe3ff0da08d1677d3 Mon Sep 17 00:00:00 2001 From: Sorin Zamfir Date: Sat, 1 Feb 2020 16:00:10 +0200 Subject: [PATCH 026/149] BAEL-3777: Fixed formatting --- .../dddhexagonalspring/application/cli/CliOrderController.java | 1 - 1 file changed, 1 deletion(-) diff --git a/ddd/src/main/java/com/baeldung/dddhexagonalspring/application/cli/CliOrderController.java b/ddd/src/main/java/com/baeldung/dddhexagonalspring/application/cli/CliOrderController.java index cf073f61c8..7f070a3415 100644 --- a/ddd/src/main/java/com/baeldung/dddhexagonalspring/application/cli/CliOrderController.java +++ b/ddd/src/main/java/com/baeldung/dddhexagonalspring/application/cli/CliOrderController.java @@ -28,7 +28,6 @@ public class CliOrderController{ public void deleteProduct(UUID orderId, UUID productId) { orderService.deleteProduct(orderId, productId); - } public void completeOrder(UUID orderId) { From cb72463256598c29b8d77373234960f8d4515a54 Mon Sep 17 00:00:00 2001 From: Justin Albano Date: Sat, 1 Feb 2020 13:21:44 -0500 Subject: [PATCH 027/149] BAEL-3744: Corrected whitespace in pom.xml --- spring-core-3/pom.xml | 174 +++++++++++++++++++++--------------------- 1 file changed, 87 insertions(+), 87 deletions(-) diff --git a/spring-core-3/pom.xml b/spring-core-3/pom.xml index ac6d1b2b3b..6bd4bf7e5d 100644 --- a/spring-core-3/pom.xml +++ b/spring-core-3/pom.xml @@ -1,88 +1,88 @@ - - - 4.0.0 - spring-core-3 - spring-core-3 - - - com.baeldung - parent-spring-5 - 0.0.1-SNAPSHOT - ../parent-spring-5 - - - - - org.springframework.boot - spring-boot-starter-web - ${spring.boot.version} - - - org.springframework - spring-tx - ${spring.version} - - - org.springframework - spring-jdbc - ${spring.version} - - - org.springframework - spring-beans - ${spring.version} - - - org.springframework - spring-context - ${spring.version} - - - org.springframework - spring-core - ${spring.version} - - - javax.annotation - javax.annotation-api - ${annotation-api.version} - - - org.springframework - spring-test - ${spring.version} - test - - - org.junit.jupiter - junit-jupiter-engine - ${junit-jupiter.version} - test - - - org.junit.jupiter - junit-jupiter-api - ${junit-jupiter.version} - test - - - - - - - org.apache.maven.plugins - maven-surefire-plugin - ${maven.surefire.version} - - - - - - 2.22.1 - 1.3.2 - 2.2.2.RELEASE - - + + + 4.0.0 + spring-core-3 + spring-core-3 + + + com.baeldung + parent-spring-5 + 0.0.1-SNAPSHOT + ../parent-spring-5 + + + + + org.springframework.boot + spring-boot-starter-web + ${spring.boot.version} + + + org.springframework + spring-tx + ${spring.version} + + + org.springframework + spring-jdbc + ${spring.version} + + + org.springframework + spring-beans + ${spring.version} + + + org.springframework + spring-context + ${spring.version} + + + org.springframework + spring-core + ${spring.version} + + + javax.annotation + javax.annotation-api + ${annotation-api.version} + + + org.springframework + spring-test + ${spring.version} + test + + + org.junit.jupiter + junit-jupiter-engine + ${junit-jupiter.version} + test + + + org.junit.jupiter + junit-jupiter-api + ${junit-jupiter.version} + test + + + + + + + org.apache.maven.plugins + maven-surefire-plugin + ${maven.surefire.version} + + + + + + 2.22.1 + 1.3.2 + 2.2.2.RELEASE + + \ No newline at end of file From 31abf680ee76078d171c9138b9db4a393891456c Mon Sep 17 00:00:00 2001 From: Justin Albano Date: Sat, 1 Feb 2020 13:28:33 -0500 Subject: [PATCH 028/149] BAEL-3744: Changed spacing back to original spacing --- spring-core-3/pom.xml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/spring-core-3/pom.xml b/spring-core-3/pom.xml index 6bd4bf7e5d..205259e8e4 100644 --- a/spring-core-3/pom.xml +++ b/spring-core-3/pom.xml @@ -1,7 +1,7 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 spring-core-3 spring-core-3 @@ -15,9 +15,9 @@ - org.springframework.boot - spring-boot-starter-web - ${spring.boot.version} + org.springframework + spring-beans + ${spring.version} org.springframework @@ -30,9 +30,9 @@ ${spring.version} - org.springframework - spring-beans - ${spring.version} + org.springframework.boot + spring-boot-starter-web + ${spring.boot.version} org.springframework From c0415f763975450ef60bb38510a5aa6df09fee71 Mon Sep 17 00:00:00 2001 From: Sorin Zamfir Date: Sat, 1 Feb 2020 22:57:12 +0200 Subject: [PATCH 029/149] BAEL-3777: Improved CLI example --- .../DomainLayerApplication.java | 22 +++-------- .../application/cli/CliOrderController.java | 38 ++++++++++++------- 2 files changed, 29 insertions(+), 31 deletions(-) diff --git a/ddd/src/main/java/com/baeldung/dddhexagonalspring/DomainLayerApplication.java b/ddd/src/main/java/com/baeldung/dddhexagonalspring/DomainLayerApplication.java index 10fbc9c2f5..235021b03e 100644 --- a/ddd/src/main/java/com/baeldung/dddhexagonalspring/DomainLayerApplication.java +++ b/ddd/src/main/java/com/baeldung/dddhexagonalspring/DomainLayerApplication.java @@ -1,24 +1,18 @@ package com.baeldung.dddhexagonalspring; -import java.math.BigDecimal; -import java.util.UUID; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; +import org.springframework.boot.WebApplicationType; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.annotation.PropertySource; import com.baeldung.dddhexagonalspring.application.cli.CliOrderController; -import com.baeldung.dddhexagonalspring.domain.Product; @SpringBootApplication @PropertySource(value = { "classpath:ddd-layers.properties" }) public class DomainLayerApplication implements CommandLineRunner { - private static final Logger LOG = LoggerFactory.getLogger(DomainLayerApplication.class); public static void main(final String[] args) { SpringApplication application = new SpringApplication(DomainLayerApplication.class); @@ -35,15 +29,9 @@ public class DomainLayerApplication implements CommandLineRunner { @Override public void run(String... args) throws Exception { - LOG.info("Placing a new CLI order with two products"); - Product mobilePhone = new Product(UUID.randomUUID(), BigDecimal.valueOf(200), "mobile"); - Product razor = new Product(UUID.randomUUID(), BigDecimal.valueOf(50), "razor"); - LOG.info("Creating order with mobile phone"); - UUID orderId = orderController.createOrder(mobilePhone); - LOG.info("Adding a razor to the order"); - orderController.addProduct(orderId, razor); - LOG.info("Completing order"); - orderController.completeOrder(orderId); - LOG.info("Order placement complete"); + orderController.createCompleteOrder(); + orderController.createIncompleteOrder(); + // uncomment to stop the context when execution is done + // context.close(); } } diff --git a/ddd/src/main/java/com/baeldung/dddhexagonalspring/application/cli/CliOrderController.java b/ddd/src/main/java/com/baeldung/dddhexagonalspring/application/cli/CliOrderController.java index 7f070a3415..3d595533f3 100644 --- a/ddd/src/main/java/com/baeldung/dddhexagonalspring/application/cli/CliOrderController.java +++ b/ddd/src/main/java/com/baeldung/dddhexagonalspring/application/cli/CliOrderController.java @@ -1,7 +1,10 @@ package com.baeldung.dddhexagonalspring.application.cli; +import java.math.BigDecimal; import java.util.UUID; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -9,7 +12,9 @@ import com.baeldung.dddhexagonalspring.domain.Product; import com.baeldung.dddhexagonalspring.domain.service.OrderService; @Component -public class CliOrderController{ +public class CliOrderController { + + private static final Logger LOG = LoggerFactory.getLogger(CliOrderController.class); private final OrderService orderService; @@ -18,20 +23,25 @@ public class CliOrderController{ this.orderService = orderService; } - public UUID createOrder(Product product) { - return orderService.createOrder(product); - } - - public void addProduct(UUID orderId, Product product) { - orderService.addProduct(orderId, product); - } - - public void deleteProduct(UUID orderId, UUID productId) { - orderService.deleteProduct(orderId, productId); - } - - public void completeOrder(UUID orderId) { + public void createCompleteOrder() { + LOG.info("<>"); + UUID orderId = createOrder(); orderService.completeOrder(orderId); } + public void createIncompleteOrder() { + LOG.info("<>"); + UUID orderId = createOrder(); + } + + private UUID createOrder() { + LOG.info("Placing a new order with two products"); + Product mobilePhone = new Product(UUID.randomUUID(), BigDecimal.valueOf(200), "mobile"); + Product razor = new Product(UUID.randomUUID(), BigDecimal.valueOf(50), "razor"); + LOG.info("Creating order with mobile phone"); + UUID orderId = orderService.createOrder(mobilePhone); + LOG.info("Adding a razor to the order"); + orderService.addProduct(orderId, razor); + return orderId; + } } From f5f29086ba72da0cc85f4299898ff44baa234332 Mon Sep 17 00:00:00 2001 From: Sorin Zamfir Date: Tue, 4 Feb 2020 21:27:35 +0200 Subject: [PATCH 030/149] BAEL-3777: Revert naming for REST OrderController --- .../rest/{RestOrderController.java => OrderController.java} | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename ddd/src/main/java/com/baeldung/dddhexagonalspring/application/rest/{RestOrderController.java => OrderController.java} (94%) diff --git a/ddd/src/main/java/com/baeldung/dddhexagonalspring/application/rest/RestOrderController.java b/ddd/src/main/java/com/baeldung/dddhexagonalspring/application/rest/OrderController.java similarity index 94% rename from ddd/src/main/java/com/baeldung/dddhexagonalspring/application/rest/RestOrderController.java rename to ddd/src/main/java/com/baeldung/dddhexagonalspring/application/rest/OrderController.java index 9fcec44a30..12bb8ddea4 100644 --- a/ddd/src/main/java/com/baeldung/dddhexagonalspring/application/rest/RestOrderController.java +++ b/ddd/src/main/java/com/baeldung/dddhexagonalspring/application/rest/OrderController.java @@ -12,12 +12,12 @@ import java.util.UUID; @RestController @RequestMapping("/orders") -public class RestOrderController { +public class OrderController { private final OrderService orderService; @Autowired - public RestOrderController(OrderService orderService) { + public OrderController(OrderService orderService) { this.orderService = orderService; } From d461fb45938014e94cee912e324eca2ed055ed22 Mon Sep 17 00:00:00 2001 From: sampada Date: Thu, 6 Feb 2020 19:30:52 +0530 Subject: [PATCH 031/149] BAEL-3394 : Using headless mode in Java --- .../baeldung/headlessmode/FlexibleApp.java | 27 ++++++ .../headlessmode/HeadlessModeUnitTest.java | 87 ++++++++++++++++++ .../src/test/resources/product.png | Bin 0 -> 55272 bytes 3 files changed, 114 insertions(+) create mode 100644 core-java-modules/core-java-lang-2/src/main/java/com/baeldung/headlessmode/FlexibleApp.java create mode 100644 core-java-modules/core-java-lang-2/src/test/java/com/baeldung/headlessmode/HeadlessModeUnitTest.java create mode 100644 core-java-modules/core-java-lang-2/src/test/resources/product.png diff --git a/core-java-modules/core-java-lang-2/src/main/java/com/baeldung/headlessmode/FlexibleApp.java b/core-java-modules/core-java-lang-2/src/main/java/com/baeldung/headlessmode/FlexibleApp.java new file mode 100644 index 0000000000..50f33d239d --- /dev/null +++ b/core-java-modules/core-java-lang-2/src/main/java/com/baeldung/headlessmode/FlexibleApp.java @@ -0,0 +1,27 @@ +package com.baeldung.headlessmode; + +import java.awt.GraphicsEnvironment; + +import javax.swing.JOptionPane; + +public class FlexibleApp { + public static final int HEADLESS = 0; + public static final int HEADED = 1; + public FlexibleApp() { + + if (GraphicsEnvironment.isHeadless()) { + System.out.println("Hello World"); + } else { + JOptionPane.showMessageDialog(null, "Hello World"); + } + + } + + public static int iAmFlexible() { + if (GraphicsEnvironment.isHeadless()) { + return HEADLESS; + } else { + return HEADED; + } + } +} diff --git a/core-java-modules/core-java-lang-2/src/test/java/com/baeldung/headlessmode/HeadlessModeUnitTest.java b/core-java-modules/core-java-lang-2/src/test/java/com/baeldung/headlessmode/HeadlessModeUnitTest.java new file mode 100644 index 0000000000..a17c1600f3 --- /dev/null +++ b/core-java-modules/core-java-lang-2/src/test/java/com/baeldung/headlessmode/HeadlessModeUnitTest.java @@ -0,0 +1,87 @@ +package com.baeldung.headlessmode; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; + +import java.awt.Canvas; +import java.awt.Font; +import java.awt.FontMetrics; +import java.awt.Frame; +import java.awt.GraphicsEnvironment; +import java.awt.HeadlessException; +import java.awt.image.BufferedImage; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; + +import javax.imageio.ImageIO; + +import org.junit.Assume; +import org.junit.Before; +import org.junit.Test; + +public class HeadlessModeUnitTest { + + private static final String IN_FILE = "/product.png"; + private static final String OUT_FILE = System.getProperty("java.io.tmpdir") + "/product.jpg"; + private static final String FORMAT = "jpg"; + + @Before + public void setUpHeadlessMode() { + System.setProperty("java.awt.headless", "true"); + } + + @Test + public void whenJavaAwtHeadlessSetToTrue_thenIsHeadlessReturnsTrue() { + assertThat(GraphicsEnvironment.isHeadless()).isTrue(); + } + + @Test + public void whenHeadlessMode_thenFontsWork() { + GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); + + String fonts[] = ge.getAvailableFontFamilyNames(); + + assertThat(fonts).isNotEmpty(); + + Font font = new Font(fonts[0], Font.BOLD, 14); + + FontMetrics fm = (new Canvas()).getFontMetrics(font); + + assertThat(fm.getHeight()).isGreaterThan(0); + assertThat(fm.getAscent()).isGreaterThan(0); + assertThat(fm.getDescent()).isGreaterThan(0); + } + + @Test + public void whenHeadlessMode_thenImagesWork() throws IOException { + boolean result = false; + try (InputStream inStream = HeadlessModeUnitTest.class.getResourceAsStream(IN_FILE); FileOutputStream outStream = new FileOutputStream(OUT_FILE)) { + BufferedImage inputImage = ImageIO.read(inStream); + result = ImageIO.write(inputImage, FORMAT, outStream); + } + + assertThat(result).isTrue(); + } + + @Test + public void whenHeadlessmode_thenFrameThrowsHeadlessException() { + assertThatExceptionOfType(HeadlessException.class).isThrownBy(() -> { + Frame frame = new Frame(); + frame.setVisible(true); + frame.setSize(120, 120); + }); + } + + @Test + public void whenHeadless_thenFlexibleAppAdjustsItsBehavior() { + assertThat(FlexibleApp.iAmFlexible()).isEqualTo(FlexibleApp.HEADLESS); + } + + @Test + public void whenHeaded_thenFlexibleAppAdjustsItsBehavior() { + Assume.assumeFalse(GraphicsEnvironment.isHeadless()); + assertThat(FlexibleApp.iAmFlexible()).isEqualTo(FlexibleApp.HEADED); + } + +} diff --git a/core-java-modules/core-java-lang-2/src/test/resources/product.png b/core-java-modules/core-java-lang-2/src/test/resources/product.png new file mode 100644 index 0000000000000000000000000000000000000000..4edd01c0a1795e469b0a4e8014eda04e5509fd38 GIT binary patch literal 55272 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

!F}al|RZ5mX=N`=8o&a0fK9-gq6TJJ5(FIb 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 Date: Thu, 6 Feb 2020 23:43:50 +0200 Subject: [PATCH 032/149] Update SortComparisonUnitTest.java --- .../java/com/baeldung/arraysort/SortComparisonUnitTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core-java-modules/core-java-arrays-2/src/test/java/com/baeldung/arraysort/SortComparisonUnitTest.java b/core-java-modules/core-java-arrays-2/src/test/java/com/baeldung/arraysort/SortComparisonUnitTest.java index d1aba5a886..4b0a18684a 100644 --- a/core-java-modules/core-java-arrays-2/src/test/java/com/baeldung/arraysort/SortComparisonUnitTest.java +++ b/core-java-modules/core-java-arrays-2/src/test/java/com/baeldung/arraysort/SortComparisonUnitTest.java @@ -69,7 +69,7 @@ public class SortComparisonUnitTest { } @Test - public void givenArrayOfIntegers_whenUsingArraysSortMethodWithRange_thenSortRangeOfArrayInAscendingOrder() { + public void givenArrayOfIntegers_whenUsingArraysSortWithRange_thenSortRangeOfArrayAsc() { int[] array = { 10, 4, 6, 2, 1, 9, 7, 8, 3, 5 }; int[] expected = { 10, 4, 1, 2, 6, 7, 8, 9, 3, 5 }; @@ -89,7 +89,7 @@ public class SortComparisonUnitTest { } @Test - public void givenArrayOfIntegers_whenUsingArraysParallelSortMethodWithRange_thenSortRangeOfArrayInAscendingOrder() { + public void givenArrayOfIntegers_whenUsingArraysParallelSortWithRange_thenSortRangeOfArrayAsc() { int[] array = { 10, 4, 6, 2, 1, 9, 7, 8, 3, 5 }; int[] expected = { 10, 4, 1, 2, 6, 7, 8, 9, 3, 5 }; From 124cae5760baef28cc57ec36bfb053dd89fc93b2 Mon Sep 17 00:00:00 2001 From: Florin Hriscu Date: Sat, 8 Feb 2020 00:20:48 +0200 Subject: [PATCH 033/149] BAEL-3502 Change destination package for ArraysDeepEqualsUnitTest.java. --- .../arrays/{ => deepequals}/ArraysDeepEqualsUnitTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename core-java-modules/core-java-arrays-2/src/test/java/com/baeldung/arrays/{ => deepequals}/ArraysDeepEqualsUnitTest.java (98%) diff --git a/core-java-modules/core-java-arrays-2/src/test/java/com/baeldung/arrays/ArraysDeepEqualsUnitTest.java b/core-java-modules/core-java-arrays-2/src/test/java/com/baeldung/arrays/deepequals/ArraysDeepEqualsUnitTest.java similarity index 98% rename from core-java-modules/core-java-arrays-2/src/test/java/com/baeldung/arrays/ArraysDeepEqualsUnitTest.java rename to core-java-modules/core-java-arrays-2/src/test/java/com/baeldung/arrays/deepequals/ArraysDeepEqualsUnitTest.java index 4998886215..5e01d3f9b5 100644 --- a/core-java-modules/core-java-arrays-2/src/test/java/com/baeldung/arrays/ArraysDeepEqualsUnitTest.java +++ b/core-java-modules/core-java-arrays-2/src/test/java/com/baeldung/arrays/deepequals/ArraysDeepEqualsUnitTest.java @@ -1,4 +1,4 @@ -package com.baeldung.arrays; +package com.baeldung.arrays.deepequals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; From d40a5c1194febf0f7ab17a96007d079e750889db Mon Sep 17 00:00:00 2001 From: Anshul BANSAL Date: Sat, 8 Feb 2020 18:39:39 +0200 Subject: [PATCH 034/149] BAEL-3758 - AOP annotations of jcabi-aspects --- .../{jcabi_aspectj/Example.java => jcabi/JcabiAspectJ.java} | 0 .../src/main/java/com/baeldung/{jcabi_aspectj => jcabi}/User.java | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename jcabi/src/main/java/com/baeldung/{jcabi_aspectj/Example.java => jcabi/JcabiAspectJ.java} (100%) rename jcabi/src/main/java/com/baeldung/{jcabi_aspectj => jcabi}/User.java (100%) diff --git a/jcabi/src/main/java/com/baeldung/jcabi_aspectj/Example.java b/jcabi/src/main/java/com/baeldung/jcabi/JcabiAspectJ.java similarity index 100% rename from jcabi/src/main/java/com/baeldung/jcabi_aspectj/Example.java rename to jcabi/src/main/java/com/baeldung/jcabi/JcabiAspectJ.java diff --git a/jcabi/src/main/java/com/baeldung/jcabi_aspectj/User.java b/jcabi/src/main/java/com/baeldung/jcabi/User.java similarity index 100% rename from jcabi/src/main/java/com/baeldung/jcabi_aspectj/User.java rename to jcabi/src/main/java/com/baeldung/jcabi/User.java From 9ab42e61187e6a1b15e66bbe80b44905e5141b93 Mon Sep 17 00:00:00 2001 From: Anshul BANSAL Date: Sat, 8 Feb 2020 18:40:16 +0200 Subject: [PATCH 035/149] BAEL-3758 - AOP annotations of jcabi-aspects --- jcabi/pom.xml | 7 -- .../java/com/baeldung/jcabi/JcabiAspectJ.java | 86 ++++++++----------- .../main/java/com/baeldung/jcabi/User.java | 5 -- 3 files changed, 37 insertions(+), 61 deletions(-) delete mode 100644 jcabi/src/main/java/com/baeldung/jcabi/User.java diff --git a/jcabi/pom.xml b/jcabi/pom.xml index 7fb9c313c5..bf53f74bcd 100644 --- a/jcabi/pom.xml +++ b/jcabi/pom.xml @@ -17,12 +17,6 @@ - - org.assertj - assertj-core - ${assertj.version} - test - com.jcabi @@ -70,7 +64,6 @@ - 3.14.0 0.22.6 1.9.5 0.14.1 diff --git a/jcabi/src/main/java/com/baeldung/jcabi/JcabiAspectJ.java b/jcabi/src/main/java/com/baeldung/jcabi/JcabiAspectJ.java index 0c688ceb22..1bfecd6c52 100644 --- a/jcabi/src/main/java/com/baeldung/jcabi/JcabiAspectJ.java +++ b/jcabi/src/main/java/com/baeldung/jcabi/JcabiAspectJ.java @@ -1,4 +1,5 @@ -package com.baeldung.jcabi_aspectj; +package com.baeldung.jcabi; + import java.util.concurrent.CompletableFuture; import java.util.concurrent.Future; @@ -11,40 +12,42 @@ import com.jcabi.aspects.Loggable; import com.jcabi.aspects.Parallel; import com.jcabi.aspects.Quietly; import com.jcabi.aspects.RetryOnFailure; +import com.jcabi.aspects.Timeable; import com.jcabi.aspects.UnitedThrow; -//@Loggable -public class Example { +public class JcabiAspectJ { public static void main(String[] args) { try { - tryAsync(); - asyncFactorial(10).get(); - System.out.println("calling 2..."); - System.out.println(called2()); - //called3(); - called4(); - System.out.println(called2()); - System.out.println(called2()); - called6(); - //called7(); + displayFactorial(10); + getFactorial(10).get(); + Double number = cacheRandomNumber(); + if (number != cacheRandomNumber()) { + System.out.println(number); + } + + divideByZero(); } catch(Exception e) { - + e.printStackTrace(); } - called5(); - called8(); + + divideByZeroQuietly(); + parallelExecution(); + } + @Loggable @Async - public static void tryAsync() { - long result = factorial(10); + public static void displayFactorial(int number) { + long result = factorial(number); System.out.println(result); } + @Loggable @Async - public static Future asyncFactorial(int number) { + public static Future getFactorial(int number) { Future factorialFuture = CompletableFuture.supplyAsync(() -> factorial(number)); return factorialFuture; } @@ -62,42 +65,27 @@ public class Example { return result; } - @Cacheable(lifetime = 5, unit = TimeUnit.SECONDS) - public static Double called2() { + @Loggable + @Cacheable(lifetime = 2, unit = TimeUnit.SECONDS) + public static Double cacheRandomNumber() { return Math.random(); } - + + @UnitedThrow(IllegalStateException.class) @LogExceptions - public static void called3() { - System.out.println(1/0); - } - - @Loggable - public static void called4() { - System.out.println("checking loggable"); - } - - @Quietly - public static void called5() { + public static void divideByZero() { int x = 1/0; } - + + @RetryOnFailure(attempts = 2, types = {java.lang.NumberFormatException.class}) + @Quietly + public static void divideByZeroQuietly() { + int x = 1/0; + } + @Parallel(threads = 4) - public static void called6() { - System.out.println("called6"); - } - - @RetryOnFailure - //@Quietly - public static void called7() { - System.out.println("called7..."); - int y = 1/0; - } - - @UnitedThrow //(IllegalStateException.class) - public static void called8() { - System.out.println("called8..."); - int y = 1/0; + public static void parallelExecution() { + System.out.println("Calling Parallel..."); } } diff --git a/jcabi/src/main/java/com/baeldung/jcabi/User.java b/jcabi/src/main/java/com/baeldung/jcabi/User.java deleted file mode 100644 index c918f8471c..0000000000 --- a/jcabi/src/main/java/com/baeldung/jcabi/User.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.baeldung.jcabi_aspectj; - -public class User { - -} From e138f5209c33eff17ad32574524ea1861b6b3016 Mon Sep 17 00:00:00 2001 From: Anshul BANSAL Date: Sat, 8 Feb 2020 19:10:10 +0200 Subject: [PATCH 036/149] BAEL-3758 - AOP Annotations of jcabi-aspects --- jcabi/src/main/java/com/baeldung/jcabi/JcabiAspectJ.java | 5 +---- pom.xml | 2 ++ 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/jcabi/src/main/java/com/baeldung/jcabi/JcabiAspectJ.java b/jcabi/src/main/java/com/baeldung/jcabi/JcabiAspectJ.java index 1bfecd6c52..c88ad5a74d 100644 --- a/jcabi/src/main/java/com/baeldung/jcabi/JcabiAspectJ.java +++ b/jcabi/src/main/java/com/baeldung/jcabi/JcabiAspectJ.java @@ -12,7 +12,6 @@ import com.jcabi.aspects.Loggable; import com.jcabi.aspects.Parallel; import com.jcabi.aspects.Quietly; import com.jcabi.aspects.RetryOnFailure; -import com.jcabi.aspects.Timeable; import com.jcabi.aspects.UnitedThrow; public class JcabiAspectJ { @@ -28,14 +27,12 @@ public class JcabiAspectJ { } divideByZero(); - } catch(Exception e) { e.printStackTrace(); } divideByZeroQuietly(); - parallelExecution(); - + parallelExecution(); } @Loggable diff --git a/pom.xml b/pom.xml index aeaef5f676..177792f3b8 100644 --- a/pom.xml +++ b/pom.xml @@ -470,6 +470,7 @@ javax-servlets javaxval jaxb + jcabi jee-7 jee-7-security jee-kotlin @@ -1019,6 +1020,7 @@ javax-servlets javaxval jaxb + jcabi jee-7 jee-7-security jee-kotlin From b9a090819961f0fb78eb914d19a1cffbc9187486 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Mon, 10 Feb 2020 13:07:20 +0800 Subject: [PATCH 037/149] Update README.md --- core-java-modules/core-java-date-operations-2/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/core-java-modules/core-java-date-operations-2/README.md b/core-java-modules/core-java-date-operations-2/README.md index 478d3baf19..728162ca1a 100644 --- a/core-java-modules/core-java-date-operations-2/README.md +++ b/core-java-modules/core-java-date-operations-2/README.md @@ -6,4 +6,5 @@ This module contains articles about date operations in Java. - [Skipping Weekends While Adding Days to LocalDate in Java 8](https://www.baeldung.com/java-localdate-add-days-skip-weekends) - [Checking If Two Java Dates Are on the Same Day](https://www.baeldung.com/java-check-two-dates-on-same-day) - [Converting Java Date to OffsetDateTime](https://www.baeldung.com/java-convert-date-to-offsetdatetime) +- [How to Set the JVM Time Zone](https://www.baeldung.com/java-jvm-time-zone) - [[<-- Prev]](/core-java-modules/core-java-date-operations-1) From 92a07a5b0bd4ba8d48387e3a3c512a931b952205 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Mon, 10 Feb 2020 13:09:23 +0800 Subject: [PATCH 038/149] Update README.md --- core-java-modules/core-java-lang-syntax-2/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/core-java-modules/core-java-lang-syntax-2/README.md b/core-java-modules/core-java-lang-syntax-2/README.md index 1518d1ab35..940629c1dc 100644 --- a/core-java-modules/core-java-lang-syntax-2/README.md +++ b/core-java-modules/core-java-lang-syntax-2/README.md @@ -12,4 +12,5 @@ This module contains articles about Java syntax - [Variable Scope in Java](https://www.baeldung.com/java-variable-scope) - [Introduction to Basic Syntax in Java](https://www.baeldung.com/java-syntax) - [Java ‘protected’ Access Modifier](https://www.baeldung.com/java-protected-access-modifier) +- [Using the Not Operator in If Conditions in Java](https://www.baeldung.com/java-using-not-in-if-conditions) - [[<-- Prev]](/core-java-modules/core-java-lang-syntax) From 910bdc10d6a9ff969f7e44c68056888fd0dd91e5 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Mon, 10 Feb 2020 13:10:29 +0800 Subject: [PATCH 039/149] Update README.md --- core-java-modules/core-java-lang-syntax-2/README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/core-java-modules/core-java-lang-syntax-2/README.md b/core-java-modules/core-java-lang-syntax-2/README.md index 940629c1dc..1518d1ab35 100644 --- a/core-java-modules/core-java-lang-syntax-2/README.md +++ b/core-java-modules/core-java-lang-syntax-2/README.md @@ -12,5 +12,4 @@ This module contains articles about Java syntax - [Variable Scope in Java](https://www.baeldung.com/java-variable-scope) - [Introduction to Basic Syntax in Java](https://www.baeldung.com/java-syntax) - [Java ‘protected’ Access Modifier](https://www.baeldung.com/java-protected-access-modifier) -- [Using the Not Operator in If Conditions in Java](https://www.baeldung.com/java-using-not-in-if-conditions) - [[<-- Prev]](/core-java-modules/core-java-lang-syntax) From dce0283239195214023554bc30aaf9f8594b5712 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Mon, 10 Feb 2020 13:11:52 +0800 Subject: [PATCH 040/149] Update README.md --- core-java-modules/core-java-lang-syntax-2/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/core-java-modules/core-java-lang-syntax-2/README.md b/core-java-modules/core-java-lang-syntax-2/README.md index 1518d1ab35..940629c1dc 100644 --- a/core-java-modules/core-java-lang-syntax-2/README.md +++ b/core-java-modules/core-java-lang-syntax-2/README.md @@ -12,4 +12,5 @@ This module contains articles about Java syntax - [Variable Scope in Java](https://www.baeldung.com/java-variable-scope) - [Introduction to Basic Syntax in Java](https://www.baeldung.com/java-syntax) - [Java ‘protected’ Access Modifier](https://www.baeldung.com/java-protected-access-modifier) +- [Using the Not Operator in If Conditions in Java](https://www.baeldung.com/java-using-not-in-if-conditions) - [[<-- Prev]](/core-java-modules/core-java-lang-syntax) From 1d7a6398f199c0909a13f9f4d11d06c81d804f7d Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Mon, 10 Feb 2020 13:15:17 +0800 Subject: [PATCH 041/149] Update README.md --- algorithms-miscellaneous-5/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/algorithms-miscellaneous-5/README.md b/algorithms-miscellaneous-5/README.md index 301d3ee8c5..66490a4692 100644 --- a/algorithms-miscellaneous-5/README.md +++ b/algorithms-miscellaneous-5/README.md @@ -16,4 +16,5 @@ This module contains articles about algorithms. Some classes of algorithms, e.g. - [Maximum Subarray Problem](https://www.baeldung.com/java-maximum-subarray) - [How to Merge Two Sorted Arrays](https://www.baeldung.com/java-merge-sorted-arrays) - [Median of Stream of Integers using Heap](https://www.baeldung.com/java-stream-integers-median-using-heap) +- [Kruskal’s Algorithm for Spanning Trees](https://www.baeldung.com/java-spanning-trees-kruskal) - More articles: [[<-- prev]](/../algorithms-miscellaneous-4) From 22daf9028301357e8c27137f4821a98f7824eafb Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Mon, 10 Feb 2020 13:16:45 +0800 Subject: [PATCH 042/149] Update README.md --- logging-modules/logback/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/logging-modules/logback/README.md b/logging-modules/logback/README.md index 58dc8ce541..05a4ab9308 100644 --- a/logging-modules/logback/README.md +++ b/logging-modules/logback/README.md @@ -2,3 +2,4 @@ - [Get Log Output in JSON](https://www.baeldung.com/java-log-json-output) - [SLF4J Warning: Class Path Contains Multiple SLF4J Bindings](https://www.baeldung.com/slf4j-classpath-multiple-bindings) +- [Sending Emails with Logback](https://www.baeldung.com/logback-send-email) From 929eb7c23124c13700ad158ddbe0a2d2a14c9653 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Mon, 10 Feb 2020 13:18:56 +0800 Subject: [PATCH 043/149] Update README.md --- spring-security-modules/spring-security-oidc/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/spring-security-modules/spring-security-oidc/README.md b/spring-security-modules/spring-security-oidc/README.md index 92ba60cad9..ca6053f70f 100644 --- a/spring-security-modules/spring-security-oidc/README.md +++ b/spring-security-modules/spring-security-oidc/README.md @@ -5,6 +5,7 @@ This module contains articles about OpenID with Spring Security ### Relevant articles - [Spring Security and OpenID Connect](https://www.baeldung.com/spring-security-openid-connect) +- [Spring Security and OpenID Connect (Legacy)](https://www.baeldung.com/spring-security-openid-connect-legacy) ### OpenID Connect with Spring Security From a0ecdaad62ce9d265319cb22010b0f550cad0797 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Mon, 10 Feb 2020 13:25:34 +0800 Subject: [PATCH 044/149] Create README.md --- slack/README.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 slack/README.md diff --git a/slack/README.md b/slack/README.md new file mode 100644 index 0000000000..fb3eff6290 --- /dev/null +++ b/slack/README.md @@ -0,0 +1,3 @@ +### Relevant Articles: + +- [How to Create a Slack Plugin in Java](https://www.baeldung.com/java-slack-plugin) From be6b5832e806e2d7bdc6345494f8b4ade0e2291e Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Mon, 10 Feb 2020 13:27:50 +0800 Subject: [PATCH 045/149] Update README.md --- core-java-modules/core-java-text/README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/core-java-modules/core-java-text/README.md b/core-java-modules/core-java-text/README.md index a7a4d1d4f3..c29289f906 100644 --- a/core-java-modules/core-java-text/README.md +++ b/core-java-modules/core-java-text/README.md @@ -4,4 +4,5 @@ ### Relevant Articles: - [An Overview of Regular Expressions Performance in Java](https://www.baeldung.com/java-regex-performance) -- [Pre-compile Regex Patterns Into Pattern Objects](https://www.baeldung.com/java-regex-pre-compile) \ No newline at end of file +- [Pre-compile Regex Patterns Into Pattern Objects](https://www.baeldung.com/java-regex-pre-compile) +- [Difference Between Java Matcher find() and matches()](https://www.baeldung.com/java-matcher-find-vs-matches) From e1ac5ff11c9abce1ca9b4eb592dc13fef09585e3 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Mon, 10 Feb 2020 13:29:56 +0800 Subject: [PATCH 046/149] Update README.md --- persistence-modules/spring-data-jpa-4/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/persistence-modules/spring-data-jpa-4/README.md b/persistence-modules/spring-data-jpa-4/README.md index 63aec5c46b..d685c91589 100644 --- a/persistence-modules/spring-data-jpa-4/README.md +++ b/persistence-modules/spring-data-jpa-4/README.md @@ -3,6 +3,7 @@ - [LIKE Queries in Spring JPA Repositories](https://www.baeldung.com/spring-jpa-like-queries) - [A Guide to Spring’s Open Session In View](https://www.baeldung.com/spring-open-session-in-view) - [Programmatic Transaction Management in Spring](https://www.baeldung.com/spring-programmatic-transaction-management) +-[JPA Entity Lifecycle Events](https://www.baeldung.com/jpa-entity-lifecycle-events) ### Eclipse Config After importing the project into Eclipse, you may see the following error: From 88401df6b173b5d8d9c3f7e58e51fe3f776addb0 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Mon, 10 Feb 2020 13:30:56 +0800 Subject: [PATCH 047/149] Update README.md --- persistence-modules/spring-data-jpa-4/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/persistence-modules/spring-data-jpa-4/README.md b/persistence-modules/spring-data-jpa-4/README.md index d685c91589..d2b66e9b10 100644 --- a/persistence-modules/spring-data-jpa-4/README.md +++ b/persistence-modules/spring-data-jpa-4/README.md @@ -3,7 +3,7 @@ - [LIKE Queries in Spring JPA Repositories](https://www.baeldung.com/spring-jpa-like-queries) - [A Guide to Spring’s Open Session In View](https://www.baeldung.com/spring-open-session-in-view) - [Programmatic Transaction Management in Spring](https://www.baeldung.com/spring-programmatic-transaction-management) --[JPA Entity Lifecycle Events](https://www.baeldung.com/jpa-entity-lifecycle-events) +- [JPA Entity Lifecycle Events](https://www.baeldung.com/jpa-entity-lifecycle-events) ### Eclipse Config After importing the project into Eclipse, you may see the following error: From e68b0d9857f2e1f7504c8ecc4384b4ff34bf2290 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Mon, 10 Feb 2020 13:59:00 +0800 Subject: [PATCH 048/149] Update README.md --- dropwizard/README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/dropwizard/README.md b/dropwizard/README.md index e713b2f1e6..76311ebbb3 100644 --- a/dropwizard/README.md +++ b/dropwizard/README.md @@ -1 +1,5 @@ -# Dropwizard \ No newline at end of file +# Dropwizard + +### Relevant Articles: + +- [Introduction to Dropwizard](https://www.baeldung.com/java-dropwizard) From deb3a7458bc6568d2d74f6fb542752beb7bb3a24 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Mon, 10 Feb 2020 14:00:57 +0800 Subject: [PATCH 049/149] Update README.md --- core-java-modules/core-java-exceptions-2/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/core-java-modules/core-java-exceptions-2/README.md b/core-java-modules/core-java-exceptions-2/README.md index f36d0b24b9..49ce897e60 100644 --- a/core-java-modules/core-java-exceptions-2/README.md +++ b/core-java-modules/core-java-exceptions-2/README.md @@ -6,3 +6,4 @@ This module contains articles about core java exceptions - [Is It a Bad Practice to Catch Throwable?](https://www.baeldung.com/java-catch-throwable-bad-practice) - [Wrapping vs Rethrowing Exceptions in Java](https://www.baeldung.com/java-wrapping-vs-rethrowing-exceptions) +- [java.net.UnknownHostException: Invalid Hostname for Server](https://www.baeldung.com/java-unknownhostexception) From 20ee013359df6044f51e17f50dc35c1b29a1bb7b Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Mon, 10 Feb 2020 14:03:53 +0800 Subject: [PATCH 050/149] Update README.md --- apache-poi/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/apache-poi/README.md b/apache-poi/README.md index b7b8bf5f6a..5b23dc353e 100644 --- a/apache-poi/README.md +++ b/apache-poi/README.md @@ -6,3 +6,4 @@ This module contains articles about Apache POI - [Microsoft Word Processing in Java with Apache POI](https://www.baeldung.com/java-microsoft-word-with-apache-poi) - [Working with Microsoft Excel in Java](https://www.baeldung.com/java-microsoft-excel) - [Creating a MS PowerPoint Presentation in Java](https://www.baeldung.com/apache-poi-slideshow) +- [Merge Cells in Excel Using Apache POI](https://www.baeldung.com/java-apache-poi-merge-cells) From ed430ca753fe03a9dc7da3cf27fc76cc6110f883 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Mon, 10 Feb 2020 14:06:41 +0800 Subject: [PATCH 051/149] Update README.md --- libraries-3/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/libraries-3/README.md b/libraries-3/README.md index a9d48bb389..e498243b6c 100644 --- a/libraries-3/README.md +++ b/libraries-3/README.md @@ -9,3 +9,4 @@ Remember, for advanced libraries like [Jackson](/jackson) and [JUnit](/testing-m ### Relevant Articles: - [Parsing Command-Line Parameters with JCommander](https://www.baeldung.com/jcommander-parsing-command-line-parameters) +- [Guide to the Cactoos Library](https://www.baeldung.com/java-cactoos) From da05eb3e2807b9ae560e38b261b5b600b7843492 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Mon, 10 Feb 2020 14:09:27 +0800 Subject: [PATCH 052/149] Update README.md --- libraries-3/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/libraries-3/README.md b/libraries-3/README.md index e498243b6c..942f108afd 100644 --- a/libraries-3/README.md +++ b/libraries-3/README.md @@ -10,3 +10,4 @@ Remember, for advanced libraries like [Jackson](/jackson) and [JUnit](/testing-m ### Relevant Articles: - [Parsing Command-Line Parameters with JCommander](https://www.baeldung.com/jcommander-parsing-command-line-parameters) - [Guide to the Cactoos Library](https://www.baeldung.com/java-cactoos) +- [Parsing Command-Line Parameters with Airline](https://www.baeldung.com/java-airline) From 5594b0d05f61916c191a4bfadbc1349db7f5cf3d Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Mon, 10 Feb 2020 14:11:31 +0800 Subject: [PATCH 053/149] Update README.md --- spring-boot-security/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/spring-boot-security/README.md b/spring-boot-security/README.md index be4690f321..7229ba0f4a 100644 --- a/spring-boot-security/README.md +++ b/spring-boot-security/README.md @@ -7,6 +7,7 @@ This module contains articles about Spring Boot Security - [Spring Boot Security Auto-Configuration](https://www.baeldung.com/spring-boot-security-autoconfiguration) - [Spring Security for Spring Boot Integration Tests](https://www.baeldung.com/spring-security-integration-tests) - [Introduction to Spring Security Taglibs](https://www.baeldung.com/spring-security-taglibs) +- [Guide to @CurrentSecurityContext in Spring Security](https://www.baeldung.com/spring-currentsecuritycontext) ### Spring Boot Security Auto-Configuration From 705cb5bbe511d97c483d3838268634b8462c7d28 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Mon, 10 Feb 2020 14:12:22 +0800 Subject: [PATCH 054/149] Update README.md --- spring-boot-security/README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/spring-boot-security/README.md b/spring-boot-security/README.md index 7229ba0f4a..be4690f321 100644 --- a/spring-boot-security/README.md +++ b/spring-boot-security/README.md @@ -7,7 +7,6 @@ This module contains articles about Spring Boot Security - [Spring Boot Security Auto-Configuration](https://www.baeldung.com/spring-boot-security-autoconfiguration) - [Spring Security for Spring Boot Integration Tests](https://www.baeldung.com/spring-security-integration-tests) - [Introduction to Spring Security Taglibs](https://www.baeldung.com/spring-security-taglibs) -- [Guide to @CurrentSecurityContext in Spring Security](https://www.baeldung.com/spring-currentsecuritycontext) ### Spring Boot Security Auto-Configuration From f2453bbf6686860cc107e59ce023c5aefffe32af Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Mon, 10 Feb 2020 14:13:05 +0800 Subject: [PATCH 055/149] Update README.md --- spring-boot-security/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/spring-boot-security/README.md b/spring-boot-security/README.md index be4690f321..3f1fa774ec 100644 --- a/spring-boot-security/README.md +++ b/spring-boot-security/README.md @@ -7,6 +7,7 @@ This module contains articles about Spring Boot Security - [Spring Boot Security Auto-Configuration](https://www.baeldung.com/spring-boot-security-autoconfiguration) - [Spring Security for Spring Boot Integration Tests](https://www.baeldung.com/spring-security-integration-tests) - [Introduction to Spring Security Taglibs](https://www.baeldung.com/spring-security-taglibs) +- [Guide to @CurrentSecurityContext in Spring Security](https://github.com/eugenp/tutorials/tree/master/spring-boot-security) ### Spring Boot Security Auto-Configuration From 7a6e21c5671231c95df8c4f6fdba3467a5cc60e7 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Mon, 10 Feb 2020 14:15:25 +0800 Subject: [PATCH 056/149] Update README.md --- persistence-modules/spring-data-jpa-4/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/persistence-modules/spring-data-jpa-4/README.md b/persistence-modules/spring-data-jpa-4/README.md index d2b66e9b10..42e4619a59 100644 --- a/persistence-modules/spring-data-jpa-4/README.md +++ b/persistence-modules/spring-data-jpa-4/README.md @@ -4,6 +4,7 @@ - [A Guide to Spring’s Open Session In View](https://www.baeldung.com/spring-open-session-in-view) - [Programmatic Transaction Management in Spring](https://www.baeldung.com/spring-programmatic-transaction-management) - [JPA Entity Lifecycle Events](https://www.baeldung.com/jpa-entity-lifecycle-events) +- [Working with Lazy Element Collections in JPA](https://www.baeldung.com/java-jpa-lazy-collections) ### Eclipse Config After importing the project into Eclipse, you may see the following error: From 85977c9bfe5ff9bf70ead46db0acf063472ed24a Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Mon, 10 Feb 2020 14:18:09 +0800 Subject: [PATCH 057/149] Create README.md --- core-java-modules/core-java-datetime-java8-2/README.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 core-java-modules/core-java-datetime-java8-2/README.md diff --git a/core-java-modules/core-java-datetime-java8-2/README.md b/core-java-modules/core-java-datetime-java8-2/README.md new file mode 100644 index 0000000000..e53d0236c2 --- /dev/null +++ b/core-java-modules/core-java-datetime-java8-2/README.md @@ -0,0 +1,3 @@ +### Relevant Articles: + +- [Creating a LocalDate with Values in Java](https://www.baeldung.com/java-creating-localdate-with-values) From b70afb3544634db582871c7f5b2964a7f11e7772 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Mon, 10 Feb 2020 14:21:28 +0800 Subject: [PATCH 058/149] Update README.md --- core-java-modules/core-java-concurrency-advanced-3/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/core-java-modules/core-java-concurrency-advanced-3/README.md b/core-java-modules/core-java-concurrency-advanced-3/README.md index 409d3aa464..a6449abac3 100644 --- a/core-java-modules/core-java-concurrency-advanced-3/README.md +++ b/core-java-modules/core-java-concurrency-advanced-3/README.md @@ -8,4 +8,5 @@ This module contains articles about advanced topics about multithreading with co - [Common Concurrency Pitfalls in Java](https://www.baeldung.com/java-common-concurrency-pitfalls) - [Guide to RejectedExecutionHandler](https://www.baeldung.com/java-rejectedexecutionhandler) +- [Guide to Work Stealing in Java](https://www.baeldung.com/java-work-stealing) [[<-- previous]](/core-java-modules/core-java-concurrency-advanced-2) From 75c88f97452bf14dc29aff4e451a98fee6dd4e10 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Mon, 10 Feb 2020 14:24:34 +0800 Subject: [PATCH 059/149] Update README.md --- algorithms-miscellaneous-5/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/algorithms-miscellaneous-5/README.md b/algorithms-miscellaneous-5/README.md index 66490a4692..eaa37a5a5f 100644 --- a/algorithms-miscellaneous-5/README.md +++ b/algorithms-miscellaneous-5/README.md @@ -17,4 +17,5 @@ This module contains articles about algorithms. Some classes of algorithms, e.g. - [How to Merge Two Sorted Arrays](https://www.baeldung.com/java-merge-sorted-arrays) - [Median of Stream of Integers using Heap](https://www.baeldung.com/java-stream-integers-median-using-heap) - [Kruskal’s Algorithm for Spanning Trees](https://www.baeldung.com/java-spanning-trees-kruskal) +- [Balanced Brackets Algorithm in Java](https://www.baeldung.com/java-balanced-brackets-algorithm) - More articles: [[<-- prev]](/../algorithms-miscellaneous-4) From c39d3354f781edbfa66b18cd575ff96cb00c32eb Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Mon, 10 Feb 2020 14:30:25 +0800 Subject: [PATCH 060/149] Update README.md --- persistence-modules/redis/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/persistence-modules/redis/README.md b/persistence-modules/redis/README.md index 21cd048693..668b8d33f8 100644 --- a/persistence-modules/redis/README.md +++ b/persistence-modules/redis/README.md @@ -2,3 +2,4 @@ - [Intro to Jedis – the Java Redis Client Library](http://www.baeldung.com/jedis-java-redis-client-library) - [A Guide to Redis with Redisson](http://www.baeldung.com/redis-redisson) - [Introduction to Lettuce – the Java Redis Client](https://www.baeldung.com/java-redis-lettuce) +- [List All Available Redis Keys](https://www.baeldung.com/redis-list-available-keys) From 0f685afedf90dc4c1106071116bb0babba77ca91 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Mon, 10 Feb 2020 14:32:08 +0800 Subject: [PATCH 061/149] Update README.md --- json-2/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/json-2/README.md b/json-2/README.md index e7c3043339..b0f49f0e48 100644 --- a/json-2/README.md +++ b/json-2/README.md @@ -3,3 +3,4 @@ This module contains articles about JSON. ### Relevant Articles: +- [Introduction to Jsoniter](https://www.baeldung.com/java-jsoniter) From 1fe0b4ccbce87d9a8d0f64a2f71e33ee357b1327 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Mon, 10 Feb 2020 14:33:53 +0800 Subject: [PATCH 062/149] Update README.MD --- core-java-modules/core-java-reflection/README.MD | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/core-java-modules/core-java-reflection/README.MD b/core-java-modules/core-java-reflection/README.MD index 840d488968..5aed62b378 100644 --- a/core-java-modules/core-java-reflection/README.MD +++ b/core-java-modules/core-java-reflection/README.MD @@ -6,4 +6,5 @@ - [Guide to Java Reflection](http://www.baeldung.com/java-reflection) - [Call Methods at Runtime Using Java Reflection](http://www.baeldung.com/java-method-reflection) - [Changing Annotation Parameters At Runtime](http://www.baeldung.com/java-reflection-change-annotation-params) -- [Dynamic Proxies in Java](http://www.baeldung.com/java-dynamic-proxies) \ No newline at end of file +- [Dynamic Proxies in Java](http://www.baeldung.com/java-dynamic-proxies) +- [What Causes java.lang.reflect.InvocationTargetException?](https://www.baeldung.com/java-lang-reflect-invocationtargetexception) From 265a5100bd7207b5573f50490b4f6f9aea48b36f Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Mon, 10 Feb 2020 14:35:29 +0800 Subject: [PATCH 063/149] Update README.md --- core-java-modules/core-java-13/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/core-java-modules/core-java-13/README.md b/core-java-modules/core-java-13/README.md index c339520a19..697f89c362 100644 --- a/core-java-modules/core-java-13/README.md +++ b/core-java-modules/core-java-13/README.md @@ -1,3 +1,4 @@ ### Relevant articles: - [Java Switch Statement](https://www.baeldung.com/java-switch) +- [New Java 13 Features](https://www.baeldung.com/java-13-new-features) From e53d005173859eefd118cdd0194740a1f22b8f49 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Mon, 10 Feb 2020 14:37:00 +0800 Subject: [PATCH 064/149] Update README.md --- data-structures/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/data-structures/README.md b/data-structures/README.md index 3e83fa7312..e8fb374f6c 100644 --- a/data-structures/README.md +++ b/data-structures/README.md @@ -8,3 +8,4 @@ This module contains articles about data structures in Java - [Implementing a Binary Tree in Java](https://www.baeldung.com/java-binary-tree) - [Circular Linked List Java Implementation](https://www.baeldung.com/java-circular-linked-list) - [How to Print a Binary Tree Diagram](https://www.baeldung.com/java-print-binary-tree-diagram) +- [Introduction to Big Queue](https://www.baeldung.com/java-big-queue) From 6f43b985946cf99f5d26c6486362b67886a88d90 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Mon, 10 Feb 2020 14:39:54 +0800 Subject: [PATCH 065/149] Create README.md --- java-numbers-3/README.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 java-numbers-3/README.md diff --git a/java-numbers-3/README.md b/java-numbers-3/README.md new file mode 100644 index 0000000000..98ccb07682 --- /dev/null +++ b/java-numbers-3/README.md @@ -0,0 +1,3 @@ +### Relevant Articles: + +- [Generating Random Numbers](https://www.baeldung.com/java-generating-random-numbers) From e577ed1e0518eed75f4e16c3914d4643361e566d Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Mon, 10 Feb 2020 14:43:34 +0800 Subject: [PATCH 066/149] Update README.md --- core-java-modules/core-java-concurrency-advanced-3/README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/core-java-modules/core-java-concurrency-advanced-3/README.md b/core-java-modules/core-java-concurrency-advanced-3/README.md index a6449abac3..2c554e948b 100644 --- a/core-java-modules/core-java-concurrency-advanced-3/README.md +++ b/core-java-modules/core-java-concurrency-advanced-3/README.md @@ -9,4 +9,5 @@ This module contains articles about advanced topics about multithreading with co - [Common Concurrency Pitfalls in Java](https://www.baeldung.com/java-common-concurrency-pitfalls) - [Guide to RejectedExecutionHandler](https://www.baeldung.com/java-rejectedexecutionhandler) - [Guide to Work Stealing in Java](https://www.baeldung.com/java-work-stealing) -[[<-- previous]](/core-java-modules/core-java-concurrency-advanced-2) +- [Asynchronous Programming in Java](https://www.baeldung.com/java-asynchronous-programming) +- [[<-- previous]](/core-java-modules/core-java-concurrency-advanced-2) From b489c9032ffde5ef45277abd81c3875fb1411040 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Mon, 10 Feb 2020 14:45:50 +0800 Subject: [PATCH 067/149] Create README.md --- algorithms-sorting-2/README.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 algorithms-sorting-2/README.md diff --git a/algorithms-sorting-2/README.md b/algorithms-sorting-2/README.md new file mode 100644 index 0000000000..897621bc41 --- /dev/null +++ b/algorithms-sorting-2/README.md @@ -0,0 +1,3 @@ +### Relevant Articles: + +- [Partitioning and Sorting Arrays with Many Repeated Entries](https://www.baeldung.com/java-sorting-arrays-with-repeated-entries) From b3460a0cec18cf891396cbbd27f837e3e04e624f Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Mon, 10 Feb 2020 14:48:51 +0800 Subject: [PATCH 068/149] Update README.md --- apache-poi/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/apache-poi/README.md b/apache-poi/README.md index 5b23dc353e..39ba7126eb 100644 --- a/apache-poi/README.md +++ b/apache-poi/README.md @@ -7,3 +7,4 @@ This module contains articles about Apache POI - [Working with Microsoft Excel in Java](https://www.baeldung.com/java-microsoft-excel) - [Creating a MS PowerPoint Presentation in Java](https://www.baeldung.com/apache-poi-slideshow) - [Merge Cells in Excel Using Apache POI](https://www.baeldung.com/java-apache-poi-merge-cells) +- [Get String Value of Excel Cell with Apache POI](https://www.baeldung.com/java-apache-poi-cell-string-value) From 38ce164b6e3c0b5d1961bf08fdf97f9497c8d307 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Mon, 10 Feb 2020 14:51:23 +0800 Subject: [PATCH 069/149] Update README.md --- algorithms-miscellaneous-5/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/algorithms-miscellaneous-5/README.md b/algorithms-miscellaneous-5/README.md index eaa37a5a5f..23db220b0e 100644 --- a/algorithms-miscellaneous-5/README.md +++ b/algorithms-miscellaneous-5/README.md @@ -18,4 +18,5 @@ This module contains articles about algorithms. Some classes of algorithms, e.g. - [Median of Stream of Integers using Heap](https://www.baeldung.com/java-stream-integers-median-using-heap) - [Kruskal’s Algorithm for Spanning Trees](https://www.baeldung.com/java-spanning-trees-kruskal) - [Balanced Brackets Algorithm in Java](https://www.baeldung.com/java-balanced-brackets-algorithm) +- [Efficiently Merge Sorted Java Sequences](https://www.baeldung.com/java-merge-sorted-sequences) - More articles: [[<-- prev]](/../algorithms-miscellaneous-4) From ac95ae258f999b4f117a8445a978825320475fb7 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Mon, 10 Feb 2020 14:56:01 +0800 Subject: [PATCH 070/149] Update README.md --- core-java-modules/core-java-lang-math/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/core-java-modules/core-java-lang-math/README.md b/core-java-modules/core-java-lang-math/README.md index c72b69fcad..ec97a2ada4 100644 --- a/core-java-modules/core-java-lang-math/README.md +++ b/core-java-modules/core-java-lang-math/README.md @@ -9,3 +9,4 @@ - [The strictfp Keyword in Java](https://www.baeldung.com/java-strictfp) - [Basic Calculator in Java](https://www.baeldung.com/java-basic-calculator) - [Overflow and Underflow in Java](https://www.baeldung.com/java-overflow-underflow) +- [Obtaining a Power Set of a Set in Java](https://www.baeldung.com/java-power-set-of-a-set) From 206b854b3d7a33b2614acf3387c2915f2304c712 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Mon, 10 Feb 2020 15:01:00 +0800 Subject: [PATCH 071/149] Update README.md --- algorithms-miscellaneous-5/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/algorithms-miscellaneous-5/README.md b/algorithms-miscellaneous-5/README.md index 23db220b0e..4ef919b33b 100644 --- a/algorithms-miscellaneous-5/README.md +++ b/algorithms-miscellaneous-5/README.md @@ -19,4 +19,5 @@ This module contains articles about algorithms. Some classes of algorithms, e.g. - [Kruskal’s Algorithm for Spanning Trees](https://www.baeldung.com/java-spanning-trees-kruskal) - [Balanced Brackets Algorithm in Java](https://www.baeldung.com/java-balanced-brackets-algorithm) - [Efficiently Merge Sorted Java Sequences](https://www.baeldung.com/java-merge-sorted-sequences) +- [Introduction to Greedy Algorithms with Java](https://www.baeldung.com/java-greedy-algorithms) - More articles: [[<-- prev]](/../algorithms-miscellaneous-4) From 077224fce8052ab00d435316cf0d72637eef9b5e Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Mon, 10 Feb 2020 15:02:46 +0800 Subject: [PATCH 072/149] Update README.md --- testing-modules/testing-libraries/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/testing-modules/testing-libraries/README.md b/testing-modules/testing-libraries/README.md index 031fd28797..b5360bd841 100644 --- a/testing-modules/testing-libraries/README.md +++ b/testing-modules/testing-libraries/README.md @@ -10,3 +10,4 @@ - [Introduction to FindBugs](https://www.baeldung.com/intro-to-findbugs) - [Cucumber Data Tables](https://www.baeldung.com/cucumber-data-tables) - [Cucumber Background](https://www.baeldung.com/java-cucumber-background) +- [Cucumber Hooks](https://www.baeldung.com/java-cucumber-hooks) From c49b0d7d1481cabadf8ccecac8cf2321d5021d04 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Mon, 10 Feb 2020 15:05:09 +0800 Subject: [PATCH 073/149] Update README.md --- apache-poi/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/apache-poi/README.md b/apache-poi/README.md index 39ba7126eb..742220aebc 100644 --- a/apache-poi/README.md +++ b/apache-poi/README.md @@ -8,3 +8,4 @@ This module contains articles about Apache POI - [Creating a MS PowerPoint Presentation in Java](https://www.baeldung.com/apache-poi-slideshow) - [Merge Cells in Excel Using Apache POI](https://www.baeldung.com/java-apache-poi-merge-cells) - [Get String Value of Excel Cell with Apache POI](https://www.baeldung.com/java-apache-poi-cell-string-value) +- [Read Excel Cell Value Rather Than Formula With Apache POI](https://github.com/eugenp/tutorials/tree/master/apache-poi) From de9aa7c9ec6825842ed6f7db79c8195e719b9c31 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Mon, 10 Feb 2020 15:07:32 +0800 Subject: [PATCH 074/149] Update README.md --- core-java-modules/core-java-lang-syntax/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/core-java-modules/core-java-lang-syntax/README.md b/core-java-modules/core-java-lang-syntax/README.md index 25f5c63dbc..b7e21014a3 100644 --- a/core-java-modules/core-java-lang-syntax/README.md +++ b/core-java-modules/core-java-lang-syntax/README.md @@ -13,4 +13,5 @@ This module contains articles about Java syntax - [Infinite Loops in Java](https://www.baeldung.com/infinite-loops-java) - [Java Switch Statement](https://www.baeldung.com/java-switch) - [Breaking Out of Nested Loops](https://www.baeldung.com/java-breaking-out-nested-loop) +- [Java Do-While Loop](https://www.baeldung.com/java-do-while-loop) - [[More -->]](/core-java-modules/core-java-lang-syntax-2) From fd3e69582d086065b99cee635529662c2768596f Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Mon, 10 Feb 2020 15:08:56 +0800 Subject: [PATCH 075/149] Update README.md --- core-java-modules/core-java-lang-syntax/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/core-java-modules/core-java-lang-syntax/README.md b/core-java-modules/core-java-lang-syntax/README.md index b7e21014a3..7b60eb1486 100644 --- a/core-java-modules/core-java-lang-syntax/README.md +++ b/core-java-modules/core-java-lang-syntax/README.md @@ -14,4 +14,5 @@ This module contains articles about Java syntax - [Java Switch Statement](https://www.baeldung.com/java-switch) - [Breaking Out of Nested Loops](https://www.baeldung.com/java-breaking-out-nested-loop) - [Java Do-While Loop](https://www.baeldung.com/java-do-while-loop) +- [Java While Loop](https://www.baeldung.com/java-while-loop) - [[More -->]](/core-java-modules/core-java-lang-syntax-2) From 92f3b3a96dded1b3ec88b788a60cf9a95c66f9b5 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Mon, 10 Feb 2020 15:10:22 +0800 Subject: [PATCH 076/149] Update README.md --- core-java-modules/core-java-lang-syntax/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/core-java-modules/core-java-lang-syntax/README.md b/core-java-modules/core-java-lang-syntax/README.md index 7b60eb1486..bef03b98ad 100644 --- a/core-java-modules/core-java-lang-syntax/README.md +++ b/core-java-modules/core-java-lang-syntax/README.md @@ -15,4 +15,5 @@ This module contains articles about Java syntax - [Breaking Out of Nested Loops](https://www.baeldung.com/java-breaking-out-nested-loop) - [Java Do-While Loop](https://www.baeldung.com/java-do-while-loop) - [Java While Loop](https://www.baeldung.com/java-while-loop) +- [Java For Loop](https://www.baeldung.com/java-for-loop) - [[More -->]](/core-java-modules/core-java-lang-syntax-2) From 530d08c5dc3525299865c42b9830caa4095d0f3a Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Mon, 10 Feb 2020 15:12:42 +0800 Subject: [PATCH 077/149] Update README.md --- testing-modules/selenium-junit-testng/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/testing-modules/selenium-junit-testng/README.md b/testing-modules/selenium-junit-testng/README.md index 0137212290..198247d7bf 100644 --- a/testing-modules/selenium-junit-testng/README.md +++ b/testing-modules/selenium-junit-testng/README.md @@ -1,3 +1,4 @@ ### Relevant Articles: - [Guide to Selenium with JUnit / TestNG](http://www.baeldung.com/java-selenium-with-junit-and-testng) - [Testing with Selenium/WebDriver and the Page Object Pattern](http://www.baeldung.com/selenium-webdriver-page-object) +- [Using Cookies With Selenium WebDriver in Java](https://www.baeldung.com/java-selenium-webdriver-cookies) From f5178292b3809aa62847ad9d3bc445d8893a35e5 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Mon, 10 Feb 2020 15:14:20 +0800 Subject: [PATCH 078/149] Update README.md --- java-numbers-3/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/java-numbers-3/README.md b/java-numbers-3/README.md index 98ccb07682..08e8dae8ef 100644 --- a/java-numbers-3/README.md +++ b/java-numbers-3/README.md @@ -1,3 +1,4 @@ ### Relevant Articles: - [Generating Random Numbers](https://www.baeldung.com/java-generating-random-numbers) +- [Convert Double to Long in Java](https://www.baeldung.com/java-convert-double-long) From b49cb1f330fd72933a23806ac83468ab41258aea Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Mon, 10 Feb 2020 15:15:20 +0800 Subject: [PATCH 079/149] Update README.md --- apache-rocketmq/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/apache-rocketmq/README.md b/apache-rocketmq/README.md index be53f95790..734f878baa 100644 --- a/apache-rocketmq/README.md +++ b/apache-rocketmq/README.md @@ -3,3 +3,5 @@ This module contains articles about Apache RocketMQ ### Relevant Articles: + +- [Apache RocketMQ with Spring Boot](https://www.baeldung.com/apache-rocketmq-spring-boot) From 66963e30250cfbe14752c05921785856259c393f Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Mon, 10 Feb 2020 15:17:21 +0800 Subject: [PATCH 080/149] Update README.md --- spring-boot-modules/spring-boot-mvc-2/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-boot-modules/spring-boot-mvc-2/README.md b/spring-boot-modules/spring-boot-mvc-2/README.md index dae815a1c1..cb0eea4c2a 100644 --- a/spring-boot-modules/spring-boot-mvc-2/README.md +++ b/spring-boot-modules/spring-boot-mvc-2/README.md @@ -5,5 +5,5 @@ This module contains articles about Spring Web MVC in Spring Boot projects. ### Relevant Articles: - [Functional Controllers in Spring MVC](https://www.baeldung.com/spring-mvc-functional-controllers) -- [Specify an array of strings as body parameter in Swagger API](https://www.baeldung.com/swagger-body-array-of-strings) +- [Specify an Array of Strings as Body Parameters in Swagger](https://www.baeldung.com/swagger-body-array-of-strings) - More articles: [[prev -->]](/spring-boot-mvc) From d55d7157ccb7f0c10bbe32dbc8749beebb7dead6 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Mon, 10 Feb 2020 15:19:13 +0800 Subject: [PATCH 081/149] Update README.md --- core-java-modules/core-java-lang-2/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/core-java-modules/core-java-lang-2/README.md b/core-java-modules/core-java-lang-2/README.md index ce3589e2be..f6a7abdc52 100644 --- a/core-java-modules/core-java-lang-2/README.md +++ b/core-java-modules/core-java-lang-2/README.md @@ -7,4 +7,5 @@ This module contains articles about core features in the Java language - [Command-Line Arguments in Java](https://www.baeldung.com/java-command-line-arguments) - [What is a POJO Class?](https://www.baeldung.com/java-pojo-class) - [Java Default Parameters Using Method Overloading](https://www.baeldung.com/java-default-parameters-method-overloading) +- [How to Return Multiple Values From a Java Method](https://www.baeldung.com/java-method-return-multiple-values) - [[<-- Prev]](/core-java-modules/core-java-lang) From 9b7b426965d2b58dc00890386a1370c79408a774 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Mon, 10 Feb 2020 15:20:46 +0800 Subject: [PATCH 082/149] Update README.md --- core-java-modules/core-java-lang-2/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/core-java-modules/core-java-lang-2/README.md b/core-java-modules/core-java-lang-2/README.md index f6a7abdc52..a9604d1032 100644 --- a/core-java-modules/core-java-lang-2/README.md +++ b/core-java-modules/core-java-lang-2/README.md @@ -8,4 +8,5 @@ This module contains articles about core features in the Java language - [What is a POJO Class?](https://www.baeldung.com/java-pojo-class) - [Java Default Parameters Using Method Overloading](https://www.baeldung.com/java-default-parameters-method-overloading) - [How to Return Multiple Values From a Java Method](https://www.baeldung.com/java-method-return-multiple-values) +- [Guide to the Java finally Keyword](https://www.baeldung.com/java-finally-keyword) - [[<-- Prev]](/core-java-modules/core-java-lang) From 0e36222099dc079d9b1e2530d4da30572945b3ea Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Mon, 10 Feb 2020 15:24:02 +0800 Subject: [PATCH 083/149] Update README.md --- core-java-modules/core-java-arrays-2/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/core-java-modules/core-java-arrays-2/README.md b/core-java-modules/core-java-arrays-2/README.md index a78b3327b6..c4ae3f03f7 100644 --- a/core-java-modules/core-java-arrays-2/README.md +++ b/core-java-modules/core-java-arrays-2/README.md @@ -13,4 +13,5 @@ This module contains articles about Java arrays - [Removing an Element from an Array in Java](https://www.baeldung.com/java-array-remove-element) - [Removing the First Element of an Array](https://www.baeldung.com/java-array-remove-first-element) - [Adding an Element to a Java Array vs an ArrayList](https://www.baeldung.com/java-add-element-to-array-vs-list) +- [Arrays.sort vs Arrays.parallelSort](https://www.baeldung.com/java-arrays-sort-vs-parallelsort) - [[<-- Prev]](/core-java-modules/core-java-arrays) From 5860e8baa69607caf34b1bebbd07a37ea36359a8 Mon Sep 17 00:00:00 2001 From: chris9408 <58786016+chris9408@users.noreply.github.com> Date: Mon, 10 Feb 2020 17:28:28 +0200 Subject: [PATCH 084/149] [BAEL-3750] Breaking YAML Strings Over Multiple Lines (#8664) * [BAEL-3750] Breaking YAML Strings Over Multiple Lines * Added yamo module to appropriate profiles * Article improvements * Fix * [BAEL-3750] Moved multi line yaml files from the yaml module to the libraries-data-io folder * [BAEL-3750] deleted the yaml module Co-authored-by: cristirosu --- .../snakeyaml/MultiLineStringsUnitTest.java | 90 +++++++++++++++++++ .../test/resources/yaml/multiline/folded.yaml | 4 + .../resources/yaml/multiline/folded2.yaml | 8 ++ .../resources/yaml/multiline/folded_keep.yaml | 6 ++ .../yaml/multiline/folded_strip.yaml | 7 ++ .../resources/yaml/multiline/literal.yaml | 4 + .../resources/yaml/multiline/literal2.yaml | 10 +++ .../yaml/multiline/literal_keep.yaml | 5 ++ .../yaml/multiline/literal_strip.yaml | 5 ++ .../yaml/multiline/plain_double_quotes.yaml | 1 + .../yaml/multiline/plain_single_quotes.yaml | 3 + 11 files changed, 143 insertions(+) create mode 100644 libraries-data-io/src/test/java/com/baeldung/libraries/snakeyaml/MultiLineStringsUnitTest.java create mode 100644 libraries-data-io/src/test/resources/yaml/multiline/folded.yaml create mode 100644 libraries-data-io/src/test/resources/yaml/multiline/folded2.yaml create mode 100644 libraries-data-io/src/test/resources/yaml/multiline/folded_keep.yaml create mode 100644 libraries-data-io/src/test/resources/yaml/multiline/folded_strip.yaml create mode 100644 libraries-data-io/src/test/resources/yaml/multiline/literal.yaml create mode 100644 libraries-data-io/src/test/resources/yaml/multiline/literal2.yaml create mode 100644 libraries-data-io/src/test/resources/yaml/multiline/literal_keep.yaml create mode 100644 libraries-data-io/src/test/resources/yaml/multiline/literal_strip.yaml create mode 100644 libraries-data-io/src/test/resources/yaml/multiline/plain_double_quotes.yaml create mode 100644 libraries-data-io/src/test/resources/yaml/multiline/plain_single_quotes.yaml diff --git a/libraries-data-io/src/test/java/com/baeldung/libraries/snakeyaml/MultiLineStringsUnitTest.java b/libraries-data-io/src/test/java/com/baeldung/libraries/snakeyaml/MultiLineStringsUnitTest.java new file mode 100644 index 0000000000..836ac86339 --- /dev/null +++ b/libraries-data-io/src/test/java/com/baeldung/libraries/snakeyaml/MultiLineStringsUnitTest.java @@ -0,0 +1,90 @@ +package com.baeldung.libraries.snakeyaml; + +import org.junit.Before; +import org.junit.Test; +import org.yaml.snakeyaml.Yaml; + +import java.io.File; +import java.io.InputStream; +import java.util.Map; + +import static org.junit.Assert.assertEquals; + +public class MultiLineStringsUnitTest { + + private Yaml yaml; + + @Before + public void setup() { + yaml = new Yaml(); + } + + @Test + public void whenLiteral_ThenLineBreaksArePresent() { + String key = parseYamlKey("literal.yaml", "key"); + assertEquals("Line1\nLine2\nLine3", key); + } + + @Test + public void whenLiteral_ThenEndingBreaksAreReducedToOne() { + String key = parseYamlKey("literal2.yaml", "key"); + assertEquals("\n\nLine1\n\nLine2\n\nLine3\n", key); + } + + @Test + public void whenFolded_ThenLineBreaksAreReplaced() { + String key = parseYamlKey("folded.yaml", "key"); + assertEquals("Line1 Line2 Line3", key); + } + + @Test + public void whenFolded_ThenEmptyLinesAreReducedToOne() { + String key = parseYamlKey("folded2.yaml", "key"); + assertEquals("Line1 Line2\n\nLine3\n", key); + } + + @Test + public void whenLiteralKeep_ThenLastEmptyLinesArePresent() { + String key = parseYamlKey("literal_keep.yaml", "key"); + assertEquals("Line1\nLine2\nLine3\n\n", key); + } + + @Test + public void whenLiteralStrip_ThenLastEmptyLinesAreRemoved() { + String key = parseYamlKey("literal_strip.yaml", "key"); + assertEquals("Line1\nLine2\nLine3", key); + } + + @Test + public void whenFoldedKeep_ThenLastEmptyLinesArePresent() { + String key = parseYamlKey("folded_keep.yaml", "key"); + assertEquals("Line1 Line2 Line3\n\n\n", key); + } + + @Test + public void whenFoldedStrip_ThenLastEmptyLinesAreRemoved() { + String key = parseYamlKey("folded_strip.yaml", "key"); + assertEquals("Line1 Line2 Line3", key); + } + + @Test + public void whenDoubleQuotes_ThenExplicitBreaksArePreserved() { + String key = parseYamlKey("plain_double_quotes.yaml", "key"); + assertEquals("Line1\nLine2\nLine3", key); + } + + @Test + public void whenSingleQuotes_ThenExplicitBreaksAreIgnored() { + String key = parseYamlKey("plain_single_quotes.yaml", "key"); + assertEquals("Line1\\nLine2\nLine3", key); + } + + String parseYamlKey(String fileName, String key) { + InputStream inputStream = this.getClass() + .getClassLoader() + .getResourceAsStream("yaml" + File.separator + "multiline" + File.separator + fileName); + Map parsed = yaml.load(inputStream); + return parsed.get(key); + } + +} diff --git a/libraries-data-io/src/test/resources/yaml/multiline/folded.yaml b/libraries-data-io/src/test/resources/yaml/multiline/folded.yaml new file mode 100644 index 0000000000..c5fa743a08 --- /dev/null +++ b/libraries-data-io/src/test/resources/yaml/multiline/folded.yaml @@ -0,0 +1,4 @@ +key: > + Line1 + Line2 + Line3 \ No newline at end of file diff --git a/libraries-data-io/src/test/resources/yaml/multiline/folded2.yaml b/libraries-data-io/src/test/resources/yaml/multiline/folded2.yaml new file mode 100644 index 0000000000..735abf9b2f --- /dev/null +++ b/libraries-data-io/src/test/resources/yaml/multiline/folded2.yaml @@ -0,0 +1,8 @@ +key: > + Line1 + Line2 + + + Line3 + + diff --git a/libraries-data-io/src/test/resources/yaml/multiline/folded_keep.yaml b/libraries-data-io/src/test/resources/yaml/multiline/folded_keep.yaml new file mode 100644 index 0000000000..555291fd26 --- /dev/null +++ b/libraries-data-io/src/test/resources/yaml/multiline/folded_keep.yaml @@ -0,0 +1,6 @@ +key: >+ + Line1 + Line2 + Line3 + + diff --git a/libraries-data-io/src/test/resources/yaml/multiline/folded_strip.yaml b/libraries-data-io/src/test/resources/yaml/multiline/folded_strip.yaml new file mode 100644 index 0000000000..0a3a246dc2 --- /dev/null +++ b/libraries-data-io/src/test/resources/yaml/multiline/folded_strip.yaml @@ -0,0 +1,7 @@ +key: >- + Line1 + Line2 + Line3 + + + diff --git a/libraries-data-io/src/test/resources/yaml/multiline/literal.yaml b/libraries-data-io/src/test/resources/yaml/multiline/literal.yaml new file mode 100644 index 0000000000..7e02501a33 --- /dev/null +++ b/libraries-data-io/src/test/resources/yaml/multiline/literal.yaml @@ -0,0 +1,4 @@ +key: | + Line1 + Line2 + Line3 \ No newline at end of file diff --git a/libraries-data-io/src/test/resources/yaml/multiline/literal2.yaml b/libraries-data-io/src/test/resources/yaml/multiline/literal2.yaml new file mode 100644 index 0000000000..7c7fed0163 --- /dev/null +++ b/libraries-data-io/src/test/resources/yaml/multiline/literal2.yaml @@ -0,0 +1,10 @@ +key: | + + + Line1 + + Line2 + + Line3 + + diff --git a/libraries-data-io/src/test/resources/yaml/multiline/literal_keep.yaml b/libraries-data-io/src/test/resources/yaml/multiline/literal_keep.yaml new file mode 100644 index 0000000000..37f22684dd --- /dev/null +++ b/libraries-data-io/src/test/resources/yaml/multiline/literal_keep.yaml @@ -0,0 +1,5 @@ +key: |+ + Line1 + Line2 + Line3 + diff --git a/libraries-data-io/src/test/resources/yaml/multiline/literal_strip.yaml b/libraries-data-io/src/test/resources/yaml/multiline/literal_strip.yaml new file mode 100644 index 0000000000..0791e13d5d --- /dev/null +++ b/libraries-data-io/src/test/resources/yaml/multiline/literal_strip.yaml @@ -0,0 +1,5 @@ +key: |- + Line1 + Line2 + Line3 + diff --git a/libraries-data-io/src/test/resources/yaml/multiline/plain_double_quotes.yaml b/libraries-data-io/src/test/resources/yaml/multiline/plain_double_quotes.yaml new file mode 100644 index 0000000000..ccab040a27 --- /dev/null +++ b/libraries-data-io/src/test/resources/yaml/multiline/plain_double_quotes.yaml @@ -0,0 +1 @@ +key: "Line1\nLine2\nLine3" \ No newline at end of file diff --git a/libraries-data-io/src/test/resources/yaml/multiline/plain_single_quotes.yaml b/libraries-data-io/src/test/resources/yaml/multiline/plain_single_quotes.yaml new file mode 100644 index 0000000000..acbf35a462 --- /dev/null +++ b/libraries-data-io/src/test/resources/yaml/multiline/plain_single_quotes.yaml @@ -0,0 +1,3 @@ +key: 'Line1\nLine2 + + Line3' \ No newline at end of file From 03c30d1d72736752fe4e57a66a2ffb5bc2e66a81 Mon Sep 17 00:00:00 2001 From: sampada Date: Mon, 10 Feb 2020 23:46:48 +0530 Subject: [PATCH 085/149] BAEL-15988 : spring boot artifacts/pom.xml --- .../spring-boot-artifacts/pom.xml | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/spring-boot-modules/spring-boot-artifacts/pom.xml b/spring-boot-modules/spring-boot-artifacts/pom.xml index d6d3886c3e..f7c8636593 100644 --- a/spring-boot-modules/spring-boot-artifacts/pom.xml +++ b/spring-boot-modules/spring-boot-artifacts/pom.xml @@ -139,6 +139,33 @@ + + + pl.project13.maven + git-commit-id-plugin + ${git-commit-id-plugin.version} + + + get-the-git-infos + + revision + + initialize + + + validate-the-git-infos + + validateRevision + + package + + + + true + ${project.build.outputDirectory}/git.properties + + + @@ -185,6 +212,7 @@ 3.1.1 3.3.7-1 2.2 + 2.2.4 18.0 3.1.7 2.0.2.RELEASE From 725368917c9ccf8e77ba8e25e5b744a1a18831af Mon Sep 17 00:00:00 2001 From: Loredana Crusoveanu Date: Mon, 10 Feb 2020 21:16:53 +0200 Subject: [PATCH 086/149] Update README.md --- spring-boot-security/README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/spring-boot-security/README.md b/spring-boot-security/README.md index 3f1fa774ec..be4690f321 100644 --- a/spring-boot-security/README.md +++ b/spring-boot-security/README.md @@ -7,7 +7,6 @@ This module contains articles about Spring Boot Security - [Spring Boot Security Auto-Configuration](https://www.baeldung.com/spring-boot-security-autoconfiguration) - [Spring Security for Spring Boot Integration Tests](https://www.baeldung.com/spring-security-integration-tests) - [Introduction to Spring Security Taglibs](https://www.baeldung.com/spring-security-taglibs) -- [Guide to @CurrentSecurityContext in Spring Security](https://github.com/eugenp/tutorials/tree/master/spring-boot-security) ### Spring Boot Security Auto-Configuration From 5f6feeb12bfa08ff0806a286f8e8a12716e142a3 Mon Sep 17 00:00:00 2001 From: Loredana Crusoveanu Date: Mon, 10 Feb 2020 23:07:00 +0200 Subject: [PATCH 087/149] Update README.md --- spring-boot-modules/spring-boot-security/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/spring-boot-modules/spring-boot-security/README.md b/spring-boot-modules/spring-boot-security/README.md index be4690f321..7229ba0f4a 100644 --- a/spring-boot-modules/spring-boot-security/README.md +++ b/spring-boot-modules/spring-boot-security/README.md @@ -7,6 +7,7 @@ This module contains articles about Spring Boot Security - [Spring Boot Security Auto-Configuration](https://www.baeldung.com/spring-boot-security-autoconfiguration) - [Spring Security for Spring Boot Integration Tests](https://www.baeldung.com/spring-security-integration-tests) - [Introduction to Spring Security Taglibs](https://www.baeldung.com/spring-security-taglibs) +- [Guide to @CurrentSecurityContext in Spring Security](https://www.baeldung.com/spring-currentsecuritycontext) ### Spring Boot Security Auto-Configuration From 64c2ddbf3012ee71c9a00877367692661a0fa733 Mon Sep 17 00:00:00 2001 From: Loredana Crusoveanu Date: Mon, 10 Feb 2020 23:10:44 +0200 Subject: [PATCH 088/149] Update README.md --- core-java-modules/core-java-regex/README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/core-java-modules/core-java-regex/README.md b/core-java-modules/core-java-regex/README.md index be5022c614..7a8f6d9293 100644 --- a/core-java-modules/core-java-regex/README.md +++ b/core-java-modules/core-java-regex/README.md @@ -5,4 +5,6 @@ ### Relevant Articles: - [An Overview of Regular Expressions Performance in Java](https://www.baeldung.com/java-regex-performance) - [A Guide To Java Regular Expressions API](http://www.baeldung.com/regular-expressions-java) -- [Guide to Escaping Characters in Java RegExps](http://www.baeldung.com/java-regexp-escape-char) \ No newline at end of file +- [Guide to Escaping Characters in Java RegExps](http://www.baeldung.com/java-regexp-escape-char) +- [Pre-compile Regex Patterns Into Pattern Objects](https://www.baeldung.com/java-regex-pre-compile) +- [Difference Between Java Matcher find() and matches()](https://www.baeldung.com/java-matcher-find-vs-matches) From 29622aba6caacf7196b30b68c40cccc703b9d9ab Mon Sep 17 00:00:00 2001 From: Loredana Crusoveanu Date: Mon, 10 Feb 2020 23:11:03 +0200 Subject: [PATCH 089/149] Delete README.md --- core-java-modules/core-java-text/README.md | 8 -------- 1 file changed, 8 deletions(-) delete mode 100644 core-java-modules/core-java-text/README.md diff --git a/core-java-modules/core-java-text/README.md b/core-java-modules/core-java-text/README.md deleted file mode 100644 index c29289f906..0000000000 --- a/core-java-modules/core-java-text/README.md +++ /dev/null @@ -1,8 +0,0 @@ -========= - -## Core Java 8 Cookbooks and Examples - -### Relevant Articles: -- [An Overview of Regular Expressions Performance in Java](https://www.baeldung.com/java-regex-performance) -- [Pre-compile Regex Patterns Into Pattern Objects](https://www.baeldung.com/java-regex-pre-compile) -- [Difference Between Java Matcher find() and matches()](https://www.baeldung.com/java-matcher-find-vs-matches) From 76df3d01175050c0d62be5c32e94a635436781e4 Mon Sep 17 00:00:00 2001 From: Justin Albano Date: Mon, 10 Feb 2020 20:36:52 -0500 Subject: [PATCH 090/149] BAEL-3744: Added unit tests for Spring Framework design patterns. --- ...nnotationConfigApplicationContextTest.java | 36 +++++++++++++++++++ .../patterns/factory/ApplicationConfig.java | 9 +++++ .../baeldung/spring/patterns/factory/Bar.java | 20 +++++++++++ .../baeldung/spring/patterns/factory/Foo.java | 7 ++++ 4 files changed, 72 insertions(+) create mode 100644 spring-core-3/src/test/java/com/baeldung/spring/patterns/factory/AnnotationConfigApplicationContextTest.java create mode 100644 spring-core-3/src/test/java/com/baeldung/spring/patterns/factory/ApplicationConfig.java create mode 100644 spring-core-3/src/test/java/com/baeldung/spring/patterns/factory/Bar.java create mode 100644 spring-core-3/src/test/java/com/baeldung/spring/patterns/factory/Foo.java diff --git a/spring-core-3/src/test/java/com/baeldung/spring/patterns/factory/AnnotationConfigApplicationContextTest.java b/spring-core-3/src/test/java/com/baeldung/spring/patterns/factory/AnnotationConfigApplicationContextTest.java new file mode 100644 index 0000000000..57a8ece197 --- /dev/null +++ b/spring-core-3/src/test/java/com/baeldung/spring/patterns/factory/AnnotationConfigApplicationContextTest.java @@ -0,0 +1,36 @@ +package com.baeldung.spring.patterns.factory; + +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.jupiter.api.Assertions.assertNotNull; + +import org.junit.jupiter.api.Test; +import org.springframework.context.ApplicationContext; +import org.springframework.context.annotation.AnnotationConfigApplicationContext; + +public class AnnotationConfigApplicationContextTest { + + @Test + @SuppressWarnings("resource") + public void whenGetSimpleBean_ThenReturnConstructedBean() { + + ApplicationContext context = new AnnotationConfigApplicationContext(ApplicationConfig.class); + + Foo foo = context.getBean(Foo.class); + + assertNotNull(foo); + } + + @Test + @SuppressWarnings("resource") + public void whenGetPrototypeBean_ThenReturnConstructedBean() { + + String expectedName = "Some name"; + ApplicationContext context = new AnnotationConfigApplicationContext(ApplicationConfig.class); + + Bar bar = context.getBean(Bar.class, expectedName); + + assertNotNull(bar); + assertThat(bar.getName(), is(expectedName)); + } +} diff --git a/spring-core-3/src/test/java/com/baeldung/spring/patterns/factory/ApplicationConfig.java b/spring-core-3/src/test/java/com/baeldung/spring/patterns/factory/ApplicationConfig.java new file mode 100644 index 0000000000..626947cfd5 --- /dev/null +++ b/spring-core-3/src/test/java/com/baeldung/spring/patterns/factory/ApplicationConfig.java @@ -0,0 +1,9 @@ +package com.baeldung.spring.patterns.factory; + +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; + +@Configuration +@ComponentScan(basePackageClasses = ApplicationConfig.class) +public class ApplicationConfig { +} diff --git a/spring-core-3/src/test/java/com/baeldung/spring/patterns/factory/Bar.java b/spring-core-3/src/test/java/com/baeldung/spring/patterns/factory/Bar.java new file mode 100644 index 0000000000..e2f825aab3 --- /dev/null +++ b/spring-core-3/src/test/java/com/baeldung/spring/patterns/factory/Bar.java @@ -0,0 +1,20 @@ +package com.baeldung.spring.patterns.factory; + +import org.springframework.beans.factory.config.ConfigurableBeanFactory; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Component; + +@Component +@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) +public class Bar { + + private String name; + + public Bar(String name) { + this.name = name; + } + + public String getName() { + return name; + } +} \ No newline at end of file diff --git a/spring-core-3/src/test/java/com/baeldung/spring/patterns/factory/Foo.java b/spring-core-3/src/test/java/com/baeldung/spring/patterns/factory/Foo.java new file mode 100644 index 0000000000..5edba6c50d --- /dev/null +++ b/spring-core-3/src/test/java/com/baeldung/spring/patterns/factory/Foo.java @@ -0,0 +1,7 @@ +package com.baeldung.spring.patterns.factory; + +import org.springframework.stereotype.Component; + +@Component +public class Foo { +} From f41b219d931ccf9e050255a742b27e5dd62c2cb9 Mon Sep 17 00:00:00 2001 From: sampada Date: Tue, 11 Feb 2020 10:39:59 +0530 Subject: [PATCH 091/149] BAEL-15988 : pom files --- .../spring-boot-performance/pom.xml | 12 + spring-boot-modules/spring-boot/pom.xml | 502 ++++++++---------- 2 files changed, 246 insertions(+), 268 deletions(-) diff --git a/spring-boot-modules/spring-boot-performance/pom.xml b/spring-boot-modules/spring-boot-performance/pom.xml index 882763f0bc..1f3eafd96c 100644 --- a/spring-boot-modules/spring-boot-performance/pom.xml +++ b/spring-boot-modules/spring-boot-performance/pom.xml @@ -19,6 +19,17 @@ org.springframework.boot spring-boot-starter + + + org.springframework.boot + spring-boot-starter-web + + + + de.codecentric + chaos-monkey-spring-boot + ${chaos.monkey.version} + @@ -41,5 +52,6 @@ com.baeldung.lazyinitialization.Application + 2.0.0 diff --git a/spring-boot-modules/spring-boot/pom.xml b/spring-boot-modules/spring-boot/pom.xml index 5e63cffc80..e0ff9ae2f9 100644 --- a/spring-boot-modules/spring-boot/pom.xml +++ b/spring-boot-modules/spring-boot/pom.xml @@ -1,268 +1,234 @@ - - - 4.0.0 - spring-boot - spring-boot - war - This is simple boot application for Spring boot actuator test - 0.0.1-SNAPSHOT - - - parent-boot-2 - com.baeldung - 0.0.1-SNAPSHOT - ../../parent-boot-2 - - - - - - - org.junit.jupiter - junit-jupiter-api - test - - - org.junit.jupiter - junit-jupiter-engine - test - - - - - org.junit.platform - junit-platform-launcher - ${junit-platform.version} - test - - - org.springframework.boot - spring-boot-starter-thymeleaf - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-data-jpa - - - org.ehcache - ehcache - - - org.hibernate - hibernate-ehcache - - - org.springframework.boot - spring-boot-starter-actuator - - - - com.graphql-java - graphql-spring-boot-starter - ${graphql-spring-boot-starter.version} - - - com.graphql-java - graphql-java-tools - ${graphql-java-tools.version} - - - com.graphql-java - graphiql-spring-boot-starter - ${graphiql-spring-boot-starter.version} - - - - org.springframework.boot - spring-boot-starter-tomcat - - - - org.springframework.boot - spring-boot-starter-test - test - - - - io.dropwizard.metrics - metrics-core - - - - com.h2database - h2 - - - - org.springframework.boot - spring-boot-starter - - - com.jayway.jsonpath - json-path - test - - - - com.google.guava - guava - ${guava.version} - - - - org.apache.tomcat - tomcat-servlet-api - ${tomee-servlet-api.version} - provided - - - - org.togglz - togglz-spring-boot-starter - ${togglz.version} - - - - org.togglz - togglz-spring-security - ${togglz.version} - - - - org.apache.activemq - artemis-server - - - - com.rometools - rome - ${rome.version} - - - - de.codecentric - chaos-monkey-spring-boot - ${chaos.monkey.version} - - - - javax.validation - validation-api - - - - - spring-boot - - - src/main/resources - true - - - - - - - org.apache.maven.plugins - maven-war-plugin - - - - pl.project13.maven - git-commit-id-plugin - ${git-commit-id-plugin.version} - - - get-the-git-infos - - revision - - initialize - - - validate-the-git-infos - - validateRevision - - package - - - - true - ${project.build.outputDirectory}/git.properties - - - - - org.apache.maven.plugins - maven-resources-plugin - - - @ - - false - - - - - - - - - autoconfiguration - - - - org.apache.maven.plugins - maven-surefire-plugin - - - integration-test - - test - - - - **/*LiveTest.java - **/*IntegrationTest.java - **/*IntTest.java - - - **/AutoconfigurationTest.java - - - - - - - json - - - - - - - - - - - com.baeldung.intro.App - 8.5.11 - 2.4.1.Final - 1.9.0 - 2.0.0 - 5.0.2 - 5.0.2 - 5.2.4 - 18.0 - 2.2.4 - @ - - - + + + 4.0.0 + spring-boot + spring-boot + war + This is simple boot application for Spring boot actuator test + 0.0.1-SNAPSHOT + + + parent-boot-2 + com.baeldung + 0.0.1-SNAPSHOT + ../../parent-boot-2 + + + + + + + org.junit.jupiter + junit-jupiter-api + test + + + org.junit.jupiter + junit-jupiter-engine + test + + + + + org.junit.platform + junit-platform-launcher + ${junit-platform.version} + test + + + org.springframework.boot + spring-boot-starter-thymeleaf + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-data-jpa + + + org.ehcache + ehcache + + + org.hibernate + hibernate-ehcache + + + org.springframework.boot + spring-boot-starter-actuator + + + + com.graphql-java + graphql-spring-boot-starter + ${graphql-spring-boot-starter.version} + + + com.graphql-java + graphql-java-tools + ${graphql-java-tools.version} + + + com.graphql-java + graphiql-spring-boot-starter + ${graphiql-spring-boot-starter.version} + + + + org.springframework.boot + spring-boot-starter-tomcat + + + + org.springframework.boot + spring-boot-starter-test + test + + + + io.dropwizard.metrics + metrics-core + + + + com.h2database + h2 + + + + org.springframework.boot + spring-boot-starter + + + com.jayway.jsonpath + json-path + test + + + + com.google.guava + guava + ${guava.version} + + + + org.apache.tomcat + tomcat-servlet-api + ${tomee-servlet-api.version} + provided + + + + org.togglz + togglz-spring-boot-starter + ${togglz.version} + + + + org.togglz + togglz-spring-security + ${togglz.version} + + + + org.apache.activemq + artemis-server + + + + com.rometools + rome + ${rome.version} + + + + javax.validation + validation-api + + + + + spring-boot + + + src/main/resources + true + + + + + + + org.apache.maven.plugins + maven-war-plugin + + + + org.apache.maven.plugins + maven-resources-plugin + + + @ + + false + + + + + + + + + autoconfiguration + + + + org.apache.maven.plugins + maven-surefire-plugin + + + integration-test + + test + + + + **/*LiveTest.java + **/*IntegrationTest.java + **/*IntTest.java + + + **/AutoconfigurationTest.java + + + + + + + json + + + + + + + + + + + com.baeldung.intro.App + 8.5.11 + 2.4.1.Final + 1.9.0 + 5.0.2 + 5.0.2 + 5.2.4 + 18.0 + @ + + + From eeacffa08dcd0162793f21f8025fa558a71521e4 Mon Sep 17 00:00:00 2001 From: sampada Date: Tue, 11 Feb 2020 10:41:13 +0530 Subject: [PATCH 092/149] BAEL-15988 : all README files --- spring-boot-modules/spring-boot-artifacts/README.md | 2 ++ spring-boot-modules/spring-boot-autoconfiguration/README.md | 1 + spring-boot-modules/spring-boot-data/README.md | 1 + spring-boot-modules/spring-boot-performance/README.md | 1 + spring-boot-modules/spring-boot/README.MD | 5 ----- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/spring-boot-modules/spring-boot-artifacts/README.md b/spring-boot-modules/spring-boot-artifacts/README.md index 876954e858..cb77cfad4d 100644 --- a/spring-boot-modules/spring-boot-artifacts/README.md +++ b/spring-boot-modules/spring-boot-artifacts/README.md @@ -9,3 +9,5 @@ This module contains articles about configuring the Spring Boot build process. - [Introduction to WebJars](https://www.baeldung.com/maven-webjars) - [A Quick Guide to Maven Wrapper](https://www.baeldung.com/maven-wrapper) - [Running a Spring Boot App with Maven vs an Executable War/Jar](https://www.baeldung.com/spring-boot-run-maven-vs-executable-jar) + - [Injecting Git Information Into Spring](https://www.baeldung.com/spring-git-information) + - [Guide to Creating and Running a Jar File in Java](https://www.baeldung.com/java-create-jar) diff --git a/spring-boot-modules/spring-boot-autoconfiguration/README.md b/spring-boot-modules/spring-boot-autoconfiguration/README.md index b3a50ad7a5..d1b5fde7ed 100644 --- a/spring-boot-modules/spring-boot-autoconfiguration/README.md +++ b/spring-boot-modules/spring-boot-autoconfiguration/README.md @@ -10,3 +10,4 @@ The "REST With Spring" Classes: http://bit.ly/restwithspring - [Create a Custom Auto-Configuration with Spring Boot](https://www.baeldung.com/spring-boot-custom-auto-configuration) - [Guide to ApplicationContextRunner in Spring Boot](https://www.baeldung.com/spring-boot-context-runner) - [A Guide to Spring Boot Configuration Metadata](https://www.baeldung.com/spring-boot-configuration-metadata) +- [Display Auto-Configuration Report in Spring Boot](https://www.baeldung.com/spring-boot-auto-configuration-report) \ No newline at end of file diff --git a/spring-boot-modules/spring-boot-data/README.md b/spring-boot-modules/spring-boot-data/README.md index f023bb772f..faa38d475e 100644 --- a/spring-boot-modules/spring-boot-data/README.md +++ b/spring-boot-modules/spring-boot-data/README.md @@ -9,3 +9,4 @@ This module contains articles about Spring Boot with Spring Data - [Disable Spring Data Auto Configuration](https://www.baeldung.com/spring-data-disable-auto-config) - [Repositories with Multiple Spring Data Modules](https://www.baeldung.com/spring-multiple-data-modules) - [Spring Custom Property Editor](https://www.baeldung.com/spring-mvc-custom-property-editor) +- [Using @JsonComponent in Spring Boot](https://www.baeldung.com/spring-boot-jsoncomponent) diff --git a/spring-boot-modules/spring-boot-performance/README.md b/spring-boot-modules/spring-boot-performance/README.md index f6a11720de..9443e5bb19 100644 --- a/spring-boot-modules/spring-boot-performance/README.md +++ b/spring-boot-modules/spring-boot-performance/README.md @@ -5,3 +5,4 @@ This module contains articles about Spring Boot performance. ### Relevant Articles - [Lazy Initialization in Spring Boot 2](https://www.baeldung.com/spring-boot-lazy-initialization) +- [Introduction to Chaos Monkey](https://www.baeldung.com/spring-boot-chaos-monkey) diff --git a/spring-boot-modules/spring-boot/README.MD b/spring-boot-modules/spring-boot/README.MD index 2423d6d331..217d9e90b2 100644 --- a/spring-boot-modules/spring-boot/README.MD +++ b/spring-boot-modules/spring-boot/README.MD @@ -16,7 +16,6 @@ The "REST With Spring" Classes: http://bit.ly/restwithspring - [Create a Custom FailureAnalyzer with Spring Boot](https://www.baeldung.com/spring-boot-failure-analyzer) - [Dynamic DTO Validation Config Retrieved from the Database](https://www.baeldung.com/spring-dynamic-dto-validation) - [Custom Information in Spring Boot Info Endpoint](https://www.baeldung.com/spring-boot-info-actuator-custom) -- [Using @JsonComponent in Spring Boot](https://www.baeldung.com/spring-boot-jsoncomponent) - [Testing in Spring Boot](https://www.baeldung.com/spring-boot-testing) - [How to Get All Spring-Managed Beans?](https://www.baeldung.com/spring-show-all-beans) - [Spring Boot and Togglz Aspect](https://www.baeldung.com/spring-togglz) @@ -31,8 +30,4 @@ The "REST With Spring" Classes: http://bit.ly/restwithspring - [Guide to the Favicon in Spring Boot](https://www.baeldung.com/spring-boot-favicon) - [Spring Shutdown Callbacks](https://www.baeldung.com/spring-shutdown-callbacks) - [Container Configuration in Spring Boot 2](https://www.baeldung.com/embeddedservletcontainercustomizer-configurableembeddedservletcontainer-spring-boot) -- [Introduction to Chaos Monkey](https://www.baeldung.com/spring-boot-chaos-monkey) -- [Display Auto-Configuration Report in Spring Boot](https://www.baeldung.com/spring-boot-auto-configuration-report) -- [Injecting Git Information Into Spring](https://www.baeldung.com/spring-git-information) - [Validation in Spring Boot](https://www.baeldung.com/spring-boot-bean-validation) -- [Guide to Creating and Running a Jar File in Java](https://www.baeldung.com/java-create-jar) From 2cc05b370b789a378419941faab4a03af715acdd Mon Sep 17 00:00:00 2001 From: sampada Date: Tue, 11 Feb 2020 10:52:06 +0530 Subject: [PATCH 093/149] BAEL-15988 : Java file movement --- .../src/main/java/com/baeldung/git/CommitIdApplication.java | 0 .../src/main/java/com/baeldung/git/CommitInfoController.java | 0 .../src/test/java/com/baeldung/git/CommitIdIntegrationTest.java | 0 .../src/main/java/com}/baeldung/boot/jsoncomponent/User.java | 0 .../baeldung/boot/jsoncomponent/UserCombinedSerializer.java | 0 .../com}/baeldung/boot/jsoncomponent/UserJsonDeserializer.java | 0 .../com}/baeldung/boot/jsoncomponent/UserJsonSerializer.java | 0 .../boot/jsoncomponent/UserJsonDeserializerIntegrationTest.java | 0 .../boot/jsoncomponent/UserJsonSerializerIntegrationTest.java | 0 .../java/com/baeldung/chaosmonkey/SpringBootChaosMonkeyApp.java | 0 .../baeldung/chaosmonkey/controller/PermissionsController.java | 0 .../com/baeldung/chaosmonkey/service/PermissionsService.java | 0 .../spring-boot/src/main/java/com/baeldung/git/README.md | 2 -- 13 files changed, 2 deletions(-) rename spring-boot-modules/{spring-boot => spring-boot-artifacts}/src/main/java/com/baeldung/git/CommitIdApplication.java (100%) rename spring-boot-modules/{spring-boot => spring-boot-artifacts}/src/main/java/com/baeldung/git/CommitInfoController.java (100%) rename spring-boot-modules/{spring-boot => spring-boot-artifacts}/src/test/java/com/baeldung/git/CommitIdIntegrationTest.java (100%) rename spring-boot-modules/{spring-boot/src/main/java/org => spring-boot-data/src/main/java/com}/baeldung/boot/jsoncomponent/User.java (100%) rename spring-boot-modules/{spring-boot/src/main/java/org => spring-boot-data/src/main/java/com}/baeldung/boot/jsoncomponent/UserCombinedSerializer.java (100%) rename spring-boot-modules/{spring-boot/src/main/java/org => spring-boot-data/src/main/java/com}/baeldung/boot/jsoncomponent/UserJsonDeserializer.java (100%) rename spring-boot-modules/{spring-boot/src/main/java/org => spring-boot-data/src/main/java/com}/baeldung/boot/jsoncomponent/UserJsonSerializer.java (100%) rename spring-boot-modules/{spring-boot/src/test/java/org => spring-boot-data/src/test/java/com}/baeldung/boot/jsoncomponent/UserJsonDeserializerIntegrationTest.java (100%) rename spring-boot-modules/{spring-boot/src/test/java/org => spring-boot-data/src/test/java/com}/baeldung/boot/jsoncomponent/UserJsonSerializerIntegrationTest.java (100%) rename spring-boot-modules/{spring-boot => spring-boot-performance}/src/main/java/com/baeldung/chaosmonkey/SpringBootChaosMonkeyApp.java (100%) rename spring-boot-modules/{spring-boot => spring-boot-performance}/src/main/java/com/baeldung/chaosmonkey/controller/PermissionsController.java (100%) rename spring-boot-modules/{spring-boot => spring-boot-performance}/src/main/java/com/baeldung/chaosmonkey/service/PermissionsService.java (100%) delete mode 100644 spring-boot-modules/spring-boot/src/main/java/com/baeldung/git/README.md diff --git a/spring-boot-modules/spring-boot/src/main/java/com/baeldung/git/CommitIdApplication.java b/spring-boot-modules/spring-boot-artifacts/src/main/java/com/baeldung/git/CommitIdApplication.java similarity index 100% rename from spring-boot-modules/spring-boot/src/main/java/com/baeldung/git/CommitIdApplication.java rename to spring-boot-modules/spring-boot-artifacts/src/main/java/com/baeldung/git/CommitIdApplication.java diff --git a/spring-boot-modules/spring-boot/src/main/java/com/baeldung/git/CommitInfoController.java b/spring-boot-modules/spring-boot-artifacts/src/main/java/com/baeldung/git/CommitInfoController.java similarity index 100% rename from spring-boot-modules/spring-boot/src/main/java/com/baeldung/git/CommitInfoController.java rename to spring-boot-modules/spring-boot-artifacts/src/main/java/com/baeldung/git/CommitInfoController.java diff --git a/spring-boot-modules/spring-boot/src/test/java/com/baeldung/git/CommitIdIntegrationTest.java b/spring-boot-modules/spring-boot-artifacts/src/test/java/com/baeldung/git/CommitIdIntegrationTest.java similarity index 100% rename from spring-boot-modules/spring-boot/src/test/java/com/baeldung/git/CommitIdIntegrationTest.java rename to spring-boot-modules/spring-boot-artifacts/src/test/java/com/baeldung/git/CommitIdIntegrationTest.java diff --git a/spring-boot-modules/spring-boot/src/main/java/org/baeldung/boot/jsoncomponent/User.java b/spring-boot-modules/spring-boot-data/src/main/java/com/baeldung/boot/jsoncomponent/User.java similarity index 100% rename from spring-boot-modules/spring-boot/src/main/java/org/baeldung/boot/jsoncomponent/User.java rename to spring-boot-modules/spring-boot-data/src/main/java/com/baeldung/boot/jsoncomponent/User.java diff --git a/spring-boot-modules/spring-boot/src/main/java/org/baeldung/boot/jsoncomponent/UserCombinedSerializer.java b/spring-boot-modules/spring-boot-data/src/main/java/com/baeldung/boot/jsoncomponent/UserCombinedSerializer.java similarity index 100% rename from spring-boot-modules/spring-boot/src/main/java/org/baeldung/boot/jsoncomponent/UserCombinedSerializer.java rename to spring-boot-modules/spring-boot-data/src/main/java/com/baeldung/boot/jsoncomponent/UserCombinedSerializer.java diff --git a/spring-boot-modules/spring-boot/src/main/java/org/baeldung/boot/jsoncomponent/UserJsonDeserializer.java b/spring-boot-modules/spring-boot-data/src/main/java/com/baeldung/boot/jsoncomponent/UserJsonDeserializer.java similarity index 100% rename from spring-boot-modules/spring-boot/src/main/java/org/baeldung/boot/jsoncomponent/UserJsonDeserializer.java rename to spring-boot-modules/spring-boot-data/src/main/java/com/baeldung/boot/jsoncomponent/UserJsonDeserializer.java diff --git a/spring-boot-modules/spring-boot/src/main/java/org/baeldung/boot/jsoncomponent/UserJsonSerializer.java b/spring-boot-modules/spring-boot-data/src/main/java/com/baeldung/boot/jsoncomponent/UserJsonSerializer.java similarity index 100% rename from spring-boot-modules/spring-boot/src/main/java/org/baeldung/boot/jsoncomponent/UserJsonSerializer.java rename to spring-boot-modules/spring-boot-data/src/main/java/com/baeldung/boot/jsoncomponent/UserJsonSerializer.java diff --git a/spring-boot-modules/spring-boot/src/test/java/org/baeldung/boot/jsoncomponent/UserJsonDeserializerIntegrationTest.java b/spring-boot-modules/spring-boot-data/src/test/java/com/baeldung/boot/jsoncomponent/UserJsonDeserializerIntegrationTest.java similarity index 100% rename from spring-boot-modules/spring-boot/src/test/java/org/baeldung/boot/jsoncomponent/UserJsonDeserializerIntegrationTest.java rename to spring-boot-modules/spring-boot-data/src/test/java/com/baeldung/boot/jsoncomponent/UserJsonDeserializerIntegrationTest.java diff --git a/spring-boot-modules/spring-boot/src/test/java/org/baeldung/boot/jsoncomponent/UserJsonSerializerIntegrationTest.java b/spring-boot-modules/spring-boot-data/src/test/java/com/baeldung/boot/jsoncomponent/UserJsonSerializerIntegrationTest.java similarity index 100% rename from spring-boot-modules/spring-boot/src/test/java/org/baeldung/boot/jsoncomponent/UserJsonSerializerIntegrationTest.java rename to spring-boot-modules/spring-boot-data/src/test/java/com/baeldung/boot/jsoncomponent/UserJsonSerializerIntegrationTest.java diff --git a/spring-boot-modules/spring-boot/src/main/java/com/baeldung/chaosmonkey/SpringBootChaosMonkeyApp.java b/spring-boot-modules/spring-boot-performance/src/main/java/com/baeldung/chaosmonkey/SpringBootChaosMonkeyApp.java similarity index 100% rename from spring-boot-modules/spring-boot/src/main/java/com/baeldung/chaosmonkey/SpringBootChaosMonkeyApp.java rename to spring-boot-modules/spring-boot-performance/src/main/java/com/baeldung/chaosmonkey/SpringBootChaosMonkeyApp.java diff --git a/spring-boot-modules/spring-boot/src/main/java/com/baeldung/chaosmonkey/controller/PermissionsController.java b/spring-boot-modules/spring-boot-performance/src/main/java/com/baeldung/chaosmonkey/controller/PermissionsController.java similarity index 100% rename from spring-boot-modules/spring-boot/src/main/java/com/baeldung/chaosmonkey/controller/PermissionsController.java rename to spring-boot-modules/spring-boot-performance/src/main/java/com/baeldung/chaosmonkey/controller/PermissionsController.java diff --git a/spring-boot-modules/spring-boot/src/main/java/com/baeldung/chaosmonkey/service/PermissionsService.java b/spring-boot-modules/spring-boot-performance/src/main/java/com/baeldung/chaosmonkey/service/PermissionsService.java similarity index 100% rename from spring-boot-modules/spring-boot/src/main/java/com/baeldung/chaosmonkey/service/PermissionsService.java rename to spring-boot-modules/spring-boot-performance/src/main/java/com/baeldung/chaosmonkey/service/PermissionsService.java diff --git a/spring-boot-modules/spring-boot/src/main/java/com/baeldung/git/README.md b/spring-boot-modules/spring-boot/src/main/java/com/baeldung/git/README.md deleted file mode 100644 index 7e6a597c28..0000000000 --- a/spring-boot-modules/spring-boot/src/main/java/com/baeldung/git/README.md +++ /dev/null @@ -1,2 +0,0 @@ -### Relevant Articles: -- [Injecting Git Information Into Spring](http://www.baeldung.com/spring-git-information) From 93770e684a8994214bf016715054db3cd3c20c9e Mon Sep 17 00:00:00 2001 From: sampada Date: Tue, 11 Feb 2020 10:53:27 +0530 Subject: [PATCH 094/149] BAEL-15988 : application.properties changes --- .../src/main/resources/application.properties | 29 +++++++++++++++++ .../src/main/resources/application.properties | 32 +------------------ 2 files changed, 30 insertions(+), 31 deletions(-) create mode 100644 spring-boot-modules/spring-boot-performance/src/main/resources/application.properties diff --git a/spring-boot-modules/spring-boot-performance/src/main/resources/application.properties b/spring-boot-modules/spring-boot-performance/src/main/resources/application.properties new file mode 100644 index 0000000000..3727232ea6 --- /dev/null +++ b/spring-boot-modules/spring-boot-performance/src/main/resources/application.properties @@ -0,0 +1,29 @@ +#chaos monkey for spring boot props +management.endpoint.chaosmonkey.enabled=true +management.endpoint.chaosmonkeyjmx.enabled=true + +spring.profiles.active=chaos-monkey +#Determine whether should execute or not +chaos.monkey.enabled=true +#How many requests are to be attacked. 1: attack each request; 5: each 5th request is attacked +chaos.monkey.assaults.level=1 +#Minimum latency in ms added to the request +chaos.monkey.assaults.latencyRangeStart=3000 +#Maximum latency in ms added to the request +chaos.monkey.assaults.latencyRangeEnd=15000 +#Latency assault active +chaos.monkey.assaults.latencyActive=true +#Exception assault active +chaos.monkey.assaults.exceptionsActive=false +#AppKiller assault active +chaos.monkey.assaults.killApplicationActive=false +#Controller watcher active +chaos.monkey.watcher.controller=false +#RestController watcher active +chaos.monkey.watcher.restController=false +#Service watcher active +chaos.monkey.watcher.service=true +#Repository watcher active +chaos.monkey.watcher.repository=false +#Component watcher active +chaos.monkey.watcher.component=false diff --git a/spring-boot-modules/spring-boot/src/main/resources/application.properties b/spring-boot-modules/spring-boot/src/main/resources/application.properties index c322fb0573..7de79da574 100644 --- a/spring-boot-modules/spring-boot/src/main/resources/application.properties +++ b/spring-boot-modules/spring-boot/src/main/resources/application.properties @@ -41,34 +41,4 @@ servlet.mapping=/dispatcherExampleURL #spring.banner.image.margin= //TODO #spring.banner.image.invert= //TODO -contactInfoType=email - -#chaos monkey for spring boot props -management.endpoint.chaosmonkey.enabled=true -management.endpoint.chaosmonkeyjmx.enabled=true - -spring.profiles.active=chaos-monkey -#Determine whether should execute or not -chaos.monkey.enabled=true -#How many requests are to be attacked. 1: attack each request; 5: each 5th request is attacked -chaos.monkey.assaults.level=1 -#Minimum latency in ms added to the request -chaos.monkey.assaults.latencyRangeStart=3000 -#Maximum latency in ms added to the request -chaos.monkey.assaults.latencyRangeEnd=15000 -#Latency assault active -chaos.monkey.assaults.latencyActive=true -#Exception assault active -chaos.monkey.assaults.exceptionsActive=false -#AppKiller assault active -chaos.monkey.assaults.killApplicationActive=false -#Controller watcher active -chaos.monkey.watcher.controller=false -#RestController watcher active -chaos.monkey.watcher.restController=false -#Service watcher active -chaos.monkey.watcher.service=true -#Repository watcher active -chaos.monkey.watcher.repository=false -#Component watcher active -chaos.monkey.watcher.component=false +contactInfoType=email \ No newline at end of file From 0a1ee41825321a12652a3ade5204f7f50f10ba9b Mon Sep 17 00:00:00 2001 From: sampada Date: Tue, 11 Feb 2020 10:54:54 +0530 Subject: [PATCH 095/149] BAEL-15988 : package change from org.baeldung to com.baeldung --- .../src/main/java/com/baeldung/boot/jsoncomponent/User.java | 2 +- .../baeldung/boot/jsoncomponent/UserCombinedSerializer.java | 2 +- .../baeldung/boot/jsoncomponent/UserJsonDeserializer.java | 2 +- .../com/baeldung/boot/jsoncomponent/UserJsonSerializer.java | 2 +- .../jsoncomponent/UserJsonDeserializerIntegrationTest.java | 4 ++-- .../jsoncomponent/UserJsonSerializerIntegrationTest.java | 5 ++--- 6 files changed, 8 insertions(+), 9 deletions(-) diff --git a/spring-boot-modules/spring-boot-data/src/main/java/com/baeldung/boot/jsoncomponent/User.java b/spring-boot-modules/spring-boot-data/src/main/java/com/baeldung/boot/jsoncomponent/User.java index 1f14131300..ca22dc57ea 100644 --- a/spring-boot-modules/spring-boot-data/src/main/java/com/baeldung/boot/jsoncomponent/User.java +++ b/spring-boot-modules/spring-boot-data/src/main/java/com/baeldung/boot/jsoncomponent/User.java @@ -1,4 +1,4 @@ -package org.baeldung.boot.jsoncomponent; +package com.baeldung.boot.jsoncomponent; import javafx.scene.paint.Color; diff --git a/spring-boot-modules/spring-boot-data/src/main/java/com/baeldung/boot/jsoncomponent/UserCombinedSerializer.java b/spring-boot-modules/spring-boot-data/src/main/java/com/baeldung/boot/jsoncomponent/UserCombinedSerializer.java index f4d7505342..d0a14da1f2 100644 --- a/spring-boot-modules/spring-boot-data/src/main/java/com/baeldung/boot/jsoncomponent/UserCombinedSerializer.java +++ b/spring-boot-modules/spring-boot-data/src/main/java/com/baeldung/boot/jsoncomponent/UserCombinedSerializer.java @@ -1,4 +1,4 @@ -package org.baeldung.boot.jsoncomponent; +package com.baeldung.boot.jsoncomponent; import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.core.JsonParser; diff --git a/spring-boot-modules/spring-boot-data/src/main/java/com/baeldung/boot/jsoncomponent/UserJsonDeserializer.java b/spring-boot-modules/spring-boot-data/src/main/java/com/baeldung/boot/jsoncomponent/UserJsonDeserializer.java index f7bd822c8a..05b1cb10a0 100644 --- a/spring-boot-modules/spring-boot-data/src/main/java/com/baeldung/boot/jsoncomponent/UserJsonDeserializer.java +++ b/spring-boot-modules/spring-boot-data/src/main/java/com/baeldung/boot/jsoncomponent/UserJsonDeserializer.java @@ -1,4 +1,4 @@ -package org.baeldung.boot.jsoncomponent; +package com.baeldung.boot.jsoncomponent; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.JsonProcessingException; diff --git a/spring-boot-modules/spring-boot-data/src/main/java/com/baeldung/boot/jsoncomponent/UserJsonSerializer.java b/spring-boot-modules/spring-boot-data/src/main/java/com/baeldung/boot/jsoncomponent/UserJsonSerializer.java index 03330d81a4..1df37728ba 100644 --- a/spring-boot-modules/spring-boot-data/src/main/java/com/baeldung/boot/jsoncomponent/UserJsonSerializer.java +++ b/spring-boot-modules/spring-boot-data/src/main/java/com/baeldung/boot/jsoncomponent/UserJsonSerializer.java @@ -1,4 +1,4 @@ -package org.baeldung.boot.jsoncomponent; +package com.baeldung.boot.jsoncomponent; import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.core.JsonProcessingException; diff --git a/spring-boot-modules/spring-boot-data/src/test/java/com/baeldung/boot/jsoncomponent/UserJsonDeserializerIntegrationTest.java b/spring-boot-modules/spring-boot-data/src/test/java/com/baeldung/boot/jsoncomponent/UserJsonDeserializerIntegrationTest.java index f8b47a23fc..868d40c38b 100644 --- a/spring-boot-modules/spring-boot-data/src/test/java/com/baeldung/boot/jsoncomponent/UserJsonDeserializerIntegrationTest.java +++ b/spring-boot-modules/spring-boot-data/src/test/java/com/baeldung/boot/jsoncomponent/UserJsonDeserializerIntegrationTest.java @@ -1,9 +1,9 @@ -package org.baeldung.boot.jsoncomponent; +package com.baeldung.boot.jsoncomponent; +import com.baeldung.boot.jsoncomponent.User; import com.fasterxml.jackson.databind.ObjectMapper; import javafx.scene.paint.Color; -import org.baeldung.boot.jsoncomponent.User; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; diff --git a/spring-boot-modules/spring-boot-data/src/test/java/com/baeldung/boot/jsoncomponent/UserJsonSerializerIntegrationTest.java b/spring-boot-modules/spring-boot-data/src/test/java/com/baeldung/boot/jsoncomponent/UserJsonSerializerIntegrationTest.java index 060374e8fa..aef99921a5 100644 --- a/spring-boot-modules/spring-boot-data/src/test/java/com/baeldung/boot/jsoncomponent/UserJsonSerializerIntegrationTest.java +++ b/spring-boot-modules/spring-boot-data/src/test/java/com/baeldung/boot/jsoncomponent/UserJsonSerializerIntegrationTest.java @@ -1,5 +1,6 @@ -package org.baeldung.boot.jsoncomponent; +package com.baeldung.boot.jsoncomponent; +import com.baeldung.boot.jsoncomponent.User; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import javafx.scene.paint.Color; @@ -11,8 +12,6 @@ import org.springframework.test.context.junit4.SpringRunner; import static org.junit.Assert.assertEquals; -import org.baeldung.boot.jsoncomponent.User; - @JsonTest @RunWith(SpringRunner.class) public class UserJsonSerializerIntegrationTest { From b907d2cd6e50471929d8623b170720d7c48e69bc Mon Sep 17 00:00:00 2001 From: Anshul BANSAL Date: Tue, 11 Feb 2020 18:02:53 +0200 Subject: [PATCH 096/149] Review changes --- .../java/com/baeldung/jcabi/JcabiAspectJ.java | 62 +++++++++++++------ 1 file changed, 43 insertions(+), 19 deletions(-) diff --git a/jcabi/src/main/java/com/baeldung/jcabi/JcabiAspectJ.java b/jcabi/src/main/java/com/baeldung/jcabi/JcabiAspectJ.java index c88ad5a74d..6bd345c59c 100644 --- a/jcabi/src/main/java/com/baeldung/jcabi/JcabiAspectJ.java +++ b/jcabi/src/main/java/com/baeldung/jcabi/JcabiAspectJ.java @@ -1,6 +1,14 @@ package com.baeldung.jcabi; +import java.io.BufferedReader; +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLConnection; import java.util.concurrent.CompletableFuture; import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; @@ -9,7 +17,6 @@ import com.jcabi.aspects.Async; import com.jcabi.aspects.Cacheable; import com.jcabi.aspects.LogExceptions; import com.jcabi.aspects.Loggable; -import com.jcabi.aspects.Parallel; import com.jcabi.aspects.Quietly; import com.jcabi.aspects.RetryOnFailure; import com.jcabi.aspects.UnitedThrow; @@ -20,19 +27,24 @@ public class JcabiAspectJ { try { displayFactorial(10); getFactorial(10).get(); - - Double number = cacheRandomNumber(); - if (number != cacheRandomNumber()) { - System.out.println(number); + + String result = cacheExchangeRates(); + if (result != cacheExchangeRates()) { + System.out.println(result); } - + divideByZero(); } catch(Exception e) { e.printStackTrace(); } - + divideByZeroQuietly(); - parallelExecution(); + try { + processFile(); + } catch(Exception e) { + e.printStackTrace(); + } + } @Loggable @@ -41,14 +53,14 @@ public class JcabiAspectJ { long result = factorial(number); System.out.println(result); } - + @Loggable @Async public static Future getFactorial(int number) { Future factorialFuture = CompletableFuture.supplyAsync(() -> factorial(number)); return factorialFuture; } - + /** * Finds factorial of a number * @param number @@ -64,25 +76,37 @@ public class JcabiAspectJ { @Loggable @Cacheable(lifetime = 2, unit = TimeUnit.SECONDS) - public static Double cacheRandomNumber() { - return Math.random(); + public static String cacheExchangeRates() { + String result = null; + try { + URL exchangeRateUrl = new URL("https://api.exchangeratesapi.io/latest"); + URLConnection con = exchangeRateUrl.openConnection(); + BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream())); + result = in.readLine(); + } catch (IOException e) { + e.printStackTrace(); + } + return result; } - - @UnitedThrow(IllegalStateException.class) + @LogExceptions public static void divideByZero() { int x = 1/0; } - + @RetryOnFailure(attempts = 2, types = {java.lang.NumberFormatException.class}) @Quietly public static void divideByZeroQuietly() { int x = 1/0; } - - @Parallel(threads = 4) - public static void parallelExecution() { - System.out.println("Calling Parallel..."); + + @UnitedThrow(IllegalStateException.class) + public static void processFile() throws IOException, InterruptedException { + BufferedReader reader = new BufferedReader(new FileReader("baeldung.txt")); + reader.readLine(); + + Thread thread = new Thread(); + thread.wait(2000); } } From bde0c37075ad3831a27923f30f51cea88c9377bd Mon Sep 17 00:00:00 2001 From: Pazis Date: Tue, 11 Feb 2020 23:40:59 +0330 Subject: [PATCH 097/149] java.net.SocketException: Connection reset (#8707) * initial commit * fix --- .../socketexception/SocketClient.java | 32 +++++++++++++ .../socketexception/SocketServer.java | 45 +++++++++++++++++++ .../SocketExceptionHandlingUnitTest.java | 31 +++++++++++++ 3 files changed, 108 insertions(+) create mode 100644 core-java-modules/core-java-exceptions-2/src/main/java/com/baeldung/socketexception/SocketClient.java create mode 100644 core-java-modules/core-java-exceptions-2/src/main/java/com/baeldung/socketexception/SocketServer.java create mode 100644 core-java-modules/core-java-exceptions-2/src/test/java/com/baeldung/socketexception/SocketExceptionHandlingUnitTest.java diff --git a/core-java-modules/core-java-exceptions-2/src/main/java/com/baeldung/socketexception/SocketClient.java b/core-java-modules/core-java-exceptions-2/src/main/java/com/baeldung/socketexception/SocketClient.java new file mode 100644 index 0000000000..5c3596e890 --- /dev/null +++ b/core-java-modules/core-java-exceptions-2/src/main/java/com/baeldung/socketexception/SocketClient.java @@ -0,0 +1,32 @@ +package com.baeldung.socketexception; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.PrintWriter; +import java.net.Socket; + +public class SocketClient { + + private Socket clientSocket; + private PrintWriter out; + private BufferedReader in; + + public void startConnection(String ip, int port) throws IOException { + clientSocket = new Socket(ip, port); + out = new PrintWriter(clientSocket.getOutputStream(), true); + in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); + } + + public String sendMessage(String msg) throws IOException { + out.println(msg); + return in.readLine(); + } + + public void stopConnection() throws IOException { + in.close(); + out.close(); + clientSocket.close(); + } + +} diff --git a/core-java-modules/core-java-exceptions-2/src/main/java/com/baeldung/socketexception/SocketServer.java b/core-java-modules/core-java-exceptions-2/src/main/java/com/baeldung/socketexception/SocketServer.java new file mode 100644 index 0000000000..ad6fab738f --- /dev/null +++ b/core-java-modules/core-java-exceptions-2/src/main/java/com/baeldung/socketexception/SocketServer.java @@ -0,0 +1,45 @@ +package com.baeldung.socketexception; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.PrintWriter; +import java.net.ServerSocket; +import java.net.Socket; + +public class SocketServer { + + private ServerSocket serverSocket; + private Socket clientSocket; + private PrintWriter out; + private BufferedReader in; + + public void start(int port) { + try { + serverSocket = new ServerSocket(port); + clientSocket = serverSocket.accept(); + out = new PrintWriter(clientSocket.getOutputStream(), true); + in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); + String msg = in.readLine(); + if (msg.contains("hi")) + out.println("hi"); + else + out.println("didn't understand"); + close(); + stop(); + } catch (IOException e) { + + } + } + + private void close() throws IOException { + in.close(); + out.close(); + } + + private void stop() throws IOException { + clientSocket.close(); + serverSocket.close(); + } + +} diff --git a/core-java-modules/core-java-exceptions-2/src/test/java/com/baeldung/socketexception/SocketExceptionHandlingUnitTest.java b/core-java-modules/core-java-exceptions-2/src/test/java/com/baeldung/socketexception/SocketExceptionHandlingUnitTest.java new file mode 100644 index 0000000000..08b21c6299 --- /dev/null +++ b/core-java-modules/core-java-exceptions-2/src/test/java/com/baeldung/socketexception/SocketExceptionHandlingUnitTest.java @@ -0,0 +1,31 @@ +package com.baeldung.socketexception; + +import java.io.IOException; +import java.net.SocketException; +import java.util.concurrent.Executors; + +import org.junit.BeforeClass; +import org.junit.Test; + +public class SocketExceptionHandlingUnitTest { + + @BeforeClass + public static void runServer() throws IOException, InterruptedException { + Executors.newSingleThreadExecutor() + .submit(() -> new SocketServer().start(6699)); + Thread.sleep(100); + } + + @Test + public void givenRunningServer_whenConnectToClosedSocket_thenHandleException() throws IOException { + SocketClient client = new SocketClient(); + client.startConnection("127.0.0.1", 6699); + try { + client.sendMessage("hi"); + client.sendMessage("hi again"); + } catch (SocketException e) { + client.stopConnection(); + } + } + +} From 3e23e57cb74195eab39cdcd13418def2022742df Mon Sep 17 00:00:00 2001 From: Gang Wu Date: Tue, 11 Feb 2020 22:13:56 -0700 Subject: [PATCH 098/149] BAEL-3657 Move the unit test to the merge package --- .../baeldung/poi/excel/{ => merge}/ExcelCellMergerUnitTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename apache-poi/src/test/java/com/baeldung/poi/excel/{ => merge}/ExcelCellMergerUnitTest.java (97%) diff --git a/apache-poi/src/test/java/com/baeldung/poi/excel/ExcelCellMergerUnitTest.java b/apache-poi/src/test/java/com/baeldung/poi/excel/merge/ExcelCellMergerUnitTest.java similarity index 97% rename from apache-poi/src/test/java/com/baeldung/poi/excel/ExcelCellMergerUnitTest.java rename to apache-poi/src/test/java/com/baeldung/poi/excel/merge/ExcelCellMergerUnitTest.java index f6af2b8576..911d368f77 100644 --- a/apache-poi/src/test/java/com/baeldung/poi/excel/ExcelCellMergerUnitTest.java +++ b/apache-poi/src/test/java/com/baeldung/poi/excel/merge/ExcelCellMergerUnitTest.java @@ -1,4 +1,4 @@ -package com.baeldung.poi.excel; +package com.baeldung.poi.excel.merge; import static org.junit.Assert.assertEquals; From 125c07509d1b11aa234e7370b08060b2ed0dda95 Mon Sep 17 00:00:00 2001 From: Dhrubajyoti Bhattacharjee <35187462+cornercoding@users.noreply.github.com> Date: Wed, 12 Feb 2020 12:41:05 +0100 Subject: [PATCH 099/149] BAEL-2980 Getting started with CRaSH (#8684) --- spring-mvc-xml/pom.xml | 27 ++++++++ .../WEB-INF/crash/commands/message.groovy | 14 ++++ .../WEB-INF/crash/commands/message2.java | 14 ++++ .../webapp/WEB-INF/crash/crash.properties | 1 + .../webapp/WEB-INF/crash/telnet.properties | 65 +++++++++++++++++++ .../src/main/webapp/WEB-INF/mvc-servlet.xml | 11 ++++ .../src/main/webapp/WEB-INF/web.xml | 3 + 7 files changed, 135 insertions(+) create mode 100644 spring-mvc-xml/src/main/webapp/WEB-INF/crash/commands/message.groovy create mode 100644 spring-mvc-xml/src/main/webapp/WEB-INF/crash/commands/message2.java create mode 100644 spring-mvc-xml/src/main/webapp/WEB-INF/crash/crash.properties create mode 100644 spring-mvc-xml/src/main/webapp/WEB-INF/crash/telnet.properties diff --git a/spring-mvc-xml/pom.xml b/spring-mvc-xml/pom.xml index e93b426119..c389e41e29 100644 --- a/spring-mvc-xml/pom.xml +++ b/spring-mvc-xml/pom.xml @@ -92,6 +92,30 @@ ${spring-boot.version} test + + + + org.crashub + crash.embed.spring + ${crash.version} + + + org.crashub + crash.cli + ${crash.version} + + + org.crashub + crash.connectors.telnet + ${crash.version} + + + + + org.codehaus.groovy + groovy + ${groovy.version} + @@ -137,6 +161,9 @@ 1.6.1 + + 1.3.2 + 3.0.0-rc-3 diff --git a/spring-mvc-xml/src/main/webapp/WEB-INF/crash/commands/message.groovy b/spring-mvc-xml/src/main/webapp/WEB-INF/crash/commands/message.groovy new file mode 100644 index 0000000000..d66ab13d96 --- /dev/null +++ b/spring-mvc-xml/src/main/webapp/WEB-INF/crash/commands/message.groovy @@ -0,0 +1,14 @@ +import org.crsh.cli.Command; +import org.crsh.cli.Usage; +import org.crsh.cli.Option; + +class message { + + @Usage("show my own message") + @Command + Object main(@Usage("custom message") @Option(names=["m","message"]) String message) { + if (message == null) + message = "No message given..."; + return message; + } +} \ No newline at end of file diff --git a/spring-mvc-xml/src/main/webapp/WEB-INF/crash/commands/message2.java b/spring-mvc-xml/src/main/webapp/WEB-INF/crash/commands/message2.java new file mode 100644 index 0000000000..d1ead88024 --- /dev/null +++ b/spring-mvc-xml/src/main/webapp/WEB-INF/crash/commands/message2.java @@ -0,0 +1,14 @@ +import org.crsh.command.BaseCommand; +import org.crsh.cli.Usage; +import org.crsh.cli.Command; +import org.crsh.cli.Option; + +public class message2 extends BaseCommand { + @Usage("show my own message using java") + @Command + public Object main(@Usage("custom message") @Option(names = { "m", "message" }) String message) { + if (message == null) + message = "No message given..."; + return message; + } +} \ No newline at end of file diff --git a/spring-mvc-xml/src/main/webapp/WEB-INF/crash/crash.properties b/spring-mvc-xml/src/main/webapp/WEB-INF/crash/crash.properties new file mode 100644 index 0000000000..f9ad0d7cf6 --- /dev/null +++ b/spring-mvc-xml/src/main/webapp/WEB-INF/crash/crash.properties @@ -0,0 +1 @@ +crash.telnet.port=50001 diff --git a/spring-mvc-xml/src/main/webapp/WEB-INF/crash/telnet.properties b/spring-mvc-xml/src/main/webapp/WEB-INF/crash/telnet.properties new file mode 100644 index 0000000000..99071d09ff --- /dev/null +++ b/spring-mvc-xml/src/main/webapp/WEB-INF/crash/telnet.properties @@ -0,0 +1,65 @@ +############################ +# Telnet daemon properties # +############################ + +##################### +# Terminals Section # +##################### + +# List of terminals available and defined below +terminals=vt100,ansi,windoof,xterm + +# vt100 implementation and aliases +term.vt100.class=net.wimpi.telnetd.io.terminal.vt100 +term.vt100.aliases=default,vt100-am,vt102,dec-vt100 + +# ansi implementation and aliases +term.ansi.class=net.wimpi.telnetd.io.terminal.ansi +term.ansi.aliases=color-xterm,xterm-color,vt320,vt220,linux,screen + +# windoof implementation and aliases +term.windoof.class=net.wimpi.telnetd.io.terminal.Windoof +term.windoof.aliases= + +# xterm implementation and aliases +term.xterm.class=net.wimpi.telnetd.io.terminal.xterm +term.xterm.aliases= + +################## +# Shells Section # +################## + +# List of shells available and defined below +shells=simple + +# shell implementations +shell.simple.class=org.crsh.telnet.term.TelnetHandler + +##################### +# Listeners Section # +##################### +listeners=std + + +# std listener specific properties + +#Basic listener and connection management settings (port is commented because CRaSH configures it) +# std.port=5000 +std.floodprotection=5 +std.maxcon=25 + + +# Timeout Settings for connections (ms) +std.time_to_warning=3600000 +std.time_to_timedout=60000 + +# Housekeeping thread active every 1 secs +std.housekeepinginterval=1000 + +std.inputmode=character + +# Login shell +std.loginshell=simple + +# Connection filter class +std.connectionfilter=none \ No newline at end of file diff --git a/spring-mvc-xml/src/main/webapp/WEB-INF/mvc-servlet.xml b/spring-mvc-xml/src/main/webapp/WEB-INF/mvc-servlet.xml index 5c8fa611ed..126fea996e 100644 --- a/spring-mvc-xml/src/main/webapp/WEB-INF/mvc-servlet.xml +++ b/spring-mvc-xml/src/main/webapp/WEB-INF/mvc-servlet.xml @@ -52,4 +52,15 @@ + + + + + + 5000 + + + diff --git a/spring-mvc-xml/src/main/webapp/WEB-INF/web.xml b/spring-mvc-xml/src/main/webapp/WEB-INF/web.xml index 6ff435b84b..4a3d6cb321 100644 --- a/spring-mvc-xml/src/main/webapp/WEB-INF/web.xml +++ b/spring-mvc-xml/src/main/webapp/WEB-INF/web.xml @@ -21,6 +21,9 @@ org.springframework.web.context.ContextLoaderListener + + org.crsh.plugin.WebPluginLifeCycle + From 61787725fa92f268162f7ba5b11a086d336ec760 Mon Sep 17 00:00:00 2001 From: Tapan Avasthi Date: Wed, 12 Feb 2020 23:28:12 +0530 Subject: [PATCH 100/149] Resolve Redis Client Connection Issue in Integration Test - Resolves a race condition where a client instance is closed before it can be used by another test --- .../java/com/baeldung/redis_scan/client/RedisClient.java | 5 +++++ .../baeldung/redis_scan/NaiveApproachIntegrationTest.java | 5 +++-- .../com/baeldung/redis_scan/ScanStrategyIntegrationTest.java | 5 +++-- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/persistence-modules/redis/src/main/java/com/baeldung/redis_scan/client/RedisClient.java b/persistence-modules/redis/src/main/java/com/baeldung/redis_scan/client/RedisClient.java index 2fe7a787e0..72ff42ff74 100644 --- a/persistence-modules/redis/src/main/java/com/baeldung/redis_scan/client/RedisClient.java +++ b/persistence-modules/redis/src/main/java/com/baeldung/redis_scan/client/RedisClient.java @@ -145,5 +145,10 @@ public class RedisClient { log.error("Exception caught in flushAll", ex); } } + + public void destroyInstance() { + jedisPool = null; + instance = null; + } } diff --git a/persistence-modules/redis/src/test/java/com/baeldung/redis_scan/NaiveApproachIntegrationTest.java b/persistence-modules/redis/src/test/java/com/baeldung/redis_scan/NaiveApproachIntegrationTest.java index c24b88e20c..9bf0b2b086 100644 --- a/persistence-modules/redis/src/test/java/com/baeldung/redis_scan/NaiveApproachIntegrationTest.java +++ b/persistence-modules/redis/src/test/java/com/baeldung/redis_scan/NaiveApproachIntegrationTest.java @@ -25,13 +25,14 @@ public class NaiveApproachIntegrationTest { s.close(); redisServer = new RedisServer(port); - redisServer.start(); } @AfterClass public static void destroy() { - if (redisServer.isActive()) + if (redisServer.isActive()) { redisServer.stop(); + redisClient.destroyInstance(); + } } @Before diff --git a/persistence-modules/redis/src/test/java/com/baeldung/redis_scan/ScanStrategyIntegrationTest.java b/persistence-modules/redis/src/test/java/com/baeldung/redis_scan/ScanStrategyIntegrationTest.java index 828b7a3183..9bde969b58 100644 --- a/persistence-modules/redis/src/test/java/com/baeldung/redis_scan/ScanStrategyIntegrationTest.java +++ b/persistence-modules/redis/src/test/java/com/baeldung/redis_scan/ScanStrategyIntegrationTest.java @@ -32,13 +32,14 @@ public class ScanStrategyIntegrationTest { s.close(); redisServer = new RedisServer(port); - redisServer.start(); } @AfterClass public static void destroy() { - if (redisServer.isActive()) + if (redisServer.isActive()) { redisServer.stop(); + redisClient.destroyInstance(); + } } @Before From 09830d27d1aac82943a101e6155572e473e36d8e Mon Sep 17 00:00:00 2001 From: Krzysiek Date: Wed, 12 Feb 2020 19:42:38 +0100 Subject: [PATCH 101/149] JAVA-142: Migrate spring-data-solr to com.baeldung --- persistence-modules/spring-data-solr/README.md | 2 +- .../src/test/java/{org => com}/baeldung/SpringContextTest.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename persistence-modules/spring-data-solr/src/test/java/{org => com}/baeldung/SpringContextTest.java (95%) diff --git a/persistence-modules/spring-data-solr/README.md b/persistence-modules/spring-data-solr/README.md index c282fd2ce7..3d58d2d44c 100644 --- a/persistence-modules/spring-data-solr/README.md +++ b/persistence-modules/spring-data-solr/README.md @@ -3,4 +3,4 @@ This module contains articles about Spring Data with Solr. ### Relevant Articles: -- [Introduction to Spring Data Solr](http://www.baeldung.com/spring-data-solr) +- [Introduction to Spring Data Solr](https://www.baeldung.com/spring-data-solr) diff --git a/persistence-modules/spring-data-solr/src/test/java/org/baeldung/SpringContextTest.java b/persistence-modules/spring-data-solr/src/test/java/com/baeldung/SpringContextTest.java similarity index 95% rename from persistence-modules/spring-data-solr/src/test/java/org/baeldung/SpringContextTest.java rename to persistence-modules/spring-data-solr/src/test/java/com/baeldung/SpringContextTest.java index 09bf0255a0..f445a550a3 100644 --- a/persistence-modules/spring-data-solr/src/test/java/org/baeldung/SpringContextTest.java +++ b/persistence-modules/spring-data-solr/src/test/java/com/baeldung/SpringContextTest.java @@ -1,4 +1,4 @@ -package org.baeldung; +package com.baeldung; import org.junit.Test; import org.junit.runner.RunWith; From 9ce30c3e78c95cf133fc9f2f902a8fd413fc4812 Mon Sep 17 00:00:00 2001 From: Krzysiek Date: Wed, 12 Feb 2020 19:55:28 +0100 Subject: [PATCH 102/149] JAVA-142: Migrate spring-data-redis to com.baeldung --- persistence-modules/spring-data-redis/README.md | 4 ++-- .../test/java/{org => com}/baeldung/SpringContextTest.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) rename persistence-modules/spring-data-redis/src/test/java/{org => com}/baeldung/SpringContextTest.java (95%) diff --git a/persistence-modules/spring-data-redis/README.md b/persistence-modules/spring-data-redis/README.md index a20f5052f0..e4a528ae91 100644 --- a/persistence-modules/spring-data-redis/README.md +++ b/persistence-modules/spring-data-redis/README.md @@ -1,8 +1,8 @@ ## Spring Data Redis ### Relevant Articles: -- [Introduction to Spring Data Redis](http://www.baeldung.com/spring-data-redis-tutorial) -- [PubSub Messaging with Spring Data Redis](http://www.baeldung.com/spring-data-redis-pub-sub) +- [Introduction to Spring Data Redis](https://www.baeldung.com/spring-data-redis-tutorial) +- [PubSub Messaging with Spring Data Redis](https://www.baeldung.com/spring-data-redis-pub-sub) - [An Introduction to Spring Data Redis Reactive](https://www.baeldung.com/spring-data-redis-reactive) ### Build the Project with Tests Running diff --git a/persistence-modules/spring-data-redis/src/test/java/org/baeldung/SpringContextTest.java b/persistence-modules/spring-data-redis/src/test/java/com/baeldung/SpringContextTest.java similarity index 95% rename from persistence-modules/spring-data-redis/src/test/java/org/baeldung/SpringContextTest.java rename to persistence-modules/spring-data-redis/src/test/java/com/baeldung/SpringContextTest.java index 6652345595..4df0cbd0ad 100644 --- a/persistence-modules/spring-data-redis/src/test/java/org/baeldung/SpringContextTest.java +++ b/persistence-modules/spring-data-redis/src/test/java/com/baeldung/SpringContextTest.java @@ -1,4 +1,4 @@ -package org.baeldung; +package com.baeldung; import org.junit.Test; import org.junit.runner.RunWith; From adc5675c617c17c7f93b31ac1a891f5891bf4e41 Mon Sep 17 00:00:00 2001 From: Krzysiek Date: Wed, 12 Feb 2020 20:00:25 +0100 Subject: [PATCH 103/149] JAVA-142: Migrate spring-data-keyvalue to com.baeldung --- persistence-modules/spring-data-keyvalue/README.md | 2 +- .../src/test/java/{org => com}/baeldung/SpringContextTest.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename persistence-modules/spring-data-keyvalue/src/test/java/{org => com}/baeldung/SpringContextTest.java (95%) diff --git a/persistence-modules/spring-data-keyvalue/README.md b/persistence-modules/spring-data-keyvalue/README.md index 9f53a11b2c..93cde8ce93 100644 --- a/persistence-modules/spring-data-keyvalue/README.md +++ b/persistence-modules/spring-data-keyvalue/README.md @@ -3,4 +3,4 @@ This module contains articles about Spring Data Key-Value ### Relevant Articles: -- [A Guide to Spring Data Key Value](http://www.baeldung.com/spring-data-key-value) +- [A Guide to Spring Data Key Value](https://www.baeldung.com/spring-data-key-value) diff --git a/persistence-modules/spring-data-keyvalue/src/test/java/org/baeldung/SpringContextTest.java b/persistence-modules/spring-data-keyvalue/src/test/java/com/baeldung/SpringContextTest.java similarity index 95% rename from persistence-modules/spring-data-keyvalue/src/test/java/org/baeldung/SpringContextTest.java rename to persistence-modules/spring-data-keyvalue/src/test/java/com/baeldung/SpringContextTest.java index e6cc5c15af..aca177d1a7 100644 --- a/persistence-modules/spring-data-keyvalue/src/test/java/org/baeldung/SpringContextTest.java +++ b/persistence-modules/spring-data-keyvalue/src/test/java/com/baeldung/SpringContextTest.java @@ -1,4 +1,4 @@ -package org.baeldung; +package com.baeldung; import org.junit.Test; import org.junit.runner.RunWith; From e12be0bd59d22bd5ba056860e09ab8f22e665c77 Mon Sep 17 00:00:00 2001 From: Krzysiek Date: Wed, 12 Feb 2020 20:08:11 +0100 Subject: [PATCH 104/149] JAVA-142: Migrate spring-data-neo4j to com.baeldung --- persistence-modules/spring-data-neo4j/README.md | 4 ++-- .../test/java/{org => com}/baeldung/SpringContextTest.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) rename persistence-modules/spring-data-neo4j/src/test/java/{org => com}/baeldung/SpringContextTest.java (96%) diff --git a/persistence-modules/spring-data-neo4j/README.md b/persistence-modules/spring-data-neo4j/README.md index 03c9ed333d..dc54de0e31 100644 --- a/persistence-modules/spring-data-neo4j/README.md +++ b/persistence-modules/spring-data-neo4j/README.md @@ -1,8 +1,8 @@ ## Spring Data Neo4j ### Relevant Articles: -- [Introduction to Spring Data Neo4j](http://www.baeldung.com/spring-data-neo4j-intro) -- [A Guide to Neo4J with Java](http://www.baeldung.com/java-neo4j) +- [Introduction to Spring Data Neo4j](https://www.baeldung.com/spring-data-neo4j-intro) +- [A Guide to Neo4J with Java](https://www.baeldung.com/java-neo4j) ### Build the Project with Tests Running ``` diff --git a/persistence-modules/spring-data-neo4j/src/test/java/org/baeldung/SpringContextTest.java b/persistence-modules/spring-data-neo4j/src/test/java/com/baeldung/SpringContextTest.java similarity index 96% rename from persistence-modules/spring-data-neo4j/src/test/java/org/baeldung/SpringContextTest.java rename to persistence-modules/spring-data-neo4j/src/test/java/com/baeldung/SpringContextTest.java index 5bf54fc0bd..7029905c49 100644 --- a/persistence-modules/spring-data-neo4j/src/test/java/org/baeldung/SpringContextTest.java +++ b/persistence-modules/spring-data-neo4j/src/test/java/com/baeldung/SpringContextTest.java @@ -1,4 +1,4 @@ -package org.baeldung; +package com.baeldung; import org.junit.Test; import org.junit.runner.RunWith; From 17f756e939a129785eb59f3627ecc4297a37f593 Mon Sep 17 00:00:00 2001 From: Krzysiek Date: Wed, 12 Feb 2020 20:10:26 +0100 Subject: [PATCH 105/149] JAVA-142: Migrate spring-data-jpa to com.baeldung --- .../src/test/java/{org => com}/baeldung/SpringContextTest.java | 2 +- .../{org => com}/baeldung/SpringJpaContextIntegrationTest.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename persistence-modules/spring-data-jpa/src/test/java/{org => com}/baeldung/SpringContextTest.java (94%) rename persistence-modules/spring-data-jpa/src/test/java/{org => com}/baeldung/SpringJpaContextIntegrationTest.java (97%) diff --git a/persistence-modules/spring-data-jpa/src/test/java/org/baeldung/SpringContextTest.java b/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/SpringContextTest.java similarity index 94% rename from persistence-modules/spring-data-jpa/src/test/java/org/baeldung/SpringContextTest.java rename to persistence-modules/spring-data-jpa/src/test/java/com/baeldung/SpringContextTest.java index db7b156415..eaccf4acba 100644 --- a/persistence-modules/spring-data-jpa/src/test/java/org/baeldung/SpringContextTest.java +++ b/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/SpringContextTest.java @@ -1,4 +1,4 @@ -package org.baeldung; +package com.baeldung; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/persistence-modules/spring-data-jpa/src/test/java/org/baeldung/SpringJpaContextIntegrationTest.java b/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/SpringJpaContextIntegrationTest.java similarity index 97% rename from persistence-modules/spring-data-jpa/src/test/java/org/baeldung/SpringJpaContextIntegrationTest.java rename to persistence-modules/spring-data-jpa/src/test/java/com/baeldung/SpringJpaContextIntegrationTest.java index 4a36407884..f3697bf39f 100644 --- a/persistence-modules/spring-data-jpa/src/test/java/org/baeldung/SpringJpaContextIntegrationTest.java +++ b/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/SpringJpaContextIntegrationTest.java @@ -1,4 +1,4 @@ -package org.baeldung; +package com.baeldung; import org.junit.Test; import org.junit.runner.RunWith; From fe09718224dcdbb8505b0a2b35df9e1b3a34b35c Mon Sep 17 00:00:00 2001 From: Krzysiek Date: Wed, 12 Feb 2020 20:13:10 +0100 Subject: [PATCH 106/149] JAVA-142: Migrate spring-data-gemfire to com.baeldung --- persistence-modules/spring-data-gemfire/README.md | 2 +- .../src/test/java/{org => com}/baeldung/SpringContextTest.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename persistence-modules/spring-data-gemfire/src/test/java/{org => com}/baeldung/SpringContextTest.java (96%) diff --git a/persistence-modules/spring-data-gemfire/README.md b/persistence-modules/spring-data-gemfire/README.md index 78199e90d0..4eb28c1678 100644 --- a/persistence-modules/spring-data-gemfire/README.md +++ b/persistence-modules/spring-data-gemfire/README.md @@ -1,3 +1,3 @@ ### Relevant articles -- [A Guide to GemFire with Spring Data](http://www.baeldung.com/spring-data-gemfire) +- [A Guide to GemFire with Spring Data](https://www.baeldung.com/spring-data-gemfire) diff --git a/persistence-modules/spring-data-gemfire/src/test/java/org/baeldung/SpringContextTest.java b/persistence-modules/spring-data-gemfire/src/test/java/com/baeldung/SpringContextTest.java similarity index 96% rename from persistence-modules/spring-data-gemfire/src/test/java/org/baeldung/SpringContextTest.java rename to persistence-modules/spring-data-gemfire/src/test/java/com/baeldung/SpringContextTest.java index 3772e22137..53ab8800d9 100644 --- a/persistence-modules/spring-data-gemfire/src/test/java/org/baeldung/SpringContextTest.java +++ b/persistence-modules/spring-data-gemfire/src/test/java/com/baeldung/SpringContextTest.java @@ -1,4 +1,4 @@ -package org.baeldung; +package com.baeldung; import org.junit.Test; import org.junit.runner.RunWith; From a372b7b2e6f5e80c963b3f809cff0b2c7bf146b3 Mon Sep 17 00:00:00 2001 From: Krzysiek Date: Wed, 12 Feb 2020 20:15:43 +0100 Subject: [PATCH 107/149] JAVA-142: Migrate spring-data-elasticsearch to com.baeldung --- .../spring-data-elasticsearch/README.md | 10 +++++----- .../{org => com}/baeldung/SpringContextManualTest.java | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) rename persistence-modules/spring-data-elasticsearch/src/test/java/{org => com}/baeldung/SpringContextManualTest.java (96%) diff --git a/persistence-modules/spring-data-elasticsearch/README.md b/persistence-modules/spring-data-elasticsearch/README.md index 840db617f6..22126c2f00 100644 --- a/persistence-modules/spring-data-elasticsearch/README.md +++ b/persistence-modules/spring-data-elasticsearch/README.md @@ -1,11 +1,11 @@ ## Spring Data Elasticsearch ### Relevant Articles: -- [Introduction to Spring Data Elasticsearch](http://www.baeldung.com/spring-data-elasticsearch-tutorial) -- [Elasticsearch Queries with Spring Data](http://www.baeldung.com/spring-data-elasticsearch-queries) -- [Guide to Elasticsearch in Java](http://www.baeldung.com/elasticsearch-java) -- [Geospatial Support in ElasticSearch](http://www.baeldung.com/elasticsearch-geo-spatial) -- [A Simple Tagging Implementation with Elasticsearch](http://www.baeldung.com/elasticsearch-tagging) +- [Introduction to Spring Data Elasticsearch](https://www.baeldung.com/spring-data-elasticsearch-tutorial) +- [Elasticsearch Queries with Spring Data](https://www.baeldung.com/spring-data-elasticsearch-queries) +- [Guide to Elasticsearch in Java](https://www.baeldung.com/elasticsearch-java) +- [Geospatial Support in ElasticSearch](https://www.baeldung.com/elasticsearch-geo-spatial) +- [A Simple Tagging Implementation with Elasticsearch](https://www.baeldung.com/elasticsearch-tagging) ### Build the Project with Tests Running ``` diff --git a/persistence-modules/spring-data-elasticsearch/src/test/java/org/baeldung/SpringContextManualTest.java b/persistence-modules/spring-data-elasticsearch/src/test/java/com/baeldung/SpringContextManualTest.java similarity index 96% rename from persistence-modules/spring-data-elasticsearch/src/test/java/org/baeldung/SpringContextManualTest.java rename to persistence-modules/spring-data-elasticsearch/src/test/java/com/baeldung/SpringContextManualTest.java index c6f095eae9..c69deeb77c 100644 --- a/persistence-modules/spring-data-elasticsearch/src/test/java/org/baeldung/SpringContextManualTest.java +++ b/persistence-modules/spring-data-elasticsearch/src/test/java/com/baeldung/SpringContextManualTest.java @@ -1,4 +1,4 @@ -package org.baeldung; +package com.baeldung; import org.junit.Test; import org.junit.runner.RunWith; From f2e0a7521cf68943f9be6168a1f83f3629a5a984 Mon Sep 17 00:00:00 2001 From: Krzysiek Date: Wed, 12 Feb 2020 20:20:32 +0100 Subject: [PATCH 108/149] JAVA-142: Migrate spring-data-eclipselink to com.baeldung --- persistence-modules/spring-data-eclipselink/README.md | 2 +- .../src/test/java/{org => com}/baeldung/SpringContextTest.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename persistence-modules/spring-data-eclipselink/src/test/java/{org => com}/baeldung/SpringContextTest.java (95%) diff --git a/persistence-modules/spring-data-eclipselink/README.md b/persistence-modules/spring-data-eclipselink/README.md index 3bad63d7ef..2056031c45 100644 --- a/persistence-modules/spring-data-eclipselink/README.md +++ b/persistence-modules/spring-data-eclipselink/README.md @@ -4,5 +4,5 @@ This module contains articles about Spring Data with EclipseLink. ### Relevant articles -- [A Guide to EclipseLink with Spring](http://www.baeldung.com/spring-eclipselink) +- [A Guide to EclipseLink with Spring](https://www.baeldung.com/spring-eclipselink) - [Pessimistic Locking in JPA](https://www.baeldung.com/jpa-pessimistic-locking) diff --git a/persistence-modules/spring-data-eclipselink/src/test/java/org/baeldung/SpringContextTest.java b/persistence-modules/spring-data-eclipselink/src/test/java/com/baeldung/SpringContextTest.java similarity index 95% rename from persistence-modules/spring-data-eclipselink/src/test/java/org/baeldung/SpringContextTest.java rename to persistence-modules/spring-data-eclipselink/src/test/java/com/baeldung/SpringContextTest.java index 4c69245f65..842c61ffbd 100644 --- a/persistence-modules/spring-data-eclipselink/src/test/java/org/baeldung/SpringContextTest.java +++ b/persistence-modules/spring-data-eclipselink/src/test/java/com/baeldung/SpringContextTest.java @@ -1,4 +1,4 @@ -package org.baeldung; +package com.baeldung; import org.junit.Test; import org.junit.runner.RunWith; From f42ae77086ae1a8f2e34fd9d7fe71f4236d3ef7d Mon Sep 17 00:00:00 2001 From: Krzysiek Date: Wed, 12 Feb 2020 20:43:47 +0100 Subject: [PATCH 109/149] JAVA-142: Migrate spring-data-couchbase-2 to com.baeldung --- .../spring-data-couchbase-2/README.md | 14 +++++++------- .../spring-data-couchbase-2/pom.xml | 2 +- .../spring/data/couchbase/model/Campus.java | 2 +- .../spring/data/couchbase/model/Person.java | 2 +- .../spring/data/couchbase/model/Student.java | 2 +- .../couchbase/repos/CustomStudentRepository.java | 4 ++-- .../repos/CustomStudentRepositoryImpl.java | 4 ++-- .../data/couchbase/repos/PersonRepository.java | 4 ++-- .../data/couchbase/repos/StudentRepository.java | 4 ++-- .../couchbase/service/PersonRepositoryService.java | 6 +++--- .../data/couchbase/service/PersonService.java | 4 ++-- .../couchbase/service/PersonTemplateService.java | 4 ++-- .../service/StudentRepositoryService.java | 6 +++--- .../data/couchbase/service/StudentService.java | 4 ++-- .../couchbase/service/StudentTemplateService.java | 4 ++-- .../data/couchbase2b/repos/CampusRepository.java | 4 ++-- .../data/couchbase2b/repos/PersonRepository.java | 4 ++-- .../data/couchbase2b/repos/StudentRepository.java | 4 ++-- .../data/couchbase2b/service/CampusService.java | 4 ++-- .../couchbase2b/service/CampusServiceImpl.java | 6 +++--- .../data/couchbase2b/service/PersonService.java | 4 ++-- .../couchbase2b/service/PersonServiceImpl.java | 6 +++--- .../data/couchbase2b/service/StudentService.java | 4 ++-- .../couchbase2b/service/StudentServiceImpl.java | 6 +++--- .../baeldung/SpringContextLiveTest.java | 12 ++++++------ .../couchbase/CustomTypeKeyCouchbaseConfig.java | 2 +- .../spring/data/couchbase/IntegrationTest.java | 2 +- .../data/couchbase/IntegrationTestConfig.java | 4 ++-- .../spring/data/couchbase/MyCouchbaseConfig.java | 4 ++-- .../ReadYourOwnWritesCouchbaseConfig.java | 2 +- .../service/PersonRepositoryServiceLiveTest.java | 2 +- .../couchbase/service/PersonServiceLiveTest.java | 8 ++++---- .../service/PersonTemplateServiceLiveTest.java | 2 +- .../service/StudentRepositoryServiceLiveTest.java | 2 +- .../couchbase/service/StudentServiceLiveTest.java | 8 ++++---- .../service/StudentTemplateServiceLiveTest.java | 2 +- .../couchbase2b/MultiBucketCouchbaseConfig.java | 6 +++--- .../MultiBucketIntegrationTestConfig.java | 4 ++-- .../data/couchbase2b/MultiBucketLiveTest.java | 2 +- .../service/CampusServiceImplLiveTest.java | 8 ++++---- .../service/PersonServiceImplLiveTest.java | 8 ++++---- .../service/StudentServiceImplLiveTest.java | 8 ++++---- 42 files changed, 97 insertions(+), 97 deletions(-) rename persistence-modules/spring-data-couchbase-2/src/main/java/{org => com}/baeldung/spring/data/couchbase/model/Campus.java (97%) rename persistence-modules/spring-data-couchbase-2/src/main/java/{org => com}/baeldung/spring/data/couchbase/model/Person.java (97%) rename persistence-modules/spring-data-couchbase-2/src/main/java/{org => com}/baeldung/spring/data/couchbase/model/Student.java (98%) rename persistence-modules/spring-data-couchbase-2/src/main/java/{org => com}/baeldung/spring/data/couchbase/repos/CustomStudentRepository.java (54%) rename persistence-modules/spring-data-couchbase-2/src/main/java/{org => com}/baeldung/spring/data/couchbase/repos/CustomStudentRepositoryImpl.java (85%) rename persistence-modules/spring-data-couchbase-2/src/main/java/{org => com}/baeldung/spring/data/couchbase/repos/PersonRepository.java (71%) rename persistence-modules/spring-data-couchbase-2/src/main/java/{org => com}/baeldung/spring/data/couchbase/repos/StudentRepository.java (73%) rename persistence-modules/spring-data-couchbase-2/src/main/java/{org => com}/baeldung/spring/data/couchbase/service/PersonRepositoryService.java (89%) rename persistence-modules/spring-data-couchbase-2/src/main/java/{org => com}/baeldung/spring/data/couchbase/service/PersonService.java (75%) rename persistence-modules/spring-data-couchbase-2/src/main/java/{org => com}/baeldung/spring/data/couchbase/service/PersonTemplateService.java (93%) rename persistence-modules/spring-data-couchbase-2/src/main/java/{org => com}/baeldung/spring/data/couchbase/service/StudentRepositoryService.java (89%) rename persistence-modules/spring-data-couchbase-2/src/main/java/{org => com}/baeldung/spring/data/couchbase/service/StudentService.java (75%) rename persistence-modules/spring-data-couchbase-2/src/main/java/{org => com}/baeldung/spring/data/couchbase/service/StudentTemplateService.java (93%) rename persistence-modules/spring-data-couchbase-2/src/main/java/{org => com}/baeldung/spring/data/couchbase2b/repos/CampusRepository.java (85%) rename persistence-modules/spring-data-couchbase-2/src/main/java/{org => com}/baeldung/spring/data/couchbase2b/repos/PersonRepository.java (71%) rename persistence-modules/spring-data-couchbase-2/src/main/java/{org => com}/baeldung/spring/data/couchbase2b/repos/StudentRepository.java (71%) rename persistence-modules/spring-data-couchbase-2/src/main/java/{org => com}/baeldung/spring/data/couchbase2b/service/CampusService.java (75%) rename persistence-modules/spring-data-couchbase-2/src/main/java/{org => com}/baeldung/spring/data/couchbase2b/service/CampusServiceImpl.java (87%) rename persistence-modules/spring-data-couchbase-2/src/main/java/{org => com}/baeldung/spring/data/couchbase2b/service/PersonService.java (74%) rename persistence-modules/spring-data-couchbase-2/src/main/java/{org => com}/baeldung/spring/data/couchbase2b/service/PersonServiceImpl.java (88%) rename persistence-modules/spring-data-couchbase-2/src/main/java/{org => com}/baeldung/spring/data/couchbase2b/service/StudentService.java (75%) rename persistence-modules/spring-data-couchbase-2/src/main/java/{org => com}/baeldung/spring/data/couchbase2b/service/StudentServiceImpl.java (88%) rename persistence-modules/spring-data-couchbase-2/src/test/java/{org => com}/baeldung/SpringContextLiveTest.java (83%) rename persistence-modules/spring-data-couchbase-2/src/test/java/{org => com}/baeldung/spring/data/couchbase/CustomTypeKeyCouchbaseConfig.java (86%) rename persistence-modules/spring-data-couchbase-2/src/test/java/{org => com}/baeldung/spring/data/couchbase/IntegrationTest.java (92%) rename persistence-modules/spring-data-couchbase-2/src/test/java/{org => com}/baeldung/spring/data/couchbase/IntegrationTestConfig.java (62%) rename persistence-modules/spring-data-couchbase-2/src/test/java/{org => com}/baeldung/spring/data/couchbase/MyCouchbaseConfig.java (93%) rename persistence-modules/spring-data-couchbase-2/src/test/java/{org => com}/baeldung/spring/data/couchbase/ReadYourOwnWritesCouchbaseConfig.java (85%) rename persistence-modules/spring-data-couchbase-2/src/test/java/{org => com}/baeldung/spring/data/couchbase/service/PersonRepositoryServiceLiveTest.java (87%) rename persistence-modules/spring-data-couchbase-2/src/test/java/{org => com}/baeldung/spring/data/couchbase/service/PersonServiceLiveTest.java (95%) rename persistence-modules/spring-data-couchbase-2/src/test/java/{org => com}/baeldung/spring/data/couchbase/service/PersonTemplateServiceLiveTest.java (87%) rename persistence-modules/spring-data-couchbase-2/src/test/java/{org => com}/baeldung/spring/data/couchbase/service/StudentRepositoryServiceLiveTest.java (87%) rename persistence-modules/spring-data-couchbase-2/src/test/java/{org => com}/baeldung/spring/data/couchbase/service/StudentServiceLiveTest.java (96%) rename persistence-modules/spring-data-couchbase-2/src/test/java/{org => com}/baeldung/spring/data/couchbase/service/StudentTemplateServiceLiveTest.java (87%) rename persistence-modules/spring-data-couchbase-2/src/test/java/{org => com}/baeldung/spring/data/couchbase2b/MultiBucketCouchbaseConfig.java (93%) rename persistence-modules/spring-data-couchbase-2/src/test/java/{org => com}/baeldung/spring/data/couchbase2b/MultiBucketIntegrationTestConfig.java (64%) rename persistence-modules/spring-data-couchbase-2/src/test/java/{org => com}/baeldung/spring/data/couchbase2b/MultiBucketLiveTest.java (92%) rename persistence-modules/spring-data-couchbase-2/src/test/java/{org => com}/baeldung/spring/data/couchbase2b/service/CampusServiceImplLiveTest.java (94%) rename persistence-modules/spring-data-couchbase-2/src/test/java/{org => com}/baeldung/spring/data/couchbase2b/service/PersonServiceImplLiveTest.java (95%) rename persistence-modules/spring-data-couchbase-2/src/test/java/{org => com}/baeldung/spring/data/couchbase2b/service/StudentServiceImplLiveTest.java (96%) diff --git a/persistence-modules/spring-data-couchbase-2/README.md b/persistence-modules/spring-data-couchbase-2/README.md index 3145fc653a..aa6f7375cb 100644 --- a/persistence-modules/spring-data-couchbase-2/README.md +++ b/persistence-modules/spring-data-couchbase-2/README.md @@ -1,9 +1,9 @@ ## Spring Data Couchbase Tutorial Project ### Relevant Articles: -- [Intro to Spring Data Couchbase](http://www.baeldung.com/spring-data-couchbase) -- [Entity Validation, Optimistic Locking, and Query Consistency in Spring Data Couchbase](http://www.baeldung.com/entity-validation-locking-and-query-consistency-in-spring-data-couchbase) -- [Multiple Buckets and Spatial View Queries in Spring Data Couchbase](http://www.baeldung.com/spring-data-couchbase-buckets-and-spatial-view-queries) +- [Intro to Spring Data Couchbase](https://www.baeldung.com/spring-data-couchbase) +- [Entity Validation, Optimistic Locking, and Query Consistency in Spring Data Couchbase](https://www.baeldung.com/entity-validation-locking-and-query-consistency-in-spring-data-couchbase) +- [Multiple Buckets and Spatial View Queries in Spring Data Couchbase](https://www.baeldung.com/spring-data-couchbase-buckets-and-spatial-view-queries) ### Overview This Maven project contains the Java code for Spring Data Couchbase @@ -25,14 +25,14 @@ mvn clean install ### Package Organization Java classes for the first two tutorials listed above are in src/main/java in the package hierarchy -org.baeldung.spring.data.couchbase +com.baeldung.spring.data.couchbase Java classes for the multiple-bucket tutorials are in src/main/java in the package hierarchy -org.baeldung.spring.data.couchbase2b +com.baeldung.spring.data.couchbase2b ### Running the tests The test classes for the single-bucket tutorials are in src/test/java in the package -org.baeldung.spring.data.couchbase.service: +com.baeldung.spring.data.couchbase.service: - PersonServiceTest (abstract) - PersonRepositoryTest (concrete) - PersonTemplateServiceTest (concrete) @@ -41,7 +41,7 @@ org.baeldung.spring.data.couchbase.service: - StudentTemplateServiceTest (concrete) The concrete test classes for the multiple-bucket tutorial are in src/test/java in the package -org.baeldung.spring.data.couchbase2b.service: +com.baeldung.spring.data.couchbase2b.service: - CampusRepositoryServiceImplTest - PersonRepositoryServiceImplTest - StudentRepositoryServiceImplTest diff --git a/persistence-modules/spring-data-couchbase-2/pom.xml b/persistence-modules/spring-data-couchbase-2/pom.xml index 484561ddaa..0a20a3ff0e 100644 --- a/persistence-modules/spring-data-couchbase-2/pom.xml +++ b/persistence-modules/spring-data-couchbase-2/pom.xml @@ -3,7 +3,7 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - org.baeldung + com.baeldung spring-data-couchbase-2 0.1-SNAPSHOT spring-data-couchbase-2 diff --git a/persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/model/Campus.java b/persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase/model/Campus.java similarity index 97% rename from persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/model/Campus.java rename to persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase/model/Campus.java index c357ab8596..d710a35796 100644 --- a/persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/model/Campus.java +++ b/persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase/model/Campus.java @@ -1,4 +1,4 @@ -package org.baeldung.spring.data.couchbase.model; +package com.baeldung.spring.data.couchbase.model; import javax.validation.constraints.NotNull; diff --git a/persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/model/Person.java b/persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase/model/Person.java similarity index 97% rename from persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/model/Person.java rename to persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase/model/Person.java index fd41427d20..1e081f01da 100644 --- a/persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/model/Person.java +++ b/persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase/model/Person.java @@ -1,4 +1,4 @@ -package org.baeldung.spring.data.couchbase.model; +package com.baeldung.spring.data.couchbase.model; import javax.validation.constraints.NotNull; diff --git a/persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/model/Student.java b/persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase/model/Student.java similarity index 98% rename from persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/model/Student.java rename to persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase/model/Student.java index 726ed2347e..e979eca864 100644 --- a/persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/model/Student.java +++ b/persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase/model/Student.java @@ -1,4 +1,4 @@ -package org.baeldung.spring.data.couchbase.model; +package com.baeldung.spring.data.couchbase.model; import javax.validation.constraints.NotNull; import javax.validation.constraints.Past; diff --git a/persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/repos/CustomStudentRepository.java b/persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase/repos/CustomStudentRepository.java similarity index 54% rename from persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/repos/CustomStudentRepository.java rename to persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase/repos/CustomStudentRepository.java index 9a5bf21492..2aef524caf 100644 --- a/persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/repos/CustomStudentRepository.java +++ b/persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase/repos/CustomStudentRepository.java @@ -1,8 +1,8 @@ -package org.baeldung.spring.data.couchbase.repos; +package com.baeldung.spring.data.couchbase.repos; import java.util.List; -import org.baeldung.spring.data.couchbase.model.Student; +import com.baeldung.spring.data.couchbase.model.Student; public interface CustomStudentRepository { List findByFirstNameStartsWith(String s); diff --git a/persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/repos/CustomStudentRepositoryImpl.java b/persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase/repos/CustomStudentRepositoryImpl.java similarity index 85% rename from persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/repos/CustomStudentRepositoryImpl.java rename to persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase/repos/CustomStudentRepositoryImpl.java index 751895502c..c4742ac44a 100644 --- a/persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/repos/CustomStudentRepositoryImpl.java +++ b/persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase/repos/CustomStudentRepositoryImpl.java @@ -1,8 +1,8 @@ -package org.baeldung.spring.data.couchbase.repos; +package com.baeldung.spring.data.couchbase.repos; import java.util.List; -import org.baeldung.spring.data.couchbase.model.Student; +import com.baeldung.spring.data.couchbase.model.Student; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.couchbase.core.CouchbaseTemplate; diff --git a/persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/repos/PersonRepository.java b/persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase/repos/PersonRepository.java similarity index 71% rename from persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/repos/PersonRepository.java rename to persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase/repos/PersonRepository.java index 717feb858f..dc9a20ffa2 100644 --- a/persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/repos/PersonRepository.java +++ b/persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase/repos/PersonRepository.java @@ -1,8 +1,8 @@ -package org.baeldung.spring.data.couchbase.repos; +package com.baeldung.spring.data.couchbase.repos; import java.util.List; -import org.baeldung.spring.data.couchbase.model.Person; +import com.baeldung.spring.data.couchbase.model.Person; import org.springframework.data.repository.CrudRepository; public interface PersonRepository extends CrudRepository { diff --git a/persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/repos/StudentRepository.java b/persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase/repos/StudentRepository.java similarity index 73% rename from persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/repos/StudentRepository.java rename to persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase/repos/StudentRepository.java index 9bbdeec642..7ea9433f21 100644 --- a/persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/repos/StudentRepository.java +++ b/persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase/repos/StudentRepository.java @@ -1,8 +1,8 @@ -package org.baeldung.spring.data.couchbase.repos; +package com.baeldung.spring.data.couchbase.repos; import java.util.List; -import org.baeldung.spring.data.couchbase.model.Student; +import com.baeldung.spring.data.couchbase.model.Student; import org.springframework.data.repository.CrudRepository; public interface StudentRepository extends CrudRepository, CustomStudentRepository { diff --git a/persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/service/PersonRepositoryService.java b/persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase/service/PersonRepositoryService.java similarity index 89% rename from persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/service/PersonRepositoryService.java rename to persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase/service/PersonRepositoryService.java index 49548bdbfb..4051585e31 100644 --- a/persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/service/PersonRepositoryService.java +++ b/persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase/service/PersonRepositoryService.java @@ -1,11 +1,11 @@ -package org.baeldung.spring.data.couchbase.service; +package com.baeldung.spring.data.couchbase.service; import java.util.ArrayList; import java.util.Iterator; import java.util.List; -import org.baeldung.spring.data.couchbase.model.Person; -import org.baeldung.spring.data.couchbase.repos.PersonRepository; +import com.baeldung.spring.data.couchbase.model.Person; +import com.baeldung.spring.data.couchbase.repos.PersonRepository; import org.joda.time.DateTime; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; diff --git a/persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/service/PersonService.java b/persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase/service/PersonService.java similarity index 75% rename from persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/service/PersonService.java rename to persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase/service/PersonService.java index a823908b01..f321eba94e 100644 --- a/persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/service/PersonService.java +++ b/persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase/service/PersonService.java @@ -1,8 +1,8 @@ -package org.baeldung.spring.data.couchbase.service; +package com.baeldung.spring.data.couchbase.service; import java.util.List; -import org.baeldung.spring.data.couchbase.model.Person; +import com.baeldung.spring.data.couchbase.model.Person; public interface PersonService { diff --git a/persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/service/PersonTemplateService.java b/persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase/service/PersonTemplateService.java similarity index 93% rename from persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/service/PersonTemplateService.java rename to persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase/service/PersonTemplateService.java index 8398847f65..5e49465a25 100644 --- a/persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/service/PersonTemplateService.java +++ b/persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase/service/PersonTemplateService.java @@ -1,8 +1,8 @@ -package org.baeldung.spring.data.couchbase.service; +package com.baeldung.spring.data.couchbase.service; import java.util.List; -import org.baeldung.spring.data.couchbase.model.Person; +import com.baeldung.spring.data.couchbase.model.Person; import org.joda.time.DateTime; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; diff --git a/persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/service/StudentRepositoryService.java b/persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase/service/StudentRepositoryService.java similarity index 89% rename from persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/service/StudentRepositoryService.java rename to persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase/service/StudentRepositoryService.java index 65f5a6e78e..ff9657260a 100644 --- a/persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/service/StudentRepositoryService.java +++ b/persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase/service/StudentRepositoryService.java @@ -1,11 +1,11 @@ -package org.baeldung.spring.data.couchbase.service; +package com.baeldung.spring.data.couchbase.service; import java.util.ArrayList; import java.util.Iterator; import java.util.List; -import org.baeldung.spring.data.couchbase.model.Student; -import org.baeldung.spring.data.couchbase.repos.StudentRepository; +import com.baeldung.spring.data.couchbase.model.Student; +import com.baeldung.spring.data.couchbase.repos.StudentRepository; import org.joda.time.DateTime; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; diff --git a/persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/service/StudentService.java b/persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase/service/StudentService.java similarity index 75% rename from persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/service/StudentService.java rename to persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase/service/StudentService.java index f483ef0fb6..aa99a770cd 100644 --- a/persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/service/StudentService.java +++ b/persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase/service/StudentService.java @@ -1,8 +1,8 @@ -package org.baeldung.spring.data.couchbase.service; +package com.baeldung.spring.data.couchbase.service; import java.util.List; -import org.baeldung.spring.data.couchbase.model.Student; +import com.baeldung.spring.data.couchbase.model.Student; public interface StudentService { diff --git a/persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/service/StudentTemplateService.java b/persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase/service/StudentTemplateService.java similarity index 93% rename from persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/service/StudentTemplateService.java rename to persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase/service/StudentTemplateService.java index 8d1292b5e4..9110f68276 100644 --- a/persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/service/StudentTemplateService.java +++ b/persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase/service/StudentTemplateService.java @@ -1,8 +1,8 @@ -package org.baeldung.spring.data.couchbase.service; +package com.baeldung.spring.data.couchbase.service; import java.util.List; -import org.baeldung.spring.data.couchbase.model.Student; +import com.baeldung.spring.data.couchbase.model.Student; import org.joda.time.DateTime; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; diff --git a/persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/repos/CampusRepository.java b/persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase2b/repos/CampusRepository.java similarity index 85% rename from persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/repos/CampusRepository.java rename to persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase2b/repos/CampusRepository.java index b1857222c5..1120b7c55d 100644 --- a/persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/repos/CampusRepository.java +++ b/persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase2b/repos/CampusRepository.java @@ -1,8 +1,8 @@ -package org.baeldung.spring.data.couchbase2b.repos; +package com.baeldung.spring.data.couchbase2b.repos; import java.util.Set; -import org.baeldung.spring.data.couchbase.model.Campus; +import com.baeldung.spring.data.couchbase.model.Campus; import org.springframework.data.couchbase.core.query.Dimensional; import org.springframework.data.couchbase.core.query.View; import org.springframework.data.geo.Distance; diff --git a/persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/repos/PersonRepository.java b/persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase2b/repos/PersonRepository.java similarity index 71% rename from persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/repos/PersonRepository.java rename to persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase2b/repos/PersonRepository.java index ef37106c6d..ec50dec471 100644 --- a/persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/repos/PersonRepository.java +++ b/persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase2b/repos/PersonRepository.java @@ -1,8 +1,8 @@ -package org.baeldung.spring.data.couchbase2b.repos; +package com.baeldung.spring.data.couchbase2b.repos; import java.util.List; -import org.baeldung.spring.data.couchbase.model.Person; +import com.baeldung.spring.data.couchbase.model.Person; import org.springframework.data.repository.CrudRepository; public interface PersonRepository extends CrudRepository { diff --git a/persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/repos/StudentRepository.java b/persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase2b/repos/StudentRepository.java similarity index 71% rename from persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/repos/StudentRepository.java rename to persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase2b/repos/StudentRepository.java index 0d790d2f39..3fd4a717f9 100644 --- a/persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/repos/StudentRepository.java +++ b/persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase2b/repos/StudentRepository.java @@ -1,8 +1,8 @@ -package org.baeldung.spring.data.couchbase2b.repos; +package com.baeldung.spring.data.couchbase2b.repos; import java.util.List; -import org.baeldung.spring.data.couchbase.model.Student; +import com.baeldung.spring.data.couchbase.model.Student; import org.springframework.data.repository.CrudRepository; public interface StudentRepository extends CrudRepository { diff --git a/persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/CampusService.java b/persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase2b/service/CampusService.java similarity index 75% rename from persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/CampusService.java rename to persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase2b/service/CampusService.java index 58f00dda25..567ffa2a7f 100644 --- a/persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/CampusService.java +++ b/persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase2b/service/CampusService.java @@ -1,8 +1,8 @@ -package org.baeldung.spring.data.couchbase2b.service; +package com.baeldung.spring.data.couchbase2b.service; import java.util.Set; -import org.baeldung.spring.data.couchbase.model.Campus; +import com.baeldung.spring.data.couchbase.model.Campus; import org.springframework.data.geo.Distance; import org.springframework.data.geo.Point; diff --git a/persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/CampusServiceImpl.java b/persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase2b/service/CampusServiceImpl.java similarity index 87% rename from persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/CampusServiceImpl.java rename to persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase2b/service/CampusServiceImpl.java index 586f5f0dc1..03e2dced1b 100644 --- a/persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/CampusServiceImpl.java +++ b/persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase2b/service/CampusServiceImpl.java @@ -1,11 +1,11 @@ -package org.baeldung.spring.data.couchbase2b.service; +package com.baeldung.spring.data.couchbase2b.service; import java.util.HashSet; import java.util.Iterator; import java.util.Set; -import org.baeldung.spring.data.couchbase.model.Campus; -import org.baeldung.spring.data.couchbase2b.repos.CampusRepository; +import com.baeldung.spring.data.couchbase2b.repos.CampusRepository; +import com.baeldung.spring.data.couchbase.model.Campus; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.geo.Distance; import org.springframework.data.geo.Point; diff --git a/persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/PersonService.java b/persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase2b/service/PersonService.java similarity index 74% rename from persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/PersonService.java rename to persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase2b/service/PersonService.java index c2c96ffb9c..7dc30ead11 100644 --- a/persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/PersonService.java +++ b/persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase2b/service/PersonService.java @@ -1,8 +1,8 @@ -package org.baeldung.spring.data.couchbase2b.service; +package com.baeldung.spring.data.couchbase2b.service; import java.util.List; -import org.baeldung.spring.data.couchbase.model.Person; +import com.baeldung.spring.data.couchbase.model.Person; public interface PersonService { diff --git a/persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/PersonServiceImpl.java b/persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase2b/service/PersonServiceImpl.java similarity index 88% rename from persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/PersonServiceImpl.java rename to persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase2b/service/PersonServiceImpl.java index fe0a9e48cd..af08bd4ca8 100644 --- a/persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/PersonServiceImpl.java +++ b/persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase2b/service/PersonServiceImpl.java @@ -1,11 +1,11 @@ -package org.baeldung.spring.data.couchbase2b.service; +package com.baeldung.spring.data.couchbase2b.service; import java.util.ArrayList; import java.util.Iterator; import java.util.List; -import org.baeldung.spring.data.couchbase.model.Person; -import org.baeldung.spring.data.couchbase2b.repos.PersonRepository; +import com.baeldung.spring.data.couchbase2b.repos.PersonRepository; +import com.baeldung.spring.data.couchbase.model.Person; import org.joda.time.DateTime; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; diff --git a/persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/StudentService.java b/persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase2b/service/StudentService.java similarity index 75% rename from persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/StudentService.java rename to persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase2b/service/StudentService.java index 5b83b403bb..3f318e1af1 100644 --- a/persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/StudentService.java +++ b/persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase2b/service/StudentService.java @@ -1,8 +1,8 @@ -package org.baeldung.spring.data.couchbase2b.service; +package com.baeldung.spring.data.couchbase2b.service; import java.util.List; -import org.baeldung.spring.data.couchbase.model.Student; +import com.baeldung.spring.data.couchbase.model.Student; public interface StudentService { diff --git a/persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/StudentServiceImpl.java b/persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase2b/service/StudentServiceImpl.java similarity index 88% rename from persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/StudentServiceImpl.java rename to persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase2b/service/StudentServiceImpl.java index 248d824081..53feaead10 100644 --- a/persistence-modules/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/StudentServiceImpl.java +++ b/persistence-modules/spring-data-couchbase-2/src/main/java/com/baeldung/spring/data/couchbase2b/service/StudentServiceImpl.java @@ -1,11 +1,11 @@ -package org.baeldung.spring.data.couchbase2b.service; +package com.baeldung.spring.data.couchbase2b.service; import java.util.ArrayList; import java.util.Iterator; import java.util.List; -import org.baeldung.spring.data.couchbase.model.Student; -import org.baeldung.spring.data.couchbase2b.repos.StudentRepository; +import com.baeldung.spring.data.couchbase2b.repos.StudentRepository; +import com.baeldung.spring.data.couchbase.model.Student; import org.joda.time.DateTime; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; diff --git a/persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/SpringContextLiveTest.java b/persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/SpringContextLiveTest.java similarity index 83% rename from persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/SpringContextLiveTest.java rename to persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/SpringContextLiveTest.java index 5e20a98a1d..553520e6e6 100644 --- a/persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/SpringContextLiveTest.java +++ b/persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/SpringContextLiveTest.java @@ -1,7 +1,7 @@ -package org.baeldung; +package com.baeldung; -import org.baeldung.spring.data.couchbase2b.MultiBucketCouchbaseConfig; -import org.baeldung.spring.data.couchbase2b.MultiBucketIntegrationTestConfig; +import com.baeldung.spring.data.couchbase2b.MultiBucketCouchbaseConfig; +import com.baeldung.spring.data.couchbase2b.MultiBucketIntegrationTestConfig; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.test.context.ContextConfiguration; @@ -25,7 +25,7 @@ import org.springframework.test.context.support.DependencyInjectionTestExecution * {@code * function (doc) { * if (doc.location && - * doc._class == "org.baeldung.spring.data.couchbase.model.Campus") { + * doc._class == "com.baeldung.spring.data.couchbase.model.Campus") { * emit([doc.location.x, doc.location.y], null); * } * }} @@ -34,7 +34,7 @@ import org.springframework.test.context.support.DependencyInjectionTestExecution * 2.4.1- view 'all' with function: * {@code * function (doc, meta) { - * if(doc._class == "org.baeldung.spring.data.couchbase.model.Campus") { + * if(doc._class == "com.baeldung.spring.data.couchbase.model.Campus") { * emit(meta.id, null); * } * }} @@ -42,7 +42,7 @@ import org.springframework.test.context.support.DependencyInjectionTestExecution * 2.4.2- view 'byName' with function: * {@code * function (doc, meta) { - * if(doc._class == "org.baeldung.spring.data.couchbase.model.Campus" && + * if(doc._class == "com.baeldung.spring.data.couchbase.model.Campus" && * doc.name) { * emit(doc.name, null); * } diff --git a/persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/CustomTypeKeyCouchbaseConfig.java b/persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase/CustomTypeKeyCouchbaseConfig.java similarity index 86% rename from persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/CustomTypeKeyCouchbaseConfig.java rename to persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase/CustomTypeKeyCouchbaseConfig.java index 0e2e8d5dd3..403c012194 100644 --- a/persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/CustomTypeKeyCouchbaseConfig.java +++ b/persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase/CustomTypeKeyCouchbaseConfig.java @@ -1,4 +1,4 @@ -package org.baeldung.spring.data.couchbase; +package com.baeldung.spring.data.couchbase; import org.springframework.data.couchbase.core.convert.MappingCouchbaseConverter; diff --git a/persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/IntegrationTest.java b/persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase/IntegrationTest.java similarity index 92% rename from persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/IntegrationTest.java rename to persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase/IntegrationTest.java index ce2daa92cd..df2802a15c 100644 --- a/persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/IntegrationTest.java +++ b/persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase/IntegrationTest.java @@ -1,4 +1,4 @@ -package org.baeldung.spring.data.couchbase; +package com.baeldung.spring.data.couchbase; import org.junit.runner.RunWith; import org.springframework.test.context.ContextConfiguration; diff --git a/persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/IntegrationTestConfig.java b/persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase/IntegrationTestConfig.java similarity index 62% rename from persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/IntegrationTestConfig.java rename to persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase/IntegrationTestConfig.java index 6f040c34db..6abb879236 100644 --- a/persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/IntegrationTestConfig.java +++ b/persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase/IntegrationTestConfig.java @@ -1,9 +1,9 @@ -package org.baeldung.spring.data.couchbase; +package com.baeldung.spring.data.couchbase; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; @Configuration -@ComponentScan(basePackages = "org.baeldung.spring.data.couchbase") +@ComponentScan(basePackages = "com.baeldung.spring.data.couchbase") public class IntegrationTestConfig { } diff --git a/persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/MyCouchbaseConfig.java b/persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase/MyCouchbaseConfig.java similarity index 93% rename from persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/MyCouchbaseConfig.java rename to persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase/MyCouchbaseConfig.java index a37e918101..5a2180f4b8 100644 --- a/persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/MyCouchbaseConfig.java +++ b/persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase/MyCouchbaseConfig.java @@ -1,4 +1,4 @@ -package org.baeldung.spring.data.couchbase; +package com.baeldung.spring.data.couchbase; import java.util.Arrays; import java.util.List; @@ -12,7 +12,7 @@ import org.springframework.data.couchbase.repository.config.EnableCouchbaseRepos import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean; @Configuration -@EnableCouchbaseRepositories(basePackages = { "org.baeldung.spring.data.couchbase" }) +@EnableCouchbaseRepositories(basePackages = { "com.baeldung.spring.data.couchbase" }) public class MyCouchbaseConfig extends AbstractCouchbaseConfiguration { public static final List NODE_LIST = Arrays.asList("localhost"); diff --git a/persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/ReadYourOwnWritesCouchbaseConfig.java b/persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase/ReadYourOwnWritesCouchbaseConfig.java similarity index 85% rename from persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/ReadYourOwnWritesCouchbaseConfig.java rename to persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase/ReadYourOwnWritesCouchbaseConfig.java index b4a372487e..b989bb39d8 100644 --- a/persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/ReadYourOwnWritesCouchbaseConfig.java +++ b/persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase/ReadYourOwnWritesCouchbaseConfig.java @@ -1,4 +1,4 @@ -package org.baeldung.spring.data.couchbase; +package com.baeldung.spring.data.couchbase; import org.springframework.data.couchbase.core.query.Consistency; diff --git a/persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/PersonRepositoryServiceLiveTest.java b/persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase/service/PersonRepositoryServiceLiveTest.java similarity index 87% rename from persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/PersonRepositoryServiceLiveTest.java rename to persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase/service/PersonRepositoryServiceLiveTest.java index 899c21691d..ee3716030f 100644 --- a/persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/PersonRepositoryServiceLiveTest.java +++ b/persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase/service/PersonRepositoryServiceLiveTest.java @@ -1,4 +1,4 @@ -package org.baeldung.spring.data.couchbase.service; +package com.baeldung.spring.data.couchbase.service; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; diff --git a/persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/PersonServiceLiveTest.java b/persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase/service/PersonServiceLiveTest.java similarity index 95% rename from persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/PersonServiceLiveTest.java rename to persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase/service/PersonServiceLiveTest.java index 08d641dc2c..804bbdd2c8 100644 --- a/persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/PersonServiceLiveTest.java +++ b/persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase/service/PersonServiceLiveTest.java @@ -1,4 +1,4 @@ -package org.baeldung.spring.data.couchbase.service; +package com.baeldung.spring.data.couchbase.service; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; @@ -7,9 +7,9 @@ import static org.junit.Assert.assertTrue; import java.util.List; -import org.baeldung.spring.data.couchbase.IntegrationTest; -import org.baeldung.spring.data.couchbase.MyCouchbaseConfig; -import org.baeldung.spring.data.couchbase.model.Person; +import com.baeldung.spring.data.couchbase.IntegrationTest; +import com.baeldung.spring.data.couchbase.MyCouchbaseConfig; +import com.baeldung.spring.data.couchbase.model.Person; import org.joda.time.DateTime; import org.junit.BeforeClass; import org.junit.Test; diff --git a/persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/PersonTemplateServiceLiveTest.java b/persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase/service/PersonTemplateServiceLiveTest.java similarity index 87% rename from persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/PersonTemplateServiceLiveTest.java rename to persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase/service/PersonTemplateServiceLiveTest.java index 3bc99d28df..a665fd756d 100644 --- a/persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/PersonTemplateServiceLiveTest.java +++ b/persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase/service/PersonTemplateServiceLiveTest.java @@ -1,4 +1,4 @@ -package org.baeldung.spring.data.couchbase.service; +package com.baeldung.spring.data.couchbase.service; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; diff --git a/persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/StudentRepositoryServiceLiveTest.java b/persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase/service/StudentRepositoryServiceLiveTest.java similarity index 87% rename from persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/StudentRepositoryServiceLiveTest.java rename to persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase/service/StudentRepositoryServiceLiveTest.java index 162619db3e..9abf93b003 100644 --- a/persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/StudentRepositoryServiceLiveTest.java +++ b/persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase/service/StudentRepositoryServiceLiveTest.java @@ -1,4 +1,4 @@ -package org.baeldung.spring.data.couchbase.service; +package com.baeldung.spring.data.couchbase.service; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; diff --git a/persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/StudentServiceLiveTest.java b/persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase/service/StudentServiceLiveTest.java similarity index 96% rename from persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/StudentServiceLiveTest.java rename to persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase/service/StudentServiceLiveTest.java index 6a18922007..c13b4930ca 100644 --- a/persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/StudentServiceLiveTest.java +++ b/persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase/service/StudentServiceLiveTest.java @@ -1,4 +1,4 @@ -package org.baeldung.spring.data.couchbase.service; +package com.baeldung.spring.data.couchbase.service; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; @@ -9,9 +9,9 @@ import java.util.List; import javax.validation.ConstraintViolationException; -import org.baeldung.spring.data.couchbase.IntegrationTest; -import org.baeldung.spring.data.couchbase.MyCouchbaseConfig; -import org.baeldung.spring.data.couchbase.model.Student; +import com.baeldung.spring.data.couchbase.IntegrationTest; +import com.baeldung.spring.data.couchbase.MyCouchbaseConfig; +import com.baeldung.spring.data.couchbase.model.Student; import org.joda.time.DateTime; import org.junit.BeforeClass; import org.junit.Test; diff --git a/persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/StudentTemplateServiceLiveTest.java b/persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase/service/StudentTemplateServiceLiveTest.java similarity index 87% rename from persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/StudentTemplateServiceLiveTest.java rename to persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase/service/StudentTemplateServiceLiveTest.java index c666e004af..92a4a23baf 100644 --- a/persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/StudentTemplateServiceLiveTest.java +++ b/persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase/service/StudentTemplateServiceLiveTest.java @@ -1,4 +1,4 @@ -package org.baeldung.spring.data.couchbase.service; +package com.baeldung.spring.data.couchbase.service; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; diff --git a/persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/MultiBucketCouchbaseConfig.java b/persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase2b/MultiBucketCouchbaseConfig.java similarity index 93% rename from persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/MultiBucketCouchbaseConfig.java rename to persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase2b/MultiBucketCouchbaseConfig.java index fe32305feb..488819aaf5 100644 --- a/persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/MultiBucketCouchbaseConfig.java +++ b/persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase2b/MultiBucketCouchbaseConfig.java @@ -1,9 +1,9 @@ -package org.baeldung.spring.data.couchbase2b; +package com.baeldung.spring.data.couchbase2b; import java.util.Arrays; import java.util.List; -import org.baeldung.spring.data.couchbase.model.Campus; +import com.baeldung.spring.data.couchbase.model.Campus; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.couchbase.config.AbstractCouchbaseConfiguration; @@ -17,7 +17,7 @@ import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean; import com.couchbase.client.java.Bucket; @Configuration -@EnableCouchbaseRepositories(basePackages = { "org.baeldung.spring.data.couchbase2b" }) +@EnableCouchbaseRepositories(basePackages = { "com.baeldung.spring.data.couchbase2b" }) public class MultiBucketCouchbaseConfig extends AbstractCouchbaseConfiguration { public static final List NODE_LIST = Arrays.asList("localhost"); diff --git a/persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/MultiBucketIntegrationTestConfig.java b/persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase2b/MultiBucketIntegrationTestConfig.java similarity index 64% rename from persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/MultiBucketIntegrationTestConfig.java rename to persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase2b/MultiBucketIntegrationTestConfig.java index 94a95b06bb..c082a0d77c 100644 --- a/persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/MultiBucketIntegrationTestConfig.java +++ b/persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase2b/MultiBucketIntegrationTestConfig.java @@ -1,10 +1,10 @@ -package org.baeldung.spring.data.couchbase2b; +package com.baeldung.spring.data.couchbase2b; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; @Configuration -@ComponentScan(basePackages = { "org.baeldung.spring.data.couchbase2b" }) +@ComponentScan(basePackages = { "com.baeldung.spring.data.couchbase2b" }) public class MultiBucketIntegrationTestConfig { } diff --git a/persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/MultiBucketLiveTest.java b/persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase2b/MultiBucketLiveTest.java similarity index 92% rename from persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/MultiBucketLiveTest.java rename to persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase2b/MultiBucketLiveTest.java index 3b406a851e..334af40866 100644 --- a/persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/MultiBucketLiveTest.java +++ b/persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase2b/MultiBucketLiveTest.java @@ -1,4 +1,4 @@ -package org.baeldung.spring.data.couchbase2b; +package com.baeldung.spring.data.couchbase2b; import org.junit.runner.RunWith; import org.springframework.test.context.ContextConfiguration; diff --git a/persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/service/CampusServiceImplLiveTest.java b/persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase2b/service/CampusServiceImplLiveTest.java similarity index 94% rename from persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/service/CampusServiceImplLiveTest.java rename to persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase2b/service/CampusServiceImplLiveTest.java index 5e7a12f292..e94c09e6cd 100644 --- a/persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/service/CampusServiceImplLiveTest.java +++ b/persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase2b/service/CampusServiceImplLiveTest.java @@ -1,4 +1,4 @@ -package org.baeldung.spring.data.couchbase2b.service; +package com.baeldung.spring.data.couchbase2b.service; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; @@ -9,9 +9,9 @@ import java.util.Set; import javax.annotation.PostConstruct; -import org.baeldung.spring.data.couchbase.model.Campus; -import org.baeldung.spring.data.couchbase2b.MultiBucketLiveTest; -import org.baeldung.spring.data.couchbase2b.repos.CampusRepository; +import com.baeldung.spring.data.couchbase.model.Campus; +import com.baeldung.spring.data.couchbase2b.MultiBucketLiveTest; +import com.baeldung.spring.data.couchbase2b.repos.CampusRepository; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.geo.Distance; diff --git a/persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/service/PersonServiceImplLiveTest.java b/persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase2b/service/PersonServiceImplLiveTest.java similarity index 95% rename from persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/service/PersonServiceImplLiveTest.java rename to persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase2b/service/PersonServiceImplLiveTest.java index 9543d8fe12..3f98c1950a 100644 --- a/persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/service/PersonServiceImplLiveTest.java +++ b/persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase2b/service/PersonServiceImplLiveTest.java @@ -1,4 +1,4 @@ -package org.baeldung.spring.data.couchbase2b.service; +package com.baeldung.spring.data.couchbase2b.service; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; @@ -7,9 +7,9 @@ import static org.junit.Assert.assertTrue; import java.util.List; -import org.baeldung.spring.data.couchbase.model.Person; -import org.baeldung.spring.data.couchbase2b.MultiBucketCouchbaseConfig; -import org.baeldung.spring.data.couchbase2b.MultiBucketLiveTest; +import com.baeldung.spring.data.couchbase.model.Person; +import com.baeldung.spring.data.couchbase2b.MultiBucketLiveTest; +import com.baeldung.spring.data.couchbase2b.MultiBucketCouchbaseConfig; import org.joda.time.DateTime; import org.junit.BeforeClass; import org.junit.Test; diff --git a/persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/service/StudentServiceImplLiveTest.java b/persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase2b/service/StudentServiceImplLiveTest.java similarity index 96% rename from persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/service/StudentServiceImplLiveTest.java rename to persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase2b/service/StudentServiceImplLiveTest.java index 52b9113e8f..004258a37e 100644 --- a/persistence-modules/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/service/StudentServiceImplLiveTest.java +++ b/persistence-modules/spring-data-couchbase-2/src/test/java/com/baeldung/spring/data/couchbase2b/service/StudentServiceImplLiveTest.java @@ -1,4 +1,4 @@ -package org.baeldung.spring.data.couchbase2b.service; +package com.baeldung.spring.data.couchbase2b.service; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; @@ -9,9 +9,9 @@ import java.util.List; import javax.validation.ConstraintViolationException; -import org.baeldung.spring.data.couchbase.model.Student; -import org.baeldung.spring.data.couchbase2b.MultiBucketCouchbaseConfig; -import org.baeldung.spring.data.couchbase2b.MultiBucketLiveTest; +import com.baeldung.spring.data.couchbase.model.Student; +import com.baeldung.spring.data.couchbase2b.MultiBucketCouchbaseConfig; +import com.baeldung.spring.data.couchbase2b.MultiBucketLiveTest; import org.joda.time.DateTime; import org.junit.BeforeClass; import org.junit.Test; From d7fd1e24933eae103697cc113b56a419dac68e16 Mon Sep 17 00:00:00 2001 From: mikr Date: Thu, 13 Feb 2020 08:50:05 +0100 Subject: [PATCH 110/149] Java-112 Merge duplicate Java read from file articles --- core-java-modules/core-java-io/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core-java-modules/core-java-io/README.md b/core-java-modules/core-java-io/README.md index 2c6c3363cb..b8bec7aa5e 100644 --- a/core-java-modules/core-java-io/README.md +++ b/core-java-modules/core-java-io/README.md @@ -3,7 +3,7 @@ This module contains articles about core Java input and output (IO) ### Relevant Articles: -- [How to Read a File in Java](https://www.baeldung.com/reading-file-in-java) +- [Java – Read from File](https://www.baeldung.com/java-read-file) - [Read a File into an ArrayList](https://www.baeldung.com/java-file-to-arraylist) - [Java – Directory Size](https://www.baeldung.com/java-folder-size) - [File Size in Java](https://www.baeldung.com/java-file-size) From b155b71c4b7df70993b9fbfc48bbe757339b178e Mon Sep 17 00:00:00 2001 From: mikr Date: Thu, 13 Feb 2020 09:16:08 +0100 Subject: [PATCH 111/149] Java-112 Merge duplicate Java read from file articles --- .../readfile/FileOperationsManualTest.java | 134 ------------------ .../readfile/JavaReadFromFileUnitTest.java | 125 ++++++++++++++-- .../src/test/resources/test_read9.in | 1 + 3 files changed, 118 insertions(+), 142 deletions(-) delete mode 100644 core-java-modules/core-java-io/src/test/java/com/baeldung/readfile/FileOperationsManualTest.java create mode 100644 core-java-modules/core-java-io/src/test/resources/test_read9.in diff --git a/core-java-modules/core-java-io/src/test/java/com/baeldung/readfile/FileOperationsManualTest.java b/core-java-modules/core-java-io/src/test/java/com/baeldung/readfile/FileOperationsManualTest.java deleted file mode 100644 index b837c6b4dd..0000000000 --- a/core-java-modules/core-java-io/src/test/java/com/baeldung/readfile/FileOperationsManualTest.java +++ /dev/null @@ -1,134 +0,0 @@ -package com.baeldung.readfile; - -import org.apache.commons.io.FileUtils; -import org.apache.commons.io.IOUtils; -import org.hamcrest.CoreMatchers; -import org.hamcrest.Matchers; -import org.junit.Test; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.net.URISyntaxException; -import java.net.URL; -import java.net.URLConnection; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertThat; - -public class FileOperationsManualTest { - - @Test - public void givenFileName_whenUsingClassloader_thenFileData() throws IOException { - String expectedData = "Hello World from fileTest.txt!!!"; - - ClassLoader classLoader = getClass().getClassLoader(); - File file = new File(classLoader.getResource("fileTest.txt").getFile()); - InputStream inputStream = new FileInputStream(file); - String data = readFromInputStream(inputStream); - - assertEquals(expectedData, data.trim()); - } - - @Test - public void givenFileNameAsAbsolutePath_whenUsingClasspath_thenFileData() throws IOException { - String expectedData = "Hello World from fileTest.txt!!!"; - - Class clazz = FileOperationsManualTest.class; - InputStream inputStream = clazz.getResourceAsStream("/fileTest.txt"); - String data = readFromInputStream(inputStream); - - assertEquals(expectedData, data.trim()); - } - - @Test - public void givenFileName_whenUsingJarFile_thenFileData() throws IOException { - String expectedData = "MIT License"; - - Class clazz = Matchers.class; - InputStream inputStream = clazz.getResourceAsStream("/LICENSE.txt"); - String data = readFromInputStream(inputStream); - - assertThat(data.trim(), CoreMatchers.containsString(expectedData)); - } - - @Test - public void givenURLName_whenUsingURL_thenFileData() throws IOException { - String expectedData = "Example Domain"; - - URL urlObject = new URL("http://www.example.com/"); - - URLConnection urlConnection = urlObject.openConnection(); - - InputStream inputStream = urlConnection.getInputStream(); - String data = readFromInputStream(inputStream); - - assertThat(data.trim(), CoreMatchers.containsString(expectedData)); - } - - @Test - public void givenFileName_whenUsingFileUtils_thenFileData() throws IOException { - String expectedData = "Hello World from fileTest.txt!!!"; - - ClassLoader classLoader = getClass().getClassLoader(); - File file = new File(classLoader.getResource("fileTest.txt").getFile()); - String data = FileUtils.readFileToString(file, "UTF-8"); - - assertEquals(expectedData, data.trim()); - } - - @Test - public void givenFilePath_whenUsingFilesReadAllBytes_thenFileData() throws IOException, URISyntaxException { - String expectedData = "Hello World from fileTest.txt!!!"; - - Path path = Paths.get(getClass().getClassLoader().getResource("fileTest.txt").toURI()); - - byte[] fileBytes = Files.readAllBytes(path); - String data = new String(fileBytes); - - assertEquals(expectedData, data.trim()); - } - - @Test - public void givenFilePath_whenUsingFilesLines_thenFileData() throws IOException, URISyntaxException { - String expectedData = "Hello World from fileTest.txt!!!"; - - Path path = Paths.get(getClass().getClassLoader().getResource("fileTest.txt").toURI()); - - Stream lines = Files.lines(path); - String data = lines.collect(Collectors.joining("\n")); - lines.close(); - - assertEquals(expectedData, data.trim()); - } - - private String readFromInputStream(InputStream inputStream) throws IOException { - StringBuilder resultStringBuilder = new StringBuilder(); - try (BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream))) { - String line; - while ((line = bufferedReader.readLine()) != null) { - resultStringBuilder.append(line).append("\n"); - } - } - - return resultStringBuilder.toString(); - } - - @Test - public void givenFileName_whenUsingIOUtils_thenFileData() throws IOException { - String expectedData = "This is a content of the file"; - - FileInputStream fis = new FileInputStream("src/test/resources/fileToRead.txt"); - String data = IOUtils.toString(fis, "UTF-8"); - - assertEquals(expectedData, data.trim()); - } -} \ No newline at end of file diff --git a/core-java-modules/core-java-io/src/test/java/com/baeldung/readfile/JavaReadFromFileUnitTest.java b/core-java-modules/core-java-io/src/test/java/com/baeldung/readfile/JavaReadFromFileUnitTest.java index a4ccaad594..4cacac91fb 100644 --- a/core-java-modules/core-java-io/src/test/java/com/baeldung/readfile/JavaReadFromFileUnitTest.java +++ b/core-java-modules/core-java-io/src/test/java/com/baeldung/readfile/JavaReadFromFileUnitTest.java @@ -1,11 +1,15 @@ package com.baeldung.readfile; +import org.apache.commons.io.FileUtils; +import org.apache.commons.io.IOUtils; +import org.hamcrest.CoreMatchers; +import org.hamcrest.Matchers; import org.junit.Test; -import org.junit.Ignore; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import java.io.*; +import java.net.URISyntaxException; +import java.net.URL; +import java.net.URLConnection; import java.nio.ByteBuffer; import java.nio.channels.FileChannel; import java.nio.charset.Charset; @@ -13,14 +17,15 @@ import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.Scanner; +import java.util.stream.Collectors; +import java.util.stream.Stream; +import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; public class JavaReadFromFileUnitTest { - private static final Logger LOG = LoggerFactory.getLogger(JavaReadFromFileUnitTest.class); - @Test public void whenReadWithBufferedReader_thenCorrect() throws IOException { final String expected_value = "Hello world"; @@ -32,6 +37,100 @@ public class JavaReadFromFileUnitTest { assertEquals(expected_value, currentLine); } + @Test + public void givenFileName_whenUsingClassloader_thenFileData() throws IOException { + String expectedData = "Hello World from fileTest.txt!!!"; + + ClassLoader classLoader = getClass().getClassLoader(); + File file = new File(classLoader.getResource("fileTest.txt").getFile()); + InputStream inputStream = new FileInputStream(file); + String data = readFromInputStream(inputStream); + + assertEquals(expectedData, data.trim()); + } + + @Test + public void givenFileNameAsAbsolutePath_whenUsingClasspath_thenFileData() throws IOException { + String expectedData = "Hello World from fileTest.txt!!!"; + + Class clazz = JavaReadFromFileUnitTest.class; + InputStream inputStream = clazz.getResourceAsStream("/fileTest.txt"); + String data = readFromInputStream(inputStream); + + assertEquals(expectedData, data.trim()); + } + + @Test + public void givenFileName_whenUsingJarFile_thenFileData() throws IOException { + String expectedData = "BSD License"; + + Class clazz = Matchers.class; + InputStream inputStream = clazz.getResourceAsStream("/LICENSE.txt"); + String data = readFromInputStream(inputStream); + + assertThat(data.trim(), CoreMatchers.containsString(expectedData)); + } + + @Test + public void givenURLName_whenUsingURL_thenFileData() throws IOException { + String expectedData = "Example Domain"; + + URL urlObject = new URL("http://www.example.com/"); + + URLConnection urlConnection = urlObject.openConnection(); + + InputStream inputStream = urlConnection.getInputStream(); + String data = readFromInputStream(inputStream); + + assertThat(data.trim(), CoreMatchers.containsString(expectedData)); + } + + @Test + public void givenFileName_whenUsingFileUtils_thenFileData() throws IOException { + String expectedData = "Hello World from fileTest.txt!!!"; + + ClassLoader classLoader = getClass().getClassLoader(); + File file = new File(classLoader.getResource("fileTest.txt").getFile()); + String data = FileUtils.readFileToString(file, "UTF-8"); + + assertEquals(expectedData, data.trim()); + } + + @Test + public void givenFilePath_whenUsingFilesReadAllBytes_thenFileData() throws IOException, URISyntaxException { + String expectedData = "Hello World from fileTest.txt!!!"; + + Path path = Paths.get(getClass().getClassLoader().getResource("fileTest.txt").toURI()); + + byte[] fileBytes = Files.readAllBytes(path); + String data = new String(fileBytes); + + assertEquals(expectedData, data.trim()); + } + + @Test + public void givenFilePath_whenUsingFilesLines_thenFileData() throws IOException, URISyntaxException { + String expectedData = "Hello World from fileTest.txt!!!"; + + Path path = Paths.get(getClass().getClassLoader().getResource("fileTest.txt").toURI()); + + Stream lines = Files.lines(path); + String data = lines.collect(Collectors.joining("\n")); + lines.close(); + + assertEquals(expectedData, data.trim()); + } + + @Test + public void givenFileName_whenUsingIOUtils_thenFileData() throws IOException { + String expectedData = "This is a content of the file"; + + FileInputStream fis = new FileInputStream("src/test/resources/test_read9.in"); + String data = IOUtils.toString(fis, "UTF-8"); + + assertEquals(expectedData, data.trim()); + } + @Test public void whenReadWithScanner_thenCorrect() throws IOException { final Scanner scanner = new Scanner(new File("src/test/resources/test_read1.in")); @@ -106,14 +205,12 @@ public class JavaReadFromFileUnitTest { } @Test - @Ignore // TODO public void whenReadUTFEncodedFile_thenCorrect() throws IOException { final String expected_value = "青空"; final BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream("src/test/resources/test_read7.in"), "UTF-8")); final String currentLine = reader.readLine(); reader.close(); - LOG.debug(currentLine); - + assertEquals(expected_value, currentLine); } @@ -171,4 +268,16 @@ public class JavaReadFromFileUnitTest { assertEquals(expected_value, line); } + private String readFromInputStream(InputStream inputStream) throws IOException { + StringBuilder resultStringBuilder = new StringBuilder(); + try (BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream))) { + String line; + while ((line = bufferedReader.readLine()) != null) { + resultStringBuilder.append(line).append("\n"); + } + } + + return resultStringBuilder.toString(); + } + } diff --git a/core-java-modules/core-java-io/src/test/resources/test_read9.in b/core-java-modules/core-java-io/src/test/resources/test_read9.in new file mode 100644 index 0000000000..7be79c9761 --- /dev/null +++ b/core-java-modules/core-java-io/src/test/resources/test_read9.in @@ -0,0 +1 @@ +This is a content of the file From 2816111e98a45846a20495a988c19a47640f2d91 Mon Sep 17 00:00:00 2001 From: Sampada <46674082+sampada07@users.noreply.github.com> Date: Thu, 13 Feb 2020 23:31:19 +0530 Subject: [PATCH 112/149] BAEL-2972 : MongoDB Aggregations Using Java (#8718) --- .../aggregation/AggregationLiveTest.java | 222 +++++++++--------- 1 file changed, 111 insertions(+), 111 deletions(-) diff --git a/persistence-modules/java-mongodb/src/test/java/com/baeldung/aggregation/AggregationLiveTest.java b/persistence-modules/java-mongodb/src/test/java/com/baeldung/aggregation/AggregationLiveTest.java index b3f01be566..62ab13563a 100644 --- a/persistence-modules/java-mongodb/src/test/java/com/baeldung/aggregation/AggregationLiveTest.java +++ b/persistence-modules/java-mongodb/src/test/java/com/baeldung/aggregation/AggregationLiveTest.java @@ -1,111 +1,111 @@ -package com.baeldung.aggregation; - -import static com.mongodb.client.model.Aggregates.count; -import static com.mongodb.client.model.Aggregates.group; -import static com.mongodb.client.model.Aggregates.limit; -import static com.mongodb.client.model.Aggregates.match; -import static com.mongodb.client.model.Aggregates.out; -import static com.mongodb.client.model.Aggregates.project; -import static com.mongodb.client.model.Aggregates.sort; -import static org.junit.Assert.assertTrue; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.util.Arrays; - -import org.bson.Document; -import org.bson.conversions.Bson; -import org.junit.AfterClass; -import org.junit.BeforeClass; -import org.junit.Test; - -import com.mongodb.client.MongoClient; -import com.mongodb.client.MongoClients; -import com.mongodb.client.MongoCollection; -import com.mongodb.client.MongoDatabase; -import com.mongodb.client.model.Accumulators; -import com.mongodb.client.model.Filters; -import com.mongodb.client.model.Projections; -import com.mongodb.client.model.Sorts; - -public class AggregationLiveTest { - - private static final String DATABASE = "world"; - private static final String COLLECTION = "countries"; - private static final String DATASET_JSON = "/countrydata.json"; - private static MongoClient mongoClient; - private static MongoDatabase database; - private static MongoCollection collection; - - @BeforeClass - public static void setUpDB() throws IOException { - mongoClient = MongoClients.create(); - database = mongoClient.getDatabase(DATABASE); - collection = database.getCollection(COLLECTION); - - collection.drop(); - - InputStream is = AggregationLiveTest.class.getResourceAsStream(DATASET_JSON); - BufferedReader reader = new BufferedReader(new InputStreamReader(is)); - reader.lines() - .forEach(line -> collection.insertOne(Document.parse(line))); - reader.close(); - } - - @Test - public void givenCountryCollection_whenNAFTACountriesCounted_thenThree() { - Document naftaCountries = collection.aggregate(Arrays.asList(match(Filters.eq("regionalBlocs.acronym", "NAFTA")), count())) - .first(); - - assertEquals(3, naftaCountries.get("count")); - } - - @Test - public void givenCountryCollection_whenAreaSortedDescending_thenSuccess() { - - collection.aggregate(Arrays.asList(sort(Sorts.descending("area")), limit(7), out("largest_seven"))) - .toCollection(); - - MongoCollection largestSeven = database.getCollection("largest_seven"); - - assertEquals(7, largestSeven.countDocuments()); - - Document usa = largestSeven.find(Filters.eq("alpha3Code", "USA")) - .first(); - - assertNotNull(usa); - } - - @Test - public void givenCountryCollection_whenCountedRegionWise_thenMaxInAfrica() { - Document maxCountriedRegion = collection.aggregate(Arrays.asList(group("$region", Accumulators.sum("tally", 1)), sort(Sorts.descending("tally")))) - .first(); - assertTrue(maxCountriedRegion.containsValue("Africa")); - } - - @Test - public void givenCountryCollection_whenNeighborsCalculated_thenMaxIsFifteenInChina() { - Bson borderingCountriesCollection = project(Projections.fields(Projections.excludeId(), Projections.include("name"), Projections.computed("borderingCountries", Projections.computed("$size", "$borders")))); - - int maxValue = collection.aggregate(Arrays.asList(borderingCountriesCollection, group(null, Accumulators.max("max", "$borderingCountries")))) - .first() - .getInteger("max"); - - assertEquals(15, maxValue); - - Document maxNeighboredCountry = collection.aggregate(Arrays.asList(borderingCountriesCollection, match(Filters.eq("borderingCountries", maxValue)))) - .first(); - assertTrue(maxNeighboredCountry.containsValue("China")); - - } - - @AfterClass - public static void cleanUp() { - mongoClient.close(); - } - -} +package com.baeldung.aggregation; + +import static com.mongodb.client.model.Aggregates.count; +import static com.mongodb.client.model.Aggregates.group; +import static com.mongodb.client.model.Aggregates.limit; +import static com.mongodb.client.model.Aggregates.match; +import static com.mongodb.client.model.Aggregates.out; +import static com.mongodb.client.model.Aggregates.project; +import static com.mongodb.client.model.Aggregates.sort; +import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.Arrays; + +import org.bson.Document; +import org.bson.conversions.Bson; +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.Test; + +import com.mongodb.client.MongoClient; +import com.mongodb.client.MongoClients; +import com.mongodb.client.MongoCollection; +import com.mongodb.client.MongoDatabase; +import com.mongodb.client.model.Accumulators; +import com.mongodb.client.model.Filters; +import com.mongodb.client.model.Projections; +import com.mongodb.client.model.Sorts; + +public class AggregationLiveTest { + + private static final String DATABASE = "world"; + private static final String COLLECTION = "countries"; + private static final String DATASET_JSON = "/countrydata.json"; + private static MongoClient mongoClient; + private static MongoDatabase database; + private static MongoCollection collection; + + @BeforeClass + public static void setUpDB() throws IOException { + mongoClient = MongoClients.create(); + database = mongoClient.getDatabase(DATABASE); + collection = database.getCollection(COLLECTION); + + collection.drop(); + + InputStream is = AggregationLiveTest.class.getResourceAsStream(DATASET_JSON); + BufferedReader reader = new BufferedReader(new InputStreamReader(is)); + reader.lines() + .forEach(line -> collection.insertOne(Document.parse(line))); + reader.close(); + } + + @Test + public void givenCountryCollection_whenEnglishSpeakingCountriesCounted_thenNinetyOne() { + Document englishSpeakingCountries = collection.aggregate(Arrays.asList(match(Filters.eq("languages.name", "English")), count())) + .first(); + + assertEquals(91, englishSpeakingCountries.get("count")); + } + + @Test + public void givenCountryCollection_whenAreaSortedDescending_thenSuccess() { + + collection.aggregate(Arrays.asList(sort(Sorts.descending("area")), limit(7), out("largest_seven"))) + .toCollection(); + + MongoCollection largestSeven = database.getCollection("largest_seven"); + + assertEquals(7, largestSeven.countDocuments()); + + Document usa = largestSeven.find(Filters.eq("alpha3Code", "USA")) + .first(); + + assertNotNull(usa); + } + + @Test + public void givenCountryCollection_whenCountedRegionWise_thenMaxInAfrica() { + Document maxCountriedRegion = collection.aggregate(Arrays.asList(group("$region", Accumulators.sum("tally", 1)), sort(Sorts.descending("tally")))) + .first(); + assertTrue(maxCountriedRegion.containsValue("Africa")); + } + + @Test + public void givenCountryCollection_whenNeighborsCalculated_thenMaxIsFifteenInChina() { + Bson borderingCountriesCollection = project(Projections.fields(Projections.excludeId(), Projections.include("name"), Projections.computed("borderingCountries", Projections.computed("$size", "$borders")))); + + int maxValue = collection.aggregate(Arrays.asList(borderingCountriesCollection, group(null, Accumulators.max("max", "$borderingCountries")))) + .first() + .getInteger("max"); + + assertEquals(15, maxValue); + + Document maxNeighboredCountry = collection.aggregate(Arrays.asList(borderingCountriesCollection, match(Filters.eq("borderingCountries", maxValue)))) + .first(); + assertTrue(maxNeighboredCountry.containsValue("China")); + + } + + @AfterClass + public static void cleanUp() { + mongoClient.close(); + } + +} From fa07aedde73ec8e7e1689f70617a4e7fd6c8490e Mon Sep 17 00:00:00 2001 From: mikr Date: Fri, 14 Feb 2020 12:30:43 +0100 Subject: [PATCH 113/149] Java-64 Remove stray code --- .../baeldung/array/Find2ndLargestInArray.java | 20 ----------- .../baeldung/array/FindElementInArray.java | 22 ------------ .../array/Find2ndLargestInArrayUnitTest.java | 16 --------- .../array/FindElementInArrayUnitTest.java | 35 ------------------- 4 files changed, 93 deletions(-) delete mode 100644 core-java-modules/core-java-arrays/src/main/java/com/baeldung/array/Find2ndLargestInArray.java delete mode 100644 core-java-modules/core-java-arrays/src/main/java/com/baeldung/array/FindElementInArray.java delete mode 100644 core-java-modules/core-java-arrays/src/test/java/com/baeldung/array/Find2ndLargestInArrayUnitTest.java delete mode 100644 core-java-modules/core-java-arrays/src/test/java/com/baeldung/array/FindElementInArrayUnitTest.java diff --git a/core-java-modules/core-java-arrays/src/main/java/com/baeldung/array/Find2ndLargestInArray.java b/core-java-modules/core-java-arrays/src/main/java/com/baeldung/array/Find2ndLargestInArray.java deleted file mode 100644 index d424bd429f..0000000000 --- a/core-java-modules/core-java-arrays/src/main/java/com/baeldung/array/Find2ndLargestInArray.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.baeldung.array; - -public class Find2ndLargestInArray { - - public static int find2ndLargestElement(int[] array) { - int maxElement = array[0]; - int secondLargestElement = -1; - - for (int index = 0; index < array.length; index++) { - if (maxElement <= array[index]) { - secondLargestElement = maxElement; - maxElement = array[index]; - } else if (secondLargestElement < array[index]) { - secondLargestElement = array[index]; - } - } - return secondLargestElement; - } - -} diff --git a/core-java-modules/core-java-arrays/src/main/java/com/baeldung/array/FindElementInArray.java b/core-java-modules/core-java-arrays/src/main/java/com/baeldung/array/FindElementInArray.java deleted file mode 100644 index 6da889fe91..0000000000 --- a/core-java-modules/core-java-arrays/src/main/java/com/baeldung/array/FindElementInArray.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.baeldung.array; - -import java.util.Arrays; - -public class FindElementInArray { - - public static boolean findGivenElementInArrayWithoutUsingStream(int[] array, int element) { - boolean actualResult = false; - - for (int index = 0; index < array.length; index++) { - if (element == array[index]) { - actualResult = true; - break; - } - } - return actualResult; - } - - public static boolean findGivenElementInArrayUsingStream(int[] array, int element) { - return Arrays.stream(array).filter(x -> element == x).findFirst().isPresent(); - } -} diff --git a/core-java-modules/core-java-arrays/src/test/java/com/baeldung/array/Find2ndLargestInArrayUnitTest.java b/core-java-modules/core-java-arrays/src/test/java/com/baeldung/array/Find2ndLargestInArrayUnitTest.java deleted file mode 100644 index 4493f3fbf5..0000000000 --- a/core-java-modules/core-java-arrays/src/test/java/com/baeldung/array/Find2ndLargestInArrayUnitTest.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.baeldung.array; - -import org.junit.Assert; -import org.junit.Test; - -public class Find2ndLargestInArrayUnitTest { - @Test - public void givenAnIntArray_thenFind2ndLargestElement() { - int[] array = { 1, 3, 24, 16, 87, 20 }; - int expected2ndLargest = 24; - - int actualSecondLargestElement = Find2ndLargestInArray.find2ndLargestElement(array); - - Assert.assertEquals(expected2ndLargest, actualSecondLargestElement); - } -} diff --git a/core-java-modules/core-java-arrays/src/test/java/com/baeldung/array/FindElementInArrayUnitTest.java b/core-java-modules/core-java-arrays/src/test/java/com/baeldung/array/FindElementInArrayUnitTest.java deleted file mode 100644 index 887f50ebcc..0000000000 --- a/core-java-modules/core-java-arrays/src/test/java/com/baeldung/array/FindElementInArrayUnitTest.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.baeldung.array; - -import org.junit.Assert; -import org.junit.Test; - -public class FindElementInArrayUnitTest { - @Test - public void givenAnIntArray_whenNotUsingStream_thenFindAnElement() { - int[] array = { 1, 3, 4, 8, 19, 20 }; - int element = 19; - boolean expectedResult = true; - boolean actualResult = FindElementInArray.findGivenElementInArrayWithoutUsingStream(array, element); - Assert.assertEquals(expectedResult, actualResult); - - element = 78; - expectedResult = false; - actualResult = FindElementInArray.findGivenElementInArrayWithoutUsingStream(array, element); - Assert.assertEquals(expectedResult, actualResult); - } - - @Test - public void givenAnIntArray_whenUsingStream_thenFindAnElement() { - int[] array = { 15, 16, 12, 18 }; - int element = 16; - boolean expectedResult = true; - boolean actualResult = FindElementInArray.findGivenElementInArrayUsingStream(array, element); - Assert.assertEquals(expectedResult, actualResult); - - element = 20; - expectedResult = false; - actualResult = FindElementInArray.findGivenElementInArrayUsingStream(array, element); - Assert.assertEquals(expectedResult, actualResult); - } - -} From 53183ba16689ba7a33eefd02179e7f22c443ebaf Mon Sep 17 00:00:00 2001 From: Justin Albano Date: Fri, 14 Feb 2020 10:51:26 -0500 Subject: [PATCH 114/149] BAEL-3744: Corrected test method names and added XML-based tests. --- ...nnotationConfigApplicationContextTest.java | 97 ++++++++++++------- .../src/test/resources/patterns-context.xml | 9 ++ 2 files changed, 70 insertions(+), 36 deletions(-) create mode 100644 spring-core-3/src/test/resources/patterns-context.xml diff --git a/spring-core-3/src/test/java/com/baeldung/spring/patterns/factory/AnnotationConfigApplicationContextTest.java b/spring-core-3/src/test/java/com/baeldung/spring/patterns/factory/AnnotationConfigApplicationContextTest.java index 57a8ece197..074818a639 100644 --- a/spring-core-3/src/test/java/com/baeldung/spring/patterns/factory/AnnotationConfigApplicationContextTest.java +++ b/spring-core-3/src/test/java/com/baeldung/spring/patterns/factory/AnnotationConfigApplicationContextTest.java @@ -1,36 +1,61 @@ -package com.baeldung.spring.patterns.factory; - -import static org.hamcrest.CoreMatchers.is; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.junit.jupiter.api.Assertions.assertNotNull; - -import org.junit.jupiter.api.Test; -import org.springframework.context.ApplicationContext; -import org.springframework.context.annotation.AnnotationConfigApplicationContext; - -public class AnnotationConfigApplicationContextTest { - - @Test - @SuppressWarnings("resource") - public void whenGetSimpleBean_ThenReturnConstructedBean() { - - ApplicationContext context = new AnnotationConfigApplicationContext(ApplicationConfig.class); - - Foo foo = context.getBean(Foo.class); - - assertNotNull(foo); - } - - @Test - @SuppressWarnings("resource") - public void whenGetPrototypeBean_ThenReturnConstructedBean() { - - String expectedName = "Some name"; - ApplicationContext context = new AnnotationConfigApplicationContext(ApplicationConfig.class); - - Bar bar = context.getBean(Bar.class, expectedName); - - assertNotNull(bar); - assertThat(bar.getName(), is(expectedName)); - } -} +package com.baeldung.spring.patterns.factory; + +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.jupiter.api.Assertions.assertNotNull; + +import org.junit.jupiter.api.Test; +import org.springframework.context.ApplicationContext; +import org.springframework.context.annotation.AnnotationConfigApplicationContext; +import org.springframework.context.support.ClassPathXmlApplicationContext; + +public class AnnotationConfigApplicationContextTest { + + @Test + @SuppressWarnings("resource") + public void whenGetSimpleBean_thenReturnConstructedBean() { + + ApplicationContext context = new AnnotationConfigApplicationContext(ApplicationConfig.class); + + Foo foo = context.getBean(Foo.class); + + assertNotNull(foo); + } + + @Test + @SuppressWarnings("resource") + public void whenGetPrototypeBean_thenReturnConstructedBean() { + + String expectedName = "Some name"; + ApplicationContext context = new AnnotationConfigApplicationContext(ApplicationConfig.class); + + Bar bar = context.getBean(Bar.class, expectedName); + + assertNotNull(bar); + assertThat(bar.getName(), is(expectedName)); + } + + @Test + @SuppressWarnings("resource") + public void givenXmlConfiguration_whenGetSimpleBean_thenReturnConstructedBean() { + + ApplicationContext context = new ClassPathXmlApplicationContext("patterns-context.xml"); + + Foo foo = context.getBean(Foo.class); + + assertNotNull(foo); + } + + @Test + @SuppressWarnings("resource") + public void givenXmlConfiguration_whenGetPrototypeBean_thenReturnConstructedBean() { + + String expectedName = "Some name"; + ApplicationContext context = new ClassPathXmlApplicationContext("patterns-context.xml"); + + Bar bar = context.getBean(Bar.class, expectedName); + + assertNotNull(bar); + assertThat(bar.getName(), is(expectedName)); + } +} diff --git a/spring-core-3/src/test/resources/patterns-context.xml b/spring-core-3/src/test/resources/patterns-context.xml new file mode 100644 index 0000000000..106cde79a0 --- /dev/null +++ b/spring-core-3/src/test/resources/patterns-context.xml @@ -0,0 +1,9 @@ + + + + + + \ No newline at end of file From 7b47b484e9feaed3a0c917fef89684562095b178 Mon Sep 17 00:00:00 2001 From: Justin Albano Date: Fri, 14 Feb 2020 15:02:48 -0500 Subject: [PATCH 115/149] BAEL-3744: Corrected unit test class names; split unit tests into two classes. --- ...ationConfigApplicationContextUnitTest.java | 36 +++++++++++++++++++ ...assPathXmlApplicationContextUnitTest.java} | 27 +------------- 2 files changed, 37 insertions(+), 26 deletions(-) create mode 100644 spring-core-3/src/test/java/com/baeldung/spring/patterns/factory/AnnotationConfigApplicationContextUnitTest.java rename spring-core-3/src/test/java/com/baeldung/spring/patterns/factory/{AnnotationConfigApplicationContextTest.java => ClassPathXmlApplicationContextUnitTest.java} (55%) diff --git a/spring-core-3/src/test/java/com/baeldung/spring/patterns/factory/AnnotationConfigApplicationContextUnitTest.java b/spring-core-3/src/test/java/com/baeldung/spring/patterns/factory/AnnotationConfigApplicationContextUnitTest.java new file mode 100644 index 0000000000..66e01f261f --- /dev/null +++ b/spring-core-3/src/test/java/com/baeldung/spring/patterns/factory/AnnotationConfigApplicationContextUnitTest.java @@ -0,0 +1,36 @@ +package com.baeldung.spring.patterns.factory; + +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.jupiter.api.Assertions.assertNotNull; + +import org.junit.jupiter.api.Test; +import org.springframework.context.ApplicationContext; +import org.springframework.context.annotation.AnnotationConfigApplicationContext; + +public class AnnotationConfigApplicationContextUnitTest { + + @Test + @SuppressWarnings("resource") + public void whenGetSimpleBean_thenReturnConstructedBean() { + + ApplicationContext context = new AnnotationConfigApplicationContext(ApplicationConfig.class); + + Foo foo = context.getBean(Foo.class); + + assertNotNull(foo); + } + + @Test + @SuppressWarnings("resource") + public void whenGetPrototypeBean_thenReturnConstructedBean() { + + String expectedName = "Some name"; + ApplicationContext context = new AnnotationConfigApplicationContext(ApplicationConfig.class); + + Bar bar = context.getBean(Bar.class, expectedName); + + assertNotNull(bar); + assertThat(bar.getName(), is(expectedName)); + } +} diff --git a/spring-core-3/src/test/java/com/baeldung/spring/patterns/factory/AnnotationConfigApplicationContextTest.java b/spring-core-3/src/test/java/com/baeldung/spring/patterns/factory/ClassPathXmlApplicationContextUnitTest.java similarity index 55% rename from spring-core-3/src/test/java/com/baeldung/spring/patterns/factory/AnnotationConfigApplicationContextTest.java rename to spring-core-3/src/test/java/com/baeldung/spring/patterns/factory/ClassPathXmlApplicationContextUnitTest.java index 074818a639..bb9988317e 100644 --- a/spring-core-3/src/test/java/com/baeldung/spring/patterns/factory/AnnotationConfigApplicationContextTest.java +++ b/spring-core-3/src/test/java/com/baeldung/spring/patterns/factory/ClassPathXmlApplicationContextUnitTest.java @@ -6,34 +6,9 @@ import static org.junit.jupiter.api.Assertions.assertNotNull; import org.junit.jupiter.api.Test; import org.springframework.context.ApplicationContext; -import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; -public class AnnotationConfigApplicationContextTest { - - @Test - @SuppressWarnings("resource") - public void whenGetSimpleBean_thenReturnConstructedBean() { - - ApplicationContext context = new AnnotationConfigApplicationContext(ApplicationConfig.class); - - Foo foo = context.getBean(Foo.class); - - assertNotNull(foo); - } - - @Test - @SuppressWarnings("resource") - public void whenGetPrototypeBean_thenReturnConstructedBean() { - - String expectedName = "Some name"; - ApplicationContext context = new AnnotationConfigApplicationContext(ApplicationConfig.class); - - Bar bar = context.getBean(Bar.class, expectedName); - - assertNotNull(bar); - assertThat(bar.getName(), is(expectedName)); - } +public class ClassPathXmlApplicationContextUnitTest { @Test @SuppressWarnings("resource") From c4f9d44ef57a2a4984cc94cfcd3bebb25f7ca9fc Mon Sep 17 00:00:00 2001 From: Seun Matt Date: Sat, 15 Feb 2020 01:53:17 +0100 Subject: [PATCH 116/149] improved exception handling in response log filter (#8715) * example code for BAEL-3749 * added live test * added live test * improved exception handling in response log filter --- .../src/main/java/com/baeldung/filters/ResponseLogFilter.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spring-cloud/spring-cloud-zuul/spring-zuul-post-filter/src/main/java/com/baeldung/filters/ResponseLogFilter.java b/spring-cloud/spring-cloud-zuul/spring-zuul-post-filter/src/main/java/com/baeldung/filters/ResponseLogFilter.java index e589e27d46..1fdd89c7f7 100644 --- a/spring-cloud/spring-cloud-zuul/spring-zuul-post-filter/src/main/java/com/baeldung/filters/ResponseLogFilter.java +++ b/spring-cloud/spring-cloud-zuul/spring-zuul-post-filter/src/main/java/com/baeldung/filters/ResponseLogFilter.java @@ -49,8 +49,8 @@ public class ResponseLogFilter extends ZuulFilter { context.setResponseBody(responseData); } - catch (Throwable e) { - e.printStackTrace(); + catch (Exception e) { + logger.error("error occurred at response log filter", e); } return null; From 49cda16d69862c839ea38870496b33e2090ca18b Mon Sep 17 00:00:00 2001 From: dev-chirag <41482403+dev-chirag@users.noreply.github.com> Date: Sat, 15 Feb 2020 22:12:27 +0530 Subject: [PATCH 117/149] BAEL3771 Review Comments (#8726) * BAEL3771: Cache Headers in Spring MVC * BEAL3771: Cache Headers in Spring MVC * BEAL3771: Cache Headers in Spring MVC * BAEL:3771 Few review comments --- .../cache/CacheControlController.java | 21 +++++++++---------- .../java/com/baeldung/cache/WebConfig.java | 2 +- ...CacheControlControllerIntegrationTest.java | 7 ++++--- 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/spring-mvc-java-2/src/main/java/com/baeldung/cache/CacheControlController.java b/spring-mvc-java-2/src/main/java/com/baeldung/cache/CacheControlController.java index 5bf095888e..7305f836cf 100644 --- a/spring-mvc-java-2/src/main/java/com/baeldung/cache/CacheControlController.java +++ b/spring-mvc-java-2/src/main/java/com/baeldung/cache/CacheControlController.java @@ -3,9 +3,8 @@ package com.baeldung.cache; import org.springframework.http.CacheControl; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.context.request.WebRequest; import javax.servlet.http.HttpServletResponse; @@ -16,28 +15,28 @@ import java.util.concurrent.TimeUnit; @Controller public class CacheControlController { - @RequestMapping(value = "/hello/{name}", method = RequestMethod.GET) - public ResponseEntity helloWorld(@PathVariable String name) { + @GetMapping(value = "/hello/{name}") + public ResponseEntity hello(@PathVariable String name) { CacheControl cacheControl = CacheControl.maxAge(60, TimeUnit.SECONDS) - .noTransform() - .mustRevalidate(); + .noTransform() + .mustRevalidate(); return ResponseEntity.ok() - .cacheControl(cacheControl) - .body("Hello " + name); + .cacheControl(cacheControl) + .body("Hello " + name); } - @RequestMapping(value = "/home/{name}", method = RequestMethod.GET) + @GetMapping(value = "/home/{name}") public String home(@PathVariable String name, final HttpServletResponse response) { response.addHeader("Cache-Control", "max-age=60, must-revalidate, no-transform"); return "home"; } - @RequestMapping(value = "/cache/{name}", method = RequestMethod.GET) + @GetMapping(value = "/login/{name}") public ResponseEntity intercept(@PathVariable String name) { return ResponseEntity.ok().body("Hello " + name); } - @RequestMapping(value = "/validate/{name}", method = RequestMethod.GET) + @GetMapping(value = "/productInfo/{name}") public ResponseEntity validate(@PathVariable String name, WebRequest request) { ZoneId zoneId = ZoneId.of("GMT"); diff --git a/spring-mvc-java-2/src/main/java/com/baeldung/cache/WebConfig.java b/spring-mvc-java-2/src/main/java/com/baeldung/cache/WebConfig.java index 728479979c..2f07912e80 100644 --- a/spring-mvc-java-2/src/main/java/com/baeldung/cache/WebConfig.java +++ b/spring-mvc-java-2/src/main/java/com/baeldung/cache/WebConfig.java @@ -35,7 +35,7 @@ public class WebConfig implements WebMvcConfigurer { WebContentInterceptor interceptor = new WebContentInterceptor(); interceptor.addCacheMapping(CacheControl.maxAge(60, TimeUnit.SECONDS) .noTransform() - .mustRevalidate(), "/cache/*"); + .mustRevalidate(), "/login/*"); registry.addInterceptor(interceptor); } } \ No newline at end of file diff --git a/spring-mvc-java-2/src/test/java/com/baeldung/cache/CacheControlControllerIntegrationTest.java b/spring-mvc-java-2/src/test/java/com/baeldung/cache/CacheControlControllerIntegrationTest.java index ef408038ae..7acfe5e480 100644 --- a/spring-mvc-java-2/src/test/java/com/baeldung/cache/CacheControlControllerIntegrationTest.java +++ b/spring-mvc-java-2/src/test/java/com/baeldung/cache/CacheControlControllerIntegrationTest.java @@ -37,7 +37,8 @@ public class CacheControlControllerIntegrationTest { this.mockMvc.perform(MockMvcRequestBuilders.get("/hello/baeldung")) .andDo(MockMvcResultHandlers.print()) .andExpect(MockMvcResultMatchers.status().isOk()) - .andExpect(MockMvcResultMatchers.header().string("Cache-Control","max-age=60, must-revalidate, no-transform")); + .andExpect(MockMvcResultMatchers.header() + .string("Cache-Control","max-age=60, must-revalidate, no-transform")); } @Test @@ -59,7 +60,7 @@ public class CacheControlControllerIntegrationTest { @Test void whenInterceptor_thenReturnCacheHeader() throws Exception { - this.mockMvc.perform(MockMvcRequestBuilders.get("/cache/baeldung")) + this.mockMvc.perform(MockMvcRequestBuilders.get("/login/baeldung")) .andDo(MockMvcResultHandlers.print()) .andExpect(MockMvcResultMatchers.status().isOk()) .andExpect(MockMvcResultMatchers.header().string("Cache-Control","max-age=60, must-revalidate, no-transform")); @@ -69,7 +70,7 @@ public class CacheControlControllerIntegrationTest { void whenValidate_thenReturnCacheHeader() throws Exception { HttpHeaders headers = new HttpHeaders(); headers.add(IF_UNMODIFIED_SINCE, "Tue, 04 Feb 2020 19:57:25 GMT"); - this.mockMvc.perform(MockMvcRequestBuilders.get("/validate/baeldung").headers(headers)) + this.mockMvc.perform(MockMvcRequestBuilders.get("/productInfo/baeldung").headers(headers)) .andDo(MockMvcResultHandlers.print()) .andExpect(MockMvcResultMatchers.status().is(304)); } From 522e076018d76333f21c05ed5f2aaac54c1013a8 Mon Sep 17 00:00:00 2001 From: mikr Date: Sat, 15 Feb 2020 20:26:00 +0100 Subject: [PATCH 118/149] Java-72 Rename Spring Security LDAP module --- spring-security-modules/pom.xml | 3 +-- .../README.md | 0 .../pom.xml | 4 ++-- .../src/main/java/org/baeldung/SampleLDAPApplication.java | 0 .../src/main/java/org/baeldung/controller/MyController.java | 0 .../src/main/java/org/baeldung/security/SecurityConfig.java | 0 .../src/main/resources/logback.xml | 0 .../src/main/resources/static/css/bootstrap.min.css | 0 .../src/main/resources/templates/error.html | 0 .../src/main/resources/templates/home.html | 0 .../src/main/resources/templates/login.html | 0 .../src/main/resources/users.ldif | 0 .../src/main/resources/webSecurityConfig.xml | 0 .../src/test/java/org/baeldung/SpringContextTest.java | 0 .../src/test/resources/.gitignore | 0 15 files changed, 3 insertions(+), 4 deletions(-) rename spring-security-modules/{spring-security-mvc-ldap => spring-security-ldap}/README.md (100%) rename spring-security-modules/{spring-security-mvc-ldap => spring-security-ldap}/pom.xml (95%) rename spring-security-modules/{spring-security-mvc-ldap => spring-security-ldap}/src/main/java/org/baeldung/SampleLDAPApplication.java (100%) rename spring-security-modules/{spring-security-mvc-ldap => spring-security-ldap}/src/main/java/org/baeldung/controller/MyController.java (100%) rename spring-security-modules/{spring-security-mvc-ldap => spring-security-ldap}/src/main/java/org/baeldung/security/SecurityConfig.java (100%) rename spring-security-modules/{spring-security-mvc-ldap => spring-security-ldap}/src/main/resources/logback.xml (100%) rename spring-security-modules/{spring-security-mvc-ldap => spring-security-ldap}/src/main/resources/static/css/bootstrap.min.css (100%) rename spring-security-modules/{spring-security-mvc-ldap => spring-security-ldap}/src/main/resources/templates/error.html (100%) rename spring-security-modules/{spring-security-mvc-ldap => spring-security-ldap}/src/main/resources/templates/home.html (100%) rename spring-security-modules/{spring-security-mvc-ldap => spring-security-ldap}/src/main/resources/templates/login.html (100%) rename spring-security-modules/{spring-security-mvc-ldap => spring-security-ldap}/src/main/resources/users.ldif (100%) rename spring-security-modules/{spring-security-mvc-ldap => spring-security-ldap}/src/main/resources/webSecurityConfig.xml (100%) rename spring-security-modules/{spring-security-mvc-ldap => spring-security-ldap}/src/test/java/org/baeldung/SpringContextTest.java (100%) rename spring-security-modules/{spring-security-mvc-ldap => spring-security-ldap}/src/test/resources/.gitignore (100%) diff --git a/spring-security-modules/pom.xml b/spring-security-modules/pom.xml index 7de3009f47..85b86f00fc 100644 --- a/spring-security-modules/pom.xml +++ b/spring-security-modules/pom.xml @@ -25,13 +25,12 @@ spring-security-mvc-custom spring-security-mvc-digest-auth spring-security-mvc-jsonview - spring-security-mvc-ldap + spring-security-ldap spring-security-mvc-login spring-security-mvc-persisted-remember-me spring-security-mvc-socket spring-security-oidc spring-security-react - spring-security-rest spring-security-rest-basic-auth spring-security-rest-custom diff --git a/spring-security-modules/spring-security-mvc-ldap/README.md b/spring-security-modules/spring-security-ldap/README.md similarity index 100% rename from spring-security-modules/spring-security-mvc-ldap/README.md rename to spring-security-modules/spring-security-ldap/README.md diff --git a/spring-security-modules/spring-security-mvc-ldap/pom.xml b/spring-security-modules/spring-security-ldap/pom.xml similarity index 95% rename from spring-security-modules/spring-security-mvc-ldap/pom.xml rename to spring-security-modules/spring-security-ldap/pom.xml index 2f227d7908..f5e8856648 100644 --- a/spring-security-modules/spring-security-mvc-ldap/pom.xml +++ b/spring-security-modules/spring-security-ldap/pom.xml @@ -2,9 +2,9 @@ 4.0.0 - spring-security-mvc-ldap + spring-security-ldap 0.1-SNAPSHOT - spring-security-mvc-ldap + spring-security-ldap war diff --git a/spring-security-modules/spring-security-mvc-ldap/src/main/java/org/baeldung/SampleLDAPApplication.java b/spring-security-modules/spring-security-ldap/src/main/java/org/baeldung/SampleLDAPApplication.java similarity index 100% rename from spring-security-modules/spring-security-mvc-ldap/src/main/java/org/baeldung/SampleLDAPApplication.java rename to spring-security-modules/spring-security-ldap/src/main/java/org/baeldung/SampleLDAPApplication.java diff --git a/spring-security-modules/spring-security-mvc-ldap/src/main/java/org/baeldung/controller/MyController.java b/spring-security-modules/spring-security-ldap/src/main/java/org/baeldung/controller/MyController.java similarity index 100% rename from spring-security-modules/spring-security-mvc-ldap/src/main/java/org/baeldung/controller/MyController.java rename to spring-security-modules/spring-security-ldap/src/main/java/org/baeldung/controller/MyController.java diff --git a/spring-security-modules/spring-security-mvc-ldap/src/main/java/org/baeldung/security/SecurityConfig.java b/spring-security-modules/spring-security-ldap/src/main/java/org/baeldung/security/SecurityConfig.java similarity index 100% rename from spring-security-modules/spring-security-mvc-ldap/src/main/java/org/baeldung/security/SecurityConfig.java rename to spring-security-modules/spring-security-ldap/src/main/java/org/baeldung/security/SecurityConfig.java diff --git a/spring-security-modules/spring-security-mvc-ldap/src/main/resources/logback.xml b/spring-security-modules/spring-security-ldap/src/main/resources/logback.xml similarity index 100% rename from spring-security-modules/spring-security-mvc-ldap/src/main/resources/logback.xml rename to spring-security-modules/spring-security-ldap/src/main/resources/logback.xml diff --git a/spring-security-modules/spring-security-mvc-ldap/src/main/resources/static/css/bootstrap.min.css b/spring-security-modules/spring-security-ldap/src/main/resources/static/css/bootstrap.min.css similarity index 100% rename from spring-security-modules/spring-security-mvc-ldap/src/main/resources/static/css/bootstrap.min.css rename to spring-security-modules/spring-security-ldap/src/main/resources/static/css/bootstrap.min.css diff --git a/spring-security-modules/spring-security-mvc-ldap/src/main/resources/templates/error.html b/spring-security-modules/spring-security-ldap/src/main/resources/templates/error.html similarity index 100% rename from spring-security-modules/spring-security-mvc-ldap/src/main/resources/templates/error.html rename to spring-security-modules/spring-security-ldap/src/main/resources/templates/error.html diff --git a/spring-security-modules/spring-security-mvc-ldap/src/main/resources/templates/home.html b/spring-security-modules/spring-security-ldap/src/main/resources/templates/home.html similarity index 100% rename from spring-security-modules/spring-security-mvc-ldap/src/main/resources/templates/home.html rename to spring-security-modules/spring-security-ldap/src/main/resources/templates/home.html diff --git a/spring-security-modules/spring-security-mvc-ldap/src/main/resources/templates/login.html b/spring-security-modules/spring-security-ldap/src/main/resources/templates/login.html similarity index 100% rename from spring-security-modules/spring-security-mvc-ldap/src/main/resources/templates/login.html rename to spring-security-modules/spring-security-ldap/src/main/resources/templates/login.html diff --git a/spring-security-modules/spring-security-mvc-ldap/src/main/resources/users.ldif b/spring-security-modules/spring-security-ldap/src/main/resources/users.ldif similarity index 100% rename from spring-security-modules/spring-security-mvc-ldap/src/main/resources/users.ldif rename to spring-security-modules/spring-security-ldap/src/main/resources/users.ldif diff --git a/spring-security-modules/spring-security-mvc-ldap/src/main/resources/webSecurityConfig.xml b/spring-security-modules/spring-security-ldap/src/main/resources/webSecurityConfig.xml similarity index 100% rename from spring-security-modules/spring-security-mvc-ldap/src/main/resources/webSecurityConfig.xml rename to spring-security-modules/spring-security-ldap/src/main/resources/webSecurityConfig.xml diff --git a/spring-security-modules/spring-security-mvc-ldap/src/test/java/org/baeldung/SpringContextTest.java b/spring-security-modules/spring-security-ldap/src/test/java/org/baeldung/SpringContextTest.java similarity index 100% rename from spring-security-modules/spring-security-mvc-ldap/src/test/java/org/baeldung/SpringContextTest.java rename to spring-security-modules/spring-security-ldap/src/test/java/org/baeldung/SpringContextTest.java diff --git a/spring-security-modules/spring-security-mvc-ldap/src/test/resources/.gitignore b/spring-security-modules/spring-security-ldap/src/test/resources/.gitignore similarity index 100% rename from spring-security-modules/spring-security-mvc-ldap/src/test/resources/.gitignore rename to spring-security-modules/spring-security-ldap/src/test/resources/.gitignore From fea250ee5d56ce54a3ca5d047a608e97eb580b4d Mon Sep 17 00:00:00 2001 From: mikr Date: Sat, 15 Feb 2020 21:34:31 +0100 Subject: [PATCH 119/149] Java-41 Fix pom for blade module --- blade/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blade/pom.xml b/blade/pom.xml index 6d73913e25..f463c7f077 100644 --- a/blade/pom.xml +++ b/blade/pom.xml @@ -106,7 +106,7 @@ java -jar - sample-blade-app.jar + blade.jar From 9c505d2ac152d11a5e07acc0f522c70790cd7b60 Mon Sep 17 00:00:00 2001 From: Florin Hriscu Date: Sun, 16 Feb 2020 00:29:50 +0200 Subject: [PATCH 120/149] BAEL-3502 Remove ArraysDeepEqualsUnitTest file from core-java-arrays-2 module. --- .../deepequals/ArraysDeepEqualsUnitTest.java | 97 ------------------- 1 file changed, 97 deletions(-) delete mode 100644 core-java-modules/core-java-arrays-2/src/test/java/com/baeldung/arrays/deepequals/ArraysDeepEqualsUnitTest.java diff --git a/core-java-modules/core-java-arrays-2/src/test/java/com/baeldung/arrays/deepequals/ArraysDeepEqualsUnitTest.java b/core-java-modules/core-java-arrays-2/src/test/java/com/baeldung/arrays/deepequals/ArraysDeepEqualsUnitTest.java deleted file mode 100644 index 5e01d3f9b5..0000000000 --- a/core-java-modules/core-java-arrays-2/src/test/java/com/baeldung/arrays/deepequals/ArraysDeepEqualsUnitTest.java +++ /dev/null @@ -1,97 +0,0 @@ -package com.baeldung.arrays.deepequals; - -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; - -import java.util.Arrays; -import java.util.Objects; - -import org.junit.jupiter.api.Test; - -public class ArraysDeepEqualsUnitTest { - - class Person { - private int id; - private String name; - private int age; - - Person(int id, String name, int age) { - this.id = id; - this.name = name; - this.age = age; - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj == null) { - return false; - } - if (!(obj instanceof Person)) - return false; - Person person = (Person) obj; - return id == person.id && name.equals(person.name) && age == person.age; - } - - @Override - public int hashCode() { - return Objects.hash(id, name, age); - } - } - - @Test - void givenTwoUnidimensionalObjectTypeArrays_whenUsingEqualsAndDeepEquals_thenBothShouldReturnTrue() { - Object[] anArray = new Object[] { "string1", "string2", "string3" }; - Object[] anotherArray = new Object[] { "string1", "string2", "string3" }; - - assertTrue(Arrays.equals(anArray, anotherArray)); - assertTrue(Arrays.deepEquals(anArray, anotherArray)); - } - - @Test - void givenTwoUnidimensionalObjectTypeArraysWithNullElements_whenUsingEqualsAndDeepEquals_thenBothShouldReturnTrue() { - Object[] anArray = new Object[] { "string1", null, "string3" }; - Object[] anotherArray = new Object[] { "string1", null, "string3" }; - - assertTrue(Arrays.equals(anArray, anotherArray)); - assertTrue(Arrays.deepEquals(anArray, anotherArray)); - } - - @Test - void givenTwoUnidimensionalObjectTypeArraysWithNestedElements_whenUsingEqualsAndDeepEquals_thenShouldReturnDifferently() { - Object[] anArray = new Object[] { "string1", null, new String[] { "nestedString1", "nestedString2" } }; - Object[] anotherArray = new Object[] { "string1", null, new String[] { "nestedString1", "nestedString2" } }; - - assertFalse(Arrays.equals(anArray, anotherArray)); - assertTrue(Arrays.deepEquals(anArray, anotherArray)); - } - - @Test - void givenTwoMultidimensionalPrimitiveTypeArrays_whenUsingEqualsAndDeepEquals_thenBothShouldReturnDifferently() { - int[][] anArray = { { 1, 2, 3 }, { 4, 5, 6, 9 }, { 7 } }; - int[][] anotherArray = { { 1, 2, 3 }, { 4, 5, 6, 9 }, { 7 } }; - - assertFalse(Arrays.equals(anArray, anotherArray)); - assertTrue(Arrays.deepEquals(anArray, anotherArray)); - } - - @Test - void givenTwoMultidimensionalObjectTypeArrays_whenUsingEqualsAndDeepEquals_thenBothShouldReturnDifferently() { - Person personArray1[][] = { { new Person(1, "John", 22), new Person(2, "Mike", 23) }, { new Person(3, "Steve", 27), new Person(4, "Gary", 28) } }; - Person personArray2[][] = { { new Person(1, "John", 22), new Person(2, "Mike", 23) }, { new Person(3, "Steve", 27), new Person(4, "Gary", 28) } }; - - assertFalse(Arrays.equals(personArray1, personArray2)); - assertTrue(Arrays.deepEquals(personArray1, personArray2)); - } - - @Test - void givenTwoMultidimensionalObjectTypeArrays_whenUsingDeepEqualsFromObjectsAndArraysClasses_thenBothShouldReturnTrue() { - Person personArray1[][] = { { new Person(1, "John", 22), new Person(2, "Mike", 23) }, { new Person(3, "Steve", 27), new Person(4, "Gary", 28) } }; - Person personArray2[][] = { { new Person(1, "John", 22), new Person(2, "Mike", 23) }, { new Person(3, "Steve", 27), new Person(4, "Gary", 28) } }; - - assertTrue(Objects.deepEquals(personArray1, personArray2)); - assertTrue(Arrays.deepEquals(personArray1, personArray2)); - } -} From 319fbc12c57942f2c2141dd7ef77c5f8abfcb08c Mon Sep 17 00:00:00 2001 From: Florin Hriscu Date: Sun, 16 Feb 2020 00:33:19 +0200 Subject: [PATCH 121/149] BAEL-3502 Add ArraysDeepEqualsUnitTest.java inside new core-java-arrays-3 module. --- .../core-java-arrays-3/README.md | 5 + core-java-modules/core-java-arrays-3/pom.xml | 31 ++++++ .../deepequals/ArraysDeepEqualsUnitTest.java | 100 ++++++++++++++++++ 3 files changed, 136 insertions(+) create mode 100644 core-java-modules/core-java-arrays-3/README.md create mode 100644 core-java-modules/core-java-arrays-3/pom.xml create mode 100644 core-java-modules/core-java-arrays-3/src/test/java/com/baeldung/arrays/deepequals/ArraysDeepEqualsUnitTest.java diff --git a/core-java-modules/core-java-arrays-3/README.md b/core-java-modules/core-java-arrays-3/README.md new file mode 100644 index 0000000000..9f2885a2ce --- /dev/null +++ b/core-java-modules/core-java-arrays-3/README.md @@ -0,0 +1,5 @@ +## Core Java Arrays (Part 3) + +This module contains articles about Java arrays + +## Relevant Articles diff --git a/core-java-modules/core-java-arrays-3/pom.xml b/core-java-modules/core-java-arrays-3/pom.xml new file mode 100644 index 0000000000..b39a9af653 --- /dev/null +++ b/core-java-modules/core-java-arrays-3/pom.xml @@ -0,0 +1,31 @@ + + + 4.0.0 + core-java-arrays-3 + 0.1.0-SNAPSHOT + core-java-arrays-3 + jar + + + com.baeldung + parent-java + 0.0.1-SNAPSHOT + ../../parent-java + + + + + org.assertj + assertj-core + ${assertj.version} + test + + + + + 3.14.0 + + + \ No newline at end of file diff --git a/core-java-modules/core-java-arrays-3/src/test/java/com/baeldung/arrays/deepequals/ArraysDeepEqualsUnitTest.java b/core-java-modules/core-java-arrays-3/src/test/java/com/baeldung/arrays/deepequals/ArraysDeepEqualsUnitTest.java new file mode 100644 index 0000000000..aa577ea7bd --- /dev/null +++ b/core-java-modules/core-java-arrays-3/src/test/java/com/baeldung/arrays/deepequals/ArraysDeepEqualsUnitTest.java @@ -0,0 +1,100 @@ +package com.baeldung.arrays.deepequals; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import java.util.Arrays; +import java.util.Objects; +import org.junit.jupiter.api.Test; + +public class ArraysDeepEqualsUnitTest { + + class Person { + private int id; + private String name; + private int age; + + Person(int id, String name, int age) { + this.id = id; + this.name = name; + this.age = age; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (!(obj instanceof Person)) + return false; + Person person = (Person) obj; + return id == person.id && name.equals(person.name) && age == person.age; + } + + @Override + public int hashCode() { + return Objects.hash(id, name, age); + } + } + + @Test + void givenTwoUnidimensionalObjectTypeArrays_whenUsingEqualsAndDeepEquals_thenBothShouldReturnTrue() { + Object[] anArray = new Object[] { "string1", "string2", "string3" }; + Object[] anotherArray = new Object[] { "string1", "string2", "string3" }; + + assertTrue(Arrays.equals(anArray, anotherArray)); + assertTrue(Arrays.deepEquals(anArray, anotherArray)); + } + + @Test + void givenTwoUnidimensionalObjectTypeArraysWithNullElements_whenUsingEqualsAndDeepEquals_thenBothShouldReturnTrue() { + Object[] anArray = new Object[] { "string1", null, "string3" }; + Object[] anotherArray = new Object[] { "string1", null, "string3" }; + + assertTrue(Arrays.equals(anArray, anotherArray)); + assertTrue(Arrays.deepEquals(anArray, anotherArray)); + } + + @Test + void givenTwoUnidimensionalObjectTypeArraysWithNestedElements_whenUsingEqualsAndDeepEquals_thenShouldReturnDifferently() { + Object[] anArray = new Object[] { "string1", null, new String[] { "nestedString1", "nestedString2" } }; + Object[] anotherArray = new Object[] { "string1", null, new String[] { "nestedString1", "nestedString2" } }; + + assertFalse(Arrays.equals(anArray, anotherArray)); + assertTrue(Arrays.deepEquals(anArray, anotherArray)); + } + + @Test + void givenTwoMultidimensionalPrimitiveTypeArrays_whenUsingEqualsAndDeepEquals_thenBothShouldReturnDifferently() { + int[][] anArray = { { 1, 2, 3 }, { 4, 5, 6, 9 }, { 7 } }; + int[][] anotherArray = { { 1, 2, 3 }, { 4, 5, 6, 9 }, { 7 } }; + + assertFalse(Arrays.equals(anArray, anotherArray)); + assertTrue(Arrays.deepEquals(anArray, anotherArray)); + } + + @Test + void givenTwoMultidimensionalObjectTypeArrays_whenUsingEqualsAndDeepEquals_thenBothShouldReturnDifferently() { + Person personArray1[][] = { { new Person(1, "John", 22), new Person(2, "Mike", 23) }, + { new Person(3, "Steve", 27), new Person(4, "Gary", 28) } }; + Person personArray2[][] = { { new Person(1, "John", 22), new Person(2, "Mike", 23) }, + { new Person(3, "Steve", 27), new Person(4, "Gary", 28) } }; + + assertFalse(Arrays.equals(personArray1, personArray2)); + assertTrue(Arrays.deepEquals(personArray1, personArray2)); + } + + @Test + void givenTwoMultidimensionalObjectTypeArrays_whenUsingDeepEqualsFromObjectsAndArraysClasses_thenBothShouldReturnTrue() { + Person personArray1[][] = { { new Person(1, "John", 22), new Person(2, "Mike", 23) }, + { new Person(3, "Steve", 27), new Person(4, "Gary", 28) } }; + Person personArray2[][] = { { new Person(1, "John", 22), new Person(2, "Mike", 23) }, + { new Person(3, "Steve", 27), new Person(4, "Gary", 28) } }; + + assertTrue(Objects.deepEquals(personArray1, personArray2)); + assertTrue(Arrays.deepEquals(personArray1, personArray2)); + } +} From af1fd4e1b0df9085378aca2127721d1a554f7a8f Mon Sep 17 00:00:00 2001 From: Florin Hriscu Date: Sun, 16 Feb 2020 00:33:48 +0200 Subject: [PATCH 122/149] BAEL-3502 Bind core-java-arrays-3 module to parent module. --- core-java-modules/pom.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/core-java-modules/pom.xml b/core-java-modules/pom.xml index 904cec2815..771d5a5d61 100644 --- a/core-java-modules/pom.xml +++ b/core-java-modules/pom.xml @@ -31,6 +31,7 @@ core-java-annotations core-java-arrays core-java-arrays-2 + core-java-arrays-3 core-java-collections core-java-collections-2 From 394711c03efcca7dd6ae7e896c4c9aa6737cab4f Mon Sep 17 00:00:00 2001 From: Priyesh Mashelkar Date: Sat, 15 Feb 2020 23:16:12 +0000 Subject: [PATCH 123/149] BAEL-3499 Fixed integration test --- .../spring-boot-properties/src/main/resources/build.properties | 3 ++- .../buildproperties/BuildInfoServiceIntegrationTest.java | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/spring-boot-modules/spring-boot-properties/src/main/resources/build.properties b/spring-boot-modules/spring-boot-properties/src/main/resources/build.properties index f3d2e9b15b..5bd0a50a17 100644 --- a/spring-boot-modules/spring-boot-properties/src/main/resources/build.properties +++ b/spring-boot-modules/spring-boot-properties/src/main/resources/build.properties @@ -1 +1,2 @@ -application-version=@project.version@ \ No newline at end of file +application-version=@project.version@ +application-description=@project.description@ \ No newline at end of file diff --git a/spring-boot-modules/spring-boot-properties/src/test/java/com/baeldung/buildproperties/BuildInfoServiceIntegrationTest.java b/spring-boot-modules/spring-boot-properties/src/test/java/com/baeldung/buildproperties/BuildInfoServiceIntegrationTest.java index cb056fe56d..2cb27e1844 100644 --- a/spring-boot-modules/spring-boot-properties/src/test/java/com/baeldung/buildproperties/BuildInfoServiceIntegrationTest.java +++ b/spring-boot-modules/spring-boot-properties/src/test/java/com/baeldung/buildproperties/BuildInfoServiceIntegrationTest.java @@ -18,7 +18,7 @@ class BuildInfoServiceIntegrationTest { @Test void whenGetApplicationDescription_thenSuccess() { - assertThat(service.getApplicationDescription(), Matchers.is("This is simple boot application for Spring boot actuator test")); + assertThat(service.getApplicationDescription(), Matchers.is("Spring Boot Properties Module")); assertThat(service.getApplicationVersion(), Matchers.is("0.0.1-SNAPSHOT")); } } From dcccf21e0d2e08547d071817b9a109f3490fcd99 Mon Sep 17 00:00:00 2001 From: Florin Hriscu Date: Sun, 16 Feb 2020 17:34:31 +0200 Subject: [PATCH 124/149] BAEL-3502 Apply correct formatter. --- core-java-modules/core-java-arrays-3/pom.xml | 48 ++--- .../deepequals/ArraysDeepEqualsUnitTest.java | 142 ++++++------- core-java-modules/pom.xml | 199 +++++++++--------- 3 files changed, 191 insertions(+), 198 deletions(-) diff --git a/core-java-modules/core-java-arrays-3/pom.xml b/core-java-modules/core-java-arrays-3/pom.xml index b39a9af653..516d9b2b37 100644 --- a/core-java-modules/core-java-arrays-3/pom.xml +++ b/core-java-modules/core-java-arrays-3/pom.xml @@ -1,31 +1,31 @@ - 4.0.0 - core-java-arrays-3 - 0.1.0-SNAPSHOT - core-java-arrays-3 - jar + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + 4.0.0 + core-java-arrays-3 + 0.1.0-SNAPSHOT + core-java-arrays-3 + jar - - com.baeldung - parent-java - 0.0.1-SNAPSHOT - ../../parent-java - + + com.baeldung + parent-java + 0.0.1-SNAPSHOT + ../../parent-java + - - - org.assertj - assertj-core - ${assertj.version} - test - - + + + org.assertj + assertj-core + ${assertj.version} + test + + - - 3.14.0 - + + 3.14.0 + \ No newline at end of file diff --git a/core-java-modules/core-java-arrays-3/src/test/java/com/baeldung/arrays/deepequals/ArraysDeepEqualsUnitTest.java b/core-java-modules/core-java-arrays-3/src/test/java/com/baeldung/arrays/deepequals/ArraysDeepEqualsUnitTest.java index aa577ea7bd..a9b8ed7e3f 100644 --- a/core-java-modules/core-java-arrays-3/src/test/java/com/baeldung/arrays/deepequals/ArraysDeepEqualsUnitTest.java +++ b/core-java-modules/core-java-arrays-3/src/test/java/com/baeldung/arrays/deepequals/ArraysDeepEqualsUnitTest.java @@ -9,92 +9,88 @@ import org.junit.jupiter.api.Test; public class ArraysDeepEqualsUnitTest { - class Person { - private int id; - private String name; - private int age; + class Person { + private int id; + private String name; + private int age; - Person(int id, String name, int age) { - this.id = id; - this.name = name; - this.age = age; - } + Person(int id, String name, int age) { + this.id = id; + this.name = name; + this.age = age; + } - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj == null) { - return false; - } - if (!(obj instanceof Person)) - return false; - Person person = (Person) obj; - return id == person.id && name.equals(person.name) && age == person.age; - } + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (!(obj instanceof Person)) + return false; + Person person = (Person) obj; + return id == person.id && name.equals(person.name) && age == person.age; + } - @Override - public int hashCode() { - return Objects.hash(id, name, age); - } - } + @Override + public int hashCode() { + return Objects.hash(id, name, age); + } + } - @Test - void givenTwoUnidimensionalObjectTypeArrays_whenUsingEqualsAndDeepEquals_thenBothShouldReturnTrue() { - Object[] anArray = new Object[] { "string1", "string2", "string3" }; - Object[] anotherArray = new Object[] { "string1", "string2", "string3" }; + @Test + void givenTwoUnidimensionalObjectTypeArrays_whenUsingEqualsAndDeepEquals_thenBothShouldReturnTrue() { + Object[] anArray = new Object[] { "string1", "string2", "string3" }; + Object[] anotherArray = new Object[] { "string1", "string2", "string3" }; - assertTrue(Arrays.equals(anArray, anotherArray)); - assertTrue(Arrays.deepEquals(anArray, anotherArray)); - } + assertTrue(Arrays.equals(anArray, anotherArray)); + assertTrue(Arrays.deepEquals(anArray, anotherArray)); + } - @Test - void givenTwoUnidimensionalObjectTypeArraysWithNullElements_whenUsingEqualsAndDeepEquals_thenBothShouldReturnTrue() { - Object[] anArray = new Object[] { "string1", null, "string3" }; - Object[] anotherArray = new Object[] { "string1", null, "string3" }; + @Test + void givenTwoUnidimensionalObjectTypeArraysWithNullElements_whenUsingEqualsAndDeepEquals_thenBothShouldReturnTrue() { + Object[] anArray = new Object[] { "string1", null, "string3" }; + Object[] anotherArray = new Object[] { "string1", null, "string3" }; - assertTrue(Arrays.equals(anArray, anotherArray)); - assertTrue(Arrays.deepEquals(anArray, anotherArray)); - } + assertTrue(Arrays.equals(anArray, anotherArray)); + assertTrue(Arrays.deepEquals(anArray, anotherArray)); + } - @Test - void givenTwoUnidimensionalObjectTypeArraysWithNestedElements_whenUsingEqualsAndDeepEquals_thenShouldReturnDifferently() { - Object[] anArray = new Object[] { "string1", null, new String[] { "nestedString1", "nestedString2" } }; - Object[] anotherArray = new Object[] { "string1", null, new String[] { "nestedString1", "nestedString2" } }; + @Test + void givenTwoUnidimensionalObjectTypeArraysWithNestedElements_whenUsingEqualsAndDeepEquals_thenShouldReturnDifferently() { + Object[] anArray = new Object[] { "string1", null, new String[] { "nestedString1", "nestedString2" } }; + Object[] anotherArray = new Object[] { "string1", null, new String[] { "nestedString1", "nestedString2" } }; - assertFalse(Arrays.equals(anArray, anotherArray)); - assertTrue(Arrays.deepEquals(anArray, anotherArray)); - } + assertFalse(Arrays.equals(anArray, anotherArray)); + assertTrue(Arrays.deepEquals(anArray, anotherArray)); + } - @Test - void givenTwoMultidimensionalPrimitiveTypeArrays_whenUsingEqualsAndDeepEquals_thenBothShouldReturnDifferently() { - int[][] anArray = { { 1, 2, 3 }, { 4, 5, 6, 9 }, { 7 } }; - int[][] anotherArray = { { 1, 2, 3 }, { 4, 5, 6, 9 }, { 7 } }; + @Test + void givenTwoMultidimensionalPrimitiveTypeArrays_whenUsingEqualsAndDeepEquals_thenBothShouldReturnDifferently() { + int[][] anArray = { { 1, 2, 3 }, { 4, 5, 6, 9 }, { 7 } }; + int[][] anotherArray = { { 1, 2, 3 }, { 4, 5, 6, 9 }, { 7 } }; - assertFalse(Arrays.equals(anArray, anotherArray)); - assertTrue(Arrays.deepEquals(anArray, anotherArray)); - } + assertFalse(Arrays.equals(anArray, anotherArray)); + assertTrue(Arrays.deepEquals(anArray, anotherArray)); + } - @Test - void givenTwoMultidimensionalObjectTypeArrays_whenUsingEqualsAndDeepEquals_thenBothShouldReturnDifferently() { - Person personArray1[][] = { { new Person(1, "John", 22), new Person(2, "Mike", 23) }, - { new Person(3, "Steve", 27), new Person(4, "Gary", 28) } }; - Person personArray2[][] = { { new Person(1, "John", 22), new Person(2, "Mike", 23) }, - { new Person(3, "Steve", 27), new Person(4, "Gary", 28) } }; + @Test + void givenTwoMultidimensionalObjectTypeArrays_whenUsingEqualsAndDeepEquals_thenBothShouldReturnDifferently() { + Person personArray1[][] = { { new Person(1, "John", 22), new Person(2, "Mike", 23) }, { new Person(3, "Steve", 27), new Person(4, "Gary", 28) } }; + Person personArray2[][] = { { new Person(1, "John", 22), new Person(2, "Mike", 23) }, { new Person(3, "Steve", 27), new Person(4, "Gary", 28) } }; - assertFalse(Arrays.equals(personArray1, personArray2)); - assertTrue(Arrays.deepEquals(personArray1, personArray2)); - } + assertFalse(Arrays.equals(personArray1, personArray2)); + assertTrue(Arrays.deepEquals(personArray1, personArray2)); + } - @Test - void givenTwoMultidimensionalObjectTypeArrays_whenUsingDeepEqualsFromObjectsAndArraysClasses_thenBothShouldReturnTrue() { - Person personArray1[][] = { { new Person(1, "John", 22), new Person(2, "Mike", 23) }, - { new Person(3, "Steve", 27), new Person(4, "Gary", 28) } }; - Person personArray2[][] = { { new Person(1, "John", 22), new Person(2, "Mike", 23) }, - { new Person(3, "Steve", 27), new Person(4, "Gary", 28) } }; + @Test + void givenTwoMultidimensionalObjectTypeArrays_whenUsingDeepEqualsFromObjectsAndArraysClasses_thenBothShouldReturnTrue() { + Person personArray1[][] = { { new Person(1, "John", 22), new Person(2, "Mike", 23) }, { new Person(3, "Steve", 27), new Person(4, "Gary", 28) } }; + Person personArray2[][] = { { new Person(1, "John", 22), new Person(2, "Mike", 23) }, { new Person(3, "Steve", 27), new Person(4, "Gary", 28) } }; - assertTrue(Objects.deepEquals(personArray1, personArray2)); - assertTrue(Arrays.deepEquals(personArray1, personArray2)); - } + assertTrue(Objects.deepEquals(personArray1, personArray2)); + assertTrue(Arrays.deepEquals(personArray1, personArray2)); + } } diff --git a/core-java-modules/pom.xml b/core-java-modules/pom.xml index 771d5a5d61..60e1dbf3ef 100644 --- a/core-java-modules/pom.xml +++ b/core-java-modules/pom.xml @@ -1,124 +1,121 @@ - - 4.0.0 - com.baeldung.core-java-modules - core-java-modules - core-java-modules - pom + + 4.0.0 + com.baeldung.core-java-modules + core-java-modules + core-java-modules + pom - - com.baeldung - parent-modules - 1.0.0-SNAPSHOT - + + com.baeldung + parent-modules + 1.0.0-SNAPSHOT + - - core-java - - - - - core-java-8 - core-java-8-2 + + core-java + + + + + core-java-8 + core-java-8-2 - - - - - + + + + + - core-java-annotations - core-java-arrays - core-java-arrays-2 + core-java-annotations + core-java-arrays + core-java-arrays-2 core-java-arrays-3 - core-java-collections - core-java-collections-2 - core-java-collections-3 - core-java-collections-array-list - core-java-collections-list - core-java-collections-list-2 - core-java-collections-list-3 - core-java-collections-set + core-java-collections + core-java-collections-2 + core-java-collections-3 + core-java-collections-array-list + core-java-collections-list + core-java-collections-list-2 + core-java-collections-list-3 + core-java-collections-set - core-java-concurrency-2 - core-java-concurrency-advanced - core-java-concurrency-advanced-2 - core-java-concurrency-advanced-3 - core-java-concurrency-basic - core-java-concurrency-basic-2 - core-java-concurrency-collections + core-java-concurrency-2 + core-java-concurrency-advanced + core-java-concurrency-advanced-2 + core-java-concurrency-advanced-3 + core-java-concurrency-basic + core-java-concurrency-basic-2 + core-java-concurrency-collections - - core-java-date-operations-2 - - + + core-java-date-operations-2 + + - core-java-exceptions - core-java-exceptions-2 + core-java-exceptions + core-java-exceptions-2 - core-java-function + core-java-function - core-java-io - core-java-io-2 - core-java-io-apis - core-java-io-conversions + core-java-io + core-java-io-2 + core-java-io-apis + core-java-io-conversions - core-java-jar - core-java-jndi - - core-java-jvm + core-java-jar + core-java-jndi + + core-java-jvm - core-java-lambdas - core-java-lang - core-java-lang-2 - core-java-lang-math - core-java-lang-oop - core-java-lang-oop-2 - core-java-lang-oop-3 - core-java-lang-oop-4 - core-java-lang-operators - core-java-lang-syntax - core-java-lang-syntax-2 + core-java-lambdas + core-java-lang + core-java-lang-2 + core-java-lang-math + core-java-lang-oop + core-java-lang-oop-2 + core-java-lang-oop-3 + core-java-lang-oop-4 + core-java-lang-operators + core-java-lang-syntax + core-java-lang-syntax-2 - core-java-networking - core-java-networking-2 - core-java-nio - core-java-nio-2 + core-java-networking + core-java-networking-2 + core-java-nio + core-java-nio-2 - core-java-optional - + core-java-optional + - core-java-perf + core-java-perf - core-java-reflection + core-java-reflection - core-java-security - core-java-streams - core-java-streams-2 - core-java-streams-3 - core-java-string-algorithms - core-java-string-algorithms-2 - core-java-string-algorithms-3 - core-java-string-apis - core-java-string-conversions - core-java-string-conversions-2 - core-java-string-operations - core-java-string-operations-2 - core-java-strings - core-java-sun + core-java-security + core-java-streams + core-java-streams-2 + core-java-streams-3 + core-java-string-algorithms + core-java-string-algorithms-2 + core-java-string-algorithms-3 + core-java-string-apis + core-java-string-conversions + core-java-string-conversions-2 + core-java-string-operations + core-java-string-operations-2 + core-java-strings + core-java-sun - core-java-text - + core-java-text + - - pre-jpms - + + pre-jpms + From 347a2b2b4f75e8ee32dc3fc65632d3c0967659f6 Mon Sep 17 00:00:00 2001 From: Florin Hriscu Date: Sun, 16 Feb 2020 17:43:28 +0200 Subject: [PATCH 125/149] BAEL-3502 - Format pom.xml file. --- core-java-modules/pom.xml | 199 +++++++++++++++++++------------------- 1 file changed, 101 insertions(+), 98 deletions(-) diff --git a/core-java-modules/pom.xml b/core-java-modules/pom.xml index 60e1dbf3ef..771d5a5d61 100644 --- a/core-java-modules/pom.xml +++ b/core-java-modules/pom.xml @@ -1,121 +1,124 @@ - - 4.0.0 - com.baeldung.core-java-modules - core-java-modules - core-java-modules - pom + + 4.0.0 + com.baeldung.core-java-modules + core-java-modules + core-java-modules + pom - - com.baeldung - parent-modules - 1.0.0-SNAPSHOT - + + com.baeldung + parent-modules + 1.0.0-SNAPSHOT + - - core-java - - - - - core-java-8 - core-java-8-2 + + core-java + + + + + core-java-8 + core-java-8-2 - - - - - + + + + + - core-java-annotations - core-java-arrays - core-java-arrays-2 + core-java-annotations + core-java-arrays + core-java-arrays-2 core-java-arrays-3 - core-java-collections - core-java-collections-2 - core-java-collections-3 - core-java-collections-array-list - core-java-collections-list - core-java-collections-list-2 - core-java-collections-list-3 - core-java-collections-set + core-java-collections + core-java-collections-2 + core-java-collections-3 + core-java-collections-array-list + core-java-collections-list + core-java-collections-list-2 + core-java-collections-list-3 + core-java-collections-set - core-java-concurrency-2 - core-java-concurrency-advanced - core-java-concurrency-advanced-2 - core-java-concurrency-advanced-3 - core-java-concurrency-basic - core-java-concurrency-basic-2 - core-java-concurrency-collections + core-java-concurrency-2 + core-java-concurrency-advanced + core-java-concurrency-advanced-2 + core-java-concurrency-advanced-3 + core-java-concurrency-basic + core-java-concurrency-basic-2 + core-java-concurrency-collections - - core-java-date-operations-2 - - + + core-java-date-operations-2 + + - core-java-exceptions - core-java-exceptions-2 + core-java-exceptions + core-java-exceptions-2 - core-java-function + core-java-function - core-java-io - core-java-io-2 - core-java-io-apis - core-java-io-conversions + core-java-io + core-java-io-2 + core-java-io-apis + core-java-io-conversions - core-java-jar - core-java-jndi - - core-java-jvm + core-java-jar + core-java-jndi + + core-java-jvm - core-java-lambdas - core-java-lang - core-java-lang-2 - core-java-lang-math - core-java-lang-oop - core-java-lang-oop-2 - core-java-lang-oop-3 - core-java-lang-oop-4 - core-java-lang-operators - core-java-lang-syntax - core-java-lang-syntax-2 + core-java-lambdas + core-java-lang + core-java-lang-2 + core-java-lang-math + core-java-lang-oop + core-java-lang-oop-2 + core-java-lang-oop-3 + core-java-lang-oop-4 + core-java-lang-operators + core-java-lang-syntax + core-java-lang-syntax-2 - core-java-networking - core-java-networking-2 - core-java-nio - core-java-nio-2 + core-java-networking + core-java-networking-2 + core-java-nio + core-java-nio-2 - core-java-optional - + core-java-optional + - core-java-perf + core-java-perf - core-java-reflection + core-java-reflection - core-java-security - core-java-streams - core-java-streams-2 - core-java-streams-3 - core-java-string-algorithms - core-java-string-algorithms-2 - core-java-string-algorithms-3 - core-java-string-apis - core-java-string-conversions - core-java-string-conversions-2 - core-java-string-operations - core-java-string-operations-2 - core-java-strings - core-java-sun + core-java-security + core-java-streams + core-java-streams-2 + core-java-streams-3 + core-java-string-algorithms + core-java-string-algorithms-2 + core-java-string-algorithms-3 + core-java-string-apis + core-java-string-conversions + core-java-string-conversions-2 + core-java-string-operations + core-java-string-operations-2 + core-java-strings + core-java-sun - core-java-text - + core-java-text + - - pre-jpms - + + pre-jpms + From 70799d694fc50e6dc941130665d94fc888754ff2 Mon Sep 17 00:00:00 2001 From: Florin Hriscu Date: Sun, 16 Feb 2020 17:45:08 +0200 Subject: [PATCH 126/149] BAEL-3502 - Format core-java-modules pom.xml file. --- core-java-modules/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core-java-modules/pom.xml b/core-java-modules/pom.xml index 771d5a5d61..2850983028 100644 --- a/core-java-modules/pom.xml +++ b/core-java-modules/pom.xml @@ -31,7 +31,7 @@ core-java-annotations core-java-arrays core-java-arrays-2 - core-java-arrays-3 + core-java-arrays-3 core-java-collections core-java-collections-2 From 46d322855101ada2497f3b42c8196c231481c8cf Mon Sep 17 00:00:00 2001 From: mikr Date: Sun, 16 Feb 2020 18:32:53 +0100 Subject: [PATCH 127/149] Java-112 Update unit tests for article merge --- .../readfile/JavaReadFromFileUnitTest.java | 91 ++++++++---------- .../src/test/resources/fileTest.txt | 2 +- .../{test_read3.in => fileTestTokenizer.txt} | 0 .../{test_read7.in => fileTestUtf8.txt} | 0 .../src/test/resources/test_read1.in | 1 - .../src/test/resources/test_read2.in | 1 - .../src/test/resources/test_read4.in | Bin 7 -> 0 bytes .../src/test/resources/test_read8.in | 2 - .../src/test/resources/test_read9.in | 1 - 9 files changed, 40 insertions(+), 58 deletions(-) rename core-java-modules/core-java-io/src/test/resources/{test_read3.in => fileTestTokenizer.txt} (100%) rename core-java-modules/core-java-io/src/test/resources/{test_read7.in => fileTestUtf8.txt} (100%) delete mode 100644 core-java-modules/core-java-io/src/test/resources/test_read1.in delete mode 100644 core-java-modules/core-java-io/src/test/resources/test_read2.in delete mode 100644 core-java-modules/core-java-io/src/test/resources/test_read4.in delete mode 100644 core-java-modules/core-java-io/src/test/resources/test_read8.in delete mode 100644 core-java-modules/core-java-io/src/test/resources/test_read9.in diff --git a/core-java-modules/core-java-io/src/test/java/com/baeldung/readfile/JavaReadFromFileUnitTest.java b/core-java-modules/core-java-io/src/test/java/com/baeldung/readfile/JavaReadFromFileUnitTest.java index 4cacac91fb..aa37a22e1f 100644 --- a/core-java-modules/core-java-io/src/test/java/com/baeldung/readfile/JavaReadFromFileUnitTest.java +++ b/core-java-modules/core-java-io/src/test/java/com/baeldung/readfile/JavaReadFromFileUnitTest.java @@ -28,9 +28,9 @@ public class JavaReadFromFileUnitTest { @Test public void whenReadWithBufferedReader_thenCorrect() throws IOException { - final String expected_value = "Hello world"; + final String expected_value = "Hello, world!"; - final BufferedReader reader = new BufferedReader(new FileReader("src/test/resources/test_read.in")); + final BufferedReader reader = new BufferedReader(new FileReader("src/test/resources/fileTest.txt")); final String currentLine = reader.readLine(); reader.close(); @@ -39,7 +39,7 @@ public class JavaReadFromFileUnitTest { @Test public void givenFileName_whenUsingClassloader_thenFileData() throws IOException { - String expectedData = "Hello World from fileTest.txt!!!"; + String expectedData = "Hello, world!"; ClassLoader classLoader = getClass().getClassLoader(); File file = new File(classLoader.getResource("fileTest.txt").getFile()); @@ -51,7 +51,7 @@ public class JavaReadFromFileUnitTest { @Test public void givenFileNameAsAbsolutePath_whenUsingClasspath_thenFileData() throws IOException { - String expectedData = "Hello World from fileTest.txt!!!"; + String expectedData = "Hello, world!"; Class clazz = JavaReadFromFileUnitTest.class; InputStream inputStream = clazz.getResourceAsStream("/fileTest.txt"); @@ -87,7 +87,7 @@ public class JavaReadFromFileUnitTest { @Test public void givenFileName_whenUsingFileUtils_thenFileData() throws IOException { - String expectedData = "Hello World from fileTest.txt!!!"; + String expectedData = "Hello, world!"; ClassLoader classLoader = getClass().getClassLoader(); File file = new File(classLoader.getResource("fileTest.txt").getFile()); @@ -98,7 +98,7 @@ public class JavaReadFromFileUnitTest { @Test public void givenFilePath_whenUsingFilesReadAllBytes_thenFileData() throws IOException, URISyntaxException { - String expectedData = "Hello World from fileTest.txt!!!"; + String expectedData = "Hello, world!"; Path path = Paths.get(getClass().getClassLoader().getResource("fileTest.txt").toURI()); @@ -110,7 +110,7 @@ public class JavaReadFromFileUnitTest { @Test public void givenFilePath_whenUsingFilesLines_thenFileData() throws IOException, URISyntaxException { - String expectedData = "Hello World from fileTest.txt!!!"; + String expectedData = "Hello, world!"; Path path = Paths.get(getClass().getClassLoader().getResource("fileTest.txt").toURI()); @@ -123,9 +123,9 @@ public class JavaReadFromFileUnitTest { @Test public void givenFileName_whenUsingIOUtils_thenFileData() throws IOException { - String expectedData = "This is a content of the file"; + String expectedData = "Hello, world!"; - FileInputStream fis = new FileInputStream("src/test/resources/test_read9.in"); + FileInputStream fis = new FileInputStream("src/test/resources/fileTest.txt"); String data = IOUtils.toString(fis, "UTF-8"); assertEquals(expectedData, data.trim()); @@ -133,34 +133,32 @@ public class JavaReadFromFileUnitTest { @Test public void whenReadWithScanner_thenCorrect() throws IOException { - final Scanner scanner = new Scanner(new File("src/test/resources/test_read1.in")); + final Scanner scanner = new Scanner(new File("src/test/resources/fileTest.txt")); scanner.useDelimiter(" "); assertTrue(scanner.hasNext()); - assertEquals("Hello", scanner.next()); - assertEquals("world", scanner.next()); - assertEquals(1, scanner.nextInt()); + assertEquals("Hello,", scanner.next()); + assertEquals("world!", scanner.next()); scanner.close(); - } @Test public void whenReadWithScannerTwoDelimiters_thenCorrect() throws IOException { - final Scanner scanner = new Scanner(new File("src/test/resources/test_read2.in")); - scanner.useDelimiter(",| "); + final Scanner scanner = new Scanner(new File("src/test/resources/fileTest.txt")); + scanner.useDelimiter("\\s|,"); - assertTrue(scanner.hasNextInt()); - assertEquals(2, scanner.nextInt()); - assertEquals(3, scanner.nextInt()); - assertEquals(4, scanner.nextInt()); + assertTrue(scanner.hasNext()); + assertEquals("Hello", scanner.next()); + assertEquals("", scanner.next()); + assertEquals("world!", scanner.next()); scanner.close(); } @Test public void whenReadWithStreamTokenizer_thenCorrectTokens() throws IOException { - final FileReader reader = new FileReader("src/test/resources/test_read3.in"); + final FileReader reader = new FileReader("src/test/resources/fileTestTokenizer.txt"); final StreamTokenizer tokenizer = new StreamTokenizer(reader); tokenizer.nextToken(); @@ -177,37 +175,26 @@ public class JavaReadFromFileUnitTest { @Test public void whenReadWithDataInputStream_thenCorrect() throws IOException { - final String expected_value = "Hello"; + String expectedValue = "Hello, world!"; + String file ="src/test/resources/fileTest.txt"; - String result; - final DataInputStream reader = new DataInputStream(new FileInputStream("src/test/resources/test_read4.in")); - result = reader.readUTF(); - reader.close(); + String result = null; - assertEquals(expected_value, result); - } + DataInputStream reader = new DataInputStream(new FileInputStream(file)); + int nBytesToRead = reader.available(); + if(nBytesToRead > 0) { + byte[] bytes = new byte[nBytesToRead]; + reader.read(bytes); + result = new String(bytes); + } - public void whenReadTwoFilesWithSequenceInputStream_thenCorrect() throws IOException { - final int expected_value1 = 2000; - final int expected_value2 = 5000; - - final FileInputStream stream1 = new FileInputStream("src/test/resources/test_read5.in"); - final FileInputStream stream2 = new FileInputStream("src/test/resources/test_read6.in"); - - final SequenceInputStream sequence = new SequenceInputStream(stream1, stream2); - final DataInputStream reader = new DataInputStream(sequence); - - assertEquals(expected_value1, reader.readInt()); - assertEquals(expected_value2, reader.readInt()); - - reader.close(); - stream2.close(); + assertEquals(expectedValue, result); } @Test public void whenReadUTFEncodedFile_thenCorrect() throws IOException { final String expected_value = "青空"; - final BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream("src/test/resources/test_read7.in"), "UTF-8")); + final BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream("src/test/resources/fileTestUtf8.txt"), "UTF-8")); final String currentLine = reader.readLine(); reader.close(); @@ -216,8 +203,8 @@ public class JavaReadFromFileUnitTest { @Test public void whenReadFileContentsIntoString_thenCorrect() throws IOException { - final String expected_value = "Hello world \n Test line \n"; - final BufferedReader reader = new BufferedReader(new FileReader("src/test/resources/test_read8.in")); + final String expected_value = "Hello, world!\n"; + final BufferedReader reader = new BufferedReader(new FileReader("src/test/resources/fileTest.txt")); final StringBuilder builder = new StringBuilder(); String currentLine = reader.readLine(); while (currentLine != null) { @@ -233,8 +220,8 @@ public class JavaReadFromFileUnitTest { @Test public void whenReadWithFileChannel_thenCorrect() throws IOException { - final String expected_value = "Hello world"; - final RandomAccessFile reader = new RandomAccessFile("src/test/resources/test_read.in", "r"); + final String expected_value = "Hello, world!"; + final RandomAccessFile reader = new RandomAccessFile("src/test/resources/fileTest.txt", "r"); final FileChannel channel = reader.getChannel(); int bufferSize = 1024; @@ -251,8 +238,8 @@ public class JavaReadFromFileUnitTest { @Test public void whenReadSmallFileJava7_thenCorrect() throws IOException { - final String expected_value = "Hello world"; - final Path path = Paths.get("src/test/resources/test_read.in"); + final String expected_value = "Hello, world!"; + final Path path = Paths.get("src/test/resources/fileTest.txt"); final String read = Files.readAllLines(path, Charset.defaultCharset()).get(0); assertEquals(expected_value, read); @@ -260,9 +247,9 @@ public class JavaReadFromFileUnitTest { @Test public void whenReadLargeFileJava7_thenCorrect() throws IOException { - final String expected_value = "Hello world"; + final String expected_value = "Hello, world!"; - final Path path = Paths.get("src/test/resources/test_read.in"); + final Path path = Paths.get("src/test/resources/fileTest.txt"); final BufferedReader reader = Files.newBufferedReader(path, Charset.defaultCharset()); final String line = reader.readLine(); assertEquals(expected_value, line); diff --git a/core-java-modules/core-java-io/src/test/resources/fileTest.txt b/core-java-modules/core-java-io/src/test/resources/fileTest.txt index ce4bea208b..5dd01c177f 100644 --- a/core-java-modules/core-java-io/src/test/resources/fileTest.txt +++ b/core-java-modules/core-java-io/src/test/resources/fileTest.txt @@ -1 +1 @@ -Hello World from fileTest.txt!!! \ No newline at end of file +Hello, world! \ No newline at end of file diff --git a/core-java-modules/core-java-io/src/test/resources/test_read3.in b/core-java-modules/core-java-io/src/test/resources/fileTestTokenizer.txt similarity index 100% rename from core-java-modules/core-java-io/src/test/resources/test_read3.in rename to core-java-modules/core-java-io/src/test/resources/fileTestTokenizer.txt diff --git a/core-java-modules/core-java-io/src/test/resources/test_read7.in b/core-java-modules/core-java-io/src/test/resources/fileTestUtf8.txt similarity index 100% rename from core-java-modules/core-java-io/src/test/resources/test_read7.in rename to core-java-modules/core-java-io/src/test/resources/fileTestUtf8.txt diff --git a/core-java-modules/core-java-io/src/test/resources/test_read1.in b/core-java-modules/core-java-io/src/test/resources/test_read1.in deleted file mode 100644 index 1e46242993..0000000000 --- a/core-java-modules/core-java-io/src/test/resources/test_read1.in +++ /dev/null @@ -1 +0,0 @@ -Hello world 1 \ No newline at end of file diff --git a/core-java-modules/core-java-io/src/test/resources/test_read2.in b/core-java-modules/core-java-io/src/test/resources/test_read2.in deleted file mode 100644 index fe47dc003b..0000000000 --- a/core-java-modules/core-java-io/src/test/resources/test_read2.in +++ /dev/null @@ -1 +0,0 @@ -2,3 4 \ No newline at end of file diff --git a/core-java-modules/core-java-io/src/test/resources/test_read4.in b/core-java-modules/core-java-io/src/test/resources/test_read4.in deleted file mode 100644 index 5727d54bfcb2046f4989fd13cf5dcf408201fa2a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7 OcmZQz^+?Uh$p-)htO5D} diff --git a/core-java-modules/core-java-io/src/test/resources/test_read8.in b/core-java-modules/core-java-io/src/test/resources/test_read8.in deleted file mode 100644 index 10fc1aac8a..0000000000 --- a/core-java-modules/core-java-io/src/test/resources/test_read8.in +++ /dev/null @@ -1,2 +0,0 @@ -Hello world - Test line diff --git a/core-java-modules/core-java-io/src/test/resources/test_read9.in b/core-java-modules/core-java-io/src/test/resources/test_read9.in deleted file mode 100644 index 7be79c9761..0000000000 --- a/core-java-modules/core-java-io/src/test/resources/test_read9.in +++ /dev/null @@ -1 +0,0 @@ -This is a content of the file From f69aee855fa1edde4b50cd64730e688b5b6a16c6 Mon Sep 17 00:00:00 2001 From: Loredana Crusoveanu Date: Sun, 16 Feb 2020 21:35:44 +0200 Subject: [PATCH 128/149] Update README.md --- core-java-modules/core-java-io/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core-java-modules/core-java-io/README.md b/core-java-modules/core-java-io/README.md index b8bec7aa5e..2c6c3363cb 100644 --- a/core-java-modules/core-java-io/README.md +++ b/core-java-modules/core-java-io/README.md @@ -3,7 +3,7 @@ This module contains articles about core Java input and output (IO) ### Relevant Articles: -- [Java – Read from File](https://www.baeldung.com/java-read-file) +- [How to Read a File in Java](https://www.baeldung.com/reading-file-in-java) - [Read a File into an ArrayList](https://www.baeldung.com/java-file-to-arraylist) - [Java – Directory Size](https://www.baeldung.com/java-folder-size) - [File Size in Java](https://www.baeldung.com/java-file-size) From d1814a27112ba4f58f05c5d40e5241925bee00d7 Mon Sep 17 00:00:00 2001 From: Sorin Zamfir Date: Sun, 16 Feb 2020 21:49:31 +0200 Subject: [PATCH 129/149] BAEL-3777: Revert spring boot to previous version --- ddd/pom.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ddd/pom.xml b/ddd/pom.xml index 817e3b8899..f27f1d24a9 100644 --- a/ddd/pom.xml +++ b/ddd/pom.xml @@ -39,6 +39,7 @@ org.junit.platform junit-platform-launcher + ${junit-platform.version} test @@ -93,7 +94,7 @@ 1.0.1 - 2.2.4.RELEASE + 2.0.6.RELEASE \ No newline at end of file From f33e9961a15d89669ed33dba6575d08098de8b24 Mon Sep 17 00:00:00 2001 From: Seun Matt Date: Sun, 16 Feb 2020 23:07:46 +0100 Subject: [PATCH 130/149] propage exception in example code (#8738) * example code for BAEL-3749 * added live test * added live test * improved exception handling in response log filter * propage exception in example code * updated repo with upstream --- .../src/main/java/com/baeldung/filters/ResponseLogFilter.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/spring-cloud/spring-cloud-zuul/spring-zuul-post-filter/src/main/java/com/baeldung/filters/ResponseLogFilter.java b/spring-cloud/spring-cloud-zuul/spring-zuul-post-filter/src/main/java/com/baeldung/filters/ResponseLogFilter.java index 1fdd89c7f7..b0e4f7e313 100644 --- a/spring-cloud/spring-cloud-zuul/spring-zuul-post-filter/src/main/java/com/baeldung/filters/ResponseLogFilter.java +++ b/spring-cloud/spring-cloud-zuul/spring-zuul-post-filter/src/main/java/com/baeldung/filters/ResponseLogFilter.java @@ -12,6 +12,7 @@ import java.io.InputStream; import java.io.InputStreamReader; import static org.springframework.cloud.netflix.zuul.filters.support.FilterConstants.POST_TYPE; +import static org.springframework.http.HttpStatus.INTERNAL_SERVER_ERROR; @Component public class ResponseLogFilter extends ZuulFilter { @@ -50,7 +51,7 @@ public class ResponseLogFilter extends ZuulFilter { context.setResponseBody(responseData); } catch (Exception e) { - logger.error("error occurred at response log filter", e); + throw new ZuulException(e, INTERNAL_SERVER_ERROR.value(), e.getMessage()); } return null; From dc569151df7109d0eec851ad898cf951786e0b61 Mon Sep 17 00:00:00 2001 From: dupirefr Date: Sun, 9 Feb 2020 10:55:23 +0100 Subject: [PATCH 131/149] [BAEL-16532] Moving articles code out of spring-boot-mvc module (as they don't belong there) * Moved reference of Cache Eviction article as code has already been moved --- spring-boot-modules/spring-boot-mvc/README.md | 1 - spring-caching/README.md | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-boot-modules/spring-boot-mvc/README.md b/spring-boot-modules/spring-boot-mvc/README.md index a83ea3ee25..529a8d7e1f 100644 --- a/spring-boot-modules/spring-boot-mvc/README.md +++ b/spring-boot-modules/spring-boot-mvc/README.md @@ -12,7 +12,6 @@ This module contains articles about Spring Web MVC in Spring Boot projects. - [Spring Core Annotations](https://www.baeldung.com/spring-core-annotations) - [Display RSS Feed with Spring MVC](https://www.baeldung.com/spring-mvc-rss-feed) - [A Controller, Service and DAO Example with Spring Boot and JSF](https://www.baeldung.com/jsf-spring-boot-controller-service-dao) -- [Cache Eviction in Spring Boot](https://www.baeldung.com/spring-boot-evict-cache) - [Setting Up Swagger 2 with a Spring REST API](https://www.baeldung.com/swagger-2-documentation-for-spring-rest-api) - [Conditionally Enable Scheduled Jobs in Spring](https://www.baeldung.com/spring-scheduled-enabled-conditionally) - [Accessing Spring MVC Model Objects in JavaScript](https://www.baeldung.com/spring-mvc-model-objects-js) diff --git a/spring-caching/README.md b/spring-caching/README.md index 14dfe94041..3efbfe3eaa 100644 --- a/spring-caching/README.md +++ b/spring-caching/README.md @@ -2,3 +2,4 @@ - [Introduction To Ehcache](http://www.baeldung.com/ehcache) - [A Guide To Caching in Spring](http://www.baeldung.com/spring-cache-tutorial) - [Spring Cache – Creating a Custom KeyGenerator](http://www.baeldung.com/spring-cache-custom-keygenerator) +- [Cache Eviction in Spring Boot](https://www.baeldung.com/spring-boot-evict-cache) From e703f71ada7b175ba06f522b1155fb9bd7b3a4fc Mon Sep 17 00:00:00 2001 From: dupirefr Date: Sun, 9 Feb 2020 11:01:39 +0100 Subject: [PATCH 132/149] * Moved Conditional Scheduling to spring-scheduling module --- spring-boot-modules/spring-boot-mvc/README.md | 1 - spring-scheduling/README.md | 1 + spring-scheduling/pom.xml | 4 ++++ .../scheduling/conditional}/ScheduleJobsByProfile.java | 2 +- .../com/baeldung/scheduling/conditional}/ScheduledJob.java | 2 +- .../scheduling/conditional}/ScheduledJobsWithBoolean.java | 2 +- .../scheduling/conditional}/ScheduledJobsWithConditional.java | 2 +- .../scheduling/conditional}/ScheduledJobsWithExpression.java | 2 +- .../scheduling/conditional}/SchedulingApplication.java | 2 +- 9 files changed, 11 insertions(+), 7 deletions(-) rename {spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/scheduling => spring-scheduling/src/main/java/com/baeldung/scheduling/conditional}/ScheduleJobsByProfile.java (91%) rename {spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/scheduling => spring-scheduling/src/main/java/com/baeldung/scheduling/conditional}/ScheduledJob.java (91%) rename {spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/scheduling => spring-scheduling/src/main/java/com/baeldung/scheduling/conditional}/ScheduledJobsWithBoolean.java (94%) rename {spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/scheduling => spring-scheduling/src/main/java/com/baeldung/scheduling/conditional}/ScheduledJobsWithConditional.java (93%) rename {spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/scheduling => spring-scheduling/src/main/java/com/baeldung/scheduling/conditional}/ScheduledJobsWithExpression.java (93%) rename {spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/scheduling => spring-scheduling/src/main/java/com/baeldung/scheduling/conditional}/SchedulingApplication.java (89%) diff --git a/spring-boot-modules/spring-boot-mvc/README.md b/spring-boot-modules/spring-boot-mvc/README.md index 529a8d7e1f..60d41f40da 100644 --- a/spring-boot-modules/spring-boot-mvc/README.md +++ b/spring-boot-modules/spring-boot-mvc/README.md @@ -13,7 +13,6 @@ This module contains articles about Spring Web MVC in Spring Boot projects. - [Display RSS Feed with Spring MVC](https://www.baeldung.com/spring-mvc-rss-feed) - [A Controller, Service and DAO Example with Spring Boot and JSF](https://www.baeldung.com/jsf-spring-boot-controller-service-dao) - [Setting Up Swagger 2 with a Spring REST API](https://www.baeldung.com/swagger-2-documentation-for-spring-rest-api) -- [Conditionally Enable Scheduled Jobs in Spring](https://www.baeldung.com/spring-scheduled-enabled-conditionally) - [Accessing Spring MVC Model Objects in JavaScript](https://www.baeldung.com/spring-mvc-model-objects-js) - [Using Spring ResponseEntity to Manipulate the HTTP Response](https://www.baeldung.com/spring-response-entity) - [Spring Bean Annotations](https://www.baeldung.com/spring-bean-annotations) diff --git a/spring-scheduling/README.md b/spring-scheduling/README.md index 2e3bb2b5e5..ddc540bafb 100644 --- a/spring-scheduling/README.md +++ b/spring-scheduling/README.md @@ -3,4 +3,5 @@ - [The @Scheduled Annotation in Spring](https://www.baeldung.com/spring-scheduled-tasks) - [Guide to Spring Retry](http://www.baeldung.com/spring-retry) - [How To Do @Async in Spring](http://www.baeldung.com/spring-async) +- [Conditionally Enable Scheduled Jobs in Spring](https://www.baeldung.com/spring-scheduled-enabled-conditionally) diff --git a/spring-scheduling/pom.xml b/spring-scheduling/pom.xml index 8726fea438..b27f33196d 100644 --- a/spring-scheduling/pom.xml +++ b/spring-scheduling/pom.xml @@ -27,6 +27,10 @@ org.springframework spring-aspects + + org.springframework.boot + spring-boot-starter-web + javax.annotation javax.annotation-api diff --git a/spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/scheduling/ScheduleJobsByProfile.java b/spring-scheduling/src/main/java/com/baeldung/scheduling/conditional/ScheduleJobsByProfile.java similarity index 91% rename from spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/scheduling/ScheduleJobsByProfile.java rename to spring-scheduling/src/main/java/com/baeldung/scheduling/conditional/ScheduleJobsByProfile.java index 33cd44331f..7783d0e6ff 100644 --- a/spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/scheduling/ScheduleJobsByProfile.java +++ b/spring-scheduling/src/main/java/com/baeldung/scheduling/conditional/ScheduleJobsByProfile.java @@ -1,4 +1,4 @@ -package com.baeldung.scheduling; +package com.baeldung.scheduling.conditional; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/scheduling/ScheduledJob.java b/spring-scheduling/src/main/java/com/baeldung/scheduling/conditional/ScheduledJob.java similarity index 91% rename from spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/scheduling/ScheduledJob.java rename to spring-scheduling/src/main/java/com/baeldung/scheduling/conditional/ScheduledJob.java index df7cefcd3c..b56cb9ed5b 100644 --- a/spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/scheduling/ScheduledJob.java +++ b/spring-scheduling/src/main/java/com/baeldung/scheduling/conditional/ScheduledJob.java @@ -1,4 +1,4 @@ -package com.baeldung.scheduling; +package com.baeldung.scheduling.conditional; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/scheduling/ScheduledJobsWithBoolean.java b/spring-scheduling/src/main/java/com/baeldung/scheduling/conditional/ScheduledJobsWithBoolean.java similarity index 94% rename from spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/scheduling/ScheduledJobsWithBoolean.java rename to spring-scheduling/src/main/java/com/baeldung/scheduling/conditional/ScheduledJobsWithBoolean.java index b03de61641..69c0efb7b2 100644 --- a/spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/scheduling/ScheduledJobsWithBoolean.java +++ b/spring-scheduling/src/main/java/com/baeldung/scheduling/conditional/ScheduledJobsWithBoolean.java @@ -1,4 +1,4 @@ -package com.baeldung.scheduling; +package com.baeldung.scheduling.conditional; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/scheduling/ScheduledJobsWithConditional.java b/spring-scheduling/src/main/java/com/baeldung/scheduling/conditional/ScheduledJobsWithConditional.java similarity index 93% rename from spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/scheduling/ScheduledJobsWithConditional.java rename to spring-scheduling/src/main/java/com/baeldung/scheduling/conditional/ScheduledJobsWithConditional.java index 081c8d990a..2a90300c20 100644 --- a/spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/scheduling/ScheduledJobsWithConditional.java +++ b/spring-scheduling/src/main/java/com/baeldung/scheduling/conditional/ScheduledJobsWithConditional.java @@ -1,4 +1,4 @@ -package com.baeldung.scheduling; +package com.baeldung.scheduling.conditional; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.context.annotation.Bean; diff --git a/spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/scheduling/ScheduledJobsWithExpression.java b/spring-scheduling/src/main/java/com/baeldung/scheduling/conditional/ScheduledJobsWithExpression.java similarity index 93% rename from spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/scheduling/ScheduledJobsWithExpression.java rename to spring-scheduling/src/main/java/com/baeldung/scheduling/conditional/ScheduledJobsWithExpression.java index 577a01f241..4842e649c7 100644 --- a/spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/scheduling/ScheduledJobsWithExpression.java +++ b/spring-scheduling/src/main/java/com/baeldung/scheduling/conditional/ScheduledJobsWithExpression.java @@ -1,4 +1,4 @@ -package com.baeldung.scheduling; +package com.baeldung.scheduling.conditional; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/scheduling/SchedulingApplication.java b/spring-scheduling/src/main/java/com/baeldung/scheduling/conditional/SchedulingApplication.java similarity index 89% rename from spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/scheduling/SchedulingApplication.java rename to spring-scheduling/src/main/java/com/baeldung/scheduling/conditional/SchedulingApplication.java index 913e2137f8..4777230341 100644 --- a/spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/scheduling/SchedulingApplication.java +++ b/spring-scheduling/src/main/java/com/baeldung/scheduling/conditional/SchedulingApplication.java @@ -1,4 +1,4 @@ -package com.baeldung.scheduling; +package com.baeldung.scheduling.conditional; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; From 29c8b8bf0d081ad7b33937fb7e4b4a269a0d7f1e Mon Sep 17 00:00:00 2001 From: dupirefr Date: Sun, 9 Feb 2020 11:11:04 +0100 Subject: [PATCH 133/149] * Moved Accessing Spring MVC objects model in JavaScript --- spring-boot-modules/spring-boot-mvc/README.md | 1 - spring-mvc-java/README.md | 1 + .../src/main/java/com/baeldung/accessparamsjs/App.java | 0 .../src/main/java/com/baeldung/accessparamsjs/Controller.java | 4 ++-- .../src/main/resources/templates/thymeleaf/index.html | 0 .../src/main/webapp/js/jquery.js | 0 .../src/main/webapp/js/script-async-jquery.js | 0 .../src/main/webapp/js/script-async.js | 0 .../src/main/webapp/js/script.js | 0 9 files changed, 3 insertions(+), 3 deletions(-) rename {spring-boot-modules/spring-boot-mvc => spring-mvc-java}/src/main/java/com/baeldung/accessparamsjs/App.java (100%) rename {spring-boot-modules/spring-boot-mvc => spring-mvc-java}/src/main/java/com/baeldung/accessparamsjs/Controller.java (100%) rename {spring-boot-modules/spring-boot-mvc => spring-mvc-java}/src/main/resources/templates/thymeleaf/index.html (100%) rename {spring-boot-modules/spring-boot-mvc => spring-mvc-java}/src/main/webapp/js/jquery.js (100%) rename {spring-boot-modules/spring-boot-mvc => spring-mvc-java}/src/main/webapp/js/script-async-jquery.js (100%) rename {spring-boot-modules/spring-boot-mvc => spring-mvc-java}/src/main/webapp/js/script-async.js (100%) rename {spring-boot-modules/spring-boot-mvc => spring-mvc-java}/src/main/webapp/js/script.js (100%) diff --git a/spring-boot-modules/spring-boot-mvc/README.md b/spring-boot-modules/spring-boot-mvc/README.md index 60d41f40da..8a561e8766 100644 --- a/spring-boot-modules/spring-boot-mvc/README.md +++ b/spring-boot-modules/spring-boot-mvc/README.md @@ -13,7 +13,6 @@ This module contains articles about Spring Web MVC in Spring Boot projects. - [Display RSS Feed with Spring MVC](https://www.baeldung.com/spring-mvc-rss-feed) - [A Controller, Service and DAO Example with Spring Boot and JSF](https://www.baeldung.com/jsf-spring-boot-controller-service-dao) - [Setting Up Swagger 2 with a Spring REST API](https://www.baeldung.com/swagger-2-documentation-for-spring-rest-api) -- [Accessing Spring MVC Model Objects in JavaScript](https://www.baeldung.com/spring-mvc-model-objects-js) - [Using Spring ResponseEntity to Manipulate the HTTP Response](https://www.baeldung.com/spring-response-entity) - [Spring Bean Annotations](https://www.baeldung.com/spring-bean-annotations) - More articles: [[next -->]](/spring-boot-mvc-2) diff --git a/spring-mvc-java/README.md b/spring-mvc-java/README.md index ff1f7830b6..f1263860f9 100644 --- a/spring-mvc-java/README.md +++ b/spring-mvc-java/README.md @@ -16,3 +16,4 @@ The "REST With Spring" Classes: http://bit.ly/restwithspring - [Spring MVC @PathVariable with a dot (.) gets truncated](https://www.baeldung.com/spring-mvc-pathvariable-dot) - [Working with Date Parameters in Spring](https://www.baeldung.com/spring-date-parameters) - [A Java Web Application Without a web.xml](https://www.baeldung.com/java-web-app-without-web-xml) +- [Accessing Spring MVC Model Objects in JavaScript](https://www.baeldung.com/spring-mvc-model-objects-js) diff --git a/spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/accessparamsjs/App.java b/spring-mvc-java/src/main/java/com/baeldung/accessparamsjs/App.java similarity index 100% rename from spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/accessparamsjs/App.java rename to spring-mvc-java/src/main/java/com/baeldung/accessparamsjs/App.java diff --git a/spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/accessparamsjs/Controller.java b/spring-mvc-java/src/main/java/com/baeldung/accessparamsjs/Controller.java similarity index 100% rename from spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/accessparamsjs/Controller.java rename to spring-mvc-java/src/main/java/com/baeldung/accessparamsjs/Controller.java index 8759f1bcd6..157dcf54da 100644 --- a/spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/accessparamsjs/Controller.java +++ b/spring-mvc-java/src/main/java/com/baeldung/accessparamsjs/Controller.java @@ -1,11 +1,11 @@ package com.baeldung.accessparamsjs; -import java.util.Map; - import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.servlet.ModelAndView; +import java.util.Map; + /** * Sample rest controller for the tutorial article * "Access Spring MVC Model object in JavaScript". diff --git a/spring-boot-modules/spring-boot-mvc/src/main/resources/templates/thymeleaf/index.html b/spring-mvc-java/src/main/resources/templates/thymeleaf/index.html similarity index 100% rename from spring-boot-modules/spring-boot-mvc/src/main/resources/templates/thymeleaf/index.html rename to spring-mvc-java/src/main/resources/templates/thymeleaf/index.html diff --git a/spring-boot-modules/spring-boot-mvc/src/main/webapp/js/jquery.js b/spring-mvc-java/src/main/webapp/js/jquery.js similarity index 100% rename from spring-boot-modules/spring-boot-mvc/src/main/webapp/js/jquery.js rename to spring-mvc-java/src/main/webapp/js/jquery.js diff --git a/spring-boot-modules/spring-boot-mvc/src/main/webapp/js/script-async-jquery.js b/spring-mvc-java/src/main/webapp/js/script-async-jquery.js similarity index 100% rename from spring-boot-modules/spring-boot-mvc/src/main/webapp/js/script-async-jquery.js rename to spring-mvc-java/src/main/webapp/js/script-async-jquery.js diff --git a/spring-boot-modules/spring-boot-mvc/src/main/webapp/js/script-async.js b/spring-mvc-java/src/main/webapp/js/script-async.js similarity index 100% rename from spring-boot-modules/spring-boot-mvc/src/main/webapp/js/script-async.js rename to spring-mvc-java/src/main/webapp/js/script-async.js diff --git a/spring-boot-modules/spring-boot-mvc/src/main/webapp/js/script.js b/spring-mvc-java/src/main/webapp/js/script.js similarity index 100% rename from spring-boot-modules/spring-boot-mvc/src/main/webapp/js/script.js rename to spring-mvc-java/src/main/webapp/js/script.js From cd745e0b8d239d5321227c39db1edb1acb7c1143 Mon Sep 17 00:00:00 2001 From: dupirefr Date: Sun, 9 Feb 2020 11:20:42 +0100 Subject: [PATCH 134/149] * Moved tests as well --- .../java/com/baeldung/accessparamsjs/ControllerUnitTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename {spring-boot-modules/spring-boot-mvc => spring-mvc-java}/src/test/java/com/baeldung/accessparamsjs/ControllerUnitTest.java (100%) diff --git a/spring-boot-modules/spring-boot-mvc/src/test/java/com/baeldung/accessparamsjs/ControllerUnitTest.java b/spring-mvc-java/src/test/java/com/baeldung/accessparamsjs/ControllerUnitTest.java similarity index 100% rename from spring-boot-modules/spring-boot-mvc/src/test/java/com/baeldung/accessparamsjs/ControllerUnitTest.java rename to spring-mvc-java/src/test/java/com/baeldung/accessparamsjs/ControllerUnitTest.java index 2dc62a20f6..f05d34b654 100644 --- a/spring-boot-modules/spring-boot-mvc/src/test/java/com/baeldung/accessparamsjs/ControllerUnitTest.java +++ b/spring-mvc-java/src/test/java/com/baeldung/accessparamsjs/ControllerUnitTest.java @@ -1,7 +1,5 @@ package com.baeldung.accessparamsjs; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; - import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; @@ -12,6 +10,8 @@ import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + @RunWith(SpringRunner.class) @SpringBootTest @AutoConfigureMockMvc From 6cd76fbd61f42a9aa8ff6586e22a38bc615bb597 Mon Sep 17 00:00:00 2001 From: dupirefr Date: Thu, 13 Feb 2020 18:23:27 +0100 Subject: [PATCH 135/149] * Moved annotations articles to new spring-boot-annotations module --- spring-boot-modules/pom.xml | 3 ++- .../spring-boot-annotations/pom.xml | 15 +++++++++++++++ .../main/java/com/baeldung/annotations/Bike.java | 0 .../main/java/com/baeldung/annotations/Biker.java | 0 .../main/java/com/baeldung/annotations/Car.java | 0 .../com/baeldung/annotations/CarMechanic.java | 0 .../java/com/baeldung/annotations/CarUtility.java | 0 .../com/baeldung/annotations/CustomException.java | 0 .../java/com/baeldung/annotations/Driver.java | 0 .../java/com/baeldung/annotations/Engine.java | 0 .../baeldung/annotations/PerformanceAspect.java | 0 .../java/com/baeldung/annotations/Vehicle.java | 0 .../baeldung/annotations/VehicleController.java | 0 .../annotations/VehicleFactoryApplication.java | 0 .../annotations/VehicleFactoryConfig.java | 0 .../baeldung/annotations/VehicleRepository.java | 0 .../annotations/VehicleRestController.java | 0 .../com/baeldung/annotations/VehicleService.java | 0 18 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 spring-boot-modules/spring-boot-annotations/pom.xml rename spring-boot-modules/{spring-boot-mvc => spring-boot-annotations}/src/main/java/com/baeldung/annotations/Bike.java (100%) rename spring-boot-modules/{spring-boot-mvc => spring-boot-annotations}/src/main/java/com/baeldung/annotations/Biker.java (100%) rename spring-boot-modules/{spring-boot-mvc => spring-boot-annotations}/src/main/java/com/baeldung/annotations/Car.java (100%) rename spring-boot-modules/{spring-boot-mvc => spring-boot-annotations}/src/main/java/com/baeldung/annotations/CarMechanic.java (100%) rename spring-boot-modules/{spring-boot-mvc => spring-boot-annotations}/src/main/java/com/baeldung/annotations/CarUtility.java (100%) rename spring-boot-modules/{spring-boot-mvc => spring-boot-annotations}/src/main/java/com/baeldung/annotations/CustomException.java (100%) rename spring-boot-modules/{spring-boot-mvc => spring-boot-annotations}/src/main/java/com/baeldung/annotations/Driver.java (100%) rename spring-boot-modules/{spring-boot-mvc => spring-boot-annotations}/src/main/java/com/baeldung/annotations/Engine.java (100%) rename spring-boot-modules/{spring-boot-mvc => spring-boot-annotations}/src/main/java/com/baeldung/annotations/PerformanceAspect.java (100%) rename spring-boot-modules/{spring-boot-mvc => spring-boot-annotations}/src/main/java/com/baeldung/annotations/Vehicle.java (100%) rename spring-boot-modules/{spring-boot-mvc => spring-boot-annotations}/src/main/java/com/baeldung/annotations/VehicleController.java (100%) rename spring-boot-modules/{spring-boot-mvc => spring-boot-annotations}/src/main/java/com/baeldung/annotations/VehicleFactoryApplication.java (100%) rename spring-boot-modules/{spring-boot-mvc => spring-boot-annotations}/src/main/java/com/baeldung/annotations/VehicleFactoryConfig.java (100%) rename spring-boot-modules/{spring-boot-mvc => spring-boot-annotations}/src/main/java/com/baeldung/annotations/VehicleRepository.java (100%) rename spring-boot-modules/{spring-boot-mvc => spring-boot-annotations}/src/main/java/com/baeldung/annotations/VehicleRestController.java (100%) rename spring-boot-modules/{spring-boot-mvc => spring-boot-annotations}/src/main/java/com/baeldung/annotations/VehicleService.java (100%) diff --git a/spring-boot-modules/pom.xml b/spring-boot-modules/pom.xml index 0918aa9496..90468ba575 100644 --- a/spring-boot-modules/pom.xml +++ b/spring-boot-modules/pom.xml @@ -16,7 +16,8 @@ spring-boot spring-boot-admin - spring-boot-angular + spring-boot-angular + spring-boot-annotations spring-boot-artifacts spring-boot-autoconfiguration spring-boot-bootstrap diff --git a/spring-boot-modules/spring-boot-annotations/pom.xml b/spring-boot-modules/spring-boot-annotations/pom.xml new file mode 100644 index 0000000000..7436f4539e --- /dev/null +++ b/spring-boot-modules/spring-boot-annotations/pom.xml @@ -0,0 +1,15 @@ + + + 4.0.0 + spring-boot-annotations + spring-boot-annotations + war + + + com.baeldung + parent-boot-2 + 0.0.1-SNAPSHOT + ../../parent-boot-2 + + diff --git a/spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/annotations/Bike.java b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/Bike.java similarity index 100% rename from spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/annotations/Bike.java rename to spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/Bike.java diff --git a/spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/annotations/Biker.java b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/Biker.java similarity index 100% rename from spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/annotations/Biker.java rename to spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/Biker.java diff --git a/spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/annotations/Car.java b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/Car.java similarity index 100% rename from spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/annotations/Car.java rename to spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/Car.java diff --git a/spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/annotations/CarMechanic.java b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/CarMechanic.java similarity index 100% rename from spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/annotations/CarMechanic.java rename to spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/CarMechanic.java diff --git a/spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/annotations/CarUtility.java b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/CarUtility.java similarity index 100% rename from spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/annotations/CarUtility.java rename to spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/CarUtility.java diff --git a/spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/annotations/CustomException.java b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/CustomException.java similarity index 100% rename from spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/annotations/CustomException.java rename to spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/CustomException.java diff --git a/spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/annotations/Driver.java b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/Driver.java similarity index 100% rename from spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/annotations/Driver.java rename to spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/Driver.java diff --git a/spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/annotations/Engine.java b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/Engine.java similarity index 100% rename from spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/annotations/Engine.java rename to spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/Engine.java diff --git a/spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/annotations/PerformanceAspect.java b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/PerformanceAspect.java similarity index 100% rename from spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/annotations/PerformanceAspect.java rename to spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/PerformanceAspect.java diff --git a/spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/annotations/Vehicle.java b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/Vehicle.java similarity index 100% rename from spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/annotations/Vehicle.java rename to spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/Vehicle.java diff --git a/spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/annotations/VehicleController.java b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/VehicleController.java similarity index 100% rename from spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/annotations/VehicleController.java rename to spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/VehicleController.java diff --git a/spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/annotations/VehicleFactoryApplication.java b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/VehicleFactoryApplication.java similarity index 100% rename from spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/annotations/VehicleFactoryApplication.java rename to spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/VehicleFactoryApplication.java diff --git a/spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/annotations/VehicleFactoryConfig.java b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/VehicleFactoryConfig.java similarity index 100% rename from spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/annotations/VehicleFactoryConfig.java rename to spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/VehicleFactoryConfig.java diff --git a/spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/annotations/VehicleRepository.java b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/VehicleRepository.java similarity index 100% rename from spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/annotations/VehicleRepository.java rename to spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/VehicleRepository.java diff --git a/spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/annotations/VehicleRestController.java b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/VehicleRestController.java similarity index 100% rename from spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/annotations/VehicleRestController.java rename to spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/VehicleRestController.java diff --git a/spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/annotations/VehicleService.java b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/VehicleService.java similarity index 100% rename from spring-boot-modules/spring-boot-mvc/src/main/java/com/baeldung/annotations/VehicleService.java rename to spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/VehicleService.java From 3232360885768fd60bd8ded485534cd83dfcd1a5 Mon Sep 17 00:00:00 2001 From: dupirefr Date: Sat, 15 Feb 2020 06:53:40 +0100 Subject: [PATCH 136/149] * Added spring-boot-annotations dependencies as well --- .../spring-boot-annotations/pom.xml | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/spring-boot-modules/spring-boot-annotations/pom.xml b/spring-boot-modules/spring-boot-annotations/pom.xml index 7436f4539e..5c1ef43242 100644 --- a/spring-boot-modules/spring-boot-annotations/pom.xml +++ b/spring-boot-modules/spring-boot-annotations/pom.xml @@ -12,4 +12,24 @@ 0.0.1-SNAPSHOT ../../parent-boot-2 + + + + org.aspectj + aspectjweaver + 1.9.1 + + + + org.springframework.boot + spring-boot-starter-web + + + + + org.springframework.boot + spring-boot-starter-test + test + + From ddb928e2d10491765b684adaff87cdc96698bf28 Mon Sep 17 00:00:00 2001 From: dupirefr Date: Mon, 17 Feb 2020 07:30:36 +0100 Subject: [PATCH 137/149] * Moving articles from README as well * Fixed pom.xml whitespaces --- spring-boot-modules/pom.xml | 4 ++-- spring-boot-modules/spring-boot-annotations/README.md | 11 +++++++++++ spring-boot-modules/spring-boot-annotations/pom.xml | 2 +- spring-boot-modules/spring-boot-mvc/README.md | 5 ----- 4 files changed, 14 insertions(+), 8 deletions(-) create mode 100644 spring-boot-modules/spring-boot-annotations/README.md diff --git a/spring-boot-modules/pom.xml b/spring-boot-modules/pom.xml index 90468ba575..4c6560e5fd 100644 --- a/spring-boot-modules/pom.xml +++ b/spring-boot-modules/pom.xml @@ -16,8 +16,8 @@ spring-boot spring-boot-admin - spring-boot-angular - spring-boot-annotations + spring-boot-angular + spring-boot-annotations spring-boot-artifacts spring-boot-autoconfiguration spring-boot-bootstrap diff --git a/spring-boot-modules/spring-boot-annotations/README.md b/spring-boot-modules/spring-boot-annotations/README.md new file mode 100644 index 0000000000..a721f28d55 --- /dev/null +++ b/spring-boot-modules/spring-boot-annotations/README.md @@ -0,0 +1,11 @@ +## Spring Boot Annotations + +This module contains articles about Spring Boot annotations + +### Relevant Articles: + +- [Spring Boot Annotations](https://www.baeldung.com/spring-boot-annotations) +- [Spring Scheduling Annotations](https://www.baeldung.com/spring-scheduling-annotations) +- [Spring Web Annotations](https://www.baeldung.com/spring-mvc-annotations) +- [Spring Core Annotations](https://www.baeldung.com/spring-core-annotations) +- [Spring Bean Annotations](https://www.baeldung.com/spring-bean-annotations) diff --git a/spring-boot-modules/spring-boot-annotations/pom.xml b/spring-boot-modules/spring-boot-annotations/pom.xml index 5c1ef43242..9ad63214ef 100644 --- a/spring-boot-modules/spring-boot-annotations/pom.xml +++ b/spring-boot-modules/spring-boot-annotations/pom.xml @@ -19,7 +19,7 @@ aspectjweaver 1.9.1 - + org.springframework.boot spring-boot-starter-web diff --git a/spring-boot-modules/spring-boot-mvc/README.md b/spring-boot-modules/spring-boot-mvc/README.md index 8a561e8766..b4f87d1d40 100644 --- a/spring-boot-modules/spring-boot-mvc/README.md +++ b/spring-boot-modules/spring-boot-mvc/README.md @@ -6,13 +6,8 @@ This module contains articles about Spring Web MVC in Spring Boot projects. - [Guide to the Favicon in Spring Boot](https://www.baeldung.com/spring-boot-favicon) - [Custom Validation MessageSource in Spring Boot](https://www.baeldung.com/spring-custom-validation-message-source) -- [Spring Boot Annotations](https://www.baeldung.com/spring-boot-annotations) -- [Spring Scheduling Annotations](https://www.baeldung.com/spring-scheduling-annotations) -- [Spring Web Annotations](https://www.baeldung.com/spring-mvc-annotations) -- [Spring Core Annotations](https://www.baeldung.com/spring-core-annotations) - [Display RSS Feed with Spring MVC](https://www.baeldung.com/spring-mvc-rss-feed) - [A Controller, Service and DAO Example with Spring Boot and JSF](https://www.baeldung.com/jsf-spring-boot-controller-service-dao) - [Setting Up Swagger 2 with a Spring REST API](https://www.baeldung.com/swagger-2-documentation-for-spring-rest-api) - [Using Spring ResponseEntity to Manipulate the HTTP Response](https://www.baeldung.com/spring-response-entity) -- [Spring Bean Annotations](https://www.baeldung.com/spring-bean-annotations) - More articles: [[next -->]](/spring-boot-mvc-2) From 10b69c94af0cd52c83e97e4659630b76da0c5963 Mon Sep 17 00:00:00 2001 From: Dhawal Kapil Date: Mon, 17 Feb 2020 20:26:07 +0530 Subject: [PATCH 138/149] JAVA-476 Fixed integration failing tests in spring-mvc-xml module --- spring-mvc-xml/pom.xml | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/spring-mvc-xml/pom.xml b/spring-mvc-xml/pom.xml index c389e41e29..4812d5c979 100644 --- a/spring-mvc-xml/pom.xml +++ b/spring-mvc-xml/pom.xml @@ -92,8 +92,8 @@ ${spring-boot.version} test - - + + org.crashub crash.embed.spring @@ -101,16 +101,22 @@ org.crashub - crash.cli + crash.cli ${crash.version} org.crashub crash.connectors.telnet ${crash.version} + + + log4j + log4j + + - - + + org.codehaus.groovy groovy @@ -161,7 +167,7 @@ 1.6.1 - + 1.3.2 3.0.0-rc-3 From 233891c10775e7259c12384757996aa1b9a30bed Mon Sep 17 00:00:00 2001 From: Krzysiek Date: Mon, 17 Feb 2020 20:57:44 +0100 Subject: [PATCH 139/149] JAVA-143: Migrate spring-hibernate-3 to com.baeldung --- .../spring-hibernate-3/README.md | 4 +- .../persistence/dao/AbstractHibernateDao.java | 2 +- .../baeldung/persistence/dao/EventDao.java | 36 ++++---- .../baeldung/persistence/dao/FooDao.java | 4 +- .../baeldung/persistence/dao/IEventDao.java | 8 ++ .../com/baeldung/persistence/dao/IFooDao.java | 7 ++ .../baeldung/persistence/dao/IOperations.java | 2 +- .../baeldung/persistence/model/Event.java | 88 +++++++++---------- .../baeldung/persistence/model/Foo.java | 2 +- .../persistence/service/EventService.java | 54 ++++++------ .../persistence/service/FooService.java | 6 +- .../baeldung/spring/PersistenceConfig.java | 6 +- .../spring/PersistenceConfigHibernate3.java | 4 +- .../baeldung/spring/PersistenceXmlConfig.java | 4 +- .../baeldung/persistence/dao/IEventDao.java | 9 -- .../org/baeldung/persistence/dao/IFooDao.java | 7 -- .../src/main/resources/exceptionDemo.cfg.xml | 2 +- .../exceptionDemoPersistenceConfig.xml | 2 +- .../src/main/resources/persistenceConfig.xml | 2 +- .../src/main/webapp/WEB-INF/web.xml | 2 +- .../baeldung/SpringContextTest.java | 4 +- .../FooServicePersistenceIntegrationTest.java | 7 +- ...nateExceptionScen1MainIntegrationTest.java | 6 +- ...nateExceptionScen2MainIntegrationTest.java | 6 +- ...ingAnnoSessionBeanMainIntegrationTest.java | 84 +++++++++--------- ...ngLocalSessionBeanMainIntegrationTest.java | 77 ++++++++-------- 26 files changed, 216 insertions(+), 219 deletions(-) rename persistence-modules/spring-hibernate-3/src/main/java/{org => com}/baeldung/persistence/dao/AbstractHibernateDao.java (97%) rename persistence-modules/spring-hibernate-3/src/main/java/{org => com}/baeldung/persistence/dao/EventDao.java (70%) rename persistence-modules/spring-hibernate-3/src/main/java/{org => com}/baeldung/persistence/dao/FooDao.java (73%) create mode 100644 persistence-modules/spring-hibernate-3/src/main/java/com/baeldung/persistence/dao/IEventDao.java create mode 100644 persistence-modules/spring-hibernate-3/src/main/java/com/baeldung/persistence/dao/IFooDao.java rename persistence-modules/spring-hibernate-3/src/main/java/{org => com}/baeldung/persistence/dao/IOperations.java (89%) rename persistence-modules/spring-hibernate-3/src/main/java/{org => com}/baeldung/persistence/model/Event.java (89%) rename persistence-modules/spring-hibernate-3/src/main/java/{org => com}/baeldung/persistence/model/Foo.java (97%) rename persistence-modules/spring-hibernate-3/src/main/java/{org => com}/baeldung/persistence/service/EventService.java (72%) rename persistence-modules/spring-hibernate-3/src/main/java/{org => com}/baeldung/persistence/service/FooService.java (75%) rename persistence-modules/spring-hibernate-3/src/main/java/{org => com}/baeldung/spring/PersistenceConfig.java (94%) rename persistence-modules/spring-hibernate-3/src/main/java/{org => com}/baeldung/spring/PersistenceConfigHibernate3.java (97%) rename persistence-modules/spring-hibernate-3/src/main/java/{org => com}/baeldung/spring/PersistenceXmlConfig.java (81%) delete mode 100644 persistence-modules/spring-hibernate-3/src/main/java/org/baeldung/persistence/dao/IEventDao.java delete mode 100644 persistence-modules/spring-hibernate-3/src/main/java/org/baeldung/persistence/dao/IFooDao.java rename persistence-modules/spring-hibernate-3/src/test/java/{org => com}/baeldung/SpringContextTest.java (88%) rename persistence-modules/spring-hibernate-3/src/test/java/{org => com}/baeldung/persistence/service/FooServicePersistenceIntegrationTest.java (91%) rename persistence-modules/spring-hibernate-3/src/test/java/{org => com}/baeldung/persistence/service/HibernateExceptionScen1MainIntegrationTest.java (90%) rename persistence-modules/spring-hibernate-3/src/test/java/{org => com}/baeldung/persistence/service/HibernateExceptionScen2MainIntegrationTest.java (91%) rename persistence-modules/spring-hibernate-3/src/test/java/{org => com}/baeldung/persistence/service/NoHibernateSessBoundUsingAnnoSessionBeanMainIntegrationTest.java (88%) rename persistence-modules/spring-hibernate-3/src/test/java/{org => com}/baeldung/persistence/service/NoHibernateSessBoundUsingLocalSessionBeanMainIntegrationTest.java (86%) diff --git a/persistence-modules/spring-hibernate-3/README.md b/persistence-modules/spring-hibernate-3/README.md index 898c6522a9..610d586f85 100644 --- a/persistence-modules/spring-hibernate-3/README.md +++ b/persistence-modules/spring-hibernate-3/README.md @@ -4,8 +4,8 @@ This module contains articles about Spring with Hibernate 3 ### Relevant Articles: -- [Hibernate 3 with Spring](http://www.baeldung.com/hibernate3-spring) -- [HibernateException: No Hibernate Session Bound to Thread in Hibernate 3](http://www.baeldung.com/no-hibernate-session-bound-to-thread-exception) +- [Hibernate 3 with Spring](https://www.baeldung.com/hibernate3-spring) +- [HibernateException: No Hibernate Session Bound to Thread in Hibernate 3](https://www.baeldung.com/no-hibernate-session-bound-to-thread-exception) ### Quick Start diff --git a/persistence-modules/spring-hibernate-3/src/main/java/org/baeldung/persistence/dao/AbstractHibernateDao.java b/persistence-modules/spring-hibernate-3/src/main/java/com/baeldung/persistence/dao/AbstractHibernateDao.java similarity index 97% rename from persistence-modules/spring-hibernate-3/src/main/java/org/baeldung/persistence/dao/AbstractHibernateDao.java rename to persistence-modules/spring-hibernate-3/src/main/java/com/baeldung/persistence/dao/AbstractHibernateDao.java index 0f8b132891..701c6c43c7 100644 --- a/persistence-modules/spring-hibernate-3/src/main/java/org/baeldung/persistence/dao/AbstractHibernateDao.java +++ b/persistence-modules/spring-hibernate-3/src/main/java/com/baeldung/persistence/dao/AbstractHibernateDao.java @@ -1,4 +1,4 @@ -package org.baeldung.persistence.dao; +package com.baeldung.persistence.dao; import java.io.Serializable; import java.util.List; diff --git a/persistence-modules/spring-hibernate-3/src/main/java/org/baeldung/persistence/dao/EventDao.java b/persistence-modules/spring-hibernate-3/src/main/java/com/baeldung/persistence/dao/EventDao.java similarity index 70% rename from persistence-modules/spring-hibernate-3/src/main/java/org/baeldung/persistence/dao/EventDao.java rename to persistence-modules/spring-hibernate-3/src/main/java/com/baeldung/persistence/dao/EventDao.java index 74da643f35..e6519d54c8 100644 --- a/persistence-modules/spring-hibernate-3/src/main/java/org/baeldung/persistence/dao/EventDao.java +++ b/persistence-modules/spring-hibernate-3/src/main/java/com/baeldung/persistence/dao/EventDao.java @@ -1,18 +1,18 @@ -package org.baeldung.persistence.dao; - - -import org.baeldung.persistence.model.Event; -import org.springframework.stereotype.Repository; - -@Repository -public class EventDao extends AbstractHibernateDao implements IEventDao { - - public EventDao() { - super(); - - setClazz(Event.class); - } - - // API - -} +package com.baeldung.persistence.dao; + + +import com.baeldung.persistence.model.Event; +import org.springframework.stereotype.Repository; + +@Repository +public class EventDao extends AbstractHibernateDao implements IEventDao { + + public EventDao() { + super(); + + setClazz(Event.class); + } + + // API + +} diff --git a/persistence-modules/spring-hibernate-3/src/main/java/org/baeldung/persistence/dao/FooDao.java b/persistence-modules/spring-hibernate-3/src/main/java/com/baeldung/persistence/dao/FooDao.java similarity index 73% rename from persistence-modules/spring-hibernate-3/src/main/java/org/baeldung/persistence/dao/FooDao.java rename to persistence-modules/spring-hibernate-3/src/main/java/com/baeldung/persistence/dao/FooDao.java index 23de04169e..afcd958bc2 100644 --- a/persistence-modules/spring-hibernate-3/src/main/java/org/baeldung/persistence/dao/FooDao.java +++ b/persistence-modules/spring-hibernate-3/src/main/java/com/baeldung/persistence/dao/FooDao.java @@ -1,6 +1,6 @@ -package org.baeldung.persistence.dao; +package com.baeldung.persistence.dao; -import org.baeldung.persistence.model.Foo; +import com.baeldung.persistence.model.Foo; import org.springframework.stereotype.Repository; @Repository diff --git a/persistence-modules/spring-hibernate-3/src/main/java/com/baeldung/persistence/dao/IEventDao.java b/persistence-modules/spring-hibernate-3/src/main/java/com/baeldung/persistence/dao/IEventDao.java new file mode 100644 index 0000000000..da2be1ce1e --- /dev/null +++ b/persistence-modules/spring-hibernate-3/src/main/java/com/baeldung/persistence/dao/IEventDao.java @@ -0,0 +1,8 @@ +package com.baeldung.persistence.dao; + +import com.baeldung.persistence.model.Event; + + +public interface IEventDao extends IOperations { + // +} diff --git a/persistence-modules/spring-hibernate-3/src/main/java/com/baeldung/persistence/dao/IFooDao.java b/persistence-modules/spring-hibernate-3/src/main/java/com/baeldung/persistence/dao/IFooDao.java new file mode 100644 index 0000000000..f79883980a --- /dev/null +++ b/persistence-modules/spring-hibernate-3/src/main/java/com/baeldung/persistence/dao/IFooDao.java @@ -0,0 +1,7 @@ +package com.baeldung.persistence.dao; + +import com.baeldung.persistence.model.Foo; + +public interface IFooDao extends IOperations { + // +} diff --git a/persistence-modules/spring-hibernate-3/src/main/java/org/baeldung/persistence/dao/IOperations.java b/persistence-modules/spring-hibernate-3/src/main/java/com/baeldung/persistence/dao/IOperations.java similarity index 89% rename from persistence-modules/spring-hibernate-3/src/main/java/org/baeldung/persistence/dao/IOperations.java rename to persistence-modules/spring-hibernate-3/src/main/java/com/baeldung/persistence/dao/IOperations.java index 8c5a5e1aed..66f8008f27 100644 --- a/persistence-modules/spring-hibernate-3/src/main/java/org/baeldung/persistence/dao/IOperations.java +++ b/persistence-modules/spring-hibernate-3/src/main/java/com/baeldung/persistence/dao/IOperations.java @@ -1,4 +1,4 @@ -package org.baeldung.persistence.dao; +package com.baeldung.persistence.dao; import java.io.Serializable; import java.util.List; diff --git a/persistence-modules/spring-hibernate-3/src/main/java/org/baeldung/persistence/model/Event.java b/persistence-modules/spring-hibernate-3/src/main/java/com/baeldung/persistence/model/Event.java similarity index 89% rename from persistence-modules/spring-hibernate-3/src/main/java/org/baeldung/persistence/model/Event.java rename to persistence-modules/spring-hibernate-3/src/main/java/com/baeldung/persistence/model/Event.java index 1d659ed75c..37a9758cd5 100644 --- a/persistence-modules/spring-hibernate-3/src/main/java/org/baeldung/persistence/model/Event.java +++ b/persistence-modules/spring-hibernate-3/src/main/java/com/baeldung/persistence/model/Event.java @@ -1,45 +1,45 @@ -package org.baeldung.persistence.model; - -import java.io.Serializable; - -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.Id; -import javax.persistence.Table; - -@Entity -@Table(name = "EVENTS") -public class Event implements Serializable { - - @Id - @GeneratedValue - private Long id; - - private String description; - - public Event() { - } - - - public Event(String description) { - this.description = description; - } - - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - +package com.baeldung.persistence.model; + +import java.io.Serializable; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Table; + +@Entity +@Table(name = "EVENTS") +public class Event implements Serializable { + + @Id + @GeneratedValue + private Long id; + + private String description; + + public Event() { + } + + + public Event(String description) { + this.description = description; + } + + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + } \ No newline at end of file diff --git a/persistence-modules/spring-hibernate-3/src/main/java/org/baeldung/persistence/model/Foo.java b/persistence-modules/spring-hibernate-3/src/main/java/com/baeldung/persistence/model/Foo.java similarity index 97% rename from persistence-modules/spring-hibernate-3/src/main/java/org/baeldung/persistence/model/Foo.java rename to persistence-modules/spring-hibernate-3/src/main/java/com/baeldung/persistence/model/Foo.java index 8e1dee33e8..9af3d07bed 100644 --- a/persistence-modules/spring-hibernate-3/src/main/java/org/baeldung/persistence/model/Foo.java +++ b/persistence-modules/spring-hibernate-3/src/main/java/com/baeldung/persistence/model/Foo.java @@ -1,4 +1,4 @@ -package org.baeldung.persistence.model; +package com.baeldung.persistence.model; import java.io.Serializable; diff --git a/persistence-modules/spring-hibernate-3/src/main/java/org/baeldung/persistence/service/EventService.java b/persistence-modules/spring-hibernate-3/src/main/java/com/baeldung/persistence/service/EventService.java similarity index 72% rename from persistence-modules/spring-hibernate-3/src/main/java/org/baeldung/persistence/service/EventService.java rename to persistence-modules/spring-hibernate-3/src/main/java/com/baeldung/persistence/service/EventService.java index 6171751cc5..bf9afed38b 100644 --- a/persistence-modules/spring-hibernate-3/src/main/java/org/baeldung/persistence/service/EventService.java +++ b/persistence-modules/spring-hibernate-3/src/main/java/com/baeldung/persistence/service/EventService.java @@ -1,27 +1,27 @@ -package org.baeldung.persistence.service; - - -import org.baeldung.persistence.dao.IEventDao; -import org.baeldung.persistence.model.Event; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -@Service -@Transactional -public class EventService { - - @Autowired - private IEventDao dao; - - public EventService() { - super(); - } - - // API - - public void create(final Event entity) { - dao.create(entity); - } - -} +package com.baeldung.persistence.service; + + +import com.baeldung.persistence.model.Event; +import com.baeldung.persistence.dao.IEventDao; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +@Transactional +public class EventService { + + @Autowired + private IEventDao dao; + + public EventService() { + super(); + } + + // API + + public void create(final Event entity) { + dao.create(entity); + } + +} diff --git a/persistence-modules/spring-hibernate-3/src/main/java/org/baeldung/persistence/service/FooService.java b/persistence-modules/spring-hibernate-3/src/main/java/com/baeldung/persistence/service/FooService.java similarity index 75% rename from persistence-modules/spring-hibernate-3/src/main/java/org/baeldung/persistence/service/FooService.java rename to persistence-modules/spring-hibernate-3/src/main/java/com/baeldung/persistence/service/FooService.java index b07698c438..ad88062216 100644 --- a/persistence-modules/spring-hibernate-3/src/main/java/org/baeldung/persistence/service/FooService.java +++ b/persistence-modules/spring-hibernate-3/src/main/java/com/baeldung/persistence/service/FooService.java @@ -1,7 +1,7 @@ -package org.baeldung.persistence.service; +package com.baeldung.persistence.service; -import org.baeldung.persistence.dao.IFooDao; -import org.baeldung.persistence.model.Foo; +import com.baeldung.persistence.dao.IFooDao; +import com.baeldung.persistence.model.Foo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; diff --git a/persistence-modules/spring-hibernate-3/src/main/java/org/baeldung/spring/PersistenceConfig.java b/persistence-modules/spring-hibernate-3/src/main/java/com/baeldung/spring/PersistenceConfig.java similarity index 94% rename from persistence-modules/spring-hibernate-3/src/main/java/org/baeldung/spring/PersistenceConfig.java rename to persistence-modules/spring-hibernate-3/src/main/java/com/baeldung/spring/PersistenceConfig.java index 03b9bfac33..29472174b2 100644 --- a/persistence-modules/spring-hibernate-3/src/main/java/org/baeldung/spring/PersistenceConfig.java +++ b/persistence-modules/spring-hibernate-3/src/main/java/com/baeldung/spring/PersistenceConfig.java @@ -1,4 +1,4 @@ -package org.baeldung.spring; +package com.baeldung.spring; import java.util.Properties; @@ -22,7 +22,7 @@ import com.google.common.base.Preconditions; @Configuration @EnableTransactionManagement @PropertySource({ "classpath:persistence-h2.properties" }) -@ComponentScan({ "org.baeldung.persistence.dao", "org.baeldung.persistence.service" }) +@ComponentScan({ "com.baeldung.persistence.dao", "com.baeldung.persistence.service" }) public class PersistenceConfig { @Autowired @@ -36,7 +36,7 @@ public class PersistenceConfig { public AnnotationSessionFactoryBean sessionFactory() { final AnnotationSessionFactoryBean sessionFactory = new AnnotationSessionFactoryBean(); sessionFactory.setDataSource(dataSource()); - sessionFactory.setPackagesToScan(new String[] { "org.baeldung.persistence.model" }); + sessionFactory.setPackagesToScan(new String[] { "com.baeldung.persistence.model" }); sessionFactory.setHibernateProperties(hibernateProperties()); return sessionFactory; diff --git a/persistence-modules/spring-hibernate-3/src/main/java/org/baeldung/spring/PersistenceConfigHibernate3.java b/persistence-modules/spring-hibernate-3/src/main/java/com/baeldung/spring/PersistenceConfigHibernate3.java similarity index 97% rename from persistence-modules/spring-hibernate-3/src/main/java/org/baeldung/spring/PersistenceConfigHibernate3.java rename to persistence-modules/spring-hibernate-3/src/main/java/com/baeldung/spring/PersistenceConfigHibernate3.java index f38da21dc0..08ae9a76df 100644 --- a/persistence-modules/spring-hibernate-3/src/main/java/org/baeldung/spring/PersistenceConfigHibernate3.java +++ b/persistence-modules/spring-hibernate-3/src/main/java/com/baeldung/spring/PersistenceConfigHibernate3.java @@ -1,4 +1,4 @@ -package org.baeldung.spring; +package com.baeldung.spring; import java.util.Properties; @@ -24,7 +24,7 @@ import com.google.common.base.Preconditions; @Configuration @EnableTransactionManagement @PropertySource({ "classpath:persistence-h2.properties" }) -@ComponentScan({ "org.baeldung.persistence.dao", "org.baeldung.persistence.service" }) +@ComponentScan({ "com.baeldung.persistence.dao", "com.baeldung.persistence.service" }) public class PersistenceConfigHibernate3 { @Autowired diff --git a/persistence-modules/spring-hibernate-3/src/main/java/org/baeldung/spring/PersistenceXmlConfig.java b/persistence-modules/spring-hibernate-3/src/main/java/com/baeldung/spring/PersistenceXmlConfig.java similarity index 81% rename from persistence-modules/spring-hibernate-3/src/main/java/org/baeldung/spring/PersistenceXmlConfig.java rename to persistence-modules/spring-hibernate-3/src/main/java/com/baeldung/spring/PersistenceXmlConfig.java index 5831d2745c..798fb740a7 100644 --- a/persistence-modules/spring-hibernate-3/src/main/java/org/baeldung/spring/PersistenceXmlConfig.java +++ b/persistence-modules/spring-hibernate-3/src/main/java/com/baeldung/spring/PersistenceXmlConfig.java @@ -1,4 +1,4 @@ -package org.baeldung.spring; +package com.baeldung.spring; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.ImportResource; @@ -6,7 +6,7 @@ import org.springframework.transaction.annotation.EnableTransactionManagement; // @Configuration @EnableTransactionManagement -@ComponentScan({ "org.baeldung.persistence.dao", "org.baeldung.persistence.service" }) +@ComponentScan({ "com.baeldung.persistence.dao", "com.baeldung.persistence.service" }) @ImportResource({ "classpath:persistenceConfig.xml" }) public class PersistenceXmlConfig { diff --git a/persistence-modules/spring-hibernate-3/src/main/java/org/baeldung/persistence/dao/IEventDao.java b/persistence-modules/spring-hibernate-3/src/main/java/org/baeldung/persistence/dao/IEventDao.java deleted file mode 100644 index f7be705905..0000000000 --- a/persistence-modules/spring-hibernate-3/src/main/java/org/baeldung/persistence/dao/IEventDao.java +++ /dev/null @@ -1,9 +0,0 @@ -package org.baeldung.persistence.dao; - -import org.baeldung.persistence.model.Event; - - - -public interface IEventDao extends IOperations { - // -} diff --git a/persistence-modules/spring-hibernate-3/src/main/java/org/baeldung/persistence/dao/IFooDao.java b/persistence-modules/spring-hibernate-3/src/main/java/org/baeldung/persistence/dao/IFooDao.java deleted file mode 100644 index 6a3bd95d71..0000000000 --- a/persistence-modules/spring-hibernate-3/src/main/java/org/baeldung/persistence/dao/IFooDao.java +++ /dev/null @@ -1,7 +0,0 @@ -package org.baeldung.persistence.dao; - -import org.baeldung.persistence.model.Foo; - -public interface IFooDao extends IOperations { - // -} diff --git a/persistence-modules/spring-hibernate-3/src/main/resources/exceptionDemo.cfg.xml b/persistence-modules/spring-hibernate-3/src/main/resources/exceptionDemo.cfg.xml index 8a710cc559..896c080983 100644 --- a/persistence-modules/spring-hibernate-3/src/main/resources/exceptionDemo.cfg.xml +++ b/persistence-modules/spring-hibernate-3/src/main/resources/exceptionDemo.cfg.xml @@ -4,6 +4,6 @@ "http://hibernate.org/dtd/hibernate-configuration-3.0.dtd"> - + diff --git a/persistence-modules/spring-hibernate-3/src/main/resources/exceptionDemoPersistenceConfig.xml b/persistence-modules/spring-hibernate-3/src/main/resources/exceptionDemoPersistenceConfig.xml index 263e902e7c..5f9e8c0107 100644 --- a/persistence-modules/spring-hibernate-3/src/main/resources/exceptionDemoPersistenceConfig.xml +++ b/persistence-modules/spring-hibernate-3/src/main/resources/exceptionDemoPersistenceConfig.xml @@ -16,7 +16,7 @@ http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"> - + diff --git a/persistence-modules/spring-hibernate-3/src/main/resources/persistenceConfig.xml b/persistence-modules/spring-hibernate-3/src/main/resources/persistenceConfig.xml index f39817383b..03d4d022e6 100644 --- a/persistence-modules/spring-hibernate-3/src/main/resources/persistenceConfig.xml +++ b/persistence-modules/spring-hibernate-3/src/main/resources/persistenceConfig.xml @@ -9,7 +9,7 @@ - + ${hibernate.hbm2ddl.auto} diff --git a/persistence-modules/spring-hibernate-3/src/main/webapp/WEB-INF/web.xml b/persistence-modules/spring-hibernate-3/src/main/webapp/WEB-INF/web.xml index ad56bf28c7..69ce04fe06 100644 --- a/persistence-modules/spring-hibernate-3/src/main/webapp/WEB-INF/web.xml +++ b/persistence-modules/spring-hibernate-3/src/main/webapp/WEB-INF/web.xml @@ -11,7 +11,7 @@ contextConfigLocation - org.baeldung.spring + com.baeldung.spring org.springframework.web.context.ContextLoaderListener diff --git a/persistence-modules/spring-hibernate-3/src/test/java/org/baeldung/SpringContextTest.java b/persistence-modules/spring-hibernate-3/src/test/java/com/baeldung/SpringContextTest.java similarity index 88% rename from persistence-modules/spring-hibernate-3/src/test/java/org/baeldung/SpringContextTest.java rename to persistence-modules/spring-hibernate-3/src/test/java/com/baeldung/SpringContextTest.java index 956d5279a3..8b352b490d 100644 --- a/persistence-modules/spring-hibernate-3/src/test/java/org/baeldung/SpringContextTest.java +++ b/persistence-modules/spring-hibernate-3/src/test/java/com/baeldung/SpringContextTest.java @@ -1,6 +1,6 @@ -package org.baeldung; +package com.baeldung; -import org.baeldung.spring.PersistenceConfig; +import com.baeldung.spring.PersistenceConfig; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.test.context.ContextConfiguration; diff --git a/persistence-modules/spring-hibernate-3/src/test/java/org/baeldung/persistence/service/FooServicePersistenceIntegrationTest.java b/persistence-modules/spring-hibernate-3/src/test/java/com/baeldung/persistence/service/FooServicePersistenceIntegrationTest.java similarity index 91% rename from persistence-modules/spring-hibernate-3/src/test/java/org/baeldung/persistence/service/FooServicePersistenceIntegrationTest.java rename to persistence-modules/spring-hibernate-3/src/test/java/com/baeldung/persistence/service/FooServicePersistenceIntegrationTest.java index b6e4a5592f..7874f7c679 100644 --- a/persistence-modules/spring-hibernate-3/src/test/java/org/baeldung/persistence/service/FooServicePersistenceIntegrationTest.java +++ b/persistence-modules/spring-hibernate-3/src/test/java/com/baeldung/persistence/service/FooServicePersistenceIntegrationTest.java @@ -1,10 +1,9 @@ -package org.baeldung.persistence.service; +package com.baeldung.persistence.service; import static org.apache.commons.lang3.RandomStringUtils.randomAlphabetic; -import org.baeldung.persistence.model.Foo; -import org.baeldung.persistence.service.FooService; -import org.baeldung.spring.PersistenceConfig; +import com.baeldung.spring.PersistenceConfig; +import com.baeldung.persistence.model.Foo; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; diff --git a/persistence-modules/spring-hibernate-3/src/test/java/org/baeldung/persistence/service/HibernateExceptionScen1MainIntegrationTest.java b/persistence-modules/spring-hibernate-3/src/test/java/com/baeldung/persistence/service/HibernateExceptionScen1MainIntegrationTest.java similarity index 90% rename from persistence-modules/spring-hibernate-3/src/test/java/org/baeldung/persistence/service/HibernateExceptionScen1MainIntegrationTest.java rename to persistence-modules/spring-hibernate-3/src/test/java/com/baeldung/persistence/service/HibernateExceptionScen1MainIntegrationTest.java index 08032660c0..99dc7b42be 100644 --- a/persistence-modules/spring-hibernate-3/src/test/java/org/baeldung/persistence/service/HibernateExceptionScen1MainIntegrationTest.java +++ b/persistence-modules/spring-hibernate-3/src/test/java/com/baeldung/persistence/service/HibernateExceptionScen1MainIntegrationTest.java @@ -1,7 +1,7 @@ -package org.baeldung.persistence.service; +package com.baeldung.persistence.service; -import org.baeldung.persistence.model.Event; -import org.baeldung.spring.PersistenceConfigHibernate3; +import com.baeldung.persistence.model.Event; +import com.baeldung.spring.PersistenceConfigHibernate3; import org.hamcrest.core.IsInstanceOf; import org.hibernate.HibernateException; import org.junit.Ignore; diff --git a/persistence-modules/spring-hibernate-3/src/test/java/org/baeldung/persistence/service/HibernateExceptionScen2MainIntegrationTest.java b/persistence-modules/spring-hibernate-3/src/test/java/com/baeldung/persistence/service/HibernateExceptionScen2MainIntegrationTest.java similarity index 91% rename from persistence-modules/spring-hibernate-3/src/test/java/org/baeldung/persistence/service/HibernateExceptionScen2MainIntegrationTest.java rename to persistence-modules/spring-hibernate-3/src/test/java/com/baeldung/persistence/service/HibernateExceptionScen2MainIntegrationTest.java index 44cc6ca010..d3e475a244 100644 --- a/persistence-modules/spring-hibernate-3/src/test/java/org/baeldung/persistence/service/HibernateExceptionScen2MainIntegrationTest.java +++ b/persistence-modules/spring-hibernate-3/src/test/java/com/baeldung/persistence/service/HibernateExceptionScen2MainIntegrationTest.java @@ -1,7 +1,7 @@ -package org.baeldung.persistence.service; +package com.baeldung.persistence.service; -import org.baeldung.persistence.model.Event; -import org.baeldung.spring.PersistenceConfig; +import com.baeldung.persistence.model.Event; +import com.baeldung.spring.PersistenceConfig; import org.hamcrest.core.IsInstanceOf; import org.hibernate.HibernateException; import org.junit.Ignore; diff --git a/persistence-modules/spring-hibernate-3/src/test/java/org/baeldung/persistence/service/NoHibernateSessBoundUsingAnnoSessionBeanMainIntegrationTest.java b/persistence-modules/spring-hibernate-3/src/test/java/com/baeldung/persistence/service/NoHibernateSessBoundUsingAnnoSessionBeanMainIntegrationTest.java similarity index 88% rename from persistence-modules/spring-hibernate-3/src/test/java/org/baeldung/persistence/service/NoHibernateSessBoundUsingAnnoSessionBeanMainIntegrationTest.java rename to persistence-modules/spring-hibernate-3/src/test/java/com/baeldung/persistence/service/NoHibernateSessBoundUsingAnnoSessionBeanMainIntegrationTest.java index 2b29dcb7a9..d1c5cc04e6 100644 --- a/persistence-modules/spring-hibernate-3/src/test/java/org/baeldung/persistence/service/NoHibernateSessBoundUsingAnnoSessionBeanMainIntegrationTest.java +++ b/persistence-modules/spring-hibernate-3/src/test/java/com/baeldung/persistence/service/NoHibernateSessBoundUsingAnnoSessionBeanMainIntegrationTest.java @@ -1,42 +1,42 @@ -package org.baeldung.persistence.service; - -import org.baeldung.persistence.model.Event; -import org.baeldung.spring.PersistenceXmlConfig; -import org.junit.Ignore; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.ExpectedException; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.orm.hibernate3.HibernateSystemException; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import org.springframework.test.context.support.AnnotationConfigContextLoader; - - -@RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration(classes = { PersistenceXmlConfig.class }, loader = AnnotationConfigContextLoader.class) -public class NoHibernateSessBoundUsingAnnoSessionBeanMainIntegrationTest { - - @Autowired - EventService service; - - @Rule - public ExpectedException expectedEx = ExpectedException.none(); - - @Test - public final void whenEntityIsCreated_thenNoExceptions() { - service.create(new Event("from Annotation Session Bean Factory")); - } - - @Test - @Ignore - public final void whenNoTransBoundToSession_thenException() { - expectedEx.expect(HibernateSystemException.class); - expectedEx.expectMessage("No Hibernate Session bound to thread, " - + "and configuration does not allow creation of " - + "non-transactional one here"); - service.create(new Event("from Annotation Session Bean Factory")); - } - -} +package com.baeldung.persistence.service; + +import com.baeldung.persistence.model.Event; +import com.baeldung.spring.PersistenceXmlConfig; +import org.junit.Ignore; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.orm.hibernate3.HibernateSystemException; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.support.AnnotationConfigContextLoader; + + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(classes = { PersistenceXmlConfig.class }, loader = AnnotationConfigContextLoader.class) +public class NoHibernateSessBoundUsingAnnoSessionBeanMainIntegrationTest { + + @Autowired + EventService service; + + @Rule + public ExpectedException expectedEx = ExpectedException.none(); + + @Test + public final void whenEntityIsCreated_thenNoExceptions() { + service.create(new Event("from Annotation Session Bean Factory")); + } + + @Test + @Ignore + public final void whenNoTransBoundToSession_thenException() { + expectedEx.expect(HibernateSystemException.class); + expectedEx.expectMessage("No Hibernate Session bound to thread, " + + "and configuration does not allow creation of " + + "non-transactional one here"); + service.create(new Event("from Annotation Session Bean Factory")); + } + +} diff --git a/persistence-modules/spring-hibernate-3/src/test/java/org/baeldung/persistence/service/NoHibernateSessBoundUsingLocalSessionBeanMainIntegrationTest.java b/persistence-modules/spring-hibernate-3/src/test/java/com/baeldung/persistence/service/NoHibernateSessBoundUsingLocalSessionBeanMainIntegrationTest.java similarity index 86% rename from persistence-modules/spring-hibernate-3/src/test/java/org/baeldung/persistence/service/NoHibernateSessBoundUsingLocalSessionBeanMainIntegrationTest.java rename to persistence-modules/spring-hibernate-3/src/test/java/com/baeldung/persistence/service/NoHibernateSessBoundUsingLocalSessionBeanMainIntegrationTest.java index 1bc6c07b18..1df6aa172c 100644 --- a/persistence-modules/spring-hibernate-3/src/test/java/org/baeldung/persistence/service/NoHibernateSessBoundUsingLocalSessionBeanMainIntegrationTest.java +++ b/persistence-modules/spring-hibernate-3/src/test/java/com/baeldung/persistence/service/NoHibernateSessBoundUsingLocalSessionBeanMainIntegrationTest.java @@ -1,39 +1,38 @@ -package org.baeldung.persistence.service; - -import org.baeldung.persistence.model.Event; -import org.hibernate.HibernateException; -import org.junit.Ignore; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.ExpectedException; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.orm.hibernate3.HibernateSystemException; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; - -@RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration(locations = { "classpath:exceptionDemoPersistenceConfig.xml" }) -public class NoHibernateSessBoundUsingLocalSessionBeanMainIntegrationTest { - - @Autowired - EventService service; - - @Rule - public ExpectedException expectedEx = ExpectedException.none(); - - @Test - public final void whenEntityIsCreated_thenNoExceptions() { - service.create(new Event("from local session bean factory")); - } - - @Test - @Ignore - public final void whenNoTransBoundToSession_thenException() { - expectedEx.expect(HibernateException.class); - expectedEx.expectMessage("No Hibernate Session bound to thread, " - + "and configuration does not allow creation " - + "of non-transactional one here"); - service.create(new Event("from local session bean factory")); - } -} +package com.baeldung.persistence.service; + +import com.baeldung.persistence.model.Event; +import org.hibernate.HibernateException; +import org.junit.Ignore; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(locations = { "classpath:exceptionDemoPersistenceConfig.xml" }) +public class NoHibernateSessBoundUsingLocalSessionBeanMainIntegrationTest { + + @Autowired + EventService service; + + @Rule + public ExpectedException expectedEx = ExpectedException.none(); + + @Test + public final void whenEntityIsCreated_thenNoExceptions() { + service.create(new Event("from local session bean factory")); + } + + @Test + @Ignore + public final void whenNoTransBoundToSession_thenException() { + expectedEx.expect(HibernateException.class); + expectedEx.expectMessage("No Hibernate Session bound to thread, " + + "and configuration does not allow creation " + + "of non-transactional one here"); + service.create(new Event("from local session bean factory")); + } +} From 9b18dff3cba243a99454f50a3360d4f87fac1dff Mon Sep 17 00:00:00 2001 From: Krzysiek Date: Mon, 17 Feb 2020 21:05:33 +0100 Subject: [PATCH 140/149] JAVA-143: Migrate spring-hibernate4 to com.baeldung --- persistence-modules/spring-hibernate4/README.md | 14 +++++++------- .../{org => com}/baeldung/SpringContextTest.java | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) rename persistence-modules/spring-hibernate4/src/test/java/{org => com}/baeldung/SpringContextTest.java (96%) diff --git a/persistence-modules/spring-hibernate4/README.md b/persistence-modules/spring-hibernate4/README.md index c9e2b5abfc..cfa13ca3b0 100644 --- a/persistence-modules/spring-hibernate4/README.md +++ b/persistence-modules/spring-hibernate4/README.md @@ -3,13 +3,13 @@ This module contains articles about Spring with Hibernate 4 ### Relevant Articles: -- [Guide to Hibernate 4 with Spring](http://www.baeldung.com/hibernate-4-spring) -- [Hibernate Pagination](http://www.baeldung.com/hibernate-pagination) -- [Sorting with Hibernate](http://www.baeldung.com/hibernate-sort) -- [Stored Procedures with Hibernate](http://www.baeldung.com/stored-procedures-with-hibernate-tutorial) -- [Hibernate: save, persist, update, merge, saveOrUpdate](http://www.baeldung.com/hibernate-save-persist-update-merge-saveorupdate) -- [Eager/Lazy Loading In Hibernate](http://www.baeldung.com/hibernate-lazy-eager-loading) -- [The DAO with Spring and Hibernate](http://www.baeldung.com/persistence-layer-with-spring-and-hibernate) +- [Guide to Hibernate 4 with Spring](https://www.baeldung.com/hibernate-4-spring) +- [Hibernate Pagination](https://www.baeldung.com/hibernate-pagination) +- [Sorting with Hibernate](https://www.baeldung.com/hibernate-sort) +- [Stored Procedures with Hibernate](https://www.baeldung.com/stored-procedures-with-hibernate-tutorial) +- [Hibernate: save, persist, update, merge, saveOrUpdate](https://www.baeldung.com/hibernate-save-persist-update-merge-saveorupdate) +- [Eager/Lazy Loading In Hibernate](https://www.baeldung.com/hibernate-lazy-eager-loading) +- [The DAO with Spring and Hibernate](https://www.baeldung.com/persistence-layer-with-spring-and-hibernate) - [Auditing with JPA, Hibernate, and Spring Data JPA](https://www.baeldung.com/database-auditing-jpa) ### Quick Start diff --git a/persistence-modules/spring-hibernate4/src/test/java/org/baeldung/SpringContextTest.java b/persistence-modules/spring-hibernate4/src/test/java/com/baeldung/SpringContextTest.java similarity index 96% rename from persistence-modules/spring-hibernate4/src/test/java/org/baeldung/SpringContextTest.java rename to persistence-modules/spring-hibernate4/src/test/java/com/baeldung/SpringContextTest.java index 6815ebf304..e19965773e 100644 --- a/persistence-modules/spring-hibernate4/src/test/java/org/baeldung/SpringContextTest.java +++ b/persistence-modules/spring-hibernate4/src/test/java/com/baeldung/SpringContextTest.java @@ -1,4 +1,4 @@ -package org.baeldung; +package com.baeldung; import org.junit.Test; import org.junit.runner.RunWith; From 173440f519889a0eec3161af8af8765660f79af2 Mon Sep 17 00:00:00 2001 From: Krzysiek Date: Mon, 17 Feb 2020 21:09:56 +0100 Subject: [PATCH 141/149] JAVA-143: Migrate spring-hibernate-5 to com.baeldung --- persistence-modules/spring-hibernate-5/README.md | 14 +++++++------- .../{org => com}/baeldung/SpringContextTest.java | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) rename persistence-modules/spring-hibernate-5/src/test/java/{org => com}/baeldung/SpringContextTest.java (96%) diff --git a/persistence-modules/spring-hibernate-5/README.md b/persistence-modules/spring-hibernate-5/README.md index a74600a47f..c3c8fa7b9f 100644 --- a/persistence-modules/spring-hibernate-5/README.md +++ b/persistence-modules/spring-hibernate-5/README.md @@ -4,11 +4,11 @@ This module contains articles about Hibernate 5 with Spring. ### Relevant articles -- [Hibernate Many to Many Annotation Tutorial](http://www.baeldung.com/hibernate-many-to-many) -- [Programmatic Transactions in the Spring TestContext Framework](http://www.baeldung.com/spring-test-programmatic-transactions) -- [JPA Criteria Queries](http://www.baeldung.com/hibernate-criteria-queries) -- [Introduction to Hibernate Search](http://www.baeldung.com/hibernate-search) +- [Hibernate Many to Many Annotation Tutorial](https://www.baeldung.com/hibernate-many-to-many) +- [Programmatic Transactions in the Spring TestContext Framework](https://www.baeldung.com/spring-test-programmatic-transactions) +- [JPA Criteria Queries](https://www.baeldung.com/hibernate-criteria-queries) +- [Introduction to Hibernate Search](https://www.baeldung.com/hibernate-search) - [@DynamicUpdate with Spring Data JPA](https://www.baeldung.com/spring-data-jpa-dynamicupdate) -- [Hibernate Second-Level Cache](http://www.baeldung.com/hibernate-second-level-cache) -- [Deleting Objects with Hibernate](http://www.baeldung.com/delete-with-hibernate) -- [Spring, Hibernate and a JNDI Datasource](http://www.baeldung.com/spring-persistence-jpa-jndi-datasource) +- [Hibernate Second-Level Cache](https://www.baeldung.com/hibernate-second-level-cache) +- [Deleting Objects with Hibernate](https://www.baeldung.com/delete-with-hibernate) +- [Spring, Hibernate and a JNDI Datasource](https://www.baeldung.com/spring-persistence-jpa-jndi-datasource) diff --git a/persistence-modules/spring-hibernate-5/src/test/java/org/baeldung/SpringContextTest.java b/persistence-modules/spring-hibernate-5/src/test/java/com/baeldung/SpringContextTest.java similarity index 96% rename from persistence-modules/spring-hibernate-5/src/test/java/org/baeldung/SpringContextTest.java rename to persistence-modules/spring-hibernate-5/src/test/java/com/baeldung/SpringContextTest.java index 6815ebf304..e19965773e 100644 --- a/persistence-modules/spring-hibernate-5/src/test/java/org/baeldung/SpringContextTest.java +++ b/persistence-modules/spring-hibernate-5/src/test/java/com/baeldung/SpringContextTest.java @@ -1,4 +1,4 @@ -package org.baeldung; +package com.baeldung; import org.junit.Test; import org.junit.runner.RunWith; From 674a98e5282465de7e175cdb5c0273e5d8ad0c25 Mon Sep 17 00:00:00 2001 From: Anshul BANSAL Date: Tue, 18 Feb 2020 11:13:39 +0200 Subject: [PATCH 142/149] aspectJ dependencies set to 1.9.2 --- jcabi/pom.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/jcabi/pom.xml b/jcabi/pom.xml index bf53f74bcd..eb5d2dc4cf 100644 --- a/jcabi/pom.xml +++ b/jcabi/pom.xml @@ -65,10 +65,10 @@ 0.22.6 - 1.9.5 + 1.9.2 0.14.1 - 1.9.1 - 1.9.1 + 1.9.2 + 1.9.2 From 4cb11e39451e0678a0db23779a55e5273c99f8c6 Mon Sep 17 00:00:00 2001 From: Krzysztof Woyke Date: Tue, 18 Feb 2020 12:42:05 +0100 Subject: [PATCH 143/149] JAVA-143: Migrate spring-jpa to com.baeldung --- persistence-modules/spring-jpa/README.md | 14 ++++++------- .../annotations/MyUtilityRepository.java | 2 +- .../baeldung/annotations/Person.java | 4 ++-- .../annotations/PersonRepository.java | 2 +- .../baeldung/config/PersistenceJPAConfig.java | 8 ++++---- .../config/PersistenceJPAConfigXml.java | 4 ++-- .../baeldung/config/SpringWebConfig.java | 4 ++-- .../baeldung/config/StudentJpaConfig.java | 6 +++--- .../baeldung/config/WebInitializer.java | 2 +- .../baeldung/dsrouting/ClientDao.java | 2 +- .../dsrouting/ClientDataSourceRouter.java | 2 +- .../baeldung/dsrouting/ClientDatabase.java | 2 +- .../ClientDatabaseContextHolder.java | 2 +- .../baeldung/dsrouting/ClientService.java | 2 +- .../dao/ManyStudentRepository.java | 4 ++-- .../persistence/dao/ManyTagRepository.java | 4 ++-- .../persistence/dao/StudentRepository.java | 4 ++-- .../inmemory/persistence/model/KVTag.java | 2 +- .../persistence/model/LocationTag.java | 2 +- .../persistence/model/ManyStudent.java | 2 +- .../inmemory/persistence/model/ManyTag.java | 2 +- .../inmemory/persistence/model/SkillTag.java | 2 +- .../inmemory/persistence/model/Student.java | 2 +- .../persistence/dao/AbstractJpaDAO.java | 2 +- .../persistence/dao/BookRepository.java | 4 ++-- .../persistence/dao/BookRepositoryCustom.java | 4 ++-- .../persistence/dao/BookRepositoryImpl.java | 4 ++-- .../baeldung/persistence/dao/BookService.java | 8 ++++---- .../persistence/dao/BookSpecifications.java | 4 ++-- .../baeldung/persistence/dao/FooDao.java | 4 ++-- .../baeldung/persistence/dao/IFooDao.java | 4 ++-- .../baeldung/persistence/model/Bar.java | 2 +- .../baeldung/persistence/model/Book.java | 2 +- .../baeldung/persistence/model/Foo.java | 2 +- .../multiple/model/user/Possession.java | 2 +- .../persistence/multiple/model/user/User.java | 2 +- .../persistence/service/FooService.java | 6 +++--- .../baeldung/sqlfiles/Country.java | 2 +- .../baeldung/web/MainController.java | 4 ++-- .../src/main/resources/persistence.xml | 2 +- .../src/test/java/META-INF/persistence.xml | 4 ++-- .../java/com/baeldung/SpringContextTest.java | 2 +- .../DataSourceRoutingIntegrationTest.java | 2 +- .../DataSourceRoutingTestConfiguration.java | 2 +- .../AdvancedTaggingIntegrationTest.java | 20 +++++++++---------- .../repository/InMemoryDBIntegrationTest.java | 8 ++++---- ...oPaginationPersistenceIntegrationTest.java | 6 +++--- .../FooServicePersistenceIntegrationTest.java | 6 +++--- .../FooServiceSortingIntegrationTest.java | 8 ++++---- ...eSortingWitNullsManualIntegrationTest.java | 6 +++--- .../service/PersistenceTestSuite.java | 2 +- 51 files changed, 102 insertions(+), 102 deletions(-) rename persistence-modules/spring-jpa/src/main/java/{org => com}/baeldung/annotations/MyUtilityRepository.java (90%) rename persistence-modules/spring-jpa/src/main/java/{org => com}/baeldung/annotations/Person.java (93%) rename persistence-modules/spring-jpa/src/main/java/{org => com}/baeldung/annotations/PersonRepository.java (96%) rename persistence-modules/spring-jpa/src/main/java/{org => com}/baeldung/config/PersistenceJPAConfig.java (94%) rename persistence-modules/spring-jpa/src/main/java/{org => com}/baeldung/config/PersistenceJPAConfigXml.java (83%) rename persistence-modules/spring-jpa/src/main/java/{org => com}/baeldung/config/SpringWebConfig.java (92%) rename persistence-modules/spring-jpa/src/main/java/{org => com}/baeldung/config/StudentJpaConfig.java (94%) rename persistence-modules/spring-jpa/src/main/java/{org => com}/baeldung/config/WebInitializer.java (95%) rename persistence-modules/spring-jpa/src/main/java/{org => com}/baeldung/dsrouting/ClientDao.java (95%) rename persistence-modules/spring-jpa/src/main/java/{org => com}/baeldung/dsrouting/ClientDataSourceRouter.java (91%) rename persistence-modules/spring-jpa/src/main/java/{org => com}/baeldung/dsrouting/ClientDatabase.java (64%) rename persistence-modules/spring-jpa/src/main/java/{org => com}/baeldung/dsrouting/ClientDatabaseContextHolder.java (95%) rename persistence-modules/spring-jpa/src/main/java/{org => com}/baeldung/dsrouting/ClientService.java (94%) rename persistence-modules/spring-jpa/src/main/java/{org => com}/baeldung/inmemory/persistence/dao/ManyStudentRepository.java (68%) rename persistence-modules/spring-jpa/src/main/java/{org => com}/baeldung/inmemory/persistence/dao/ManyTagRepository.java (57%) rename persistence-modules/spring-jpa/src/main/java/{org => com}/baeldung/inmemory/persistence/dao/StudentRepository.java (90%) rename persistence-modules/spring-jpa/src/main/java/{org => com}/baeldung/inmemory/persistence/model/KVTag.java (91%) rename persistence-modules/spring-jpa/src/main/java/{org => com}/baeldung/inmemory/persistence/model/LocationTag.java (92%) rename persistence-modules/spring-jpa/src/main/java/{org => com}/baeldung/inmemory/persistence/model/ManyStudent.java (94%) rename persistence-modules/spring-jpa/src/main/java/{org => com}/baeldung/inmemory/persistence/model/ManyTag.java (93%) rename persistence-modules/spring-jpa/src/main/java/{org => com}/baeldung/inmemory/persistence/model/SkillTag.java (90%) rename persistence-modules/spring-jpa/src/main/java/{org => com}/baeldung/inmemory/persistence/model/Student.java (96%) rename persistence-modules/spring-jpa/src/main/java/{org => com}/baeldung/persistence/dao/AbstractJpaDAO.java (96%) rename persistence-modules/spring-jpa/src/main/java/{org => com}/baeldung/persistence/dao/BookRepository.java (76%) rename persistence-modules/spring-jpa/src/main/java/{org => com}/baeldung/persistence/dao/BookRepositoryCustom.java (65%) rename persistence-modules/spring-jpa/src/main/java/{org => com}/baeldung/persistence/dao/BookRepositoryImpl.java (93%) rename persistence-modules/spring-jpa/src/main/java/{org => com}/baeldung/persistence/dao/BookService.java (71%) rename persistence-modules/spring-jpa/src/main/java/{org => com}/baeldung/persistence/dao/BookSpecifications.java (82%) rename persistence-modules/spring-jpa/src/main/java/{org => com}/baeldung/persistence/dao/FooDao.java (73%) rename persistence-modules/spring-jpa/src/main/java/{org => com}/baeldung/persistence/dao/IFooDao.java (74%) rename persistence-modules/spring-jpa/src/main/java/{org => com}/baeldung/persistence/model/Bar.java (98%) rename persistence-modules/spring-jpa/src/main/java/{org => com}/baeldung/persistence/model/Book.java (92%) rename persistence-modules/spring-jpa/src/main/java/{org => com}/baeldung/persistence/model/Foo.java (98%) rename persistence-modules/spring-jpa/src/main/java/{org => com}/baeldung/persistence/multiple/model/user/Possession.java (96%) rename persistence-modules/spring-jpa/src/main/java/{org => com}/baeldung/persistence/multiple/model/user/User.java (96%) rename persistence-modules/spring-jpa/src/main/java/{org => com}/baeldung/persistence/service/FooService.java (81%) rename persistence-modules/spring-jpa/src/main/java/{org => com}/baeldung/sqlfiles/Country.java (95%) rename persistence-modules/spring-jpa/src/main/java/{org => com}/baeldung/web/MainController.java (85%) rename persistence-modules/spring-jpa/src/test/java/{org => com}/baeldung/dsrouting/DataSourceRoutingIntegrationTest.java (98%) rename persistence-modules/spring-jpa/src/test/java/{org => com}/baeldung/dsrouting/DataSourceRoutingTestConfiguration.java (98%) rename persistence-modules/spring-jpa/src/test/java/{org => com}/baeldung/persistence/repository/AdvancedTaggingIntegrationTest.java (82%) rename persistence-modules/spring-jpa/src/test/java/{org => com}/baeldung/persistence/repository/InMemoryDBIntegrationTest.java (93%) rename persistence-modules/spring-jpa/src/test/java/{org => com}/baeldung/persistence/service/FooPaginationPersistenceIntegrationTest.java (97%) rename persistence-modules/spring-jpa/src/test/java/{org => com}/baeldung/persistence/service/FooServicePersistenceIntegrationTest.java (94%) rename persistence-modules/spring-jpa/src/test/java/{org => com}/baeldung/persistence/service/FooServiceSortingIntegrationTest.java (96%) rename persistence-modules/spring-jpa/src/test/java/{org => com}/baeldung/persistence/service/FooServiceSortingWitNullsManualIntegrationTest.java (94%) rename persistence-modules/spring-jpa/src/test/java/{org => com}/baeldung/persistence/service/PersistenceTestSuite.java (90%) diff --git a/persistence-modules/spring-jpa/README.md b/persistence-modules/spring-jpa/README.md index 489d990fc3..27a2fe8368 100644 --- a/persistence-modules/spring-jpa/README.md +++ b/persistence-modules/spring-jpa/README.md @@ -4,13 +4,13 @@ ### Relevant Articles: -- [The DAO with JPA and Spring](http://www.baeldung.com/spring-dao-jpa) -- [JPA Pagination](http://www.baeldung.com/jpa-pagination) -- [Sorting with JPA](http://www.baeldung.com/jpa-sort) -- [Self-Contained Testing Using an In-Memory Database](http://www.baeldung.com/spring-jpa-test-in-memory-database) -- [A Guide to Spring AbstractRoutingDatasource](http://www.baeldung.com/spring-abstract-routing-data-source) -- [Obtaining Auto-generated Keys in Spring JDBC](http://www.baeldung.com/spring-jdbc-autogenerated-keys) -- [Transactions with Spring 4 and JPA](http://www.baeldung.com/transaction-configuration-with-jpa-and-spring) +- [The DAO with JPA and Spring](https://www.baeldung.com/spring-dao-jpa) +- [JPA Pagination](https://www.baeldung.com/jpa-pagination) +- [Sorting with JPA](https://www.baeldung.com/jpa-sort) +- [Self-Contained Testing Using an In-Memory Database](https://www.baeldung.com/spring-jpa-test-in-memory-database) +- [A Guide to Spring AbstractRoutingDatasource](https://www.baeldung.com/spring-abstract-routing-data-source) +- [Obtaining Auto-generated Keys in Spring JDBC](https://www.baeldung.com/spring-jdbc-autogenerated-keys) +- [Transactions with Spring 4 and JPA](https://www.baeldung.com/transaction-configuration-with-jpa-and-spring) - [Use Criteria Queries in a Spring Data Application](https://www.baeldung.com/spring-data-criteria-queries) - [Many-To-Many Relationship in JPA](https://www.baeldung.com/jpa-many-to-many) - [Spring Persistence (Hibernate and JPA) with a JNDI datasource](https://www.baeldung.com/spring-persistence-hibernate-and-jpa-with-a-jndi-datasource/) diff --git a/persistence-modules/spring-jpa/src/main/java/org/baeldung/annotations/MyUtilityRepository.java b/persistence-modules/spring-jpa/src/main/java/com/baeldung/annotations/MyUtilityRepository.java similarity index 90% rename from persistence-modules/spring-jpa/src/main/java/org/baeldung/annotations/MyUtilityRepository.java rename to persistence-modules/spring-jpa/src/main/java/com/baeldung/annotations/MyUtilityRepository.java index 5fe54b80d9..a23e9d9fe4 100644 --- a/persistence-modules/spring-jpa/src/main/java/org/baeldung/annotations/MyUtilityRepository.java +++ b/persistence-modules/spring-jpa/src/main/java/com/baeldung/annotations/MyUtilityRepository.java @@ -1,4 +1,4 @@ -package org.baeldung.annotations; +package com.baeldung.annotations; import java.io.Serializable; import java.util.Optional; diff --git a/persistence-modules/spring-jpa/src/main/java/org/baeldung/annotations/Person.java b/persistence-modules/spring-jpa/src/main/java/com/baeldung/annotations/Person.java similarity index 93% rename from persistence-modules/spring-jpa/src/main/java/org/baeldung/annotations/Person.java rename to persistence-modules/spring-jpa/src/main/java/com/baeldung/annotations/Person.java index 309a4f43e1..b881535e05 100644 --- a/persistence-modules/spring-jpa/src/main/java/org/baeldung/annotations/Person.java +++ b/persistence-modules/spring-jpa/src/main/java/com/baeldung/annotations/Person.java @@ -1,4 +1,4 @@ -package org.baeldung.annotations; +package com.baeldung.annotations; import java.util.Date; @@ -8,7 +8,7 @@ import javax.persistence.NamedStoredProcedureQuery; import javax.persistence.ParameterMode; import javax.persistence.StoredProcedureParameter; -import org.baeldung.persistence.multiple.model.user.User; +import com.baeldung.persistence.multiple.model.user.User; import org.springframework.data.annotation.CreatedBy; import org.springframework.data.annotation.CreatedDate; import org.springframework.data.annotation.Id; diff --git a/persistence-modules/spring-jpa/src/main/java/org/baeldung/annotations/PersonRepository.java b/persistence-modules/spring-jpa/src/main/java/com/baeldung/annotations/PersonRepository.java similarity index 96% rename from persistence-modules/spring-jpa/src/main/java/org/baeldung/annotations/PersonRepository.java rename to persistence-modules/spring-jpa/src/main/java/com/baeldung/annotations/PersonRepository.java index 58558860ff..77b7067f11 100644 --- a/persistence-modules/spring-jpa/src/main/java/org/baeldung/annotations/PersonRepository.java +++ b/persistence-modules/spring-jpa/src/main/java/com/baeldung/annotations/PersonRepository.java @@ -1,4 +1,4 @@ -package org.baeldung.annotations; +package com.baeldung.annotations; import javax.persistence.LockModeType; diff --git a/persistence-modules/spring-jpa/src/main/java/org/baeldung/config/PersistenceJPAConfig.java b/persistence-modules/spring-jpa/src/main/java/com/baeldung/config/PersistenceJPAConfig.java similarity index 94% rename from persistence-modules/spring-jpa/src/main/java/org/baeldung/config/PersistenceJPAConfig.java rename to persistence-modules/spring-jpa/src/main/java/com/baeldung/config/PersistenceJPAConfig.java index ec0d4bca3c..4eda4d9274 100644 --- a/persistence-modules/spring-jpa/src/main/java/org/baeldung/config/PersistenceJPAConfig.java +++ b/persistence-modules/spring-jpa/src/main/java/com/baeldung/config/PersistenceJPAConfig.java @@ -1,4 +1,4 @@ -package org.baeldung.config; +package com.baeldung.config; import java.util.Properties; @@ -25,8 +25,8 @@ import com.google.common.base.Preconditions; @Configuration @EnableTransactionManagement @PropertySource({ "classpath:persistence-h2.properties" }) -@ComponentScan({ "org.baeldung.persistence" }) -@EnableJpaRepositories(basePackages = "org.baeldung.persistence.dao") +@ComponentScan({ "com.baeldung.persistence" }) +@EnableJpaRepositories(basePackages = "com.baeldung.persistence.dao") public class PersistenceJPAConfig { @Autowired @@ -42,7 +42,7 @@ public class PersistenceJPAConfig { public LocalContainerEntityManagerFactoryBean entityManagerFactory() { final LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean(); em.setDataSource(dataSource()); - em.setPackagesToScan(new String[] { "org.baeldung.persistence.model" }); + em.setPackagesToScan(new String[] { "com.baeldung.persistence.model" }); final HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter(); em.setJpaVendorAdapter(vendorAdapter); diff --git a/persistence-modules/spring-jpa/src/main/java/org/baeldung/config/PersistenceJPAConfigXml.java b/persistence-modules/spring-jpa/src/main/java/com/baeldung/config/PersistenceJPAConfigXml.java similarity index 83% rename from persistence-modules/spring-jpa/src/main/java/org/baeldung/config/PersistenceJPAConfigXml.java rename to persistence-modules/spring-jpa/src/main/java/com/baeldung/config/PersistenceJPAConfigXml.java index 3df36e62ee..95224a4662 100644 --- a/persistence-modules/spring-jpa/src/main/java/org/baeldung/config/PersistenceJPAConfigXml.java +++ b/persistence-modules/spring-jpa/src/main/java/com/baeldung/config/PersistenceJPAConfigXml.java @@ -1,4 +1,4 @@ -package org.baeldung.config; +package com.baeldung.config; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.ImportResource; @@ -6,7 +6,7 @@ import org.springframework.transaction.annotation.EnableTransactionManagement; // @Configuration @EnableTransactionManagement -@ComponentScan({ "org.baeldung.persistence" }) +@ComponentScan({ "com.baeldung.persistence" }) @ImportResource({ "classpath:jpaConfig.xml" }) public class PersistenceJPAConfigXml { diff --git a/persistence-modules/spring-jpa/src/main/java/org/baeldung/config/SpringWebConfig.java b/persistence-modules/spring-jpa/src/main/java/com/baeldung/config/SpringWebConfig.java similarity index 92% rename from persistence-modules/spring-jpa/src/main/java/org/baeldung/config/SpringWebConfig.java rename to persistence-modules/spring-jpa/src/main/java/com/baeldung/config/SpringWebConfig.java index 6afb271b10..475970d1f0 100644 --- a/persistence-modules/spring-jpa/src/main/java/org/baeldung/config/SpringWebConfig.java +++ b/persistence-modules/spring-jpa/src/main/java/com/baeldung/config/SpringWebConfig.java @@ -1,4 +1,4 @@ -package org.baeldung.config; +package com.baeldung.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; @@ -10,7 +10,7 @@ import org.springframework.web.servlet.view.JstlView; @EnableWebMvc @Configuration -@ComponentScan({ "org.baeldung.web" }) +@ComponentScan({ "com.baeldung.web" }) public class SpringWebConfig extends WebMvcConfigurerAdapter { @Bean diff --git a/persistence-modules/spring-jpa/src/main/java/org/baeldung/config/StudentJpaConfig.java b/persistence-modules/spring-jpa/src/main/java/com/baeldung/config/StudentJpaConfig.java similarity index 94% rename from persistence-modules/spring-jpa/src/main/java/org/baeldung/config/StudentJpaConfig.java rename to persistence-modules/spring-jpa/src/main/java/com/baeldung/config/StudentJpaConfig.java index 17047cbab2..08f37ea806 100644 --- a/persistence-modules/spring-jpa/src/main/java/org/baeldung/config/StudentJpaConfig.java +++ b/persistence-modules/spring-jpa/src/main/java/com/baeldung/config/StudentJpaConfig.java @@ -1,4 +1,4 @@ -package org.baeldung.config; +package com.baeldung.config; import java.util.Properties; @@ -18,7 +18,7 @@ import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter; import org.springframework.transaction.annotation.EnableTransactionManagement; @Configuration -@EnableJpaRepositories(basePackages = "org.baeldung.inmemory.persistence.dao") +@EnableJpaRepositories(basePackages = "com.baeldung.inmemory.persistence.dao") @PropertySource("persistence-student.properties") @EnableTransactionManagement public class StudentJpaConfig { @@ -41,7 +41,7 @@ public class StudentJpaConfig { public LocalContainerEntityManagerFactoryBean entityManagerFactory() { final LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean(); em.setDataSource(dataSource()); - em.setPackagesToScan(new String[] { "org.baeldung.inmemory.persistence.model" }); + em.setPackagesToScan(new String[] { "com.baeldung.inmemory.persistence.model" }); em.setJpaVendorAdapter(new HibernateJpaVendorAdapter()); em.setJpaProperties(additionalProperties()); return em; diff --git a/persistence-modules/spring-jpa/src/main/java/org/baeldung/config/WebInitializer.java b/persistence-modules/spring-jpa/src/main/java/com/baeldung/config/WebInitializer.java similarity index 95% rename from persistence-modules/spring-jpa/src/main/java/org/baeldung/config/WebInitializer.java rename to persistence-modules/spring-jpa/src/main/java/com/baeldung/config/WebInitializer.java index cf6e69eb39..be81cca76b 100644 --- a/persistence-modules/spring-jpa/src/main/java/org/baeldung/config/WebInitializer.java +++ b/persistence-modules/spring-jpa/src/main/java/com/baeldung/config/WebInitializer.java @@ -1,4 +1,4 @@ -package org.baeldung.config; +package com.baeldung.config; import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer; diff --git a/persistence-modules/spring-jpa/src/main/java/org/baeldung/dsrouting/ClientDao.java b/persistence-modules/spring-jpa/src/main/java/com/baeldung/dsrouting/ClientDao.java similarity index 95% rename from persistence-modules/spring-jpa/src/main/java/org/baeldung/dsrouting/ClientDao.java rename to persistence-modules/spring-jpa/src/main/java/com/baeldung/dsrouting/ClientDao.java index 9e19cf4ed9..e8117ba4fa 100644 --- a/persistence-modules/spring-jpa/src/main/java/org/baeldung/dsrouting/ClientDao.java +++ b/persistence-modules/spring-jpa/src/main/java/com/baeldung/dsrouting/ClientDao.java @@ -1,4 +1,4 @@ -package org.baeldung.dsrouting; +package com.baeldung.dsrouting; import javax.sql.DataSource; diff --git a/persistence-modules/spring-jpa/src/main/java/org/baeldung/dsrouting/ClientDataSourceRouter.java b/persistence-modules/spring-jpa/src/main/java/com/baeldung/dsrouting/ClientDataSourceRouter.java similarity index 91% rename from persistence-modules/spring-jpa/src/main/java/org/baeldung/dsrouting/ClientDataSourceRouter.java rename to persistence-modules/spring-jpa/src/main/java/com/baeldung/dsrouting/ClientDataSourceRouter.java index 997e461cde..a9f5d83b55 100644 --- a/persistence-modules/spring-jpa/src/main/java/org/baeldung/dsrouting/ClientDataSourceRouter.java +++ b/persistence-modules/spring-jpa/src/main/java/com/baeldung/dsrouting/ClientDataSourceRouter.java @@ -1,4 +1,4 @@ -package org.baeldung.dsrouting; +package com.baeldung.dsrouting; import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource; diff --git a/persistence-modules/spring-jpa/src/main/java/org/baeldung/dsrouting/ClientDatabase.java b/persistence-modules/spring-jpa/src/main/java/com/baeldung/dsrouting/ClientDatabase.java similarity index 64% rename from persistence-modules/spring-jpa/src/main/java/org/baeldung/dsrouting/ClientDatabase.java rename to persistence-modules/spring-jpa/src/main/java/com/baeldung/dsrouting/ClientDatabase.java index 619b8707d8..d8d178a4d5 100644 --- a/persistence-modules/spring-jpa/src/main/java/org/baeldung/dsrouting/ClientDatabase.java +++ b/persistence-modules/spring-jpa/src/main/java/com/baeldung/dsrouting/ClientDatabase.java @@ -1,4 +1,4 @@ -package org.baeldung.dsrouting; +package com.baeldung.dsrouting; public enum ClientDatabase { diff --git a/persistence-modules/spring-jpa/src/main/java/org/baeldung/dsrouting/ClientDatabaseContextHolder.java b/persistence-modules/spring-jpa/src/main/java/com/baeldung/dsrouting/ClientDatabaseContextHolder.java similarity index 95% rename from persistence-modules/spring-jpa/src/main/java/org/baeldung/dsrouting/ClientDatabaseContextHolder.java rename to persistence-modules/spring-jpa/src/main/java/com/baeldung/dsrouting/ClientDatabaseContextHolder.java index c08559e877..ae5d16cad2 100644 --- a/persistence-modules/spring-jpa/src/main/java/org/baeldung/dsrouting/ClientDatabaseContextHolder.java +++ b/persistence-modules/spring-jpa/src/main/java/com/baeldung/dsrouting/ClientDatabaseContextHolder.java @@ -1,4 +1,4 @@ -package org.baeldung.dsrouting; +package com.baeldung.dsrouting; import org.springframework.util.Assert; diff --git a/persistence-modules/spring-jpa/src/main/java/org/baeldung/dsrouting/ClientService.java b/persistence-modules/spring-jpa/src/main/java/com/baeldung/dsrouting/ClientService.java similarity index 94% rename from persistence-modules/spring-jpa/src/main/java/org/baeldung/dsrouting/ClientService.java rename to persistence-modules/spring-jpa/src/main/java/com/baeldung/dsrouting/ClientService.java index 4b63c6333c..59b3d1660a 100644 --- a/persistence-modules/spring-jpa/src/main/java/org/baeldung/dsrouting/ClientService.java +++ b/persistence-modules/spring-jpa/src/main/java/com/baeldung/dsrouting/ClientService.java @@ -1,4 +1,4 @@ -package org.baeldung.dsrouting; +package com.baeldung.dsrouting; /** * Service layer code for datasource routing example. Here, the service methods are responsible diff --git a/persistence-modules/spring-jpa/src/main/java/org/baeldung/inmemory/persistence/dao/ManyStudentRepository.java b/persistence-modules/spring-jpa/src/main/java/com/baeldung/inmemory/persistence/dao/ManyStudentRepository.java similarity index 68% rename from persistence-modules/spring-jpa/src/main/java/org/baeldung/inmemory/persistence/dao/ManyStudentRepository.java rename to persistence-modules/spring-jpa/src/main/java/com/baeldung/inmemory/persistence/dao/ManyStudentRepository.java index a03b2950a0..a2aa0c5780 100644 --- a/persistence-modules/spring-jpa/src/main/java/org/baeldung/inmemory/persistence/dao/ManyStudentRepository.java +++ b/persistence-modules/spring-jpa/src/main/java/com/baeldung/inmemory/persistence/dao/ManyStudentRepository.java @@ -1,6 +1,6 @@ -package org.baeldung.inmemory.persistence.dao; +package com.baeldung.inmemory.persistence.dao; -import org.baeldung.inmemory.persistence.model.ManyStudent; +import com.baeldung.inmemory.persistence.model.ManyStudent; import org.springframework.data.jpa.repository.JpaRepository; import java.util.List; diff --git a/persistence-modules/spring-jpa/src/main/java/org/baeldung/inmemory/persistence/dao/ManyTagRepository.java b/persistence-modules/spring-jpa/src/main/java/com/baeldung/inmemory/persistence/dao/ManyTagRepository.java similarity index 57% rename from persistence-modules/spring-jpa/src/main/java/org/baeldung/inmemory/persistence/dao/ManyTagRepository.java rename to persistence-modules/spring-jpa/src/main/java/com/baeldung/inmemory/persistence/dao/ManyTagRepository.java index b7d991de32..63337f3cb9 100644 --- a/persistence-modules/spring-jpa/src/main/java/org/baeldung/inmemory/persistence/dao/ManyTagRepository.java +++ b/persistence-modules/spring-jpa/src/main/java/com/baeldung/inmemory/persistence/dao/ManyTagRepository.java @@ -1,6 +1,6 @@ -package org.baeldung.inmemory.persistence.dao; +package com.baeldung.inmemory.persistence.dao; -import org.baeldung.inmemory.persistence.model.ManyTag; +import com.baeldung.inmemory.persistence.model.ManyTag; import org.springframework.data.jpa.repository.JpaRepository; public interface ManyTagRepository extends JpaRepository { diff --git a/persistence-modules/spring-jpa/src/main/java/org/baeldung/inmemory/persistence/dao/StudentRepository.java b/persistence-modules/spring-jpa/src/main/java/com/baeldung/inmemory/persistence/dao/StudentRepository.java similarity index 90% rename from persistence-modules/spring-jpa/src/main/java/org/baeldung/inmemory/persistence/dao/StudentRepository.java rename to persistence-modules/spring-jpa/src/main/java/com/baeldung/inmemory/persistence/dao/StudentRepository.java index ffe1a68558..8ac91fbf0c 100644 --- a/persistence-modules/spring-jpa/src/main/java/org/baeldung/inmemory/persistence/dao/StudentRepository.java +++ b/persistence-modules/spring-jpa/src/main/java/com/baeldung/inmemory/persistence/dao/StudentRepository.java @@ -1,6 +1,6 @@ -package org.baeldung.inmemory.persistence.dao; +package com.baeldung.inmemory.persistence.dao; -import org.baeldung.inmemory.persistence.model.Student; +import com.baeldung.inmemory.persistence.model.Student; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; diff --git a/persistence-modules/spring-jpa/src/main/java/org/baeldung/inmemory/persistence/model/KVTag.java b/persistence-modules/spring-jpa/src/main/java/com/baeldung/inmemory/persistence/model/KVTag.java similarity index 91% rename from persistence-modules/spring-jpa/src/main/java/org/baeldung/inmemory/persistence/model/KVTag.java rename to persistence-modules/spring-jpa/src/main/java/com/baeldung/inmemory/persistence/model/KVTag.java index 1522744116..1fc186f4ce 100644 --- a/persistence-modules/spring-jpa/src/main/java/org/baeldung/inmemory/persistence/model/KVTag.java +++ b/persistence-modules/spring-jpa/src/main/java/com/baeldung/inmemory/persistence/model/KVTag.java @@ -1,4 +1,4 @@ -package org.baeldung.inmemory.persistence.model; +package com.baeldung.inmemory.persistence.model; import javax.persistence.Embeddable; diff --git a/persistence-modules/spring-jpa/src/main/java/org/baeldung/inmemory/persistence/model/LocationTag.java b/persistence-modules/spring-jpa/src/main/java/com/baeldung/inmemory/persistence/model/LocationTag.java similarity index 92% rename from persistence-modules/spring-jpa/src/main/java/org/baeldung/inmemory/persistence/model/LocationTag.java rename to persistence-modules/spring-jpa/src/main/java/com/baeldung/inmemory/persistence/model/LocationTag.java index 3acdbbe6fe..b12ad9fbd1 100644 --- a/persistence-modules/spring-jpa/src/main/java/org/baeldung/inmemory/persistence/model/LocationTag.java +++ b/persistence-modules/spring-jpa/src/main/java/com/baeldung/inmemory/persistence/model/LocationTag.java @@ -1,4 +1,4 @@ -package org.baeldung.inmemory.persistence.model; +package com.baeldung.inmemory.persistence.model; import javax.persistence.Embeddable; diff --git a/persistence-modules/spring-jpa/src/main/java/org/baeldung/inmemory/persistence/model/ManyStudent.java b/persistence-modules/spring-jpa/src/main/java/com/baeldung/inmemory/persistence/model/ManyStudent.java similarity index 94% rename from persistence-modules/spring-jpa/src/main/java/org/baeldung/inmemory/persistence/model/ManyStudent.java rename to persistence-modules/spring-jpa/src/main/java/com/baeldung/inmemory/persistence/model/ManyStudent.java index 8343edc9cd..190740d582 100644 --- a/persistence-modules/spring-jpa/src/main/java/org/baeldung/inmemory/persistence/model/ManyStudent.java +++ b/persistence-modules/spring-jpa/src/main/java/com/baeldung/inmemory/persistence/model/ManyStudent.java @@ -1,4 +1,4 @@ -package org.baeldung.inmemory.persistence.model; +package com.baeldung.inmemory.persistence.model; import javax.persistence.*; import java.util.HashSet; diff --git a/persistence-modules/spring-jpa/src/main/java/org/baeldung/inmemory/persistence/model/ManyTag.java b/persistence-modules/spring-jpa/src/main/java/com/baeldung/inmemory/persistence/model/ManyTag.java similarity index 93% rename from persistence-modules/spring-jpa/src/main/java/org/baeldung/inmemory/persistence/model/ManyTag.java rename to persistence-modules/spring-jpa/src/main/java/com/baeldung/inmemory/persistence/model/ManyTag.java index e820506544..5af898f7df 100644 --- a/persistence-modules/spring-jpa/src/main/java/org/baeldung/inmemory/persistence/model/ManyTag.java +++ b/persistence-modules/spring-jpa/src/main/java/com/baeldung/inmemory/persistence/model/ManyTag.java @@ -1,4 +1,4 @@ -package org.baeldung.inmemory.persistence.model; +package com.baeldung.inmemory.persistence.model; import javax.persistence.*; import java.util.HashSet; diff --git a/persistence-modules/spring-jpa/src/main/java/org/baeldung/inmemory/persistence/model/SkillTag.java b/persistence-modules/spring-jpa/src/main/java/com/baeldung/inmemory/persistence/model/SkillTag.java similarity index 90% rename from persistence-modules/spring-jpa/src/main/java/org/baeldung/inmemory/persistence/model/SkillTag.java rename to persistence-modules/spring-jpa/src/main/java/com/baeldung/inmemory/persistence/model/SkillTag.java index 490ee0a18e..738b5d0b36 100644 --- a/persistence-modules/spring-jpa/src/main/java/org/baeldung/inmemory/persistence/model/SkillTag.java +++ b/persistence-modules/spring-jpa/src/main/java/com/baeldung/inmemory/persistence/model/SkillTag.java @@ -1,4 +1,4 @@ -package org.baeldung.inmemory.persistence.model; +package com.baeldung.inmemory.persistence.model; import javax.persistence.Embeddable; diff --git a/persistence-modules/spring-jpa/src/main/java/org/baeldung/inmemory/persistence/model/Student.java b/persistence-modules/spring-jpa/src/main/java/com/baeldung/inmemory/persistence/model/Student.java similarity index 96% rename from persistence-modules/spring-jpa/src/main/java/org/baeldung/inmemory/persistence/model/Student.java rename to persistence-modules/spring-jpa/src/main/java/com/baeldung/inmemory/persistence/model/Student.java index 07aa3ef9ef..f0e824e165 100644 --- a/persistence-modules/spring-jpa/src/main/java/org/baeldung/inmemory/persistence/model/Student.java +++ b/persistence-modules/spring-jpa/src/main/java/com/baeldung/inmemory/persistence/model/Student.java @@ -1,4 +1,4 @@ -package org.baeldung.inmemory.persistence.model; +package com.baeldung.inmemory.persistence.model; import java.util.ArrayList; import java.util.List; diff --git a/persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/dao/AbstractJpaDAO.java b/persistence-modules/spring-jpa/src/main/java/com/baeldung/persistence/dao/AbstractJpaDAO.java similarity index 96% rename from persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/dao/AbstractJpaDAO.java rename to persistence-modules/spring-jpa/src/main/java/com/baeldung/persistence/dao/AbstractJpaDAO.java index 13007d9fcc..b4827cc7e1 100644 --- a/persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/dao/AbstractJpaDAO.java +++ b/persistence-modules/spring-jpa/src/main/java/com/baeldung/persistence/dao/AbstractJpaDAO.java @@ -1,4 +1,4 @@ -package org.baeldung.persistence.dao; +package com.baeldung.persistence.dao; import java.io.Serializable; import java.util.List; diff --git a/persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/dao/BookRepository.java b/persistence-modules/spring-jpa/src/main/java/com/baeldung/persistence/dao/BookRepository.java similarity index 76% rename from persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/dao/BookRepository.java rename to persistence-modules/spring-jpa/src/main/java/com/baeldung/persistence/dao/BookRepository.java index 114cf48c7c..48620f4ff1 100644 --- a/persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/dao/BookRepository.java +++ b/persistence-modules/spring-jpa/src/main/java/com/baeldung/persistence/dao/BookRepository.java @@ -1,6 +1,6 @@ -package org.baeldung.persistence.dao; +package com.baeldung.persistence.dao; -import org.baeldung.persistence.model.Book; +import com.baeldung.persistence.model.Book; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; diff --git a/persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/dao/BookRepositoryCustom.java b/persistence-modules/spring-jpa/src/main/java/com/baeldung/persistence/dao/BookRepositoryCustom.java similarity index 65% rename from persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/dao/BookRepositoryCustom.java rename to persistence-modules/spring-jpa/src/main/java/com/baeldung/persistence/dao/BookRepositoryCustom.java index b939907572..1b46d0ecc3 100644 --- a/persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/dao/BookRepositoryCustom.java +++ b/persistence-modules/spring-jpa/src/main/java/com/baeldung/persistence/dao/BookRepositoryCustom.java @@ -1,8 +1,8 @@ -package org.baeldung.persistence.dao; +package com.baeldung.persistence.dao; import java.util.List; -import org.baeldung.persistence.model.Book; +import com.baeldung.persistence.model.Book; public interface BookRepositoryCustom { diff --git a/persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/dao/BookRepositoryImpl.java b/persistence-modules/spring-jpa/src/main/java/com/baeldung/persistence/dao/BookRepositoryImpl.java similarity index 93% rename from persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/dao/BookRepositoryImpl.java rename to persistence-modules/spring-jpa/src/main/java/com/baeldung/persistence/dao/BookRepositoryImpl.java index 6e9aa998d7..241a4c05aa 100644 --- a/persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/dao/BookRepositoryImpl.java +++ b/persistence-modules/spring-jpa/src/main/java/com/baeldung/persistence/dao/BookRepositoryImpl.java @@ -1,4 +1,4 @@ -package org.baeldung.persistence.dao; +package com.baeldung.persistence.dao; import java.util.ArrayList; import java.util.List; @@ -10,7 +10,7 @@ import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.Predicate; import javax.persistence.criteria.Root; -import org.baeldung.persistence.model.Book; +import com.baeldung.persistence.model.Book; import org.springframework.stereotype.Repository; @Repository diff --git a/persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/dao/BookService.java b/persistence-modules/spring-jpa/src/main/java/com/baeldung/persistence/dao/BookService.java similarity index 71% rename from persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/dao/BookService.java rename to persistence-modules/spring-jpa/src/main/java/com/baeldung/persistence/dao/BookService.java index 88b769e9bf..f02f9daa11 100644 --- a/persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/dao/BookService.java +++ b/persistence-modules/spring-jpa/src/main/java/com/baeldung/persistence/dao/BookService.java @@ -1,12 +1,12 @@ -package org.baeldung.persistence.dao; +package com.baeldung.persistence.dao; -import static org.baeldung.persistence.dao.BookSpecifications.hasAuthor; -import static org.baeldung.persistence.dao.BookSpecifications.titleContains; +import static com.baeldung.persistence.dao.BookSpecifications.hasAuthor; +import static com.baeldung.persistence.dao.BookSpecifications.titleContains; import static org.springframework.data.jpa.domain.Specifications.where; import java.util.List; -import org.baeldung.persistence.model.Book; +import com.baeldung.persistence.model.Book; import org.springframework.stereotype.Service; @Service diff --git a/persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/dao/BookSpecifications.java b/persistence-modules/spring-jpa/src/main/java/com/baeldung/persistence/dao/BookSpecifications.java similarity index 82% rename from persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/dao/BookSpecifications.java rename to persistence-modules/spring-jpa/src/main/java/com/baeldung/persistence/dao/BookSpecifications.java index ed9540060d..16646a5b4b 100644 --- a/persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/dao/BookSpecifications.java +++ b/persistence-modules/spring-jpa/src/main/java/com/baeldung/persistence/dao/BookSpecifications.java @@ -1,6 +1,6 @@ -package org.baeldung.persistence.dao; +package com.baeldung.persistence.dao; -import org.baeldung.persistence.model.Book; +import com.baeldung.persistence.model.Book; import org.springframework.data.jpa.domain.Specification; public class BookSpecifications { diff --git a/persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/dao/FooDao.java b/persistence-modules/spring-jpa/src/main/java/com/baeldung/persistence/dao/FooDao.java similarity index 73% rename from persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/dao/FooDao.java rename to persistence-modules/spring-jpa/src/main/java/com/baeldung/persistence/dao/FooDao.java index 77978c5cf2..a4ed7d97b4 100644 --- a/persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/dao/FooDao.java +++ b/persistence-modules/spring-jpa/src/main/java/com/baeldung/persistence/dao/FooDao.java @@ -1,6 +1,6 @@ -package org.baeldung.persistence.dao; +package com.baeldung.persistence.dao; -import org.baeldung.persistence.model.Foo; +import com.baeldung.persistence.model.Foo; import org.springframework.stereotype.Repository; @Repository diff --git a/persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/dao/IFooDao.java b/persistence-modules/spring-jpa/src/main/java/com/baeldung/persistence/dao/IFooDao.java similarity index 74% rename from persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/dao/IFooDao.java rename to persistence-modules/spring-jpa/src/main/java/com/baeldung/persistence/dao/IFooDao.java index f5799522e2..8a4877aa79 100644 --- a/persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/dao/IFooDao.java +++ b/persistence-modules/spring-jpa/src/main/java/com/baeldung/persistence/dao/IFooDao.java @@ -1,8 +1,8 @@ -package org.baeldung.persistence.dao; +package com.baeldung.persistence.dao; import java.util.List; -import org.baeldung.persistence.model.Foo; +import com.baeldung.persistence.model.Foo; public interface IFooDao { diff --git a/persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/model/Bar.java b/persistence-modules/spring-jpa/src/main/java/com/baeldung/persistence/model/Bar.java similarity index 98% rename from persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/model/Bar.java rename to persistence-modules/spring-jpa/src/main/java/com/baeldung/persistence/model/Bar.java index b602e57562..5a88ecc6cf 100644 --- a/persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/model/Bar.java +++ b/persistence-modules/spring-jpa/src/main/java/com/baeldung/persistence/model/Bar.java @@ -1,4 +1,4 @@ -package org.baeldung.persistence.model; +package com.baeldung.persistence.model; import java.io.Serializable; import java.util.List; diff --git a/persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/model/Book.java b/persistence-modules/spring-jpa/src/main/java/com/baeldung/persistence/model/Book.java similarity index 92% rename from persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/model/Book.java rename to persistence-modules/spring-jpa/src/main/java/com/baeldung/persistence/model/Book.java index 754bd179d1..507043dd56 100644 --- a/persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/model/Book.java +++ b/persistence-modules/spring-jpa/src/main/java/com/baeldung/persistence/model/Book.java @@ -1,4 +1,4 @@ -package org.baeldung.persistence.model; +package com.baeldung.persistence.model; import javax.persistence.Entity; import javax.persistence.Id; diff --git a/persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/model/Foo.java b/persistence-modules/spring-jpa/src/main/java/com/baeldung/persistence/model/Foo.java similarity index 98% rename from persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/model/Foo.java rename to persistence-modules/spring-jpa/src/main/java/com/baeldung/persistence/model/Foo.java index 5294860311..7897bba4e4 100644 --- a/persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/model/Foo.java +++ b/persistence-modules/spring-jpa/src/main/java/com/baeldung/persistence/model/Foo.java @@ -1,4 +1,4 @@ -package org.baeldung.persistence.model; +package com.baeldung.persistence.model; import org.hibernate.annotations.CacheConcurrencyStrategy; diff --git a/persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/multiple/model/user/Possession.java b/persistence-modules/spring-jpa/src/main/java/com/baeldung/persistence/multiple/model/user/Possession.java similarity index 96% rename from persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/multiple/model/user/Possession.java rename to persistence-modules/spring-jpa/src/main/java/com/baeldung/persistence/multiple/model/user/Possession.java index 7aff5f51d0..6ad6b8e603 100644 --- a/persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/multiple/model/user/Possession.java +++ b/persistence-modules/spring-jpa/src/main/java/com/baeldung/persistence/multiple/model/user/Possession.java @@ -1,4 +1,4 @@ -package org.baeldung.persistence.multiple.model.user; +package com.baeldung.persistence.multiple.model.user; import javax.persistence.*; diff --git a/persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/multiple/model/user/User.java b/persistence-modules/spring-jpa/src/main/java/com/baeldung/persistence/multiple/model/user/User.java similarity index 96% rename from persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/multiple/model/user/User.java rename to persistence-modules/spring-jpa/src/main/java/com/baeldung/persistence/multiple/model/user/User.java index 6fb9de4a47..3ebb1e0156 100644 --- a/persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/multiple/model/user/User.java +++ b/persistence-modules/spring-jpa/src/main/java/com/baeldung/persistence/multiple/model/user/User.java @@ -1,4 +1,4 @@ -package org.baeldung.persistence.multiple.model.user; +package com.baeldung.persistence.multiple.model.user; import javax.persistence.*; import java.util.List; diff --git a/persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/service/FooService.java b/persistence-modules/spring-jpa/src/main/java/com/baeldung/persistence/service/FooService.java similarity index 81% rename from persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/service/FooService.java rename to persistence-modules/spring-jpa/src/main/java/com/baeldung/persistence/service/FooService.java index 6d1bb0adbe..ace36dd03b 100644 --- a/persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/service/FooService.java +++ b/persistence-modules/spring-jpa/src/main/java/com/baeldung/persistence/service/FooService.java @@ -1,9 +1,9 @@ -package org.baeldung.persistence.service; +package com.baeldung.persistence.service; import java.util.List; -import org.baeldung.persistence.dao.IFooDao; -import org.baeldung.persistence.model.Foo; +import com.baeldung.persistence.dao.IFooDao; +import com.baeldung.persistence.model.Foo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; diff --git a/persistence-modules/spring-jpa/src/main/java/org/baeldung/sqlfiles/Country.java b/persistence-modules/spring-jpa/src/main/java/com/baeldung/sqlfiles/Country.java similarity index 95% rename from persistence-modules/spring-jpa/src/main/java/org/baeldung/sqlfiles/Country.java rename to persistence-modules/spring-jpa/src/main/java/com/baeldung/sqlfiles/Country.java index 922f55cbf6..f2be33adfd 100644 --- a/persistence-modules/spring-jpa/src/main/java/org/baeldung/sqlfiles/Country.java +++ b/persistence-modules/spring-jpa/src/main/java/com/baeldung/sqlfiles/Country.java @@ -1,4 +1,4 @@ -package org.baeldung.sqlfiles; +package com.baeldung.sqlfiles; import static javax.persistence.GenerationType.IDENTITY; diff --git a/persistence-modules/spring-jpa/src/main/java/org/baeldung/web/MainController.java b/persistence-modules/spring-jpa/src/main/java/com/baeldung/web/MainController.java similarity index 85% rename from persistence-modules/spring-jpa/src/main/java/org/baeldung/web/MainController.java rename to persistence-modules/spring-jpa/src/main/java/com/baeldung/web/MainController.java index 6900482de8..c0d4743ae7 100644 --- a/persistence-modules/spring-jpa/src/main/java/org/baeldung/web/MainController.java +++ b/persistence-modules/spring-jpa/src/main/java/com/baeldung/web/MainController.java @@ -1,6 +1,6 @@ -package org.baeldung.web; +package com.baeldung.web; -import org.baeldung.persistence.service.FooService; +import com.baeldung.persistence.service.FooService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; diff --git a/persistence-modules/spring-jpa/src/main/resources/persistence.xml b/persistence-modules/spring-jpa/src/main/resources/persistence.xml index 6304fa0a65..57687c306d 100644 --- a/persistence-modules/spring-jpa/src/main/resources/persistence.xml +++ b/persistence-modules/spring-jpa/src/main/resources/persistence.xml @@ -11,7 +11,7 @@ - + + + javax.ejb + javax.ejb-api + ${javax.ejb-api.version} + provided + + + + org.springframework + spring-jms + ${springframework.version} + + + commons-logging + commons-logging + + + + + + org.apache.activemq + activemq-broker + ${activemq.broker.version} + + + org.apache.activemq.tooling + activemq-junit + ${activemq.junit.version} + test + org.jboss.arquillian.junit arquillian-junit-container @@ -81,6 +117,10 @@ 1.7.5 3.1.2 1.0.0.CR4 + 3.2 + 5.2.3.RELEASE + 5.10.2 + 5.13.1 diff --git a/spring-ejb/ejb-beans/src/main/java/com/baeldung/ejb/spring/comparison/ejb/messagedriven/RecieverMDB.java b/spring-ejb/ejb-beans/src/main/java/com/baeldung/ejb/spring/comparison/ejb/messagedriven/RecieverMDB.java new file mode 100644 index 0000000000..7a6b750ce5 --- /dev/null +++ b/spring-ejb/ejb-beans/src/main/java/com/baeldung/ejb/spring/comparison/ejb/messagedriven/RecieverMDB.java @@ -0,0 +1,63 @@ +package com.baeldung.ejb.spring.comparison.ejb.messagedriven; + +import javax.annotation.Resource; +import javax.ejb.ActivationConfigProperty; +import javax.ejb.MessageDriven; +import javax.jms.Connection; +import javax.jms.ConnectionFactory; +import javax.jms.DeliveryMode; +import javax.jms.JMSException; +import javax.jms.Message; +import javax.jms.MessageListener; +import javax.jms.MessageProducer; +import javax.jms.Queue; +import javax.jms.Session; +import javax.jms.TextMessage; + +@MessageDriven(activationConfig = { @ActivationConfigProperty(propertyName = "destination", propertyValue = "myQueue"), @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue") }) +public class RecieverMDB implements MessageListener { + + @Resource + private ConnectionFactory connectionFactory; + + @Resource(name = "ackQueue") + private Queue ackQueue; + + public void onMessage(Message message) { + try { + + TextMessage textMessage = (TextMessage) message; + String producerPing = textMessage.getText(); + + if (producerPing.equals("marco")) { + acknowledge("polo"); + } + } catch (JMSException e) { + throw new IllegalStateException(e); + } + } + + private void acknowledge(String text) throws JMSException { + + Connection connection = null; + Session session = null; + + try { + connection = connectionFactory.createConnection(); + connection.start(); + + session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); + + MessageProducer ackSender = session.createProducer(ackQueue); + ackSender.setDeliveryMode(DeliveryMode.NON_PERSISTENT); + + TextMessage message = session.createTextMessage(text); + + ackSender.send(message); + } finally { + session.close(); + connection.close(); + } + } + +} diff --git a/spring-ejb/ejb-beans/src/main/java/com/baeldung/ejb/spring/comparison/ejb/singleton/CounterEJB.java b/spring-ejb/ejb-beans/src/main/java/com/baeldung/ejb/spring/comparison/ejb/singleton/CounterEJB.java new file mode 100644 index 0000000000..b64005aed8 --- /dev/null +++ b/spring-ejb/ejb-beans/src/main/java/com/baeldung/ejb/spring/comparison/ejb/singleton/CounterEJB.java @@ -0,0 +1,14 @@ +package com.baeldung.ejb.spring.comparison.ejb.singleton; + +import javax.ejb.Singleton; + +@Singleton +public class CounterEJB implements CounterEJBRemote { + + private int count = 1; + + public int count() { + return count++; + } + +} \ No newline at end of file diff --git a/spring-ejb/ejb-beans/src/main/java/com/baeldung/ejb/spring/comparison/ejb/singleton/CounterEJBRemote.java b/spring-ejb/ejb-beans/src/main/java/com/baeldung/ejb/spring/comparison/ejb/singleton/CounterEJBRemote.java new file mode 100644 index 0000000000..ec3b9e9f6b --- /dev/null +++ b/spring-ejb/ejb-beans/src/main/java/com/baeldung/ejb/spring/comparison/ejb/singleton/CounterEJBRemote.java @@ -0,0 +1,8 @@ +package com.baeldung.ejb.spring.comparison.ejb.singleton; + +import javax.ejb.Remote; + +@Remote +public interface CounterEJBRemote { + int count(); +} diff --git a/spring-ejb/ejb-beans/src/main/java/com/baeldung/ejb/spring/comparison/ejb/stateful/ShoppingCartEJB.java b/spring-ejb/ejb-beans/src/main/java/com/baeldung/ejb/spring/comparison/ejb/stateful/ShoppingCartEJB.java new file mode 100644 index 0000000000..5bdccea994 --- /dev/null +++ b/spring-ejb/ejb-beans/src/main/java/com/baeldung/ejb/spring/comparison/ejb/stateful/ShoppingCartEJB.java @@ -0,0 +1,25 @@ +package com.baeldung.ejb.spring.comparison.ejb.stateful; + +import java.util.ArrayList; +import java.util.List; + +import javax.ejb.Stateful; + +@Stateful +public class ShoppingCartEJB implements ShoppingCartEJBRemote { + + private List shoppingCart; + + public ShoppingCartEJB() { + shoppingCart = new ArrayList(); + } + + public void addItem(String item) { + shoppingCart.add(item); + } + + public List getItems() { + return shoppingCart; + } + +} diff --git a/spring-ejb/ejb-beans/src/main/java/com/baeldung/ejb/spring/comparison/ejb/stateful/ShoppingCartEJBRemote.java b/spring-ejb/ejb-beans/src/main/java/com/baeldung/ejb/spring/comparison/ejb/stateful/ShoppingCartEJBRemote.java new file mode 100644 index 0000000000..a8d7a15d25 --- /dev/null +++ b/spring-ejb/ejb-beans/src/main/java/com/baeldung/ejb/spring/comparison/ejb/stateful/ShoppingCartEJBRemote.java @@ -0,0 +1,13 @@ +package com.baeldung.ejb.spring.comparison.ejb.stateful; + +import java.util.List; + +import javax.ejb.Remote; + +@Remote +public interface ShoppingCartEJBRemote { + + void addItem(String item); + + List getItems(); +} diff --git a/spring-ejb/ejb-beans/src/main/java/com/baeldung/ejb/spring/comparison/ejb/stateless/FinderEJB.java b/spring-ejb/ejb-beans/src/main/java/com/baeldung/ejb/spring/comparison/ejb/stateless/FinderEJB.java new file mode 100644 index 0000000000..fb45e4e7ce --- /dev/null +++ b/spring-ejb/ejb-beans/src/main/java/com/baeldung/ejb/spring/comparison/ejb/stateless/FinderEJB.java @@ -0,0 +1,25 @@ +package com.baeldung.ejb.spring.comparison.ejb.stateless; + +import java.util.HashMap; +import java.util.Map; + +import javax.ejb.Stateless; + +@Stateless +public class FinderEJB implements FinderEJBRemote { + + private Map alphabet; + + public FinderEJB() { + alphabet = new HashMap(); + alphabet.put("A", "Apple"); + alphabet.put("B", "Ball"); + alphabet.put("C", "Cat"); + alphabet.put("D", "Dog"); + } + + public String search(String keyword) { + return alphabet.get(keyword); + } + +} diff --git a/spring-ejb/ejb-beans/src/main/java/com/baeldung/ejb/spring/comparison/ejb/stateless/FinderEJBRemote.java b/spring-ejb/ejb-beans/src/main/java/com/baeldung/ejb/spring/comparison/ejb/stateless/FinderEJBRemote.java new file mode 100644 index 0000000000..36b4c9ae04 --- /dev/null +++ b/spring-ejb/ejb-beans/src/main/java/com/baeldung/ejb/spring/comparison/ejb/stateless/FinderEJBRemote.java @@ -0,0 +1,9 @@ +package com.baeldung.ejb.spring.comparison.ejb.stateless; + +import javax.ejb.Remote; + +@Remote +public interface FinderEJBRemote { + + String search(String keyword); +} diff --git a/spring-ejb/ejb-beans/src/main/java/com/baeldung/ejb/spring/comparison/spring/config/ApplicationConfig.java b/spring-ejb/ejb-beans/src/main/java/com/baeldung/ejb/spring/comparison/spring/config/ApplicationConfig.java new file mode 100644 index 0000000000..6ec14dc098 --- /dev/null +++ b/spring-ejb/ejb-beans/src/main/java/com/baeldung/ejb/spring/comparison/spring/config/ApplicationConfig.java @@ -0,0 +1,36 @@ +package com.baeldung.ejb.spring.comparison.spring.config; + +import javax.jms.ConnectionFactory; + +import org.apache.activemq.ActiveMQConnectionFactory; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.jms.annotation.EnableJms; +import org.springframework.jms.config.DefaultJmsListenerContainerFactory; +import org.springframework.jms.core.JmsTemplate; + +@Configuration +@ComponentScan(basePackages = "com.baeldung.ejb.spring.comparison.spring") +@EnableJms +public class ApplicationConfig { + + @Bean + public DefaultJmsListenerContainerFactory jmsListenerContainerFactory() { + DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory(); + factory.setConnectionFactory(connectionFactory()); + return factory; + } + + @Bean + public ConnectionFactory connectionFactory() { + return new ActiveMQConnectionFactory("tcp://localhost:61616"); + } + + @Bean + public JmsTemplate jmsTemplate() { + JmsTemplate template = new JmsTemplate(connectionFactory()); + template.setConnectionFactory(connectionFactory()); + return template; + } +} diff --git a/spring-ejb/ejb-beans/src/main/java/com/baeldung/ejb/spring/comparison/spring/messagedriven/Producer.java b/spring-ejb/ejb-beans/src/main/java/com/baeldung/ejb/spring/comparison/spring/messagedriven/Producer.java new file mode 100644 index 0000000000..a60dc4db8e --- /dev/null +++ b/spring-ejb/ejb-beans/src/main/java/com/baeldung/ejb/spring/comparison/spring/messagedriven/Producer.java @@ -0,0 +1,19 @@ +package com.baeldung.ejb.spring.comparison.spring.messagedriven; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.jms.core.JmsTemplate; +import org.springframework.stereotype.Component; + +@Component +public class Producer { + @Autowired + private JmsTemplate jmsTemplate; + + public void sendMessageToDefaultDestination(final String message) { + jmsTemplate.convertAndSend("myQueue", message); + } + + public String receiveAck() { + return (String) jmsTemplate.receiveAndConvert("ackQueue"); + } +} \ No newline at end of file diff --git a/spring-ejb/ejb-beans/src/main/java/com/baeldung/ejb/spring/comparison/spring/messagedriven/Receiver.java b/spring-ejb/ejb-beans/src/main/java/com/baeldung/ejb/spring/comparison/spring/messagedriven/Receiver.java new file mode 100644 index 0000000000..a3b36dd587 --- /dev/null +++ b/spring-ejb/ejb-beans/src/main/java/com/baeldung/ejb/spring/comparison/spring/messagedriven/Receiver.java @@ -0,0 +1,22 @@ +package com.baeldung.ejb.spring.comparison.spring.messagedriven; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.jms.annotation.JmsListener; +import org.springframework.jms.core.JmsTemplate; +import org.springframework.stereotype.Component; + +@Component +public class Receiver { + @Autowired + private JmsTemplate jmsTemplate; + + @JmsListener(destination = "myQueue") + public void receiveMessage(String msg) { + sendAck(); + } + + private void sendAck() { + jmsTemplate.convertAndSend("ackQueue", "polo"); + } + +} \ No newline at end of file diff --git a/spring-ejb/ejb-beans/src/main/java/com/baeldung/ejb/spring/comparison/spring/singleton/CounterBean.java b/spring-ejb/ejb-beans/src/main/java/com/baeldung/ejb/spring/comparison/spring/singleton/CounterBean.java new file mode 100644 index 0000000000..6456cfc007 --- /dev/null +++ b/spring-ejb/ejb-beans/src/main/java/com/baeldung/ejb/spring/comparison/spring/singleton/CounterBean.java @@ -0,0 +1,12 @@ +package com.baeldung.ejb.spring.comparison.spring.singleton; + +import org.springframework.stereotype.Component; + +@Component +public class CounterBean { + private int count = 1; + + public int count() { + return count++; + } +} diff --git a/spring-ejb/ejb-beans/src/main/java/com/baeldung/ejb/spring/comparison/spring/stateful/ShoppingCartBean.java b/spring-ejb/ejb-beans/src/main/java/com/baeldung/ejb/spring/comparison/spring/stateful/ShoppingCartBean.java new file mode 100644 index 0000000000..9286ff9950 --- /dev/null +++ b/spring-ejb/ejb-beans/src/main/java/com/baeldung/ejb/spring/comparison/spring/stateful/ShoppingCartBean.java @@ -0,0 +1,28 @@ +package com.baeldung.ejb.spring.comparison.spring.stateful; + +import java.util.ArrayList; +import java.util.List; + +import org.springframework.beans.factory.config.ConfigurableBeanFactory; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Component; + +@Component +@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE) +public class ShoppingCartBean { + + private List shoppingCart; + + public ShoppingCartBean() { + shoppingCart = new ArrayList(); + } + + public void addItem(String item) { + shoppingCart.add(item); + } + + public List getItems() { + return shoppingCart; + } + +} diff --git a/spring-ejb/ejb-beans/src/test/java/com/baeldung/ejb/spring/comparison/ejb/EJBUnitTest.java b/spring-ejb/ejb-beans/src/test/java/com/baeldung/ejb/spring/comparison/ejb/EJBUnitTest.java new file mode 100644 index 0000000000..1f0f1bf8a4 --- /dev/null +++ b/spring-ejb/ejb-beans/src/test/java/com/baeldung/ejb/spring/comparison/ejb/EJBUnitTest.java @@ -0,0 +1,142 @@ +package com.baeldung.ejb.spring.comparison.ejb; + +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.CoreMatchers.not; +import static org.junit.Assert.assertThat; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import javax.annotation.Resource; +import javax.ejb.EJB; +import javax.ejb.embeddable.EJBContainer; +import javax.jms.Connection; +import javax.jms.ConnectionFactory; +import javax.jms.JMSException; +import javax.jms.MessageConsumer; +import javax.jms.MessageProducer; +import javax.jms.Queue; +import javax.jms.Session; +import javax.jms.TextMessage; +import javax.naming.Context; +import javax.naming.NamingException; + +import org.junit.After; +import org.junit.AfterClass; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; + +import com.baeldung.ejb.spring.comparison.ejb.singleton.CounterEJBRemote; +import com.baeldung.ejb.spring.comparison.ejb.stateful.ShoppingCartEJBRemote; +import com.baeldung.ejb.spring.comparison.ejb.stateless.FinderEJBRemote; + +public class EJBUnitTest { + + private static EJBContainer ejbContainer = null; + + private static Context context = null; + + @Resource + private ConnectionFactory connectionFactory; + + @EJB + private FinderEJBRemote alphabetFinder; + + @Resource(name = "myQueue") + private Queue myQueue; + + @Resource(name = "ackQueue") + private Queue ackQueue; + + @BeforeClass + public static void start() throws NamingException { + ejbContainer = EJBContainer.createEJBContainer(); + } + + @Before + public void initializeContext() throws NamingException { + context = ejbContainer.getContext(); + context.bind("inject", this); + } + + @Test + public void givenSingletonBean_whenCounterInvoked_thenCountIsIncremented() throws NamingException { + + int count = 0; + CounterEJBRemote counterEJB = (CounterEJBRemote) context.lookup("java:global/ejb-beans/CounterEJB"); + + for (int i = 0; i < 10; i++) + count = counterEJB.count(); + + assertThat(count, is(not(1))); + } + + @Test + public void givenSingletonBean_whenCounterInvokedAgain_thenCountIsIncremented() throws NamingException { + + CounterEJBRemote counterEJB = (CounterEJBRemote) context.lookup("java:global/ejb-beans/CounterEJB"); + + int count = 0; + for (int i = 0; i < 10; i++) + count = counterEJB.count(); + + assertThat(count, is(not(1))); + } + + @Test + public void givenStatefulBean_whenBathingCartWithThreeItemsAdded_thenItemsSizeIsThree() throws NamingException { + ShoppingCartEJBRemote bathingCart = (ShoppingCartEJBRemote) context.lookup("java:global/ejb-beans/ShoppingCartEJB"); + + bathingCart.addItem("soap"); + bathingCart.addItem("shampoo"); + bathingCart.addItem("oil"); + + assertEquals(3, bathingCart.getItems() + .size()); + } + + @Test + public void givenStatefulBean_whenFruitCartWithTwoItemsAdded_thenItemsSizeIsTwo() throws NamingException { + ShoppingCartEJBRemote fruitCart = (ShoppingCartEJBRemote) context.lookup("java:global/ejb-beans/ShoppingCartEJB"); + + fruitCart.addItem("apples"); + fruitCart.addItem("oranges"); + + assertEquals(2, fruitCart.getItems() + .size()); + } + + @Test + public void givenStatelessBean_whenSearchForA_thenApple() throws NamingException { + + assertEquals("Apple", alphabetFinder.search("A")); + } + + @Test + public void givenMDB_whenMessageSent_thenAcknowledgementReceived() throws InterruptedException, JMSException, NamingException { + + Connection connection = connectionFactory.createConnection(); + connection.start(); + Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); + MessageProducer producer = session.createProducer(myQueue); + producer.send(session.createTextMessage("marco")); + MessageConsumer response = session.createConsumer(ackQueue); + + assertEquals("polo", ((TextMessage) response.receive(1000)).getText()); + + } + + @After + public void reset() throws NamingException { + context.unbind("inject"); + } + + @AfterClass + public static void checkTotalCountAndcloseContext() throws NamingException { + CounterEJBRemote counterEJB = (CounterEJBRemote) context.lookup("java:global/ejb-beans/CounterEJB"); + assertEquals(21, counterEJB.count()); + + context.close(); + ejbContainer.close(); + } + +} diff --git a/spring-ejb/ejb-beans/src/test/java/com/baeldung/ejb/spring/comparison/spring/SpringUnitTest.java b/spring-ejb/ejb-beans/src/test/java/com/baeldung/ejb/spring/comparison/spring/SpringUnitTest.java new file mode 100644 index 0000000000..a346baba38 --- /dev/null +++ b/spring-ejb/ejb-beans/src/test/java/com/baeldung/ejb/spring/comparison/spring/SpringUnitTest.java @@ -0,0 +1,108 @@ +package com.baeldung.ejb.spring.comparison.spring; + +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.CoreMatchers.not; +import static org.junit.Assert.assertThat; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import javax.naming.NamingException; + +import org.apache.activemq.junit.EmbeddedActiveMQBroker; +import org.junit.AfterClass; +import org.junit.Assert; +import org.junit.BeforeClass; +import org.junit.ClassRule; +import org.junit.Test; +import org.springframework.context.annotation.AnnotationConfigApplicationContext; + +import com.baeldung.ejb.spring.comparison.spring.config.ApplicationConfig; +import com.baeldung.ejb.spring.comparison.spring.messagedriven.Producer; +import com.baeldung.ejb.spring.comparison.spring.singleton.CounterBean; +import com.baeldung.ejb.spring.comparison.spring.stateful.ShoppingCartBean; + +public class SpringUnitTest { + + private static AnnotationConfigApplicationContext context = null; + + @ClassRule + public static EmbeddedActiveMQBroker broker = new EmbeddedActiveMQBroker() { + @Override + protected void configure() { + this.getBrokerService() + .setUseJmx(true); + try { + this.getBrokerService() + .addConnector("tcp://localhost:61616"); + } catch (Exception e) { + Assert.fail(e.getMessage()); + } + } + }; + + @BeforeClass + public static void init() { + context = new AnnotationConfigApplicationContext(ApplicationConfig.class); + } + + @Test + public void whenCounterInvoked_thenCountIsIncremented() throws NamingException { + CounterBean counterBean = context.getBean(CounterBean.class); + + int count = 0; + for (int i = 0; i < 10; i++) + count = counterBean.count(); + + assertThat(count, is(not(1))); + } + + @Test + public void whenCounterInvokedAgain_thenCountIsIncremented() throws NamingException { + CounterBean counterBean = context.getBean(CounterBean.class); + + int count = 0; + for (int i = 0; i < 10; i++) + count = counterBean.count(); + + assertThat(count, is(not(1))); + } + + @Test + public void whenBathingCartWithThreeItemsAdded_thenItemsSizeIsThree() throws NamingException { + ShoppingCartBean bathingCart = context.getBean(ShoppingCartBean.class); + + bathingCart.addItem("soap"); + bathingCart.addItem("shampoo"); + bathingCart.addItem("oil"); + + assertEquals(3, bathingCart.getItems() + .size()); + } + + @Test + public void whenFruitCartWithTwoItemsAdded_thenItemsSizeIsTwo() throws NamingException { + ShoppingCartBean fruitCart = context.getBean(ShoppingCartBean.class); + + fruitCart.addItem("apples"); + fruitCart.addItem("oranges"); + + assertEquals(2, fruitCart.getItems() + .size()); + } + + @Test + public void givenJMSBean_whenMessageSent_thenAcknowledgementReceived() throws NamingException { + Producer producer = context.getBean(Producer.class); + producer.sendMessageToDefaultDestination("marco"); + + assertEquals("polo", producer.receiveAck()); + } + + @AfterClass + public static void checkTotalCountAndcloseContext() throws NamingException { + CounterBean counterBean = context.getBean(CounterBean.class); + int count = counterBean.count(); + assertEquals(21, count); + context.close(); + } + +} From 67f29a37cdc2c4fe5ac00646364c88125ee447b1 Mon Sep 17 00:00:00 2001 From: kwoyke Date: Wed, 19 Feb 2020 22:31:43 +0100 Subject: [PATCH 146/149] BAEL-3799: Update spring-5 to the Spring Boot 2.2.2 (#8754) --- spring-5/pom.xml | 1 - .../com/baeldung/restdocs/CRUDController.java | 2 +- .../baeldung/restdocs/IndexController.java | 20 +++++++++++-------- 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/spring-5/pom.xml b/spring-5/pom.xml index a242c29933..eadfb5e512 100644 --- a/spring-5/pom.xml +++ b/spring-5/pom.xml @@ -149,7 +149,6 @@ - 2.1.9.RELEASE 1.0 1.5.6 4.1 diff --git a/spring-5/src/main/java/com/baeldung/restdocs/CRUDController.java b/spring-5/src/main/java/com/baeldung/restdocs/CRUDController.java index 429d3f433a..b10cfd5f55 100644 --- a/spring-5/src/main/java/com/baeldung/restdocs/CRUDController.java +++ b/spring-5/src/main/java/com/baeldung/restdocs/CRUDController.java @@ -1,6 +1,6 @@ package com.baeldung.restdocs; -import static org.springframework.hateoas.mvc.ControllerLinkBuilder.linkTo; +import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.linkTo; import java.util.ArrayList; import java.util.List; diff --git a/spring-5/src/main/java/com/baeldung/restdocs/IndexController.java b/spring-5/src/main/java/com/baeldung/restdocs/IndexController.java index 2c58d5fe6b..b1516f43c5 100644 --- a/spring-5/src/main/java/com/baeldung/restdocs/IndexController.java +++ b/spring-5/src/main/java/com/baeldung/restdocs/IndexController.java @@ -1,21 +1,25 @@ package com.baeldung.restdocs; -import static org.springframework.hateoas.mvc.ControllerLinkBuilder.linkTo; - -import org.springframework.hateoas.ResourceSupport; +import org.springframework.hateoas.Link; +import org.springframework.hateoas.RepresentationModel; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.linkTo; + @RestController @RequestMapping("/") public class IndexController { - @GetMapping - public ResourceSupport index() { - ResourceSupport index = new ResourceSupport(); - index.add(linkTo(CRUDController.class).withRel("crud")); - return index; + static class CustomRepresentationModel extends RepresentationModel { + public CustomRepresentationModel(Link initialLink) { + super(initialLink); + } } + @GetMapping + public CustomRepresentationModel index() { + return new CustomRepresentationModel(linkTo(CRUDController.class).withRel("crud")); + } } \ No newline at end of file From 1ad0bfaf298178e1ac3f46ecde3afc94512dc972 Mon Sep 17 00:00:00 2001 From: kwoyke Date: Wed, 19 Feb 2020 22:34:10 +0100 Subject: [PATCH 147/149] BAEL-3804: Update spring-mvc-java to use latest Spring Boot version (#8747) --- spring-mvc-java/pom.xml | 2 -- .../config/CustomWebMvcConfigurationSupport.java | 14 +++++++------- .../controller/GreetControllerIntegrationTest.java | 2 +- .../web/controller/GreetControllerUnitTest.java | 2 +- 4 files changed, 9 insertions(+), 11 deletions(-) diff --git a/spring-mvc-java/pom.xml b/spring-mvc-java/pom.xml index 0f3a1d65b9..079a664a5d 100644 --- a/spring-mvc-java/pom.xml +++ b/spring-mvc-java/pom.xml @@ -223,8 +223,6 @@ - 2.1.9.RELEASE - 3.0.9.RELEASE diff --git a/spring-mvc-java/src/main/java/com/baeldung/spring/web/config/CustomWebMvcConfigurationSupport.java b/spring-mvc-java/src/main/java/com/baeldung/spring/web/config/CustomWebMvcConfigurationSupport.java index 4a9f6a3431..a0dd7358d0 100644 --- a/spring-mvc-java/src/main/java/com/baeldung/spring/web/config/CustomWebMvcConfigurationSupport.java +++ b/spring-mvc-java/src/main/java/com/baeldung/spring/web/config/CustomWebMvcConfigurationSupport.java @@ -1,17 +1,17 @@ package com.baeldung.spring.web.config; -import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.PathMatchConfigurer; import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport; -import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping; @Configuration public class CustomWebMvcConfigurationSupport extends WebMvcConfigurationSupport { - @Bean - public RequestMappingHandlerMapping requestMappingHandlerMapping() { - RequestMappingHandlerMapping handlerMapping = super.requestMappingHandlerMapping(); - handlerMapping.setUseSuffixPatternMatch(false); - return handlerMapping; + @Override + protected PathMatchConfigurer getPathMatchConfigurer() { + PathMatchConfigurer pathMatchConfigurer = super.getPathMatchConfigurer(); + pathMatchConfigurer.setUseSuffixPatternMatch(false); + + return pathMatchConfigurer; } } diff --git a/spring-mvc-java/src/test/java/com/baeldung/web/controller/GreetControllerIntegrationTest.java b/spring-mvc-java/src/test/java/com/baeldung/web/controller/GreetControllerIntegrationTest.java index 079ea3e5cd..3d34a46791 100644 --- a/spring-mvc-java/src/test/java/com/baeldung/web/controller/GreetControllerIntegrationTest.java +++ b/spring-mvc-java/src/test/java/com/baeldung/web/controller/GreetControllerIntegrationTest.java @@ -32,7 +32,7 @@ public class GreetControllerIntegrationTest { private MockMvc mockMvc; - private static final String CONTENT_TYPE = "application/json;charset=UTF-8"; + private static final String CONTENT_TYPE = "application/json"; @Before public void setup() throws Exception { diff --git a/spring-mvc-java/src/test/java/com/baeldung/web/controller/GreetControllerUnitTest.java b/spring-mvc-java/src/test/java/com/baeldung/web/controller/GreetControllerUnitTest.java index 0475bd933d..eacd256438 100644 --- a/spring-mvc-java/src/test/java/com/baeldung/web/controller/GreetControllerUnitTest.java +++ b/spring-mvc-java/src/test/java/com/baeldung/web/controller/GreetControllerUnitTest.java @@ -16,7 +16,7 @@ import org.springframework.test.web.servlet.setup.MockMvcBuilders; public class GreetControllerUnitTest { private MockMvc mockMvc; - private static final String CONTENT_TYPE = "application/json;charset=UTF-8"; + private static final String CONTENT_TYPE = "application/json"; @Before public void setup() { From 059a9e6a51d065cca716a6f57d48061b136c0887 Mon Sep 17 00:00:00 2001 From: kwoyke Date: Wed, 19 Feb 2020 22:36:27 +0100 Subject: [PATCH 148/149] BAEL-3801: Update spring-boot-rest to use latest Spring Boot version (#8740) * BAEL-3801: Upgrade to Spring Boot 2.2.2 * BAEL-3801: Fix JacksonMarshaller * BAEL-3801: Get rid of deprecated HATEOAS classes * BAEL-3801: Fix H2 tables drop order * BAEL-3801: Remove commented property from pom.xml --- spring-boot-rest/pom.xml | 1 - .../persistence/config/CustomH2Dialect.java | 26 +++++++++++++++++++ .../baeldung/persistence/model/Customer.java | 9 +++---- .../com/baeldung/persistence/model/Order.java | 4 +-- .../web/controller/CustomerController.java | 14 +++++----- .../main/resources/persistence-h2.properties | 2 +- .../com/baeldung/test/JacksonMarshaller.java | 2 +- 7 files changed, 41 insertions(+), 17 deletions(-) create mode 100644 spring-boot-rest/src/main/java/com/baeldung/persistence/config/CustomH2Dialect.java diff --git a/spring-boot-rest/pom.xml b/spring-boot-rest/pom.xml index 2483aab6be..10dacf99e8 100644 --- a/spring-boot-rest/pom.xml +++ b/spring-boot-rest/pom.xml @@ -95,7 +95,6 @@ 27.0.1-jre 1.4.11.1 2.3.5 - 2.1.9.RELEASE diff --git a/spring-boot-rest/src/main/java/com/baeldung/persistence/config/CustomH2Dialect.java b/spring-boot-rest/src/main/java/com/baeldung/persistence/config/CustomH2Dialect.java new file mode 100644 index 0000000000..0108f92b2c --- /dev/null +++ b/spring-boot-rest/src/main/java/com/baeldung/persistence/config/CustomH2Dialect.java @@ -0,0 +1,26 @@ +package com.baeldung.persistence.config; + +import org.hibernate.dialect.H2Dialect; + +/** + * Since H2 1.4.200. the behavior of the drop table commands has changed. + * Tables are not dropped in a correct order. + * Until this is properly fixed directly in Hibernate project, + * let's use this custom H2Dialect class to solve this issue. + * + * @see https://hibernate.atlassian.net/browse/HHH-13711 + * @see https://github.com/hibernate/hibernate-orm/pull/3093 + */ +public class CustomH2Dialect extends H2Dialect { + + @Override + public boolean dropConstraints() { + return true; + } + + @Override + public boolean supportsIfExistsAfterAlterTable() { + return true; + } + +} diff --git a/spring-boot-rest/src/main/java/com/baeldung/persistence/model/Customer.java b/spring-boot-rest/src/main/java/com/baeldung/persistence/model/Customer.java index 10da2e10f0..06b2485c7b 100644 --- a/spring-boot-rest/src/main/java/com/baeldung/persistence/model/Customer.java +++ b/spring-boot-rest/src/main/java/com/baeldung/persistence/model/Customer.java @@ -1,14 +1,13 @@ package com.baeldung.persistence.model; -import java.util.Map; - -import org.springframework.hateoas.ResourceSupport; - import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; +import org.springframework.hateoas.RepresentationModel; + +import java.util.Map; @JsonInclude(Include.NON_NULL) -public class Customer extends ResourceSupport { +public class Customer extends RepresentationModel { private String customerId; private String customerName; private String companyName; diff --git a/spring-boot-rest/src/main/java/com/baeldung/persistence/model/Order.java b/spring-boot-rest/src/main/java/com/baeldung/persistence/model/Order.java index 7aea9bce5c..b5e1a2cee2 100644 --- a/spring-boot-rest/src/main/java/com/baeldung/persistence/model/Order.java +++ b/spring-boot-rest/src/main/java/com/baeldung/persistence/model/Order.java @@ -1,8 +1,8 @@ package com.baeldung.persistence.model; -import org.springframework.hateoas.ResourceSupport; +import org.springframework.hateoas.RepresentationModel; -public class Order extends ResourceSupport { +public class Order extends RepresentationModel { private String orderId; private double price; private int quantity; diff --git a/spring-boot-rest/src/main/java/com/baeldung/web/controller/CustomerController.java b/spring-boot-rest/src/main/java/com/baeldung/web/controller/CustomerController.java index 91aa9f2144..2b7dc1eee1 100644 --- a/spring-boot-rest/src/main/java/com/baeldung/web/controller/CustomerController.java +++ b/spring-boot-rest/src/main/java/com/baeldung/web/controller/CustomerController.java @@ -1,13 +1,13 @@ package com.baeldung.web.controller; -import static org.springframework.hateoas.mvc.ControllerLinkBuilder.linkTo; -import static org.springframework.hateoas.mvc.ControllerLinkBuilder.methodOn; +import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.linkTo; +import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.methodOn; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.hateoas.Link; -import org.springframework.hateoas.Resources; +import org.springframework.hateoas.CollectionModel; import org.springframework.hateoas.config.EnableHypermediaSupport; import org.springframework.hateoas.config.EnableHypermediaSupport.HypermediaType; import org.springframework.web.bind.annotation.GetMapping; @@ -41,7 +41,7 @@ public class CustomerController { } @GetMapping(value = "/{customerId}/orders", produces = { "application/hal+json" }) - public Resources getOrdersForCustomer(@PathVariable final String customerId) { + public CollectionModel getOrdersForCustomer(@PathVariable final String customerId) { final List orders = orderService.getAllOrdersForCustomer(customerId); for (final Order order : orders) { final Link selfLink = linkTo( @@ -50,12 +50,12 @@ public class CustomerController { } Link link = linkTo(methodOn(CustomerController.class).getOrdersForCustomer(customerId)).withSelfRel(); - Resources result = new Resources<>(orders, link); + CollectionModel result = new CollectionModel<>(orders, link); return result; } @GetMapping(produces = { "application/hal+json" }) - public Resources getAllCustomers() { + public CollectionModel getAllCustomers() { final List allCustomers = customerService.allCustomers(); for (final Customer customer : allCustomers) { @@ -72,7 +72,7 @@ public class CustomerController { } Link link = linkTo(CustomerController.class).withSelfRel(); - Resources result = new Resources<>(allCustomers, link); + CollectionModel result = new CollectionModel<>(allCustomers, link); return result; } diff --git a/spring-boot-rest/src/main/resources/persistence-h2.properties b/spring-boot-rest/src/main/resources/persistence-h2.properties index 839a466533..efbf3f7db7 100644 --- a/spring-boot-rest/src/main/resources/persistence-h2.properties +++ b/spring-boot-rest/src/main/resources/persistence-h2.properties @@ -17,6 +17,6 @@ jdbc.user=sa jdbc.pass= # hibernate.X -hibernate.dialect=org.hibernate.dialect.H2Dialect +hibernate.dialect=com.baeldung.persistence.config.CustomH2Dialect hibernate.show_sql=false hibernate.hbm2ddl.auto=create-drop diff --git a/spring-boot-rest/src/test/java/com/baeldung/test/JacksonMarshaller.java b/spring-boot-rest/src/test/java/com/baeldung/test/JacksonMarshaller.java index 23b5d60b6b..0f89e0a9de 100644 --- a/spring-boot-rest/src/test/java/com/baeldung/test/JacksonMarshaller.java +++ b/spring-boot-rest/src/test/java/com/baeldung/test/JacksonMarshaller.java @@ -60,7 +60,7 @@ public final class JacksonMarshaller implements IMarshaller { List entities = null; try { if (clazz.equals(Foo.class)) { - entities = objectMapper.readValue(resourcesAsString, new TypeReference>() { + entities = objectMapper.readValue(resourcesAsString, new TypeReference>() { // ... }); } else { From a73581fbafe4d95b188080bb975e8842edf97bae Mon Sep 17 00:00:00 2001 From: Kamlesh Kumar Date: Fri, 21 Feb 2020 09:16:22 +0530 Subject: [PATCH 149/149] BAEL-3459 updated cache2k example and test cases (#8732) --- .../com/baeldung/cache2k/ProductHelper.java | 23 ++++++++----------- .../cache2k/ProductHelperUsingLoader.java | 19 +++++++-------- .../ProductHelperWithEventListener.java | 19 +++++++-------- .../cache2k/ProductHelperWithExpiry.java | 23 ++++++++----------- .../cache2k/ProductHelperUnitTest.java | 9 ++++---- .../ProductHelperUsingLoaderUnitTest.java | 10 +++++--- ...roductHelperWithEventListenerUnitTest.java | 3 +-- .../ProductHelperWithExpiryUnitTest.java | 12 ++++++---- 8 files changed, 55 insertions(+), 63 deletions(-) diff --git a/libraries-3/src/main/java/com/baeldung/cache2k/ProductHelper.java b/libraries-3/src/main/java/com/baeldung/cache2k/ProductHelper.java index dc984e5f0b..cc646c9e17 100644 --- a/libraries-3/src/main/java/com/baeldung/cache2k/ProductHelper.java +++ b/libraries-3/src/main/java/com/baeldung/cache2k/ProductHelper.java @@ -4,38 +4,33 @@ import java.util.Objects; import org.cache2k.Cache; import org.cache2k.Cache2kBuilder; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public class ProductHelper { - final Logger LOGGER = LoggerFactory.getLogger(ProductHelper.class); - private Cache cachedDiscounts; + private int cacheMissCount = 0; + public ProductHelper() { cachedDiscounts = Cache2kBuilder.of(String.class, Integer.class) .name("discount") .eternal(true) .entryCapacity(100) .build(); - - initDiscountCache("Sports", 20); - } - - public void initDiscountCache(String productType, Integer value) { - cachedDiscounts.put(productType, value); } public Integer getDiscount(String productType) { Integer discount = cachedDiscounts.get(productType); if (Objects.isNull(discount)) { - LOGGER.info("Discount for {} not found.", productType); - discount = 0; - } else { - LOGGER.info("Discount for {} found.", productType); + cacheMissCount++; + discount = "Sports".equalsIgnoreCase(productType) ? 20 : 10; + cachedDiscounts.put(productType, discount); } return discount; } + public int getCacheMissCount() { + return cacheMissCount; + } + } diff --git a/libraries-3/src/main/java/com/baeldung/cache2k/ProductHelperUsingLoader.java b/libraries-3/src/main/java/com/baeldung/cache2k/ProductHelperUsingLoader.java index 787a78cd36..7b2ac4caa1 100644 --- a/libraries-3/src/main/java/com/baeldung/cache2k/ProductHelperUsingLoader.java +++ b/libraries-3/src/main/java/com/baeldung/cache2k/ProductHelperUsingLoader.java @@ -1,6 +1,5 @@ package com.baeldung.cache2k; -import java.util.Objects; import java.util.concurrent.TimeUnit; import org.cache2k.Cache; @@ -14,28 +13,26 @@ public class ProductHelperUsingLoader { private Cache cachedDiscounts; + private int cacheMissCount = 0; + public ProductHelperUsingLoader() { cachedDiscounts = Cache2kBuilder.of(String.class, Integer.class) .name("discount-loader") - .eternal(false) .expireAfterWrite(10, TimeUnit.MILLISECONDS) .entryCapacity(100) .loader((key) -> { - LOGGER.info("Calculating discount for {}.", key); + cacheMissCount++; return "Sports".equalsIgnoreCase(key) ? 20 : 10; }) .build(); } public Integer getDiscount(String productType) { - Integer discount = cachedDiscounts.get(productType); - if (Objects.isNull(discount)) { - LOGGER.info("Discount for {} not found.", productType); - discount = 0; - } else { - LOGGER.info("Discount for {} found.", productType); - } - return discount; + return cachedDiscounts.get(productType); + } + + public int getCacheMissCount() { + return cacheMissCount; } } diff --git a/libraries-3/src/main/java/com/baeldung/cache2k/ProductHelperWithEventListener.java b/libraries-3/src/main/java/com/baeldung/cache2k/ProductHelperWithEventListener.java index 5b9eb28c68..90c6ee3adf 100644 --- a/libraries-3/src/main/java/com/baeldung/cache2k/ProductHelperWithEventListener.java +++ b/libraries-3/src/main/java/com/baeldung/cache2k/ProductHelperWithEventListener.java @@ -1,6 +1,5 @@ package com.baeldung.cache2k; -import java.util.Objects; import java.util.concurrent.TimeUnit; import org.cache2k.Cache; @@ -16,14 +15,15 @@ public class ProductHelperWithEventListener { private Cache cachedDiscounts; + private int cacheMissCount = 0; + public ProductHelperWithEventListener() { cachedDiscounts = Cache2kBuilder.of(String.class, Integer.class) .name("discount-listener") - .eternal(false) .expireAfterWrite(10, TimeUnit.MILLISECONDS) .entryCapacity(100) .loader((key) -> { - LOGGER.info("Calculating discount for {}.", key); + cacheMissCount++; return "Sports".equalsIgnoreCase(key) ? 20 : 10; }) .addListener(new CacheEntryCreatedListener() { @@ -36,14 +36,11 @@ public class ProductHelperWithEventListener { } public Integer getDiscount(String productType) { - Integer discount = cachedDiscounts.get(productType); - if (Objects.isNull(discount)) { - LOGGER.info("Discount for {} not found.", productType); - discount = 0; - } else { - LOGGER.info("Discount for {} found.", productType); - } - return discount; + return cachedDiscounts.get(productType); + } + + public int getCacheMissCount() { + return cacheMissCount; } } diff --git a/libraries-3/src/main/java/com/baeldung/cache2k/ProductHelperWithExpiry.java b/libraries-3/src/main/java/com/baeldung/cache2k/ProductHelperWithExpiry.java index b0bf8f90de..22b656fead 100644 --- a/libraries-3/src/main/java/com/baeldung/cache2k/ProductHelperWithExpiry.java +++ b/libraries-3/src/main/java/com/baeldung/cache2k/ProductHelperWithExpiry.java @@ -5,39 +5,34 @@ import java.util.concurrent.TimeUnit; import org.cache2k.Cache; import org.cache2k.Cache2kBuilder; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; public class ProductHelperWithExpiry { - final Logger LOGGER = LoggerFactory.getLogger(ProductHelperWithExpiry.class); - private Cache cachedDiscounts; + private int cacheMissCount = 0; + public ProductHelperWithExpiry() { cachedDiscounts = Cache2kBuilder.of(String.class, Integer.class) .name("discount-expiry") - .eternal(false) .expireAfterWrite(5, TimeUnit.MILLISECONDS) .entryCapacity(100) .build(); - initDiscountCache("Sports", 20); - } - - public void initDiscountCache(String productType, Integer value) { - cachedDiscounts.put(productType, value); } public Integer getDiscount(String productType) { Integer discount = cachedDiscounts.get(productType); if (Objects.isNull(discount)) { - LOGGER.info("Discount for {} not found.", productType); - discount = 0; - } else { - LOGGER.info("Discount for {} found.", productType); + cacheMissCount++; + discount = "Sports".equalsIgnoreCase(productType) ? 20 : 10; + cachedDiscounts.put(productType, discount); } return discount; } + public int getCacheMissCount() { + return cacheMissCount; + } + } diff --git a/libraries-3/src/test/java/com/baeldung/cache2k/ProductHelperUnitTest.java b/libraries-3/src/test/java/com/baeldung/cache2k/ProductHelperUnitTest.java index 69da2591dd..e9b495279a 100644 --- a/libraries-3/src/test/java/com/baeldung/cache2k/ProductHelperUnitTest.java +++ b/libraries-3/src/test/java/com/baeldung/cache2k/ProductHelperUnitTest.java @@ -6,12 +6,13 @@ import org.junit.Test; public class ProductHelperUnitTest { - ProductHelper productHelper = new ProductHelper(); - @Test - public void whenInvokedGetDiscount_thenGetItFromCache() { + public void whenInvokedGetDiscountTwice_thenGetItFromCache() { + ProductHelper productHelper = new ProductHelper(); + assertTrue(productHelper.getCacheMissCount() == 0); assertTrue(productHelper.getDiscount("Sports") == 20); - assertTrue(productHelper.getDiscount("Electronics") == 0); + assertTrue(productHelper.getDiscount("Sports") == 20); + assertTrue(productHelper.getCacheMissCount() == 1); } } diff --git a/libraries-3/src/test/java/com/baeldung/cache2k/ProductHelperUsingLoaderUnitTest.java b/libraries-3/src/test/java/com/baeldung/cache2k/ProductHelperUsingLoaderUnitTest.java index 2656e75cab..3ad77aa2de 100644 --- a/libraries-3/src/test/java/com/baeldung/cache2k/ProductHelperUsingLoaderUnitTest.java +++ b/libraries-3/src/test/java/com/baeldung/cache2k/ProductHelperUsingLoaderUnitTest.java @@ -6,12 +6,16 @@ import org.junit.Test; public class ProductHelperUsingLoaderUnitTest { - ProductHelperUsingLoader productHelper = new ProductHelperUsingLoader(); - @Test - public void whenInvokedGetDiscount_thenPopulateCache() { + public void whenInvokedGetDiscount_thenPopulateCacheUsingLoader() { + ProductHelperUsingLoader productHelper = new ProductHelperUsingLoader(); + assertTrue(productHelper.getCacheMissCount() == 0); + assertTrue(productHelper.getDiscount("Sports") == 20); + assertTrue(productHelper.getCacheMissCount() == 1); + assertTrue(productHelper.getDiscount("Electronics") == 10); + assertTrue(productHelper.getCacheMissCount() == 2); } } diff --git a/libraries-3/src/test/java/com/baeldung/cache2k/ProductHelperWithEventListenerUnitTest.java b/libraries-3/src/test/java/com/baeldung/cache2k/ProductHelperWithEventListenerUnitTest.java index 7bf08232f4..9aeb9f0552 100644 --- a/libraries-3/src/test/java/com/baeldung/cache2k/ProductHelperWithEventListenerUnitTest.java +++ b/libraries-3/src/test/java/com/baeldung/cache2k/ProductHelperWithEventListenerUnitTest.java @@ -6,10 +6,9 @@ import org.junit.Test; public class ProductHelperWithEventListenerUnitTest { - ProductHelperWithEventListener productHelper = new ProductHelperWithEventListener(); - @Test public void whenEntryAddedInCache_thenEventListenerCalled() { + ProductHelperWithEventListener productHelper = new ProductHelperWithEventListener(); assertTrue(productHelper.getDiscount("Sports") == 20); } diff --git a/libraries-3/src/test/java/com/baeldung/cache2k/ProductHelperWithExpiryUnitTest.java b/libraries-3/src/test/java/com/baeldung/cache2k/ProductHelperWithExpiryUnitTest.java index 65feba2c70..a3303ca0aa 100644 --- a/libraries-3/src/test/java/com/baeldung/cache2k/ProductHelperWithExpiryUnitTest.java +++ b/libraries-3/src/test/java/com/baeldung/cache2k/ProductHelperWithExpiryUnitTest.java @@ -6,13 +6,17 @@ import org.junit.Test; public class ProductHelperWithExpiryUnitTest { - ProductHelperWithExpiry productHelper = new ProductHelperWithExpiry(); - @Test - public void whenInvokedGetDiscountForExpiredProduct_thenNoDiscount() throws InterruptedException { + public void whenInvokedGetDiscountAfterExpiration_thenDiscountCalculatedAgain() throws InterruptedException { + ProductHelperWithExpiry productHelper = new ProductHelperWithExpiry(); + assertTrue(productHelper.getCacheMissCount() == 0); assertTrue(productHelper.getDiscount("Sports") == 20); + assertTrue(productHelper.getCacheMissCount() == 1); + Thread.sleep(20); - assertTrue(productHelper.getDiscount("Sports") == 0); + + assertTrue(productHelper.getDiscount("Sports") == 20); + assertTrue(productHelper.getCacheMissCount() == 2); } }