From b54440ddb398ad78390aa29e3b6470c5d5ddb3f2 Mon Sep 17 00:00:00 2001 From: markusgulden Date: Thu, 4 Jan 2018 16:20:53 +0100 Subject: [PATCH 01/17] BAEL-592: Upgraded Hibernate 5-module to Spring 5 (#3351) * BAEL-592 Guide to Hibernate 5 with Spring * BAEL-592: Upgrade to Spring 5 --- persistence-modules/spring-hibernate-5/pom.xml | 2 +- .../com/baeldung/manytomany/spring/PersistenceConfig.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/persistence-modules/spring-hibernate-5/pom.xml b/persistence-modules/spring-hibernate-5/pom.xml index 88db38b2fc..86e952c0e4 100644 --- a/persistence-modules/spring-hibernate-5/pom.xml +++ b/persistence-modules/spring-hibernate-5/pom.xml @@ -179,7 +179,7 @@ - 4.3.10.RELEASE + 5.0.2.RELEASE 1.10.6.RELEASE diff --git a/persistence-modules/spring-hibernate-5/src/main/java/com/baeldung/manytomany/spring/PersistenceConfig.java b/persistence-modules/spring-hibernate-5/src/main/java/com/baeldung/manytomany/spring/PersistenceConfig.java index 6f359054b6..5dace1f742 100644 --- a/persistence-modules/spring-hibernate-5/src/main/java/com/baeldung/manytomany/spring/PersistenceConfig.java +++ b/persistence-modules/spring-hibernate-5/src/main/java/com/baeldung/manytomany/spring/PersistenceConfig.java @@ -10,8 +10,8 @@ import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.PropertySource; import org.springframework.core.env.Environment; import org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor; -import org.springframework.orm.hibernate4.HibernateTransactionManager; -import org.springframework.orm.hibernate4.LocalSessionFactoryBean; +import org.springframework.orm.hibernate5.HibernateTransactionManager; +import org.springframework.orm.hibernate5.LocalSessionFactoryBean; import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.annotation.EnableTransactionManagement; From 2afc7dc62353433c1d1b4cde2ab17b153a7b441c Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Thu, 4 Jan 2018 17:21:16 +0200 Subject: [PATCH 02/17] Refactor Vavr Future (#3349) --- .../java/com/baeldung/vavr/future/Util.java | 20 -- .../com/baeldung/vavr/future/FutureTest.java | 207 ++++++++---------- 2 files changed, 92 insertions(+), 135 deletions(-) delete mode 100644 vavr/src/main/java/com/baeldung/vavr/future/Util.java diff --git a/vavr/src/main/java/com/baeldung/vavr/future/Util.java b/vavr/src/main/java/com/baeldung/vavr/future/Util.java deleted file mode 100644 index 790ef2bf88..0000000000 --- a/vavr/src/main/java/com/baeldung/vavr/future/Util.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.baeldung.vavr.future; - -public class Util { - - public static String appendData(String initial) { - return initial + "Baeldung!"; - } - - public static int divideByZero(int num) { - return num / 0; - } - - public static String getSubstringMinusOne(String s) { - return s.substring(-1); - } - - public static String getSubstringMinusTwo(String s) { - return s.substring(-2); - } -} diff --git a/vavr/src/test/java/com/baeldung/vavr/future/FutureTest.java b/vavr/src/test/java/com/baeldung/vavr/future/FutureTest.java index dd678bcad0..002919a937 100644 --- a/vavr/src/test/java/com/baeldung/vavr/future/FutureTest.java +++ b/vavr/src/test/java/com/baeldung/vavr/future/FutureTest.java @@ -1,119 +1,102 @@ package com.baeldung.vavr.future; -import static org.assertj.core.api.Assertions.assertThat; - -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.Executors; - -import org.junit.Test; - import io.vavr.Tuple; -import io.vavr.Tuple2; import io.vavr.concurrent.Future; import io.vavr.control.Option; import io.vavr.control.Try; +import org.junit.Test; + +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutionException; + +import static java.util.concurrent.Executors.newSingleThreadExecutor; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; public class FutureTest { - + private static final String error = "Failed to get underlying value."; + private static final String HELLO = "Welcome to Baeldung!"; @Test - public void whenChangeExecutorService_thenCorrect() throws InterruptedException { - String initialValue = "Welcome to "; - Future resultFuture = Future.of( - Executors.newSingleThreadExecutor(), - () -> Util.appendData(initialValue)); - Thread.sleep(20); - String result = resultFuture.getOrElse(error); + public void whenChangeExecutorService_thenCorrect() { + String result = Future.of(newSingleThreadExecutor(), () -> HELLO) + .getOrElse(error); - assertThat(result).isEqualTo("Welcome to Baeldung!"); + assertThat(result) + .isEqualTo(HELLO); } @Test - public void whenAppendData_thenCorrect1() throws InterruptedException { - String initialValue = "Welcome to "; - Future resultFuture = Future.of(() -> Util.appendData(initialValue)); - Thread.sleep(20); - String result = resultFuture.getOrElse(new String(error)); + public void whenAppendData_thenCorrect1() { + String result = Future.of(() -> HELLO) + .getOrElse(error); - assertThat(result).isEqualTo("Welcome to Baeldung!"); + assertThat(result) + .isEqualTo(HELLO); } @Test - public void whenAppendData_thenCorrect2() throws InterruptedException { - String initialValue = "Welcome to "; - Future resultFuture = Future.of(() -> Util.appendData(initialValue)); - Thread.sleep(20); - resultFuture.await(); + public void whenAppendData_thenCorrect2() { + Future resultFuture = Future.of(() -> HELLO) + .await(); + Option> futureOption = resultFuture.getValue(); - Try futureTry = futureOption.get(); - String result = futureTry.getOrElse(error); + String result = futureOption.get().getOrElse(error); - assertThat(result).isEqualTo("Welcome to Baeldung!"); + assertThat(result) + .isEqualTo(HELLO); } @Test - public void whenAppendData_thenSuccess() throws InterruptedException { - String initialValue = "Welcome to "; - Future resultFuture = Future.of(() -> Util.appendData(initialValue)) + public void whenAppendData_thenSuccess() { + String result = Future.of(() -> HELLO) .onSuccess(finalResult -> System.out.println("Successfully Completed - Result: " + finalResult)) - .onFailure(finalResult -> System.out.println("Failed - Result: " + finalResult)); - Thread.sleep(20); - String result = resultFuture.getOrElse(error); + .onFailure(finalResult -> System.out.println("Failed - Result: " + finalResult)) + .getOrElse(error); - assertThat(result).isEqualTo("Welcome to Baeldung!"); + assertThat(result) + .isEqualTo(HELLO); } @Test - public void whenChainingCallbacks_thenCorrect() throws InterruptedException { - String initialValue = "Welcome to "; - Future resultFuture = Future.of(() -> Util.appendData(initialValue)) - .andThen(finalResult -> System.out.println("Completed - 1: " + finalResult)) - .andThen(finalResult -> System.out.println("Completed - 2: " + finalResult)); - Thread.sleep(20); - String result = resultFuture.getOrElse(error); - - assertThat(result).isEqualTo("Welcome to Baeldung!"); + public void whenChainingCallbacks_thenCorrect() { + Future.of(() -> HELLO) + .andThen(r -> System.out.println("Completed - 1: " + r)) + .andThen(r -> System.out.println("Completed - 2: " + r)); } @Test - public void whenCallAwait_thenCorrect() throws InterruptedException { - String initialValue = "Welcome to "; - Future resultFuture = Future.of(() -> Util.appendData(initialValue)); - Thread.sleep(20); - resultFuture = resultFuture.await(); - String result = resultFuture.getOrElse(error); + public void whenCallAwait_thenCorrect() { + Future resultFuture = Future.of(() -> HELLO) + .await(); + String result = resultFuture.getValue().get().getOrElse(error); - assertThat(result).isEqualTo("Welcome to Baeldung!"); + assertThat(result) + .isEqualTo(HELLO); } @Test - public void whenDivideByZero_thenGetThrowable1() throws InterruptedException { - Future resultFuture = Future.of(() -> Util.divideByZero(10)); - Thread.sleep(20); - Future throwableFuture = resultFuture.failed(); - Throwable throwable = throwableFuture.getOrElse(new Throwable()); + public void whenDivideByZero_thenGetThrowable1() { + Future resultFuture = Future.of(() -> 10 / 0); - assertThat(throwable.getMessage()).isEqualTo("/ by zero"); + assertThatThrownBy(resultFuture::get) + .isInstanceOf(ArithmeticException.class); } @Test - public void whenDivideByZero_thenGetThrowable2() throws InterruptedException { - Future resultFuture = Future.of(() -> Util.divideByZero(10)); - Thread.sleep(20); - resultFuture.await(); - Option throwableOption = resultFuture.getCause(); - Throwable throwable = throwableOption.getOrElse(new Throwable()); + public void whenDivideByZero_thenGetThrowable2() { + Future resultFuture = Future.of(() -> 10 / 0) + .await(); - assertThat(throwable.getMessage()).isEqualTo("/ by zero"); + assertThat(resultFuture.getCause().get().getMessage()) + .isEqualTo("/ by zero"); } @Test - public void whenDivideByZero_thenCorrect() throws InterruptedException { - Future resultFuture = Future.of(() -> Util.divideByZero(10)); - Thread.sleep(20); - resultFuture.await(); + public void whenDivideByZero_thenCorrect() { + Future resultFuture = Future.of(() -> 10 / 0) + .await(); assertThat(resultFuture.isCompleted()).isTrue(); assertThat(resultFuture.isSuccess()).isFalse(); @@ -121,76 +104,70 @@ public class FutureTest { } @Test - public void whenAppendData_thenFutureNotEmpty() throws InterruptedException { - String initialValue = "Welcome to "; - Future resultFuture = Future.of(() -> Util.appendData(initialValue)); - Thread.sleep(20); - resultFuture.await(); + public void whenAppendData_thenFutureNotEmpty() { + Future resultFuture = Future.of(() -> HELLO) + .await(); - assertThat(resultFuture.isEmpty()).isFalse(); + assertThat(resultFuture.isEmpty()) + .isFalse(); } @Test - public void whenCallZip_thenCorrect() throws InterruptedException { - Future> future = Future.of(() -> "John") - .zip(Future.of(() -> new Integer(5))); - Thread.sleep(20); - future.await(); + public void whenCallZip_thenCorrect() { + Future f1 = Future.of(() -> "hello1"); + Future f2 = Future.of(() -> "hello2"); - assertThat(future.getOrElse(new Tuple2(error, 0))) - .isEqualTo(Tuple.of("John", new Integer(5))); + assertThat(f1.zip(f2).get()) + .isEqualTo(Tuple.of("hello1", "hello2")); } @Test public void whenConvertToCompletableFuture_thenCorrect() throws InterruptedException, ExecutionException { - String initialValue = "Welcome to "; - Future resultFuture = Future.of(() -> Util.appendData(initialValue)); - Thread.sleep(20); - CompletableFuture convertedFuture = resultFuture.toCompletableFuture(); + CompletableFuture convertedFuture = Future.of(() -> HELLO) + .toCompletableFuture(); - assertThat(convertedFuture.get()).isEqualTo("Welcome to Baeldung!"); + assertThat(convertedFuture.get()) + .isEqualTo(HELLO); } @Test - public void whenCallMap_thenCorrect() throws InterruptedException { - Future futureResult = Future.of(() -> new StringBuilder("from Baeldung")) - .map(a -> "Hello " + a); - Thread.sleep(20); - futureResult.await(); + public void whenCallMap_thenCorrect() { + Future futureResult = Future.of(() -> "from Baeldung") + .map(a -> "Hello " + a) + .await(); - assertThat(futureResult.getOrElse(error)).isEqualTo("Hello from Baeldung"); + assertThat(futureResult.get()) + .isEqualTo("Hello from Baeldung"); } @Test - public void whenFutureFails_thenGetErrorMessage() throws InterruptedException { - Future resultFuture = Future.of(() -> Util.getSubstringMinusOne("Hello")); - Thread.sleep(20); - Future errorMessageFuture = resultFuture.recover(Throwable::getMessage); - String errorMessage = errorMessageFuture.getOrElse(error); + public void whenFutureFails_thenGetErrorMessage() { + Future future = Future.of(() -> "Hello".substring(-1)) + .recover(x -> "fallback value"); - assertThat(errorMessage).isEqualTo("String index out of range: -1"); + assertThat(future.get()) + .isEqualTo("fallback value"); } @Test - public void whenFutureFails_thenGetAnotherFuture() throws InterruptedException { - Future resultFuture = Future.of(() -> Util.getSubstringMinusOne("Hello")); - Thread.sleep(20); - Future errorMessageFuture = resultFuture.recoverWith(a -> Future.of(a::getMessage)); - String errorMessage = errorMessageFuture.getOrElse(error); + public void whenFutureFails_thenGetAnotherFuture() { + Future future = Future.of(() -> "Hello".substring(-1)) + .recoverWith(x -> Future.of(() -> "fallback value")); - assertThat(errorMessage).isEqualTo("String index out of range: -1"); + assertThat(future.get()) + .isEqualTo("fallback value"); } @Test - public void whenBothFuturesFail_thenGetErrorMessage() throws InterruptedException { - Future future1 = Future.of(() -> Util.getSubstringMinusOne("Hello")); - Future future2 = Future.of(() -> Util.getSubstringMinusTwo("Hello")); - Thread.sleep(20); - Future errorMessageFuture = future1.fallbackTo(future2); + public void whenBothFuturesFail_thenGetErrorMessage() { + Future f1 = Future.of(() -> "Hello".substring(-1)); + Future f2 = Future.of(() -> "Hello".substring(-2)); + + Future errorMessageFuture = f1.fallbackTo(f2); Future errorMessage = errorMessageFuture.failed(); - + assertThat( - errorMessage.getOrElse(new Throwable()).getMessage()) + errorMessage.get().getMessage()) .isEqualTo("String index out of range: -1"); } } From da4bd50cdb472461849602a8151d5605569c0454 Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Thu, 4 Jan 2018 17:21:32 +0200 Subject: [PATCH 03/17] Core Java 8 refactor (#3342) --- .../java/com/baeldung/{streamApi => stream}/Product.java | 2 +- core-java-8/src/main/java/com/baeldung/stream/StreamApi.java | 2 +- .../test/java/com/baeldung/java8/Java8StreamApiUnitTest.java | 2 +- .../java/com/baeldung/stream/PrimitiveStreamsUnitTest.java | 5 ++++- 4 files changed, 7 insertions(+), 4 deletions(-) rename core-java-8/src/main/java/com/baeldung/{streamApi => stream}/Product.java (96%) diff --git a/core-java-8/src/main/java/com/baeldung/streamApi/Product.java b/core-java-8/src/main/java/com/baeldung/stream/Product.java similarity index 96% rename from core-java-8/src/main/java/com/baeldung/streamApi/Product.java rename to core-java-8/src/main/java/com/baeldung/stream/Product.java index 1b7478551f..e99a969b81 100644 --- a/core-java-8/src/main/java/com/baeldung/streamApi/Product.java +++ b/core-java-8/src/main/java/com/baeldung/stream/Product.java @@ -1,4 +1,4 @@ -package com.baeldung.streamApi; +package com.baeldung.stream; import java.util.List; import java.util.stream.Stream; diff --git a/core-java-8/src/main/java/com/baeldung/stream/StreamApi.java b/core-java-8/src/main/java/com/baeldung/stream/StreamApi.java index 364fdeffbb..f0d5f1aa7e 100644 --- a/core-java-8/src/main/java/com/baeldung/stream/StreamApi.java +++ b/core-java-8/src/main/java/com/baeldung/stream/StreamApi.java @@ -16,7 +16,7 @@ public class StreamApi { } public static String getLastElementUsingSkip(List valueList) { - long count = valueList.stream().count(); + long count = (long) valueList.size(); Stream stream = valueList.stream(); return stream.skip(count - 1).findFirst().orElse(null); } diff --git a/core-java-8/src/test/java/com/baeldung/java8/Java8StreamApiUnitTest.java b/core-java-8/src/test/java/com/baeldung/java8/Java8StreamApiUnitTest.java index 73a10a57f4..5005cf7f47 100644 --- a/core-java-8/src/test/java/com/baeldung/java8/Java8StreamApiUnitTest.java +++ b/core-java-8/src/test/java/com/baeldung/java8/Java8StreamApiUnitTest.java @@ -1,6 +1,6 @@ package com.baeldung.java8; -import com.baeldung.streamApi.Product; +import com.baeldung.stream.Product; import org.junit.Before; import org.junit.Test; import org.slf4j.Logger; diff --git a/core-java-8/src/test/java/com/baeldung/stream/PrimitiveStreamsUnitTest.java b/core-java-8/src/test/java/com/baeldung/stream/PrimitiveStreamsUnitTest.java index c28d6300e0..2c88dc5ec7 100644 --- a/core-java-8/src/test/java/com/baeldung/stream/PrimitiveStreamsUnitTest.java +++ b/core-java-8/src/test/java/com/baeldung/stream/PrimitiveStreamsUnitTest.java @@ -6,6 +6,7 @@ import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; import java.util.stream.IntStream; +import java.util.stream.Stream; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; @@ -65,7 +66,9 @@ public class PrimitiveStreamsUnitTest { @Test public void givenAnArrayWhenSumIsCalledThenTheCorrectSumIsReturned() { - int sum = Arrays.asList(33,45).stream().mapToInt(a -> a).sum(); + int sum = Stream.of(33,45) + .mapToInt(i -> i) + .sum(); assertEquals(78, sum); } From e99619dcdc1c7173d7b6e0f09249e6a5001983b7 Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Thu, 4 Jan 2018 17:21:52 +0200 Subject: [PATCH 04/17] Update .travis.yml (#3334) * Update .travis.yml * Update .travis.yml --- .travis.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 3a953a2e7b..3d28a5cd76 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,7 +3,8 @@ language: java before_install: - echo "MAVEN_OPTS='-Xmx2048M -Xss128M -XX:+CMSClassUnloadingEnabled -XX:+UseG1GC -XX:-UseGCOverheadLimit'" > ~/.mavenrc -install: travis_wait 60 mvn -q test -fae +install: skip +script: travis_wait 60 mvn -q test -fae sudo: required From e039960365ce3455c8b0733328b8816efc0833af Mon Sep 17 00:00:00 2001 From: Tarang Bhalodia Date: Fri, 5 Jan 2018 01:28:04 +0530 Subject: [PATCH 05/17] BAEL-1422: Guide to ThreadLocalRandom [tarangbhalodia@gmail.com] (#3347) * BAEL-1422: measure performance of Random and ThreadLocalRandom using JMH * BAEL-1422: updated benchmarking examples of Random and ThreadLocalRandom to use newWorkStealingPool that leverages ForkJoinPool * BAEL-1422: refactored benchmarking examples for comparing performance of ThreadLocalRandom and Random - initialised the collection of Callable before running benchmarking - removed for loop for submitting task and instead used executor.invokeAll(collection_of_callable) --- .../ThreadLocalRandomBenchMarkRunner.java | 22 +++++++ .../ThreadLocalRandomBenchMarker.java | 64 +++++++++++++++++++ 2 files changed, 86 insertions(+) create mode 100644 core-java/src/main/java/com/baeldung/threadlocalrandom/ThreadLocalRandomBenchMarkRunner.java create mode 100644 core-java/src/main/java/com/baeldung/threadlocalrandom/ThreadLocalRandomBenchMarker.java diff --git a/core-java/src/main/java/com/baeldung/threadlocalrandom/ThreadLocalRandomBenchMarkRunner.java b/core-java/src/main/java/com/baeldung/threadlocalrandom/ThreadLocalRandomBenchMarkRunner.java new file mode 100644 index 0000000000..e9c8056ff5 --- /dev/null +++ b/core-java/src/main/java/com/baeldung/threadlocalrandom/ThreadLocalRandomBenchMarkRunner.java @@ -0,0 +1,22 @@ +package com.baeldung.threadlocalrandom; + +import org.openjdk.jmh.runner.Runner; +import org.openjdk.jmh.runner.options.Options; +import org.openjdk.jmh.runner.options.OptionsBuilder; + +public class ThreadLocalRandomBenchMarkRunner { + + public static void main(String[] args) throws Exception { + + Options options = new OptionsBuilder().include(ThreadLocalRandomBenchMarker.class.getSimpleName()) + .threads(1) + .forks(1) + .shouldFailOnError(true) + .shouldDoGC(true) + .jvmArgs("-server") + .build(); + + new Runner(options).run(); + + } +} diff --git a/core-java/src/main/java/com/baeldung/threadlocalrandom/ThreadLocalRandomBenchMarker.java b/core-java/src/main/java/com/baeldung/threadlocalrandom/ThreadLocalRandomBenchMarker.java new file mode 100644 index 0000000000..8a0e2d2826 --- /dev/null +++ b/core-java/src/main/java/com/baeldung/threadlocalrandom/ThreadLocalRandomBenchMarker.java @@ -0,0 +1,64 @@ +package com.baeldung.threadlocalrandom; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; +import java.util.concurrent.Callable; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.ThreadLocalRandom; +import java.util.concurrent.TimeUnit; + +import org.openjdk.jmh.annotations.Benchmark; +import org.openjdk.jmh.annotations.BenchmarkMode; +import org.openjdk.jmh.annotations.Level; +import org.openjdk.jmh.annotations.Mode; +import org.openjdk.jmh.annotations.OutputTimeUnit; +import org.openjdk.jmh.annotations.Scope; +import org.openjdk.jmh.annotations.Setup; +import org.openjdk.jmh.annotations.State; +import org.openjdk.jmh.annotations.Warmup; + +@BenchmarkMode(Mode.AverageTime) +@Warmup(iterations = 1) +@OutputTimeUnit(TimeUnit.MICROSECONDS) +@State(Scope.Benchmark) +public class ThreadLocalRandomBenchMarker { + + List> randomCallables = new ArrayList<>(); + List> threadLocalRandomCallables = new ArrayList<>(); + + @Setup(Level.Iteration) + public void init() { + Random random = new Random(); + randomCallables = new ArrayList<>(); + threadLocalRandomCallables = new ArrayList<>(); + for (int i = 0; i < 1000; i++) { + randomCallables.add(() -> { + return random.nextInt(); + }); + } + + for (int i = 0; i < 1000; i++) { + threadLocalRandomCallables.add(() -> { + return ThreadLocalRandom.current() + .nextInt(); + }); + } + } + + @Benchmark + public void randomValuesUsingRandom() throws InterruptedException { + ExecutorService executor = Executors.newWorkStealingPool(); + executor.invokeAll(randomCallables); + executor.shutdown(); + } + + @Benchmark + public void randomValuesUsingThreadLocalRandom() throws InterruptedException { + ExecutorService executor = Executors.newWorkStealingPool(); + executor.invokeAll(threadLocalRandomCallables); + executor.shutdown(); + } + +} From 4e8506652391cb37dcd08304107f8406472ef01a Mon Sep 17 00:00:00 2001 From: Loredana Crusoveanu Date: Fri, 5 Jan 2018 20:11:33 +0200 Subject: [PATCH 06/17] fix list endpoints actuator endpoint (#3348) --- spring-custom-aop/spring-custom-aop/pom.xml | 2 +- .../org/baeldung/endpoints/EndpointDTO.java | 39 +++++++++++++++++++ .../org/baeldung/endpoints/ListEndpoints.java | 11 +++--- 3 files changed, 46 insertions(+), 6 deletions(-) create mode 100644 spring-custom-aop/spring-custom-aop/src/main/java/org/baeldung/endpoints/EndpointDTO.java diff --git a/spring-custom-aop/spring-custom-aop/pom.xml b/spring-custom-aop/spring-custom-aop/pom.xml index 7e9da03b54..0bab7a4057 100644 --- a/spring-custom-aop/spring-custom-aop/pom.xml +++ b/spring-custom-aop/spring-custom-aop/pom.xml @@ -2,7 +2,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 com.baeldung - spring-boot + spring-custom-aop 0.0.1-SNAPSHOT war spring-boot diff --git a/spring-custom-aop/spring-custom-aop/src/main/java/org/baeldung/endpoints/EndpointDTO.java b/spring-custom-aop/spring-custom-aop/src/main/java/org/baeldung/endpoints/EndpointDTO.java new file mode 100644 index 0000000000..d12d6419e1 --- /dev/null +++ b/spring-custom-aop/spring-custom-aop/src/main/java/org/baeldung/endpoints/EndpointDTO.java @@ -0,0 +1,39 @@ +package org.baeldung.endpoints; + +public class EndpointDTO { + private String id; + private boolean enabled; + private boolean sensitive; + + public EndpointDTO(String id, boolean enabled, boolean sensitive) { + super(); + this.id = id; + this.enabled = enabled; + this.sensitive = sensitive; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public boolean isEnabled() { + return enabled; + } + + public void setEnabled(boolean enabled) { + this.enabled = enabled; + } + + public boolean isSensitive() { + return sensitive; + } + + public void setSensitive(boolean sensitive) { + this.sensitive = sensitive; + } + +} diff --git a/spring-custom-aop/spring-custom-aop/src/main/java/org/baeldung/endpoints/ListEndpoints.java b/spring-custom-aop/spring-custom-aop/src/main/java/org/baeldung/endpoints/ListEndpoints.java index 0add741a1f..f434351a51 100644 --- a/spring-custom-aop/spring-custom-aop/src/main/java/org/baeldung/endpoints/ListEndpoints.java +++ b/spring-custom-aop/spring-custom-aop/src/main/java/org/baeldung/endpoints/ListEndpoints.java @@ -1,6 +1,7 @@ package org.baeldung.endpoints; import java.util.List; +import java.util.stream.Collectors; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.actuate.endpoint.AbstractEndpoint; @@ -8,16 +9,16 @@ import org.springframework.boot.actuate.endpoint.Endpoint; import org.springframework.stereotype.Component; @Component -public class ListEndpoints extends AbstractEndpoint> { - private List endpoints; +public class ListEndpoints extends AbstractEndpoint> { + private List endpointDTOs; @Autowired public ListEndpoints(List endpoints) { super("listEndpoints"); - this.endpoints = endpoints; + this.endpointDTOs = endpoints.stream().map(endpoint -> new EndpointDTO(endpoint.getId(), endpoint.isEnabled(), endpoint.isSensitive())).collect(Collectors.toList()); } - public List invoke() { - return this.endpoints; + public List invoke() { + return this.endpointDTOs; } } \ No newline at end of file From 749533e14dfa401a0e55b63bd186005865b7fa97 Mon Sep 17 00:00:00 2001 From: Loredana Crusoveanu Date: Fri, 5 Jan 2018 20:18:24 +0200 Subject: [PATCH 07/17] fix start instead of run (#3353) --- .../src/main/java/com/baeldung/socket/EchoMultiServer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core-java/src/main/java/com/baeldung/socket/EchoMultiServer.java b/core-java/src/main/java/com/baeldung/socket/EchoMultiServer.java index a9f055f8f4..d2f9f0459c 100644 --- a/core-java/src/main/java/com/baeldung/socket/EchoMultiServer.java +++ b/core-java/src/main/java/com/baeldung/socket/EchoMultiServer.java @@ -16,7 +16,7 @@ public class EchoMultiServer { try { serverSocket = new ServerSocket(port); while (true) - new EchoClientHandler(serverSocket.accept()).run(); + new EchoClientHandler(serverSocket.accept()).start(); } catch (IOException e) { e.printStackTrace(); From 1273bb4aeef13b8823acc2adfd3d8312735aaaae Mon Sep 17 00:00:00 2001 From: Magdalena Krause Date: Fri, 5 Jan 2018 16:51:47 -0300 Subject: [PATCH 08/17] BAEL-1277: RESTFul CRUD application with JavaLite (#3359) * BAEL-1277: RESTFul CRUD application with JavaLite. * BAEL-1277: RESTFul CRUD application with JavaLite. Adding exception handling. --- java-lite/README.md | 2 + java-lite/pom.xml | 105 ++++++++++++++++++ .../main/java/app/config/AppBootstrap.java | 9 ++ .../java/app/config/AppControllerConfig.java | 15 +++ .../src/main/java/app/config/DbConfig.java | 11 ++ .../app/controllers/ProductsController.java | 101 +++++++++++++++++ .../src/main/java/app/models/Product.java | 7 ++ .../src/main/resources/database.properties | 4 + .../webapp/WEB-INF/views/products/_comma.ftl | 1 + .../WEB-INF/views/products/_product.ftl | 4 + .../webapp/WEB-INF/views/products/index.ftl | 1 + .../webapp/WEB-INF/views/products/message.ftl | 4 + java-lite/src/main/webapp/WEB-INF/web.xml | 25 +++++ .../src/test/java/app/models/ProductTest.java | 25 +++++ pom.xml | 1 + 15 files changed, 315 insertions(+) create mode 100644 java-lite/README.md create mode 100644 java-lite/pom.xml create mode 100644 java-lite/src/main/java/app/config/AppBootstrap.java create mode 100644 java-lite/src/main/java/app/config/AppControllerConfig.java create mode 100644 java-lite/src/main/java/app/config/DbConfig.java create mode 100644 java-lite/src/main/java/app/controllers/ProductsController.java create mode 100644 java-lite/src/main/java/app/models/Product.java create mode 100644 java-lite/src/main/resources/database.properties create mode 100644 java-lite/src/main/webapp/WEB-INF/views/products/_comma.ftl create mode 100644 java-lite/src/main/webapp/WEB-INF/views/products/_product.ftl create mode 100644 java-lite/src/main/webapp/WEB-INF/views/products/index.ftl create mode 100644 java-lite/src/main/webapp/WEB-INF/views/products/message.ftl create mode 100644 java-lite/src/main/webapp/WEB-INF/web.xml create mode 100644 java-lite/src/test/java/app/models/ProductTest.java diff --git a/java-lite/README.md b/java-lite/README.md new file mode 100644 index 0000000000..bcb84e186e --- /dev/null +++ b/java-lite/README.md @@ -0,0 +1,2 @@ +### Relevant Articles: +- [RESTFul CRUD application with JavaLite] () \ No newline at end of file diff --git a/java-lite/pom.xml b/java-lite/pom.xml new file mode 100644 index 0000000000..554819f6e4 --- /dev/null +++ b/java-lite/pom.xml @@ -0,0 +1,105 @@ + + + 4.0.0 + + org.baeldung + java-lite + 1.0-SNAPSHOT + + + com.baeldung + parent-modules + 1.0.0-SNAPSHOT + + + + 9.3.4.RC1 + 1.4.13 + 1.15 + 5.1.45 + 1.7.0 + 1.8.2 + 4.11 + + + + + + org.eclipse.jetty + jetty-maven-plugin + ${jetty.maven.plugin.version} + + + + activejdbc.log + + + + active_reload + true + + + activeweb.log.request + true + + + + + + + org.javalite + activejdbc-instrumentation + ${activejdbc.version} + + + process-classes + + instrument + + + + + + + + + + org.javalite + activeweb + ${activeweb.version} + + + + mysql + mysql-connector-java + ${mysql.connector.java.version} + + + + com.sun + tools + ${sun.tools.version} + system + ${java.home}/../lib/tools.jar + + + + org.codehaus.jackson + jackson-core-lgpl + ${jackson.version} + + + org.codehaus.jackson + jackson-mapper-lgpl + ${jackson.version} + + + junit + junit + ${junit.version} + + + + \ No newline at end of file diff --git a/java-lite/src/main/java/app/config/AppBootstrap.java b/java-lite/src/main/java/app/config/AppBootstrap.java new file mode 100644 index 0000000000..7a87c2d0a7 --- /dev/null +++ b/java-lite/src/main/java/app/config/AppBootstrap.java @@ -0,0 +1,9 @@ +package app.config; + +import org.javalite.activeweb.AppContext; +import org.javalite.activeweb.Bootstrap; + +public class AppBootstrap extends Bootstrap { + public void init(AppContext context) { + } +} diff --git a/java-lite/src/main/java/app/config/AppControllerConfig.java b/java-lite/src/main/java/app/config/AppControllerConfig.java new file mode 100644 index 0000000000..42b7e728ec --- /dev/null +++ b/java-lite/src/main/java/app/config/AppControllerConfig.java @@ -0,0 +1,15 @@ +package app.config; + +import app.controllers.ProductsController; +import org.javalite.activeweb.AbstractControllerConfig; +import org.javalite.activeweb.AppContext; +import org.javalite.activeweb.controller_filters.DBConnectionFilter; +import org.javalite.activeweb.controller_filters.TimingFilter; + +public class AppControllerConfig extends AbstractControllerConfig { + @Override + public void init(AppContext appContext) { + addGlobalFilters(new TimingFilter()); + add(new DBConnectionFilter()).to(ProductsController.class); + } +} diff --git a/java-lite/src/main/java/app/config/DbConfig.java b/java-lite/src/main/java/app/config/DbConfig.java new file mode 100644 index 0000000000..25ba378b22 --- /dev/null +++ b/java-lite/src/main/java/app/config/DbConfig.java @@ -0,0 +1,11 @@ +package app.config; + +import org.javalite.activeweb.AbstractDBConfig; +import org.javalite.activeweb.AppContext; + +public class DbConfig extends AbstractDBConfig { + @Override + public void init(AppContext appContext) { + this.configFile("/database.properties"); + } +} diff --git a/java-lite/src/main/java/app/controllers/ProductsController.java b/java-lite/src/main/java/app/controllers/ProductsController.java new file mode 100644 index 0000000000..f68dd9a013 --- /dev/null +++ b/java-lite/src/main/java/app/controllers/ProductsController.java @@ -0,0 +1,101 @@ +package app.controllers; + +import app.models.Product; +import org.codehaus.jackson.map.ObjectMapper; +import org.javalite.activeweb.AppController; +import org.javalite.activeweb.annotations.RESTful; + +import java.util.Map; + +@RESTful +public class ProductsController extends AppController { + + public void index() { + try { + view("products", Product.findAll()); + render().contentType("application/json"); + } catch (Exception e) { + view("message", "There was an error.", "code", 200); + render("message"); + } + } + + public void create() { + try { + Map payload = new ObjectMapper().readValue(getRequestString(), Map.class); + Product p = new Product(); + p.fromMap(payload); + p.saveIt(); + view("message", "Successfully saved product id " + p.get("id"), "code", 200); + render("message"); + } catch (Exception e) { + view("message", "There was an error.", "code", 200); + render("message"); + } + } + + public void update() { + try { + Map payload = new ObjectMapper().readValue(getRequestString(), Map.class); + String id = getId(); + Product p = Product.findById(id); + if (p == null) { + view("message", "Product id " + id + " not found.", "code", 200); + render("message"); + return; + } + p.fromMap(payload); + p.saveIt(); + view("message", "Successfully updated product id " + id, "code", 200); + render("message"); + } catch (Exception e) { + view("message", "There was an error.", "code", 200); + render("message"); + } + } + + public void show() { + try { + String id = getId(); + Product p = Product.findById(id); + if (p == null) { + view("message", "Product id " + id + " not found.", "code", 200); + render("message"); + return; + } + view("product", p); + render("_product"); + } catch (Exception e) { + view("message", "There was an error.", "code", 200); + render("message"); + } + } + + public void destroy() { + try { + String id = getId(); + Product p = Product.findById(id); + if (p == null) { + view("message", "Product id " + id + " not found.", "code", 200); + render("message"); + return; + } + p.delete(); + view("message", "Successfully deleted product id " + id, "code", 200); + render("message"); + } catch (Exception e) { + view("message", "There was an error.", "code", 200); + render("message"); + } + } + + @Override + protected String getContentType() { + return "application/json"; + } + + @Override + protected String getLayout() { + return null; + } +} diff --git a/java-lite/src/main/java/app/models/Product.java b/java-lite/src/main/java/app/models/Product.java new file mode 100644 index 0000000000..7fa32b75d9 --- /dev/null +++ b/java-lite/src/main/java/app/models/Product.java @@ -0,0 +1,7 @@ +package app.models; + +import org.javalite.activejdbc.Model; + +public class Product extends Model { + +} diff --git a/java-lite/src/main/resources/database.properties b/java-lite/src/main/resources/database.properties new file mode 100644 index 0000000000..55b3851d33 --- /dev/null +++ b/java-lite/src/main/resources/database.properties @@ -0,0 +1,4 @@ +development.driver=com.mysql.jdbc.Driver +development.username=user +development.password=password +development.url=jdbc:mysql://localhost/dbname \ No newline at end of file diff --git a/java-lite/src/main/webapp/WEB-INF/views/products/_comma.ftl b/java-lite/src/main/webapp/WEB-INF/views/products/_comma.ftl new file mode 100644 index 0000000000..41622b4720 --- /dev/null +++ b/java-lite/src/main/webapp/WEB-INF/views/products/_comma.ftl @@ -0,0 +1 @@ +, \ No newline at end of file diff --git a/java-lite/src/main/webapp/WEB-INF/views/products/_product.ftl b/java-lite/src/main/webapp/WEB-INF/views/products/_product.ftl new file mode 100644 index 0000000000..562af0499e --- /dev/null +++ b/java-lite/src/main/webapp/WEB-INF/views/products/_product.ftl @@ -0,0 +1,4 @@ +{ +"id" : ${product.id}, +"name" : "${product.name}" +} \ No newline at end of file diff --git a/java-lite/src/main/webapp/WEB-INF/views/products/index.ftl b/java-lite/src/main/webapp/WEB-INF/views/products/index.ftl new file mode 100644 index 0000000000..c343f20910 --- /dev/null +++ b/java-lite/src/main/webapp/WEB-INF/views/products/index.ftl @@ -0,0 +1 @@ +[<@render partial="product" collection=products spacer="comma"/>] \ No newline at end of file diff --git a/java-lite/src/main/webapp/WEB-INF/views/products/message.ftl b/java-lite/src/main/webapp/WEB-INF/views/products/message.ftl new file mode 100644 index 0000000000..3e7faf1459 --- /dev/null +++ b/java-lite/src/main/webapp/WEB-INF/views/products/message.ftl @@ -0,0 +1,4 @@ +{ +"message" : "${message}", +"code" : ${code} +} \ No newline at end of file diff --git a/java-lite/src/main/webapp/WEB-INF/web.xml b/java-lite/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000000..c285876c86 --- /dev/null +++ b/java-lite/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,25 @@ + + + + + + dispatcher + org.javalite.activeweb.RequestDispatcher + + exclusions + css,images,js,ico + + + encoding + UTF-8 + + + + + + dispatcher + /* + + + diff --git a/java-lite/src/test/java/app/models/ProductTest.java b/java-lite/src/test/java/app/models/ProductTest.java new file mode 100644 index 0000000000..f6ee0a3d0a --- /dev/null +++ b/java-lite/src/test/java/app/models/ProductTest.java @@ -0,0 +1,25 @@ +package app.models; + +import org.javalite.activejdbc.Base; +import org.junit.Assert; +import org.junit.Test; + +public class ProductTest { + + //@Test + public void givenSavedProduct_WhenFindFirst_ThenSavedProductIsReturned() { + //Open DB connection + Base.open("com.mysql.jdbc.Driver", "jdbc:mysql://localhost/dbname", "user", "password"); + + //Create a product and save it + Product toSaveProduct = new Product(); + toSaveProduct.set("name", "Bread"); + toSaveProduct.saveIt(); + + //Find product + Product savedProduct = Product.findFirst("name = ?", "Bread"); + + Assert.assertEquals(toSaveProduct.get("name"), savedProduct.get("name")); + } + +} \ No newline at end of file diff --git a/pom.xml b/pom.xml index 19e42009c9..7022fa3a38 100644 --- a/pom.xml +++ b/pom.xml @@ -85,6 +85,7 @@ jackson vavr + java-lite javax-servlets javaxval jaxb From fe0e0ba1151087892485b5ebe9c353239fdcb738 Mon Sep 17 00:00:00 2001 From: Doha2012 Date: Fri, 5 Jan 2018 21:56:21 +0200 Subject: [PATCH 09/17] upgrade boot parent (#3352) * make sure modules using java8 * move url matching code * upgrade boot parent * minor cleanup --- hystrix/pom.xml | 4 +- jjwt/pom.xml | 4 +- .../DemoApplicationIntegrationTest.java | 4 +- parent-boot-4/README.md | 1 - parent-boot-4/pom.xml | 81 ------------------- parent-boot-5/pom.xml | 6 +- pom.xml | 1 + spring-all/pom.xml | 4 +- spring-boot-keycloak/pom.xml | 4 +- spring-cloud-data-flow/batch-job/pom.xml | 4 +- .../data-flow-server/pom.xml | 4 +- .../data-flow-shell/pom.xml | 4 +- spring-cloud-data-flow/log-sink/pom.xml | 4 +- spring-cloud-data-flow/time-processor/pom.xml | 4 +- spring-cloud-data-flow/time-source/pom.xml | 4 +- .../spring-cloud-bootstrap/config/pom.xml | 4 +- .../spring-cloud-bootstrap/discovery/pom.xml | 4 +- .../spring-cloud-bootstrap/gateway/pom.xml | 4 +- .../spring-cloud-bootstrap/svc-book/pom.xml | 4 +- .../spring-cloud-bootstrap/svc-rating/pom.xml | 4 +- .../spring-cloud-bootstrap/zipkin/pom.xml | 4 +- .../config/client/ConfigClientLiveTest.java | 5 +- spring-cloud/spring-cloud-config/pom.xml | 4 +- .../ConfigServerListIntegrationTest.java | 4 +- .../spring-cloud-rest-books-api/pom.xml | 4 +- .../spring-cloud-rest-config-server/pom.xml | 4 +- .../pom.xml | 4 +- .../spring-cloud-rest-reviews-api/pom.xml | 4 +- .../spring-cloud-ribbon-client/pom.xml | 4 +- spring-cucumber/pom.xml | 4 +- .../com/baeldung/SpringIntegrationTest.java | 13 ++- spring-katharsis/pom.xml | 4 +- .../main/java/org/baeldung/Application.java | 2 +- spring-mobile/pom.xml | 4 +- spring-mockito/pom.xml | 4 +- .../baeldung/UserServiceIntegrationTest.java | 4 +- spring-mvc-email/pom.xml | 4 +- spring-protobuf/pom.xml | 4 +- .../protobuf/ApplicationIntegrationTest.java | 22 ++--- spring-quartz/pom.xml | 4 +- spring-reactor/pom.xml | 4 +- spring-remoting/pom.xml | 4 +- spring-rest-docs/pom.xml | 4 +- .../ApiDocumentationIntegrationTest.java | 45 ++++++----- ...ngStartedDocumentationIntegrationTest.java | 33 ++++---- spring-rest-full/pom.xml | 4 +- spring-rest-query-language/pom.xml | 4 +- spring-rest/pom.xml | 4 +- spring-security-cache-control/pom.xml | 4 +- .../pom.xml | 4 +- .../spring-security-jsp-authorize/pom.xml | 4 +- .../spring-security-jsp-config/pom.xml | 4 +- .../spring-security-mvc/pom.xml | 4 +- .../java/org/baeldung/config/Application.java | 2 +- .../pom.xml | 4 +- .../pom.xml | 4 +- .../spring-security-thymeleaf-config/pom.xml | 4 +- spring-security-core/pom.xml | 4 +- spring-security-mvc-ldap/pom.xml | 4 +- spring-security-rest-custom/pom.xml | 4 +- spring-security-stormpath/pom.xml | 4 +- spring-security-x509/pom.xml | 4 +- spring-session/pom.xml | 4 +- spring-sleuth/pom.xml | 4 +- spring-social-login/pom.xml | 4 +- spring-zuul/pom.xml | 4 +- .../config/ResourceServerApplication.java | 2 +- 67 files changed, 175 insertions(+), 258 deletions(-) delete mode 100644 parent-boot-4/README.md delete mode 100644 parent-boot-4/pom.xml diff --git a/hystrix/pom.xml b/hystrix/pom.xml index 58e09816ea..9e4b2bb082 100644 --- a/hystrix/pom.xml +++ b/hystrix/pom.xml @@ -7,10 +7,10 @@ hystrix - parent-boot-4 + parent-boot-5 com.baeldung 0.0.1-SNAPSHOT - ../parent-boot-4 + ../parent-boot-5 diff --git a/jjwt/pom.xml b/jjwt/pom.xml index 83a1131211..cd2dd9f97e 100644 --- a/jjwt/pom.xml +++ b/jjwt/pom.xml @@ -12,10 +12,10 @@ Exercising the JJWT - parent-boot-4 + parent-boot-5 com.baeldung 0.0.1-SNAPSHOT - ../parent-boot-4 + ../parent-boot-5 diff --git a/jjwt/src/test/java/io/jsonwebtoken/jjwtfun/DemoApplicationIntegrationTest.java b/jjwt/src/test/java/io/jsonwebtoken/jjwtfun/DemoApplicationIntegrationTest.java index df147232d9..846445ab2b 100644 --- a/jjwt/src/test/java/io/jsonwebtoken/jjwtfun/DemoApplicationIntegrationTest.java +++ b/jjwt/src/test/java/io/jsonwebtoken/jjwtfun/DemoApplicationIntegrationTest.java @@ -2,12 +2,12 @@ package io.jsonwebtoken.jjwtfun; import org.junit.Test; import org.junit.runner.RunWith; -import org.springframework.boot.test.SpringApplicationConfiguration; +import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.web.WebAppConfiguration; @RunWith(SpringJUnit4ClassRunner.class) -@SpringApplicationConfiguration(classes = JJWTFunApplication.class) +@SpringBootTest(classes = JJWTFunApplication.class) @WebAppConfiguration public class DemoApplicationIntegrationTest { diff --git a/parent-boot-4/README.md b/parent-boot-4/README.md deleted file mode 100644 index ff12555376..0000000000 --- a/parent-boot-4/README.md +++ /dev/null @@ -1 +0,0 @@ -## Relevant articles: diff --git a/parent-boot-4/pom.xml b/parent-boot-4/pom.xml deleted file mode 100644 index 51ef9f4854..0000000000 --- a/parent-boot-4/pom.xml +++ /dev/null @@ -1,81 +0,0 @@ - - 4.0.0 - com.baeldung - parent-boot-4 - 0.0.1-SNAPSHOT - pom - Parent Boot 4 - Parent for all spring boot 1.4 modules - - - UTF-8 - UTF-8 - 1.8 - 3.0.1 - - 2.19.1 - 3.7.0 - - - - spring-boot-starter-parent - org.springframework.boot - 1.4.4.RELEASE - - - - - - junit - junit - test - - - io.rest-assured - rest-assured - ${rest-assured.version} - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - org.apache.maven.plugins - maven-surefire-plugin - ${maven-surefire-plugin.version} - - 3 - true - - **/*IntegrationTest.java - **/*LongRunningUnitTest.java - **/*ManualTest.java - **/JdbcTest.java - **/*LiveTest.java - - - - - - org.apache.maven.plugins - maven-compiler-plugin - ${maven-compiler-plugin.version} - - 1.8 - 1.8 - - - - - - \ No newline at end of file diff --git a/parent-boot-5/pom.xml b/parent-boot-5/pom.xml index 6b1445fcdd..55ac0957ff 100644 --- a/parent-boot-5/pom.xml +++ b/parent-boot-5/pom.xml @@ -12,16 +12,16 @@ UTF-8 UTF-8 1.8 - 3.0.1 + 3.0.6 - 2.19.1 + 2.20.1 3.7.0 spring-boot-starter-parent org.springframework.boot - 1.5.3.RELEASE + 1.5.9.RELEASE diff --git a/pom.xml b/pom.xml index 7022fa3a38..68edf19cb2 100644 --- a/pom.xml +++ b/pom.xml @@ -28,6 +28,7 @@ + parent-boot-5 asm atomix apache-cayenne diff --git a/spring-all/pom.xml b/spring-all/pom.xml index 6615e1d6cd..b04ffae9c8 100644 --- a/spring-all/pom.xml +++ b/spring-all/pom.xml @@ -9,10 +9,10 @@ war - parent-boot-4 + parent-boot-5 com.baeldung 0.0.1-SNAPSHOT - ../parent-boot-4 + ../parent-boot-5 diff --git a/spring-boot-keycloak/pom.xml b/spring-boot-keycloak/pom.xml index ab76d0af43..741e2313b4 100644 --- a/spring-boot-keycloak/pom.xml +++ b/spring-boot-keycloak/pom.xml @@ -14,9 +14,9 @@ com.baeldung - parent-boot-4 + parent-boot-5 0.0.1-SNAPSHOT - ../parent-boot-4 + ../parent-boot-5 diff --git a/spring-cloud-data-flow/batch-job/pom.xml b/spring-cloud-data-flow/batch-job/pom.xml index 9a40c80e37..f2e9f35c8e 100644 --- a/spring-cloud-data-flow/batch-job/pom.xml +++ b/spring-cloud-data-flow/batch-job/pom.xml @@ -12,10 +12,10 @@ Demo project for Spring Boot - parent-boot-4 + parent-boot-5 com.baeldung 0.0.1-SNAPSHOT - ../../parent-boot-4 + ../../parent-boot-5 diff --git a/spring-cloud-data-flow/data-flow-server/pom.xml b/spring-cloud-data-flow/data-flow-server/pom.xml index ec0057191b..456a8abf4b 100644 --- a/spring-cloud-data-flow/data-flow-server/pom.xml +++ b/spring-cloud-data-flow/data-flow-server/pom.xml @@ -12,10 +12,10 @@ Demo project for Spring Boot - parent-boot-4 + parent-boot-5 com.baeldung 0.0.1-SNAPSHOT - ../../parent-boot-4 + ../../parent-boot-5 diff --git a/spring-cloud-data-flow/data-flow-shell/pom.xml b/spring-cloud-data-flow/data-flow-shell/pom.xml index b34c3cefeb..edb300a3b3 100644 --- a/spring-cloud-data-flow/data-flow-shell/pom.xml +++ b/spring-cloud-data-flow/data-flow-shell/pom.xml @@ -12,10 +12,10 @@ Demo project for Spring Boot - parent-boot-4 + parent-boot-5 com.baeldung 0.0.1-SNAPSHOT - ../../parent-boot-4 + ../../parent-boot-5 diff --git a/spring-cloud-data-flow/log-sink/pom.xml b/spring-cloud-data-flow/log-sink/pom.xml index b97a72d9c4..c07380de56 100644 --- a/spring-cloud-data-flow/log-sink/pom.xml +++ b/spring-cloud-data-flow/log-sink/pom.xml @@ -12,10 +12,10 @@ Demo project for Spring Boot - parent-boot-4 + parent-boot-5 com.baeldung 0.0.1-SNAPSHOT - ../../parent-boot-4 + ../../parent-boot-5 diff --git a/spring-cloud-data-flow/time-processor/pom.xml b/spring-cloud-data-flow/time-processor/pom.xml index 9b190e7250..08d5e2b9be 100644 --- a/spring-cloud-data-flow/time-processor/pom.xml +++ b/spring-cloud-data-flow/time-processor/pom.xml @@ -12,10 +12,10 @@ Demo project for Spring Boot - parent-boot-4 + parent-boot-5 com.baeldung 0.0.1-SNAPSHOT - ../../parent-boot-4 + ../../parent-boot-5 diff --git a/spring-cloud-data-flow/time-source/pom.xml b/spring-cloud-data-flow/time-source/pom.xml index 3112c7ede8..4d35e30be2 100644 --- a/spring-cloud-data-flow/time-source/pom.xml +++ b/spring-cloud-data-flow/time-source/pom.xml @@ -12,10 +12,10 @@ Demo project for Spring Boot - parent-boot-4 + parent-boot-5 com.baeldung 0.0.1-SNAPSHOT - ../../parent-boot-4 + ../../parent-boot-5 diff --git a/spring-cloud/spring-cloud-bootstrap/config/pom.xml b/spring-cloud/spring-cloud-bootstrap/config/pom.xml index 77ceedab39..f01ab55eb2 100644 --- a/spring-cloud/spring-cloud-bootstrap/config/pom.xml +++ b/spring-cloud/spring-cloud-bootstrap/config/pom.xml @@ -7,10 +7,10 @@ 1.0.0-SNAPSHOT - parent-boot-4 + parent-boot-5 com.baeldung 0.0.1-SNAPSHOT - ../../../parent-boot-4 + ../../../parent-boot-5 diff --git a/spring-cloud/spring-cloud-bootstrap/discovery/pom.xml b/spring-cloud/spring-cloud-bootstrap/discovery/pom.xml index 3156e0f3e6..137e9bebad 100644 --- a/spring-cloud/spring-cloud-bootstrap/discovery/pom.xml +++ b/spring-cloud/spring-cloud-bootstrap/discovery/pom.xml @@ -7,10 +7,10 @@ 1.0.0-SNAPSHOT - parent-boot-4 + parent-boot-5 com.baeldung 0.0.1-SNAPSHOT - ../../../parent-boot-4 + ../../../parent-boot-5 diff --git a/spring-cloud/spring-cloud-bootstrap/gateway/pom.xml b/spring-cloud/spring-cloud-bootstrap/gateway/pom.xml index 84dc2a6ca9..f32de88076 100644 --- a/spring-cloud/spring-cloud-bootstrap/gateway/pom.xml +++ b/spring-cloud/spring-cloud-bootstrap/gateway/pom.xml @@ -7,10 +7,10 @@ 1.0.0-SNAPSHOT - parent-boot-4 + parent-boot-5 com.baeldung 0.0.1-SNAPSHOT - ../../../parent-boot-4 + ../../../parent-boot-5 diff --git a/spring-cloud/spring-cloud-bootstrap/svc-book/pom.xml b/spring-cloud/spring-cloud-bootstrap/svc-book/pom.xml index d35e4f6576..9cc3cdb516 100644 --- a/spring-cloud/spring-cloud-bootstrap/svc-book/pom.xml +++ b/spring-cloud/spring-cloud-bootstrap/svc-book/pom.xml @@ -8,10 +8,10 @@ 1.0.0-SNAPSHOT - parent-boot-4 + parent-boot-5 com.baeldung 0.0.1-SNAPSHOT - ../../../parent-boot-4 + ../../../parent-boot-5 diff --git a/spring-cloud/spring-cloud-bootstrap/svc-rating/pom.xml b/spring-cloud/spring-cloud-bootstrap/svc-rating/pom.xml index 736a6114cf..3aa5cfa250 100644 --- a/spring-cloud/spring-cloud-bootstrap/svc-rating/pom.xml +++ b/spring-cloud/spring-cloud-bootstrap/svc-rating/pom.xml @@ -8,10 +8,10 @@ 1.0.0-SNAPSHOT - parent-boot-4 + parent-boot-5 com.baeldung 0.0.1-SNAPSHOT - ../../../parent-boot-4 + ../../../parent-boot-5 diff --git a/spring-cloud/spring-cloud-bootstrap/zipkin/pom.xml b/spring-cloud/spring-cloud-bootstrap/zipkin/pom.xml index 3b4c984721..7e0d146f95 100644 --- a/spring-cloud/spring-cloud-bootstrap/zipkin/pom.xml +++ b/spring-cloud/spring-cloud-bootstrap/zipkin/pom.xml @@ -7,10 +7,10 @@ 1.0.0-SNAPSHOT - parent-boot-4 + parent-boot-5 com.baeldung 0.0.1-SNAPSHOT - ../../../parent-boot-4 + ../../../parent-boot-5 diff --git a/spring-cloud/spring-cloud-config/client/src/test/java/com/baeldung/spring/cloud/config/client/ConfigClientLiveTest.java b/spring-cloud/spring-cloud-config/client/src/test/java/com/baeldung/spring/cloud/config/client/ConfigClientLiveTest.java index 058fd45f35..9bca369c64 100644 --- a/spring-cloud/spring-cloud-config/client/src/test/java/com/baeldung/spring/cloud/config/client/ConfigClientLiveTest.java +++ b/spring-cloud/spring-cloud-config/client/src/test/java/com/baeldung/spring/cloud/config/client/ConfigClientLiveTest.java @@ -1,14 +1,13 @@ package com.baeldung.spring.cloud.config.client; -import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; -import org.springframework.boot.test.SpringApplicationConfiguration; +import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.web.WebAppConfiguration; @RunWith(SpringJUnit4ClassRunner.class) -@SpringApplicationConfiguration(classes = ConfigClient.class) +@SpringBootTest(classes = ConfigClient.class) @WebAppConfiguration public class ConfigClientLiveTest { @Test diff --git a/spring-cloud/spring-cloud-config/pom.xml b/spring-cloud/spring-cloud-config/pom.xml index 81693b7e2e..a5f3f5271d 100644 --- a/spring-cloud/spring-cloud-config/pom.xml +++ b/spring-cloud/spring-cloud-config/pom.xml @@ -15,10 +15,10 @@ - parent-boot-4 + parent-boot-5 com.baeldung 0.0.1-SNAPSHOT - ../../parent-boot-4 + ../../parent-boot-5 diff --git a/spring-cloud/spring-cloud-config/server/src/test/java/com/baeldung/spring/cloud/config/server/ConfigServerListIntegrationTest.java b/spring-cloud/spring-cloud-config/server/src/test/java/com/baeldung/spring/cloud/config/server/ConfigServerListIntegrationTest.java index 34c08cc815..c521a0d2ef 100644 --- a/spring-cloud/spring-cloud-config/server/src/test/java/com/baeldung/spring/cloud/config/server/ConfigServerListIntegrationTest.java +++ b/spring-cloud/spring-cloud-config/server/src/test/java/com/baeldung/spring/cloud/config/server/ConfigServerListIntegrationTest.java @@ -3,12 +3,12 @@ package com.baeldung.spring.cloud.config.server; import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; -import org.springframework.boot.test.SpringApplicationConfiguration; +import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.web.WebAppConfiguration; @RunWith(SpringJUnit4ClassRunner.class) -@SpringApplicationConfiguration(classes = ConfigServer.class) +@SpringBootTest(classes = ConfigServer.class) @WebAppConfiguration @Ignore public class ConfigServerListIntegrationTest { diff --git a/spring-cloud/spring-cloud-rest/spring-cloud-rest-books-api/pom.xml b/spring-cloud/spring-cloud-rest/spring-cloud-rest-books-api/pom.xml index fb84b33876..07f6ae3b55 100644 --- a/spring-cloud/spring-cloud-rest/spring-cloud-rest-books-api/pom.xml +++ b/spring-cloud/spring-cloud-rest/spring-cloud-rest-books-api/pom.xml @@ -12,10 +12,10 @@ Simple books API - parent-boot-4 + parent-boot-5 com.baeldung 0.0.1-SNAPSHOT - ../../../parent-boot-4 + ../../../parent-boot-5 diff --git a/spring-cloud/spring-cloud-rest/spring-cloud-rest-config-server/pom.xml b/spring-cloud/spring-cloud-rest/spring-cloud-rest-config-server/pom.xml index f0a563f16f..11320107be 100644 --- a/spring-cloud/spring-cloud-rest/spring-cloud-rest-config-server/pom.xml +++ b/spring-cloud/spring-cloud-rest/spring-cloud-rest-config-server/pom.xml @@ -12,10 +12,10 @@ Spring Cloud REST configuration server - parent-boot-4 + parent-boot-5 com.baeldung 0.0.1-SNAPSHOT - ../../../parent-boot-4 + ../../../parent-boot-5 diff --git a/spring-cloud/spring-cloud-rest/spring-cloud-rest-discovery-server/pom.xml b/spring-cloud/spring-cloud-rest/spring-cloud-rest-discovery-server/pom.xml index 0735808eea..d8dbc660d0 100644 --- a/spring-cloud/spring-cloud-rest/spring-cloud-rest-discovery-server/pom.xml +++ b/spring-cloud/spring-cloud-rest/spring-cloud-rest-discovery-server/pom.xml @@ -12,10 +12,10 @@ Spring Cloud REST server - parent-boot-4 + parent-boot-5 com.baeldung 0.0.1-SNAPSHOT - ../../../parent-boot-4 + ../../../parent-boot-5 diff --git a/spring-cloud/spring-cloud-rest/spring-cloud-rest-reviews-api/pom.xml b/spring-cloud/spring-cloud-rest/spring-cloud-rest-reviews-api/pom.xml index 2574cae4eb..4252947664 100644 --- a/spring-cloud/spring-cloud-rest/spring-cloud-rest-reviews-api/pom.xml +++ b/spring-cloud/spring-cloud-rest/spring-cloud-rest-reviews-api/pom.xml @@ -12,10 +12,10 @@ Simple reviews API - parent-boot-4 + parent-boot-5 com.baeldung 0.0.1-SNAPSHOT - ../../../parent-boot-4 + ../../../parent-boot-5 diff --git a/spring-cloud/spring-cloud-ribbon-client/pom.xml b/spring-cloud/spring-cloud-ribbon-client/pom.xml index 68f3bd9439..85baff12cd 100644 --- a/spring-cloud/spring-cloud-ribbon-client/pom.xml +++ b/spring-cloud/spring-cloud-ribbon-client/pom.xml @@ -9,10 +9,10 @@ Introduction to Spring Cloud Rest Client with Netflix Ribbon - parent-boot-4 + parent-boot-5 com.baeldung 0.0.1-SNAPSHOT - ../../parent-boot-4 + ../../parent-boot-5 diff --git a/spring-cucumber/pom.xml b/spring-cucumber/pom.xml index 8270fc3ae2..df4723484d 100644 --- a/spring-cucumber/pom.xml +++ b/spring-cucumber/pom.xml @@ -12,10 +12,10 @@ Demo project for Spring Boot - parent-boot-4 + parent-boot-5 com.baeldung 0.0.1-SNAPSHOT - ../parent-boot-4 + ../parent-boot-5 diff --git a/spring-cucumber/src/test/java/com/baeldung/SpringIntegrationTest.java b/spring-cucumber/src/test/java/com/baeldung/SpringIntegrationTest.java index 9fbaeb348d..f4d47d7871 100644 --- a/spring-cucumber/src/test/java/com/baeldung/SpringIntegrationTest.java +++ b/spring-cucumber/src/test/java/com/baeldung/SpringIntegrationTest.java @@ -1,8 +1,10 @@ package com.baeldung; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.IntegrationTest; -import org.springframework.boot.test.SpringApplicationContextLoader; import org.springframework.http.HttpMethod; import org.springframework.http.client.ClientHttpResponse; import org.springframework.test.context.ContextConfiguration; @@ -10,14 +12,9 @@ import org.springframework.test.context.web.WebAppConfiguration; import org.springframework.web.client.ResponseErrorHandler; import org.springframework.web.client.RestTemplate; -import java.io.IOException; -import java.util.HashMap; -import java.util.Map; - //@RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration(classes = SpringDemoApplication.class, loader = SpringApplicationContextLoader.class) +@ContextConfiguration(classes = SpringDemoApplication.class) @WebAppConfiguration -@IntegrationTest public class SpringIntegrationTest { static ResponseResults latestResponse = null; diff --git a/spring-katharsis/pom.xml b/spring-katharsis/pom.xml index a5e79e138b..49c0a5acf9 100644 --- a/spring-katharsis/pom.xml +++ b/spring-katharsis/pom.xml @@ -7,10 +7,10 @@ war - parent-boot-4 + parent-boot-5 com.baeldung 0.0.1-SNAPSHOT - ../parent-boot-4 + ../parent-boot-5 diff --git a/spring-katharsis/src/main/java/org/baeldung/Application.java b/spring-katharsis/src/main/java/org/baeldung/Application.java index e7beb16e04..b61151d87f 100644 --- a/spring-katharsis/src/main/java/org/baeldung/Application.java +++ b/spring-katharsis/src/main/java/org/baeldung/Application.java @@ -2,7 +2,7 @@ package org.baeldung; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.context.web.SpringBootServletInitializer; +import org.springframework.boot.web.support.SpringBootServletInitializer; @SpringBootApplication public class Application extends SpringBootServletInitializer { diff --git a/spring-mobile/pom.xml b/spring-mobile/pom.xml index 8b8618aeee..3a129c179e 100644 --- a/spring-mobile/pom.xml +++ b/spring-mobile/pom.xml @@ -11,10 +11,10 @@ http://maven.apache.org - parent-boot-4 + parent-boot-5 com.baeldung 0.0.1-SNAPSHOT - ../parent-boot-4 + ../parent-boot-5 diff --git a/spring-mockito/pom.xml b/spring-mockito/pom.xml index d8bcc5682a..8c2949275c 100644 --- a/spring-mockito/pom.xml +++ b/spring-mockito/pom.xml @@ -12,10 +12,10 @@ Injecting Mockito Mocks into Spring Beans - parent-boot-4 + parent-boot-5 com.baeldung 0.0.1-SNAPSHOT - ../parent-boot-4 + ../parent-boot-5 diff --git a/spring-mockito/src/test/java/com/baeldung/UserServiceIntegrationTest.java b/spring-mockito/src/test/java/com/baeldung/UserServiceIntegrationTest.java index 70861a96e1..d70f916b12 100644 --- a/spring-mockito/src/test/java/com/baeldung/UserServiceIntegrationTest.java +++ b/spring-mockito/src/test/java/com/baeldung/UserServiceIntegrationTest.java @@ -5,13 +5,13 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mockito; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.SpringApplicationConfiguration; +import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @ActiveProfiles("test") @RunWith(SpringJUnit4ClassRunner.class) -@SpringApplicationConfiguration(classes = MocksApplication.class) +@SpringBootTest(classes = MocksApplication.class) public class UserServiceIntegrationTest { @Autowired diff --git a/spring-mvc-email/pom.xml b/spring-mvc-email/pom.xml index 9228054878..ddb1765af0 100644 --- a/spring-mvc-email/pom.xml +++ b/spring-mvc-email/pom.xml @@ -10,10 +10,10 @@ war - parent-boot-4 + parent-boot-5 com.baeldung 0.0.1-SNAPSHOT - ../parent-boot-4 + ../parent-boot-5 diff --git a/spring-protobuf/pom.xml b/spring-protobuf/pom.xml index 36310e08f1..1771c3e1f2 100644 --- a/spring-protobuf/pom.xml +++ b/spring-protobuf/pom.xml @@ -7,10 +7,10 @@ spring-protobuf - parent-boot-4 + parent-boot-5 com.baeldung 0.0.1-SNAPSHOT - ../parent-boot-4 + ../parent-boot-5 diff --git a/spring-protobuf/src/test/java/com/baeldung/protobuf/ApplicationIntegrationTest.java b/spring-protobuf/src/test/java/com/baeldung/protobuf/ApplicationIntegrationTest.java index 914cf18627..4b9f41ace3 100644 --- a/spring-protobuf/src/test/java/com/baeldung/protobuf/ApplicationIntegrationTest.java +++ b/spring-protobuf/src/test/java/com/baeldung/protobuf/ApplicationIntegrationTest.java @@ -1,7 +1,11 @@ package com.baeldung.protobuf; -import com.baeldung.protobuf.BaeldungTraining.Course; -import com.googlecode.protobuf.format.JsonFormat; +import static org.hamcrest.CoreMatchers.containsString; +import static org.junit.Assert.assertThat; + +import java.io.IOException; +import java.io.InputStream; + import org.apache.http.HttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.CloseableHttpClient; @@ -9,21 +13,17 @@ import org.apache.http.impl.client.HttpClients; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.SpringApplicationConfiguration; -import org.springframework.boot.test.WebIntegrationTest; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; import org.springframework.http.ResponseEntity; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.web.client.RestTemplate; -import java.io.IOException; -import java.io.InputStream; - -import static org.hamcrest.CoreMatchers.containsString; -import static org.junit.Assert.assertThat; +import com.baeldung.protobuf.BaeldungTraining.Course; +import com.googlecode.protobuf.format.JsonFormat; @RunWith(SpringJUnit4ClassRunner.class) -@SpringApplicationConfiguration(classes = Application.class) -@WebIntegrationTest +@SpringBootTest(classes = Application.class, webEnvironment = WebEnvironment.DEFINED_PORT) public class ApplicationIntegrationTest { private static final String COURSE1_URL = "http://localhost:8080/courses/1"; diff --git a/spring-quartz/pom.xml b/spring-quartz/pom.xml index eb00911543..78beab6e38 100644 --- a/spring-quartz/pom.xml +++ b/spring-quartz/pom.xml @@ -11,10 +11,10 @@ Demo project for Scheduling in Spring with Quartz - parent-boot-4 + parent-boot-5 com.baeldung 0.0.1-SNAPSHOT - ../parent-boot-4 + ../parent-boot-5 diff --git a/spring-reactor/pom.xml b/spring-reactor/pom.xml index 759e9f2b58..1a19d9c6d9 100644 --- a/spring-reactor/pom.xml +++ b/spring-reactor/pom.xml @@ -9,10 +9,10 @@ http://maven.apache.org - parent-boot-4 + parent-boot-5 com.baeldung 0.0.1-SNAPSHOT - ../parent-boot-4 + ../parent-boot-5 diff --git a/spring-remoting/pom.xml b/spring-remoting/pom.xml index b40f77eb50..aac8357c10 100644 --- a/spring-remoting/pom.xml +++ b/spring-remoting/pom.xml @@ -11,10 +11,10 @@ Parent for all projects related to Spring Remoting. - parent-boot-4 + parent-boot-5 com.baeldung 0.0.1-SNAPSHOT - ../parent-boot-4 + ../parent-boot-5 diff --git a/spring-rest-docs/pom.xml b/spring-rest-docs/pom.xml index 4647577629..ffd3cb89b6 100644 --- a/spring-rest-docs/pom.xml +++ b/spring-rest-docs/pom.xml @@ -12,10 +12,10 @@ Demo project for Spring Boot - parent-boot-4 + parent-boot-5 com.baeldung 0.0.1-SNAPSHOT - ../parent-boot-4 + ../parent-boot-5 diff --git a/spring-rest-docs/src/test/java/com/example/ApiDocumentationIntegrationTest.java b/spring-rest-docs/src/test/java/com/example/ApiDocumentationIntegrationTest.java index f2ac9d0f82..1c3aef4845 100644 --- a/spring-rest-docs/src/test/java/com/example/ApiDocumentationIntegrationTest.java +++ b/spring-rest-docs/src/test/java/com/example/ApiDocumentationIntegrationTest.java @@ -1,26 +1,5 @@ package com.example; -import com.fasterxml.jackson.databind.ObjectMapper; -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.SpringApplicationConfiguration; -import org.springframework.hateoas.MediaTypes; -import org.springframework.restdocs.RestDocumentation; -import org.springframework.restdocs.constraints.ConstraintDescriptions; -import org.springframework.restdocs.mockmvc.RestDocumentationResultHandler; -import org.springframework.restdocs.payload.FieldDescriptor; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import org.springframework.test.context.web.WebAppConfiguration; -import org.springframework.test.web.servlet.MockMvc; -import org.springframework.test.web.servlet.setup.MockMvcBuilders; -import org.springframework.web.context.WebApplicationContext; - -import java.util.HashMap; -import java.util.Map; - import static java.util.Collections.singletonList; import static org.springframework.restdocs.headers.HeaderDocumentation.headerWithName; import static org.springframework.restdocs.headers.HeaderDocumentation.responseHeaders; @@ -43,8 +22,30 @@ import static org.springframework.restdocs.snippet.Attributes.key; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; import static org.springframework.util.StringUtils.collectionToDelimitedString; +import java.util.HashMap; +import java.util.Map; + +import org.junit.Before; +import org.junit.Rule; +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.hateoas.MediaTypes; +import org.springframework.restdocs.RestDocumentation; +import org.springframework.restdocs.constraints.ConstraintDescriptions; +import org.springframework.restdocs.mockmvc.RestDocumentationResultHandler; +import org.springframework.restdocs.payload.FieldDescriptor; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.web.WebAppConfiguration; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.web.context.WebApplicationContext; + +import com.fasterxml.jackson.databind.ObjectMapper; + @RunWith(SpringJUnit4ClassRunner.class) -@SpringApplicationConfiguration(classes = SpringRestDocsApplication.class) +@SpringBootTest(classes = SpringRestDocsApplication.class) @WebAppConfiguration public class ApiDocumentationIntegrationTest { diff --git a/spring-rest-docs/src/test/java/com/example/GettingStartedDocumentationIntegrationTest.java b/spring-rest-docs/src/test/java/com/example/GettingStartedDocumentationIntegrationTest.java index c02c0c27f8..3300fc519c 100644 --- a/spring-rest-docs/src/test/java/com/example/GettingStartedDocumentationIntegrationTest.java +++ b/spring-rest-docs/src/test/java/com/example/GettingStartedDocumentationIntegrationTest.java @@ -1,20 +1,5 @@ package com.example; -import com.fasterxml.jackson.databind.ObjectMapper; -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.SpringApplicationConfiguration; -import org.springframework.hateoas.MediaTypes; -import org.springframework.restdocs.RestDocumentation; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import org.springframework.test.context.web.WebAppConfiguration; -import org.springframework.test.web.servlet.MockMvc; -import org.springframework.test.web.servlet.setup.MockMvcBuilders; -import org.springframework.web.context.WebApplicationContext; - import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.notNullValue; import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.document; @@ -26,8 +11,24 @@ import static org.springframework.restdocs.operation.preprocess.Preprocessors.pr import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; +import org.junit.Before; +import org.junit.Rule; +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.hateoas.MediaTypes; +import org.springframework.restdocs.RestDocumentation; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.web.WebAppConfiguration; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.web.context.WebApplicationContext; + +import com.fasterxml.jackson.databind.ObjectMapper; + @RunWith(SpringJUnit4ClassRunner.class) -@SpringApplicationConfiguration(classes = SpringRestDocsApplication.class) +@SpringBootTest(classes = SpringRestDocsApplication.class) @WebAppConfiguration public class GettingStartedDocumentationIntegrationTest { diff --git a/spring-rest-full/pom.xml b/spring-rest-full/pom.xml index c596e79b31..c00387e7de 100644 --- a/spring-rest-full/pom.xml +++ b/spring-rest-full/pom.xml @@ -9,10 +9,10 @@ war - parent-boot-4 + parent-boot-5 com.baeldung 0.0.1-SNAPSHOT - ../parent-boot-4 + ../parent-boot-5 diff --git a/spring-rest-query-language/pom.xml b/spring-rest-query-language/pom.xml index bf3eb8cb78..6826634bc9 100644 --- a/spring-rest-query-language/pom.xml +++ b/spring-rest-query-language/pom.xml @@ -9,10 +9,10 @@ war - parent-boot-4 + parent-boot-5 com.baeldung 0.0.1-SNAPSHOT - ../parent-boot-4 + ../parent-boot-5 diff --git a/spring-rest/pom.xml b/spring-rest/pom.xml index 06747ffd41..6da891b054 100644 --- a/spring-rest/pom.xml +++ b/spring-rest/pom.xml @@ -8,10 +8,10 @@ war - parent-boot-4 + parent-boot-5 com.baeldung 0.0.1-SNAPSHOT - ../parent-boot-4 + ../parent-boot-5 diff --git a/spring-security-cache-control/pom.xml b/spring-security-cache-control/pom.xml index e525cd4e8e..4ccb83c29b 100644 --- a/spring-security-cache-control/pom.xml +++ b/spring-security-cache-control/pom.xml @@ -8,10 +8,10 @@ 1.0-SNAPSHOT - parent-boot-4 + parent-boot-5 com.baeldung 0.0.1-SNAPSHOT - ../parent-boot-4 + ../parent-boot-5 diff --git a/spring-security-client/spring-security-jsp-authentication/pom.xml b/spring-security-client/spring-security-jsp-authentication/pom.xml index 6f4095c2d5..b29ce90aa4 100644 --- a/spring-security-client/spring-security-jsp-authentication/pom.xml +++ b/spring-security-client/spring-security-jsp-authentication/pom.xml @@ -12,10 +12,10 @@ Spring Security JSP Authentication tag sample - parent-boot-4 + parent-boot-5 com.baeldung 0.0.1-SNAPSHOT - ../../parent-boot-4 + ../../parent-boot-5 diff --git a/spring-security-client/spring-security-jsp-authorize/pom.xml b/spring-security-client/spring-security-jsp-authorize/pom.xml index 2e1a57a468..6fd89933bb 100644 --- a/spring-security-client/spring-security-jsp-authorize/pom.xml +++ b/spring-security-client/spring-security-jsp-authorize/pom.xml @@ -12,10 +12,10 @@ Spring Security JSP Authorize tag sample - parent-boot-4 + parent-boot-5 com.baeldung 0.0.1-SNAPSHOT - ../../parent-boot-4 + ../../parent-boot-5 diff --git a/spring-security-client/spring-security-jsp-config/pom.xml b/spring-security-client/spring-security-jsp-config/pom.xml index 4f92e24563..f533410acc 100644 --- a/spring-security-client/spring-security-jsp-config/pom.xml +++ b/spring-security-client/spring-security-jsp-config/pom.xml @@ -12,10 +12,10 @@ Spring Security JSP configuration - parent-boot-4 + parent-boot-5 com.baeldung 0.0.1-SNAPSHOT - ../../parent-boot-4 + ../../parent-boot-5 diff --git a/spring-security-client/spring-security-mvc/pom.xml b/spring-security-client/spring-security-mvc/pom.xml index a642e8719d..c67bc336f6 100644 --- a/spring-security-client/spring-security-mvc/pom.xml +++ b/spring-security-client/spring-security-mvc/pom.xml @@ -12,10 +12,10 @@ Spring Security MVC - parent-boot-4 + parent-boot-5 com.baeldung 0.0.1-SNAPSHOT - ../../parent-boot-4 + ../../parent-boot-5 diff --git a/spring-security-client/spring-security-mvc/src/main/java/org/baeldung/config/Application.java b/spring-security-client/spring-security-mvc/src/main/java/org/baeldung/config/Application.java index 4057a85f13..34c43fbe5a 100644 --- a/spring-security-client/spring-security-mvc/src/main/java/org/baeldung/config/Application.java +++ b/spring-security-client/spring-security-mvc/src/main/java/org/baeldung/config/Application.java @@ -3,7 +3,7 @@ package org.baeldung.config; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.context.web.SpringBootServletInitializer; +import org.springframework.boot.web.support.SpringBootServletInitializer; @SpringBootApplication public class Application extends SpringBootServletInitializer { diff --git a/spring-security-client/spring-security-thymeleaf-authentication/pom.xml b/spring-security-client/spring-security-thymeleaf-authentication/pom.xml index 7573d430d3..941cbb8a76 100644 --- a/spring-security-client/spring-security-thymeleaf-authentication/pom.xml +++ b/spring-security-client/spring-security-thymeleaf-authentication/pom.xml @@ -12,10 +12,10 @@ Spring Security thymeleaf authentication tag sample - parent-boot-4 + parent-boot-5 com.baeldung 0.0.1-SNAPSHOT - ../../parent-boot-4 + ../../parent-boot-5 diff --git a/spring-security-client/spring-security-thymeleaf-authorize/pom.xml b/spring-security-client/spring-security-thymeleaf-authorize/pom.xml index 20d141e70c..c70a099e68 100644 --- a/spring-security-client/spring-security-thymeleaf-authorize/pom.xml +++ b/spring-security-client/spring-security-thymeleaf-authorize/pom.xml @@ -12,10 +12,10 @@ Spring Security thymeleaf authorize tag sample - parent-boot-4 + parent-boot-5 com.baeldung 0.0.1-SNAPSHOT - ../../parent-boot-4 + ../../parent-boot-5 diff --git a/spring-security-client/spring-security-thymeleaf-config/pom.xml b/spring-security-client/spring-security-thymeleaf-config/pom.xml index ad856c7e20..9ef2444d6c 100644 --- a/spring-security-client/spring-security-thymeleaf-config/pom.xml +++ b/spring-security-client/spring-security-thymeleaf-config/pom.xml @@ -12,10 +12,10 @@ Spring Security thymeleaf configuration sample project - parent-boot-4 + parent-boot-5 com.baeldung 0.0.1-SNAPSHOT - ../../parent-boot-4 + ../../parent-boot-5 diff --git a/spring-security-core/pom.xml b/spring-security-core/pom.xml index 7deea5deb0..db8837df46 100644 --- a/spring-security-core/pom.xml +++ b/spring-security-core/pom.xml @@ -9,10 +9,10 @@ war - parent-boot-4 + parent-boot-5 com.baeldung 0.0.1-SNAPSHOT - ../parent-boot-4 + ../parent-boot-5 diff --git a/spring-security-mvc-ldap/pom.xml b/spring-security-mvc-ldap/pom.xml index e6452ea70b..4b0b9525e4 100644 --- a/spring-security-mvc-ldap/pom.xml +++ b/spring-security-mvc-ldap/pom.xml @@ -9,10 +9,10 @@ war - parent-boot-4 + parent-boot-5 com.baeldung 0.0.1-SNAPSHOT - ../parent-boot-4 + ../parent-boot-5 diff --git a/spring-security-rest-custom/pom.xml b/spring-security-rest-custom/pom.xml index 77a58a56d8..746ddb6615 100644 --- a/spring-security-rest-custom/pom.xml +++ b/spring-security-rest-custom/pom.xml @@ -9,10 +9,10 @@ war - parent-boot-4 + parent-boot-5 com.baeldung 0.0.1-SNAPSHOT - ../parent-boot-4 + ../parent-boot-5 diff --git a/spring-security-stormpath/pom.xml b/spring-security-stormpath/pom.xml index 982c677bf5..060f8a553d 100644 --- a/spring-security-stormpath/pom.xml +++ b/spring-security-stormpath/pom.xml @@ -24,10 +24,10 @@ - parent-boot-4 + parent-boot-5 com.baeldung 0.0.1-SNAPSHOT - ../parent-boot-4 + ../parent-boot-5 diff --git a/spring-security-x509/pom.xml b/spring-security-x509/pom.xml index 77830ebe5a..6225f73ebc 100644 --- a/spring-security-x509/pom.xml +++ b/spring-security-x509/pom.xml @@ -15,10 +15,10 @@ - parent-boot-4 + parent-boot-5 com.baeldung 0.0.1-SNAPSHOT - ../parent-boot-4 + ../parent-boot-5 diff --git a/spring-session/pom.xml b/spring-session/pom.xml index bb644c8b2e..b62d814665 100644 --- a/spring-session/pom.xml +++ b/spring-session/pom.xml @@ -8,10 +8,10 @@ jar - parent-boot-4 + parent-boot-5 com.baeldung 0.0.1-SNAPSHOT - ../parent-boot-4 + ../parent-boot-5 diff --git a/spring-sleuth/pom.xml b/spring-sleuth/pom.xml index dda5e09a26..aac0084720 100644 --- a/spring-sleuth/pom.xml +++ b/spring-sleuth/pom.xml @@ -9,10 +9,10 @@ jar - parent-boot-4 + parent-boot-5 com.baeldung 0.0.1-SNAPSHOT - ../parent-boot-4 + ../parent-boot-5 diff --git a/spring-social-login/pom.xml b/spring-social-login/pom.xml index 0ca04ac298..50e2abfbfc 100644 --- a/spring-social-login/pom.xml +++ b/spring-social-login/pom.xml @@ -7,10 +7,10 @@ war - parent-boot-4 + parent-boot-5 com.baeldung 0.0.1-SNAPSHOT - ../parent-boot-4 + ../parent-boot-5 diff --git a/spring-zuul/pom.xml b/spring-zuul/pom.xml index e1a551bc84..ca9cbc765d 100644 --- a/spring-zuul/pom.xml +++ b/spring-zuul/pom.xml @@ -9,10 +9,10 @@ pom - parent-boot-4 + parent-boot-5 com.baeldung 0.0.1-SNAPSHOT - ../parent-boot-4 + ../parent-boot-5 diff --git a/spring-zuul/spring-zuul-foos-resource/src/main/java/org/baeldung/config/ResourceServerApplication.java b/spring-zuul/spring-zuul-foos-resource/src/main/java/org/baeldung/config/ResourceServerApplication.java index 1e35eff551..9f1d2e162b 100644 --- a/spring-zuul/spring-zuul-foos-resource/src/main/java/org/baeldung/config/ResourceServerApplication.java +++ b/spring-zuul/spring-zuul-foos-resource/src/main/java/org/baeldung/config/ResourceServerApplication.java @@ -2,7 +2,7 @@ package org.baeldung.config; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.context.web.SpringBootServletInitializer; +import org.springframework.boot.web.support.SpringBootServletInitializer; @SpringBootApplication public class ResourceServerApplication extends SpringBootServletInitializer { From 21c41cfd99b78d9496f9767b6aa1c3e9c329162d Mon Sep 17 00:00:00 2001 From: Mansi Date: Sat, 6 Jan 2018 08:08:02 +0530 Subject: [PATCH 10/17] BAEL-1297 Find kth largest element in a sequence of numbers (#3332) * Example Code For Evaluation Article This is an example code for the evaluation article on "Different Types of Bean Injection in Spring" * Added unit tests * Minor changes to application context * Removed code committed for evaluation article * BAEL-944 Demonstrating the problems with new Url pattern matching in Spring 5 * BAEL-944 Demonstrating the problems with new Url pattern matching in Spring 5 * BAEL-944 Exploring the Spring MVC URL Matching Improvements * BAEL-944 Exploring the Spring MVC URL Matching Improvements * BAEL-944 Exploring the Spring MVC URL Matching Improvements * BAEL-944 Code Formatting and solving build issue * BAEL-944 Resolving build issue due to change in Spring version * BAEL-944 Resolving build issue * BAEL-944 Formatting code * BAEL-944 Moving tests to correct package * BAEL-944 Moving tests to correct package * BAEL-944 Replacing @RequestMapping by @GetMapping * BAEL-944 Remove unnecessary attribute name, "value" in annotations * BAEL-79 Intro to Activiti with Spring * BAEL-79 Intro to Activiti with Spring * BAEL-79 Adding activiti module to the parent modules * BAEL-79 Using latest version * BAEL-79 Update Spring boot version that works with Activiti * BAEL-79 Replace RequestMapping with GetMapping * BAEL-79 Use Java 8 Syntax * BAEL-79 Formatting * BAEL-79 changed module name * BAEL-378 A Guide to Activiti with Java * BAEL-79 Fixed unit tests * BAEL-79 Simplified the process * BAEL-79 Fix test cases * BAEL-1045 Lambda Behave * BAEL-1045 Lambda Behave * BAEL-1045 Lambda Behave * BAEL-1090 Difference between compact and compressed strings in Java 9 * BAEL-1237 String Formatter * BAEL-1237 String Formatter * BAEL-1237 String Formatter * BAEL-1237 String Formatter * BAEL-1237 Guide to java.util.Formatter * BAEL-1297 Find kth largest element in a sequence of numbers * BAEL-1297 fixed issues and modified file name * BAEL-1297 Modified randomized quickselect * BAEL-1297 added additional sorting method * BAEL-1297 UnitTest fix * BAEL-1297 Additional method Added QuickSelect With Iterative Partition method * BAEL-1297 Added AssertJ annotations * BAEL-1297 added missing assertj dependancy --- algorithms/pom.xml | 6 + .../algorithms/kthlargest/FindKthLargest.java | 111 ++++++++++++++++++ .../kthlargest/FindKthLargestUnitTest.java | 57 +++++++++ 3 files changed, 174 insertions(+) create mode 100644 algorithms/src/main/java/com/baeldung/algorithms/kthlargest/FindKthLargest.java create mode 100644 algorithms/src/test/java/com/baeldung/algorithms/kthlargest/FindKthLargestUnitTest.java diff --git a/algorithms/pom.xml b/algorithms/pom.xml index e972f39494..2eb8cd42b6 100644 --- a/algorithms/pom.xml +++ b/algorithms/pom.xml @@ -39,6 +39,12 @@ jgrapht-core 1.0.1 + + org.assertj + assertj-core + 3.9.0 + test + diff --git a/algorithms/src/main/java/com/baeldung/algorithms/kthlargest/FindKthLargest.java b/algorithms/src/main/java/com/baeldung/algorithms/kthlargest/FindKthLargest.java new file mode 100644 index 0000000000..822abdae02 --- /dev/null +++ b/algorithms/src/main/java/com/baeldung/algorithms/kthlargest/FindKthLargest.java @@ -0,0 +1,111 @@ +package com.baeldung.algorithms.kthlargest; + +import java.util.Arrays; +import java.util.Collections; +import java.util.stream.IntStream; + +public class FindKthLargest { + + public int findKthLargestBySorting(Integer[] arr, int k) { + Arrays.sort(arr); + int targetIndex = arr.length - k; + return arr[targetIndex]; + } + + public int findKthLargestBySortingDesc(Integer[] arr, int k) { + Arrays.sort(arr, Collections.reverseOrder()); + return arr[k - 1]; + } + + public int findKthElementByQuickSelect(Integer[] arr, int left, int right, int k) { + if (k >= 0 && k <= right - left + 1) { + int pos = partition(arr, left, right); + if (pos - left == k) { + return arr[pos]; + } + if (pos - left > k) { + return findKthElementByQuickSelect(arr, left, pos - 1, k); + } + return findKthElementByQuickSelect(arr, pos + 1, right, k - pos + left - 1); + } + return 0; + } + + public int findKthElementByQuickSelectWithIterativePartition(Integer[] arr, int left, int right, int k) { + if (k >= 0 && k <= right - left + 1) { + int pos = partitionIterative(arr, left, right); + if (pos - left == k) { + return arr[pos]; + } + if (pos - left > k) { + return findKthElementByQuickSelectWithIterativePartition(arr, left, pos - 1, k); + } + return findKthElementByQuickSelectWithIterativePartition(arr, pos + 1, right, k - pos + left - 1); + } + return 0; + } + + private int partition(Integer[] arr, int left, int right) { + int pivot = arr[right]; + Integer[] leftArr; + Integer[] rightArr; + + leftArr = IntStream.range(left, right) + .filter(i -> arr[i] < pivot) + .map(i -> arr[i]) + .boxed() + .toArray(Integer[]::new); + + rightArr = IntStream.range(left, right) + .filter(i -> arr[i] > pivot) + .map(i -> arr[i]) + .boxed() + .toArray(Integer[]::new); + + int leftArraySize = leftArr.length; + System.arraycopy(leftArr, 0, arr, left, leftArraySize); + arr[leftArraySize + left] = pivot; + System.arraycopy(rightArr, 0, arr, left + leftArraySize + 1, rightArr.length); + + return left + leftArraySize; + } + + private int partitionIterative(Integer[] arr, int left, int right) { + int pivot = arr[right], i = left; + for (int j = left; j <= right - 1; j++) { + if (arr[j] <= pivot) { + swap(arr, i, j); + i++; + } + } + swap(arr, i, right); + return i; + } + + public int findKthElementByRandomizedQuickSelect(Integer[] arr, int left, int right, int k) { + if (k >= 0 && k <= right - left + 1) { + int pos = randomPartition(arr, left, right); + if (pos - left == k) { + return arr[pos]; + } + if (pos - left > k) { + return findKthElementByRandomizedQuickSelect(arr, left, pos - 1, k); + } + return findKthElementByRandomizedQuickSelect(arr, pos + 1, right, k - pos + left - 1); + } + return 0; + } + + private int randomPartition(Integer arr[], int left, int right) { + int n = right - left + 1; + int pivot = (int) (Math.random()) % n; + swap(arr, left + pivot, right); + return partition(arr, left, right); + } + + private void swap(Integer[] arr, int n1, int n2) { + int temp = arr[n2]; + arr[n2] = arr[n1]; + arr[n1] = temp; + } +} diff --git a/algorithms/src/test/java/com/baeldung/algorithms/kthlargest/FindKthLargestUnitTest.java b/algorithms/src/test/java/com/baeldung/algorithms/kthlargest/FindKthLargestUnitTest.java new file mode 100644 index 0000000000..6fbb7c163a --- /dev/null +++ b/algorithms/src/test/java/com/baeldung/algorithms/kthlargest/FindKthLargestUnitTest.java @@ -0,0 +1,57 @@ +package com.baeldung.algorithms.kthlargest; + +import static org.assertj.core.api.Assertions.*; + +import org.junit.Before; +import org.junit.Test; + +public class FindKthLargestUnitTest { + + private FindKthLargest findKthLargest; + private Integer[] arr = { 3, 7, 1, 2, 8, 10, 4, 5, 6, 9 }; + + @Before + public void setup() { + findKthLargest = new FindKthLargest(); + } + + @Test + public void givenIntArray_whenFindKthLargestBySorting_thenGetResult() { + int k = 3; + assertThat(findKthLargest.findKthLargestBySorting(arr, k)).isEqualTo(8); + } + + @Test + public void givenIntArray_whenFindKthLargestBySortingDesc_thenGetResult() { + int k = 3; + assertThat(findKthLargest.findKthLargestBySortingDesc(arr, k)).isEqualTo(8); + } + + @Test + public void givenIntArray_whenFindKthLargestByQuickSelect_thenGetResult() { + int k = 3; + int kthLargest = arr.length - k; + assertThat(findKthLargest.findKthElementByQuickSelect(arr, 0, arr.length - 1, kthLargest)).isEqualTo(8); + } + + @Test + public void givenIntArray_whenFindKthElementByQuickSelectIterative_thenGetResult() { + int k = 3; + int kthLargest = arr.length - k; + assertThat(findKthLargest.findKthElementByQuickSelectWithIterativePartition(arr, 0, arr.length - 1, kthLargest)).isEqualTo(8); + } + + @Test + public void givenIntArray_whenFindKthSmallestByQuickSelect_thenGetResult() { + int k = 3; + assertThat(findKthLargest.findKthElementByQuickSelect(arr, 0, arr.length - 1, k - 1)).isEqualTo(3); + } + + @Test + public void givenIntArray_whenFindKthLargestByRandomizedQuickSelect_thenGetResult() { + int k = 3; + int kthLargest = arr.length - k; + assertThat(findKthLargest.findKthElementByRandomizedQuickSelect(arr, 0, arr.length - 1, kthLargest)).isEqualTo(8); + } + +} From 93273366dcbd9d24a1d368a4c0920cabb0cb02be Mon Sep 17 00:00:00 2001 From: Loredana Crusoveanu Date: Sat, 6 Jan 2018 11:28:35 +0200 Subject: [PATCH 11/17] Update README.md --- core-java/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core-java/README.md b/core-java/README.md index b965d25f88..4352768bca 100644 --- a/core-java/README.md +++ b/core-java/README.md @@ -131,4 +131,4 @@ - [How to Invert an Array in Java](http://www.baeldung.com/java-invert-array) - [Guide to the Cipher Class](http://www.baeldung.com/java-cipher-class) - [A Guide to Java Initialization](http://www.baeldung.com/java-initialization) - +- [A Guide to ThreadLocalRandom in Java](http://www.baeldung.com/java-thread-local-random) From 7546281a71c1bc28e248747763b6af4c789a23c0 Mon Sep 17 00:00:00 2001 From: Loredana Crusoveanu Date: Sat, 6 Jan 2018 11:33:42 +0200 Subject: [PATCH 12/17] Update README.md --- spring-jenkins-pipeline/README.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/spring-jenkins-pipeline/README.md b/spring-jenkins-pipeline/README.md index 7e562664e6..8c10e85da2 100644 --- a/spring-jenkins-pipeline/README.md +++ b/spring-jenkins-pipeline/README.md @@ -10,7 +10,6 @@ This is the code of a simple API for some CRUD operations build using Spring Boo - MongoDB ### Running - To build and start the server simply type ```bash @@ -20,4 +19,8 @@ $ mvn spring-boot:run -Dserver.port=8989 Now with default configurations it will be available at: [http://localhost:8080](http://localhost:8080) -Enjoy it :) \ No newline at end of file +Enjoy it :) + +### Relevant articles + +- [Intro to Jenkins 2 and the Power of Pipelines](http://www.baeldung.com/jenkins-pipelines) From 7674ec43be51139fba43025356cdee0eb8b39691 Mon Sep 17 00:00:00 2001 From: Loredana Crusoveanu Date: Sat, 6 Jan 2018 11:35:44 +0200 Subject: [PATCH 13/17] Update README.md --- core-java/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/core-java/README.md b/core-java/README.md index b965d25f88..1259e61b62 100644 --- a/core-java/README.md +++ b/core-java/README.md @@ -131,4 +131,6 @@ - [How to Invert an Array in Java](http://www.baeldung.com/java-invert-array) - [Guide to the Cipher Class](http://www.baeldung.com/java-cipher-class) - [A Guide to Java Initialization](http://www.baeldung.com/java-initialization) +- [Implementing a Binary Tree in Java](http://www.baeldung.com/java-binary-tree) + From bcae968f99f869370959531bac8db223afad059e Mon Sep 17 00:00:00 2001 From: Loredana Crusoveanu Date: Sat, 6 Jan 2018 18:43:48 +0200 Subject: [PATCH 14/17] Update README.md --- core-java/README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/core-java/README.md b/core-java/README.md index 911e22cc48..94d203533e 100644 --- a/core-java/README.md +++ b/core-java/README.md @@ -133,4 +133,3 @@ - [A Guide to Java Initialization](http://www.baeldung.com/java-initialization) - [Implementing a Binary Tree in Java](http://www.baeldung.com/java-binary-tree) - [A Guide to ThreadLocalRandom in Java](http://www.baeldung.com/java-thread-local-random) - From 81088757230d885be7d13cc5376120eb7c7730be Mon Sep 17 00:00:00 2001 From: Jonathan Date: Sat, 6 Jan 2018 11:01:49 -0600 Subject: [PATCH 15/17] BAEL-1068 (#3070) * BAEL-1068 - Javadoc example classes * BAEL-1068 - Formatting change for pom.xml * Updated javadoc comments to reflect article example --- core-java/pom.xml | 10 +++ .../java/com/baeldung/javadoc/Person.java | 22 +++++++ .../java/com/baeldung/javadoc/SuperHero.java | 64 +++++++++++++++++++ 3 files changed, 96 insertions(+) create mode 100644 core-java/src/main/java/com/baeldung/javadoc/Person.java create mode 100644 core-java/src/main/java/com/baeldung/javadoc/SuperHero.java diff --git a/core-java/pom.xml b/core-java/pom.xml index f99e4d68cf..5c1e9fcad0 100644 --- a/core-java/pom.xml +++ b/core-java/pom.xml @@ -389,6 +389,16 @@ + + + org.apache.maven.plugins + maven-javadoc-plugin + 3.0.0-M1 + + 1.8 + 1.8 + + diff --git a/core-java/src/main/java/com/baeldung/javadoc/Person.java b/core-java/src/main/java/com/baeldung/javadoc/Person.java new file mode 100644 index 0000000000..5efb410de4 --- /dev/null +++ b/core-java/src/main/java/com/baeldung/javadoc/Person.java @@ -0,0 +1,22 @@ +package com.baeldung.javadoc; + +public class Person { + /** + * This is a first name + */ + private String firstName; + private String lastName; + + public String getFirstName() { + return firstName; + } + public void setFirstName(String firstName) { + this.firstName = firstName; + } + public String getLastName() { + return lastName; + } + public void setLastName(String lastName) { + this.lastName = lastName; + } +} diff --git a/core-java/src/main/java/com/baeldung/javadoc/SuperHero.java b/core-java/src/main/java/com/baeldung/javadoc/SuperHero.java new file mode 100644 index 0000000000..029a779cdb --- /dev/null +++ b/core-java/src/main/java/com/baeldung/javadoc/SuperHero.java @@ -0,0 +1,64 @@ +package com.baeldung.javadoc; + +/** + * Hero is the main entity we will be using to . . . + * @author Captain America + * + */ +public class SuperHero extends Person { + + /** + * The public name of a hero that is common knowledge + */ + private String heroName; + private String uniquePower; + private int health; + private int defense; + + /** + *

This is a simple description of the method. . . + * Superman! + *

+ * @param incomingDamage the amount of incoming damage + * @return the amount of health hero has after attack + * @see HERO-402 + * @since 1.0 + */ + public int successfullyAttacked(int incomingDamage, String damageType) { + // do things + return 0; + } + + public String getHeroName() { + return heroName; + } + + public void setHeroName(String heroName) { + this.heroName = heroName; + } + + public String getUniquePower() { + return uniquePower; + } + + public void setUniquePower(String uniquePower) { + this.uniquePower = uniquePower; + } + + public int getHealth() { + return health; + } + + public void setHealth(int health) { + this.health = health; + } + + public int getDefense() { + return defense; + } + + public void setDefense(int defense) { + this.defense = defense; + } + +} From fa92d1db3d3fb1b0ddd4573c41717f909466b244 Mon Sep 17 00:00:00 2001 From: araknoid Date: Sat, 6 Jan 2018 20:38:33 +0100 Subject: [PATCH 16/17] BAEL-1419: Guide to cockroachDB in Java (#3325) * adding CockroachDB code * Fixed database name * Added handling transaction examples --- .../java-cockroachdb/README.md | 2 + persistence-modules/java-cockroachdb/pom.xml | 74 +++++++ .../baeldung/cockroachdb/domain/Article.java | 43 ++++ .../repository/ArticleRepository.java | 172 +++++++++++++++ .../ArticleRepositoryIntegrationTest.java | 208 ++++++++++++++++++ pom.xml | 1 + 6 files changed, 500 insertions(+) create mode 100644 persistence-modules/java-cockroachdb/README.md create mode 100644 persistence-modules/java-cockroachdb/pom.xml create mode 100644 persistence-modules/java-cockroachdb/src/main/java/com/baeldung/cockroachdb/domain/Article.java create mode 100644 persistence-modules/java-cockroachdb/src/main/java/com/baeldung/cockroachdb/repository/ArticleRepository.java create mode 100644 persistence-modules/java-cockroachdb/src/test/java/com/baeldung/cockroachdb/ArticleRepositoryIntegrationTest.java diff --git a/persistence-modules/java-cockroachdb/README.md b/persistence-modules/java-cockroachdb/README.md new file mode 100644 index 0000000000..0f0381212d --- /dev/null +++ b/persistence-modules/java-cockroachdb/README.md @@ -0,0 +1,2 @@ +### Relevant Articles: +- [Guide to CockroachDB in Java](http://www.baeldung.com/) diff --git a/persistence-modules/java-cockroachdb/pom.xml b/persistence-modules/java-cockroachdb/pom.xml new file mode 100644 index 0000000000..2b6f9651bc --- /dev/null +++ b/persistence-modules/java-cockroachdb/pom.xml @@ -0,0 +1,74 @@ + + + + + parent-modules + com.baeldung + 1.0.0-SNAPSHOT + ../../ + + + 4.0.0 + + com.baeldung + java-cockroachdb + 1.0-SNAPSHOT + + + 42.1.4 + + + + + org.postgresql + postgresql + ${postgresql.version} + + + + + + integration + + + + org.apache.maven.plugins + maven-surefire-plugin + + + integration-test + + test + + + + **/*ManualTest.java + + + **/*IntegrationTest.java + + + + + + + json + + + + + + + + + + + Central + Central + http://repo1.maven.org/maven2/ + default + + + \ No newline at end of file diff --git a/persistence-modules/java-cockroachdb/src/main/java/com/baeldung/cockroachdb/domain/Article.java b/persistence-modules/java-cockroachdb/src/main/java/com/baeldung/cockroachdb/domain/Article.java new file mode 100644 index 0000000000..dcc9dfb5b7 --- /dev/null +++ b/persistence-modules/java-cockroachdb/src/main/java/com/baeldung/cockroachdb/domain/Article.java @@ -0,0 +1,43 @@ +package com.baeldung.cockroachdb.domain; + +import java.util.UUID; + +public class Article { + + private UUID id; + + private String title; + + private String author; + + public Article(UUID id, String title, String author) { + this.id = id; + this.title = title; + this.author = author; + } + + public UUID getId() { + return id; + } + + public void setId(UUID 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/persistence-modules/java-cockroachdb/src/main/java/com/baeldung/cockroachdb/repository/ArticleRepository.java b/persistence-modules/java-cockroachdb/src/main/java/com/baeldung/cockroachdb/repository/ArticleRepository.java new file mode 100644 index 0000000000..a37c19e397 --- /dev/null +++ b/persistence-modules/java-cockroachdb/src/main/java/com/baeldung/cockroachdb/repository/ArticleRepository.java @@ -0,0 +1,172 @@ +package com.baeldung.cockroachdb.repository; + +import com.baeldung.cockroachdb.domain.Article; + +import java.sql.*; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +/** + * Repository for the articles table related operations + */ +public class ArticleRepository { + + private static final String TABLE_NAME = "articles"; + private Connection connection; + + public ArticleRepository(Connection connection) { + this.connection = connection; + } + + /** + * Creates the articles table. + */ + public void createTable() throws SQLException { + StringBuilder sb = new StringBuilder("CREATE TABLE IF NOT EXISTS ").append(TABLE_NAME) + .append("(id uuid PRIMARY KEY, ") + .append("title string,") + .append("author string)"); + + final String query = sb.toString(); + Statement stmt = connection.createStatement(); + stmt.execute(query); + } + + /** + * Alter the articles table adding a column + * + * @param columnName Column name of the additional column + * @param columnType Column type of the additional column + * @throws SQLException + */ + public void alterTable(String columnName, String columnType) throws SQLException { + StringBuilder sb = new StringBuilder("ALTER TABLE ").append(TABLE_NAME) + .append(" ADD ") + .append(columnName) + .append(" ") + .append(columnType); + + final String query = sb.toString(); + Statement stmt = connection.createStatement(); + stmt.execute(query); + } + + /** + * Insert a new article in the articles table + * + * @param article New article to insert + * @throws SQLException + */ + public void insertArticle(Article article) throws SQLException { + StringBuilder sb = new StringBuilder("INSERT INTO ").append(TABLE_NAME) + .append("(id, title, author) ") + .append("VALUES (?,?,?)"); + + final String query = sb.toString(); + PreparedStatement preparedStatement = connection.prepareStatement(query); + preparedStatement.setString(1, article.getId().toString()); + preparedStatement.setString(2, article.getTitle()); + preparedStatement.setString(3, article.getAuthor()); + preparedStatement.execute(); + } + + /** + * Select article by Title + * + * @param title title of the article to retrieve + * @return article with the given title + * @throws SQLException + */ + public Article selectByTitle(String title) throws SQLException { + StringBuilder sb = new StringBuilder("SELECT * FROM ").append(TABLE_NAME) + .append(" WHERE title = ?"); + + final String query = sb.toString(); + PreparedStatement preparedStatement = connection.prepareStatement(query); + preparedStatement.setString(1, title); + + try (ResultSet rs = preparedStatement.executeQuery()) { + + List
articles = new ArrayList<>(); + + while (rs.next()) { + Article article = new Article( + UUID.fromString(rs.getString("id")), + rs.getString("title"), + rs.getString("author") + ); + articles.add(article); + } + return articles.get(0); + } + + } + + /** + * Select all the articles + * + * @return list of all articles + * @throws SQLException + */ + public List
selectAll() throws SQLException { + StringBuilder sb = new StringBuilder("SELECT * FROM ").append(TABLE_NAME); + + final String query = sb.toString(); + PreparedStatement preparedStatement = connection.prepareStatement(query); + try (ResultSet rs = preparedStatement.executeQuery()) { + + List
articles = new ArrayList<>(); + + while (rs.next()) { + Article article = new Article( + UUID.fromString(rs.getString("id")), + rs.getString("title"), + rs.getString("author") + ); + articles.add(article); + } + return articles; + } + } + + /** + * Delete article by title + * + * @param title title of the article to delete + * @throws SQLException + */ + public void deleteArticleByTitle(String title) throws SQLException { + StringBuilder sb = new StringBuilder("DELETE FROM ").append(TABLE_NAME) + .append(" WHERE title = ?"); + + final String query = sb.toString(); + PreparedStatement preparedStatement = connection.prepareStatement(query); + preparedStatement.setString(1, title); + preparedStatement.execute(); + } + + /** + * Delete all rows in the table + * + * @throws SQLException + */ + public void truncateTable() throws SQLException { + StringBuilder sb = new StringBuilder("TRUNCATE TABLE ").append(TABLE_NAME); + + final String query = sb.toString(); + Statement stmt = connection.createStatement(); + stmt.execute(query); + } + + /** + * Delete table + */ + public void deleteTable() throws SQLException { + StringBuilder sb = new StringBuilder("DROP TABLE IF EXISTS ").append(TABLE_NAME); + + final String query = sb.toString(); + Statement stmt = connection.createStatement(); + stmt.execute(query); + } +} diff --git a/persistence-modules/java-cockroachdb/src/test/java/com/baeldung/cockroachdb/ArticleRepositoryIntegrationTest.java b/persistence-modules/java-cockroachdb/src/test/java/com/baeldung/cockroachdb/ArticleRepositoryIntegrationTest.java new file mode 100644 index 0000000000..9eb00b3651 --- /dev/null +++ b/persistence-modules/java-cockroachdb/src/test/java/com/baeldung/cockroachdb/ArticleRepositoryIntegrationTest.java @@ -0,0 +1,208 @@ +package com.baeldung.cockroachdb; + +import com.baeldung.cockroachdb.domain.Article; +import com.baeldung.cockroachdb.repository.ArticleRepository; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.postgresql.util.PSQLException; + +import java.sql.*; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +public class ArticleRepositoryIntegrationTest { + + private static final String TABLE_NAME = "articles"; + + private Connection con; + private ArticleRepository articleRepository; + + @Before + public void connect() throws Exception { + Class.forName("org.postgresql.Driver"); + con = DriverManager.getConnection("jdbc:postgresql://localhost:26257/testdb", "user17", "qwerty"); + + articleRepository = new ArticleRepository(con); + } + + @Test + public void whenCreatingTable_thenCreatedCorrectly() throws Exception { + articleRepository.deleteTable(); + articleRepository.createTable(); + + PreparedStatement preparedStatement = con.prepareStatement("SHOW TABLES"); + ResultSet resultSet = preparedStatement.executeQuery(); + List tables = new ArrayList<>(); + while (resultSet.next()) { + tables.add(resultSet.getString("Table")); + } + + assertTrue(tables.stream().anyMatch(t -> t.equals(TABLE_NAME))); + } + + @Test + public void whenAlteringTheTable_thenColumnAddedCorrectly() throws SQLException { + articleRepository.deleteTable(); + articleRepository.createTable(); + + String columnName = "creationdate"; + articleRepository.alterTable(columnName, "DATE"); + + String query = "SHOW COLUMNS FROM " + TABLE_NAME; + PreparedStatement preparedStatement = con.prepareStatement(query); + ResultSet resultSet = preparedStatement.executeQuery(); + List columns = new ArrayList<>(); + while (resultSet.next()) { + columns.add(resultSet.getString("Field")); + } + + assertTrue(columns.stream().anyMatch(c -> c.equals(columnName))); + } + + @Test + public void whenInsertingNewArticle_thenArticleExists() throws SQLException { + articleRepository.deleteTable(); + articleRepository.createTable(); + + String title = "Guide to CockroachDB in Java"; + String author = "baeldung"; + Article article = new Article(UUID.randomUUID(), title, author); + articleRepository.insertArticle(article); + + Article savedArticle = articleRepository.selectByTitle(title); + assertEquals(article.getTitle(), savedArticle.getTitle()); + } + + @Test + public void whenSelectingAllArticles_thenAllArticlesAreReturned() throws SQLException { + articleRepository.deleteTable(); + articleRepository.createTable(); + + Article article = new Article(UUID.randomUUID(), "Guide to CockroachDB in Java", "baeldung"); + articleRepository.insertArticle(article); + + article = new Article(UUID.randomUUID(), "A Guide to MongoDB with Java", "baeldung"); + articleRepository.insertArticle(article); + + List
savedArticles = articleRepository.selectAll(); + + assertEquals(2, savedArticles.size()); + assertTrue(savedArticles.stream().anyMatch(a -> a.getTitle().equals("Guide to CockroachDB in Java"))); + assertTrue(savedArticles.stream().anyMatch(a -> a.getTitle().equals("A Guide to MongoDB with Java"))); + } + + @Test + public void whenDeletingArticleByTtile_thenArticleIsDeleted() throws SQLException { + articleRepository.deleteTable(); + articleRepository.createTable(); + + Article article = new Article(UUID.randomUUID(), "Guide to CockroachDB in Java", "baeldung"); + articleRepository.insertArticle(article); + + article = new Article(UUID.randomUUID(), "A Guide to MongoDB with Java", "baeldung"); + articleRepository.insertArticle(article); + + articleRepository.deleteArticleByTitle("A Guide to MongoDB with Java"); + + List
savedArticles = articleRepository.selectAll(); + assertEquals(1, savedArticles.size()); + assertTrue(savedArticles.stream().anyMatch(a -> a.getTitle().equals("Guide to CockroachDB in Java"))); + assertFalse(savedArticles.stream().anyMatch(a -> a.getTitle().equals("A Guide to MongoDB with Java"))); + } + + @Test(expected = PSQLException.class) + public void whenDeletingATable_thenExceptionIfAccessed() throws SQLException { + articleRepository.createTable(); + articleRepository.deleteTable(); + + StringBuilder sb = new StringBuilder("SELECT * FROM ").append(TABLE_NAME); + + final String query = sb.toString(); + PreparedStatement preparedStatement = con.prepareStatement(query); + preparedStatement.executeQuery(); + } + + @Test + public void whenTruncatingATable_thenEmptyTable() throws SQLException { + articleRepository.deleteTable(); + articleRepository.createTable(); + + Article article = new Article(UUID.randomUUID(), "Guide to CockroachDB in Java", "baeldung"); + articleRepository.insertArticle(article); + + article = new Article(UUID.randomUUID(), "A Guide to MongoDB with Java", "baeldung"); + articleRepository.insertArticle(article); + + articleRepository.truncateTable(); + + List
savedArticles = articleRepository.selectAll(); + assertEquals(0, savedArticles.size()); + } + + @Test + public void whenInsertingTwoArticlesWithSamePrimaryKeyInASingleTransaction_thenRollback() throws SQLException { + articleRepository.deleteTable(); + articleRepository.createTable(); + + try { + con.setAutoCommit(false); + + UUID articleId = UUID.randomUUID(); + + Article article = new Article(articleId, "Guide to CockroachDB in Java", "baeldung"); + articleRepository.insertArticle(article); + + article = new Article(articleId, "A Guide to MongoDB with Java", "baeldung"); + articleRepository.insertArticle(article); + + con.commit(); + } catch (Exception e) { + con.rollback(); + } finally { + con.setAutoCommit(true); + } + + List
savedArticles = articleRepository.selectAll(); + assertEquals(0, savedArticles.size()); + } + + @Test + public void whenInsertingTwoArticlesInASingleTransaction_thenInserted() throws SQLException { + articleRepository.deleteTable(); + articleRepository.createTable(); + + try { + con.setAutoCommit(false); + + Article article = new Article(UUID.randomUUID(), "Guide to CockroachDB in Java", "baeldung"); + articleRepository.insertArticle(article); + + article = new Article(UUID.randomUUID(), "A Guide to MongoDB with Java", "baeldung"); + articleRepository.insertArticle(article); + + con.commit(); + } catch (Exception e) { + con.rollback(); + } finally { + con.setAutoCommit(true); + } + + List
savedArticles = articleRepository.selectAll(); + assertEquals(2, savedArticles.size()); + assertTrue(savedArticles.stream().anyMatch(a -> a.getTitle().equals("Guide to CockroachDB in Java"))); + assertTrue(savedArticles.stream().anyMatch(a -> a.getTitle().equals("A Guide to MongoDB with Java"))); + } + + @After + public void disconnect() throws SQLException { + articleRepository = null; + con.close(); + con = null; + } +} diff --git a/pom.xml b/pom.xml index 68edf19cb2..1050bb8ba2 100644 --- a/pom.xml +++ b/pom.xml @@ -269,6 +269,7 @@ deeplearning4j lucene vraptor + persistence-modules/java-cockroachdb From 477e8cfef488de917bc2c87c40533502e0f5ecef Mon Sep 17 00:00:00 2001 From: KevinGilmore Date: Sat, 6 Jan 2018 16:38:17 -0600 Subject: [PATCH 17/17] 399 update README (#3365) * BAEL-973: updated README * BAEL-1069: Updated README * BAEL-817: add README file * BAEL-1084: README update * BAEL-960: Update README * BAEL-1155: updated README * BAEL-1041: updated README * BAEL-973: Updated README * BAEL-1187: updated README * BAEL-1183: Update README * BAEL-1133: Updated README * BAEL-1098: README update * BAEL-719: add README.md * BAEL-1272: README update * BAEL-1272: README update * BAEL-1196: Update README * BAEL-1328: Updated README * BAEL-1371: Update README.md * BAEL-1371: Update README.md * BAEL-1278: Update README * BAEL-1326: Update README * BAEL-399: Update README --- hibernate5/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/hibernate5/README.md b/hibernate5/README.md index d480a7455c..1eb090f05d 100644 --- a/hibernate5/README.md +++ b/hibernate5/README.md @@ -4,3 +4,4 @@ - [An Overview of Identifiers in Hibernate](http://www.baeldung.com/hibernate-identifiers) - [Hibernate – Mapping Date and Time](http://www.baeldung.com/hibernate-date-time) - [Hibernate Inheritance Mapping](http://www.baeldung.com/hibernate-inheritance) +- [A Guide to Multitenancy in Hibernate 5](http://www.baeldung.com/hibernate-5-multitenancy)