From 694931a190f91e6b6e3ec440408fe107753f686d Mon Sep 17 00:00:00 2001 From: Tomasz Lelek Date: Wed, 1 Feb 2017 10:58:07 +0100 Subject: [PATCH 01/18] BEAL-572 rx project structure, hot cold observables --- rxjava/pom.xml | 35 +++++++++++++++++++ .../rxjava/HotObservableBackpressure.java | 30 ++++++++++++++++ 2 files changed, 65 insertions(+) create mode 100644 rxjava/pom.xml create mode 100644 rxjava/src/main/java/com/baelding/rxjava/HotObservableBackpressure.java diff --git a/rxjava/pom.xml b/rxjava/pom.xml new file mode 100644 index 0000000000..63aa1f127e --- /dev/null +++ b/rxjava/pom.xml @@ -0,0 +1,35 @@ + + + 4.0.0 + + com.baeldung + rxjava + 1.0-SNAPSHOT + + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.8 + 1.8 + + + + + + + + io.reactivex + rxjava + ${rx.java.version} + + + + + 1.2.5 + + + \ No newline at end of file diff --git a/rxjava/src/main/java/com/baelding/rxjava/HotObservableBackpressure.java b/rxjava/src/main/java/com/baelding/rxjava/HotObservableBackpressure.java new file mode 100644 index 0000000000..bc4f6710e5 --- /dev/null +++ b/rxjava/src/main/java/com/baelding/rxjava/HotObservableBackpressure.java @@ -0,0 +1,30 @@ +package com.baelding.rxjava; + + +import rx.schedulers.Schedulers; +import rx.subjects.PublishSubject; + +public class HotObservableBackPressure { + public static void main(String[] args) throws InterruptedException { + PublishSubject source = PublishSubject.create(); + + source + .observeOn(Schedulers.computation()) + .subscribe(v -> compute(v), Throwable::printStackTrace); + + for (int i = 0; i < 1_000_000; i++) { + source.onNext(i); + } + + Thread.sleep(10_000); + } + + private static void compute(Integer v) { + try { + System.out.println("compute integer v: "+ v); + Thread.sleep(1000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } +} From 2065c3ca514c9a5c3a60c1610d059c0995534f46 Mon Sep 17 00:00:00 2001 From: Tomasz Lelek Date: Wed, 1 Feb 2017 15:12:51 +0100 Subject: [PATCH 02/18] BEAL-572 different strategies of handling hot-observable --- .../rxjava/ColdObservableBackpressure.java | 44 +++++++++++++++++++ .../com/baelding/rxjava/ComputeFunction.java | 37 ++++++++++++++++ .../HotObservableBackPressureBatching.java | 22 ++++++++++ .../HotObservableBackPressureBuffering.java | 23 ++++++++++ .../HotObservableBackPressureSkipping.java | 27 ++++++++++++ .../rxjava/HotObservableBackpressure.java | 30 ------------- .../HotObservableWithoutBackPressure.java | 21 +++++++++ 7 files changed, 174 insertions(+), 30 deletions(-) create mode 100644 rxjava/src/main/java/com/baelding/rxjava/ColdObservableBackpressure.java create mode 100644 rxjava/src/main/java/com/baelding/rxjava/ComputeFunction.java create mode 100644 rxjava/src/main/java/com/baelding/rxjava/HotObservableBackPressureBatching.java create mode 100644 rxjava/src/main/java/com/baelding/rxjava/HotObservableBackPressureBuffering.java create mode 100644 rxjava/src/main/java/com/baelding/rxjava/HotObservableBackPressureSkipping.java delete mode 100644 rxjava/src/main/java/com/baelding/rxjava/HotObservableBackpressure.java create mode 100644 rxjava/src/main/java/com/baelding/rxjava/HotObservableWithoutBackPressure.java diff --git a/rxjava/src/main/java/com/baelding/rxjava/ColdObservableBackpressure.java b/rxjava/src/main/java/com/baelding/rxjava/ColdObservableBackpressure.java new file mode 100644 index 0000000000..cebc2d35f6 --- /dev/null +++ b/rxjava/src/main/java/com/baelding/rxjava/ColdObservableBackpressure.java @@ -0,0 +1,44 @@ +package com.baelding.rxjava; + + +import rx.Observable; +import rx.Subscriber; +import rx.schedulers.Schedulers; + +public class ColdObservableBackPressure { + public static void main(String[] args) throws InterruptedException { + Observable.range(1, 1_000_000) + .observeOn(Schedulers.computation()) + .subscribe(v -> ComputeFunction.compute(v), Throwable::printStackTrace); + + Thread.sleep(10_000); + + +// Observable.range(1, 1_000_000) //implementation of reactive pull backpressure on cold observable +// .subscribe(new Subscriber() { +// @Override +// public void onStart() { +// request(1); +// } +// +// public void onNext(Integer v) { +// compute(v); +// +// request(1); +// } +// +// @Override +// public void onError(Throwable ex) { +// ex.printStackTrace(); +// } +// +// @Override +// public void onCompleted() { +// System.out.println("Done!"); +// } +// }); + + } + + +} diff --git a/rxjava/src/main/java/com/baelding/rxjava/ComputeFunction.java b/rxjava/src/main/java/com/baelding/rxjava/ComputeFunction.java new file mode 100644 index 0000000000..f83f34c3ee --- /dev/null +++ b/rxjava/src/main/java/com/baelding/rxjava/ComputeFunction.java @@ -0,0 +1,37 @@ +package com.baelding.rxjava; + + +import rx.Observable; + +import java.util.List; + +public class ComputeFunction { + public static void compute(Integer v) { + try { + System.out.println("compute integer v: " + v); + Thread.sleep(1000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + + public static void compute(List v) { + try { + System.out.println("compute integer v: " + v); + Thread.sleep(1000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + + public static void compute(Observable v) { + try { + System.out.println("compute integer v: " + v); + Thread.sleep(1000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + + +} diff --git a/rxjava/src/main/java/com/baelding/rxjava/HotObservableBackPressureBatching.java b/rxjava/src/main/java/com/baelding/rxjava/HotObservableBackPressureBatching.java new file mode 100644 index 0000000000..42c705774a --- /dev/null +++ b/rxjava/src/main/java/com/baelding/rxjava/HotObservableBackPressureBatching.java @@ -0,0 +1,22 @@ +package com.baelding.rxjava; + +import rx.schedulers.Schedulers; +import rx.subjects.PublishSubject; + +public class HotObservableBackPressureBatching { + public static void main(String[] args) throws InterruptedException { + PublishSubject source = PublishSubject.create(); + + //buffer + source.window(500) + .observeOn(Schedulers.computation()) + .subscribe(ComputeFunction::compute, Throwable::printStackTrace); + + + for (int i = 0; i < 1_000_000; i++) { + source.onNext(i); + } + Thread.sleep(10_000); + } + +} diff --git a/rxjava/src/main/java/com/baelding/rxjava/HotObservableBackPressureBuffering.java b/rxjava/src/main/java/com/baelding/rxjava/HotObservableBackPressureBuffering.java new file mode 100644 index 0000000000..38451bab05 --- /dev/null +++ b/rxjava/src/main/java/com/baelding/rxjava/HotObservableBackPressureBuffering.java @@ -0,0 +1,23 @@ +package com.baelding.rxjava; + +import rx.schedulers.Schedulers; +import rx.subjects.PublishSubject; + + +public class HotObservableBackPressureBuffering { + public static void main(String[] args) throws InterruptedException { + PublishSubject source = PublishSubject.create(); + + //buffer + source + .buffer(1024) + .observeOn(Schedulers.computation()) + .subscribe(ComputeFunction::compute, Throwable::printStackTrace); + + + for (int i = 0; i < 1_000_000; i++) { + source.onNext(i); + } + Thread.sleep(10_000); + } +} diff --git a/rxjava/src/main/java/com/baelding/rxjava/HotObservableBackPressureSkipping.java b/rxjava/src/main/java/com/baelding/rxjava/HotObservableBackPressureSkipping.java new file mode 100644 index 0000000000..691198c0fa --- /dev/null +++ b/rxjava/src/main/java/com/baelding/rxjava/HotObservableBackPressureSkipping.java @@ -0,0 +1,27 @@ +package com.baelding.rxjava; + +import rx.schedulers.Schedulers; +import rx.subjects.PublishSubject; + +import java.util.concurrent.TimeUnit; + +public class HotObservableBackPressureSkipping { + public static void main(String[] args) throws InterruptedException { + PublishSubject source = PublishSubject.create(); + + //buffer + source +// .debounce(1, TimeUnit.SECONDS) +// .sample(1, TimeUnit.SECONDS) +// .throttleFirst(100, TimeUnit.MILLISECONDS) + .throttleLast(100, TimeUnit.MILLISECONDS) + .observeOn(Schedulers.computation()) + .subscribe(ComputeFunction::compute, Throwable::printStackTrace); + + + for (int i = 0; i < 1_000_000; i++) { + source.onNext(i); + } + Thread.sleep(10_000); + } +} diff --git a/rxjava/src/main/java/com/baelding/rxjava/HotObservableBackpressure.java b/rxjava/src/main/java/com/baelding/rxjava/HotObservableBackpressure.java deleted file mode 100644 index bc4f6710e5..0000000000 --- a/rxjava/src/main/java/com/baelding/rxjava/HotObservableBackpressure.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.baelding.rxjava; - - -import rx.schedulers.Schedulers; -import rx.subjects.PublishSubject; - -public class HotObservableBackPressure { - public static void main(String[] args) throws InterruptedException { - PublishSubject source = PublishSubject.create(); - - source - .observeOn(Schedulers.computation()) - .subscribe(v -> compute(v), Throwable::printStackTrace); - - for (int i = 0; i < 1_000_000; i++) { - source.onNext(i); - } - - Thread.sleep(10_000); - } - - private static void compute(Integer v) { - try { - System.out.println("compute integer v: "+ v); - Thread.sleep(1000); - } catch (InterruptedException e) { - e.printStackTrace(); - } - } -} diff --git a/rxjava/src/main/java/com/baelding/rxjava/HotObservableWithoutBackPressure.java b/rxjava/src/main/java/com/baelding/rxjava/HotObservableWithoutBackPressure.java new file mode 100644 index 0000000000..eea595b3b4 --- /dev/null +++ b/rxjava/src/main/java/com/baelding/rxjava/HotObservableWithoutBackPressure.java @@ -0,0 +1,21 @@ +package com.baelding.rxjava; + + +import rx.schedulers.Schedulers; +import rx.subjects.PublishSubject; + +public class HotObservableWithoutBackPressure { + public static void main(String[] args) throws InterruptedException { + PublishSubject source = PublishSubject.create(); + + //buffer + source.observeOn(Schedulers.computation()) + .subscribe(ComputeFunction::compute, Throwable::printStackTrace); + + + for (int i = 0; i < 1_000_000; i++) { + source.onNext(i); + } + Thread.sleep(10_000); + } +} From 51d8c0cdb7caccf19aa743fcab8282c43c77a25b Mon Sep 17 00:00:00 2001 From: Tomasz Lelek Date: Wed, 1 Feb 2017 16:43:15 +0100 Subject: [PATCH 03/18] BEAL-572 onBackpressure operations --- .../com/baelding/rxjava/ComputeFunction.java | 8 +++++ .../rxjava/HotObservableOnBackPressure.java | 31 +++++++++++++++++++ 2 files changed, 39 insertions(+) create mode 100644 rxjava/src/main/java/com/baelding/rxjava/HotObservableOnBackPressure.java diff --git a/rxjava/src/main/java/com/baelding/rxjava/ComputeFunction.java b/rxjava/src/main/java/com/baelding/rxjava/ComputeFunction.java index f83f34c3ee..557eb04612 100644 --- a/rxjava/src/main/java/com/baelding/rxjava/ComputeFunction.java +++ b/rxjava/src/main/java/com/baelding/rxjava/ComputeFunction.java @@ -34,4 +34,12 @@ public class ComputeFunction { } + public static void compute(Long v) { + try { + System.out.println("compute integer v: " + v); + Thread.sleep(1000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } } diff --git a/rxjava/src/main/java/com/baelding/rxjava/HotObservableOnBackPressure.java b/rxjava/src/main/java/com/baelding/rxjava/HotObservableOnBackPressure.java new file mode 100644 index 0000000000..f61536e827 --- /dev/null +++ b/rxjava/src/main/java/com/baelding/rxjava/HotObservableOnBackPressure.java @@ -0,0 +1,31 @@ +package com.baelding.rxjava; + + +import rx.BackpressureOverflow; +import rx.Observable; +import rx.schedulers.Schedulers; + +import java.util.concurrent.TimeUnit; + +public class HotObservableOnBackPressure { + public static void main(String[] args) throws InterruptedException { + Observable.range(1, 1_000_000) + .onBackpressureBuffer(16, () -> { + }, + BackpressureOverflow.ON_OVERFLOW_DROP_OLDEST) + .observeOn(Schedulers.computation()) + .subscribe(e -> { + }, Throwable::printStackTrace); + + + Observable.interval(1, TimeUnit.MINUTES) + .onBackpressureDrop() +// .onBackpressureLatest() + .observeOn(Schedulers.io()) + .doOnNext(ComputeFunction::compute) + .subscribe(v -> { + }, Throwable::printStackTrace); + Thread.sleep(10_000); + + } +} From c8d818c2f55c4f88498364d8697a7e92362a5242 Mon Sep 17 00:00:00 2001 From: Tomasz Lelek Date: Thu, 2 Feb 2017 21:36:11 +0100 Subject: [PATCH 04/18] BEAL-572 make examples simpler --- .../main/java/com/baelding/rxjava/ComputeFunction.java | 2 +- .../rxjava/HotObservableBackPressureBatching.java | 1 - .../rxjava/HotObservableBackPressureBuffering.java | 1 - .../rxjava/HotObservableBackPressureSkipping.java | 8 ++------ .../com/baelding/rxjava/HotObservableOnBackPressure.java | 5 +---- .../baelding/rxjava/HotObservableWithoutBackPressure.java | 3 +-- 6 files changed, 5 insertions(+), 15 deletions(-) diff --git a/rxjava/src/main/java/com/baelding/rxjava/ComputeFunction.java b/rxjava/src/main/java/com/baelding/rxjava/ComputeFunction.java index 557eb04612..bebccd0300 100644 --- a/rxjava/src/main/java/com/baelding/rxjava/ComputeFunction.java +++ b/rxjava/src/main/java/com/baelding/rxjava/ComputeFunction.java @@ -26,7 +26,7 @@ public class ComputeFunction { public static void compute(Observable v) { try { - System.out.println("compute integer v: " + v); + v.forEach(System.out::println); Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); diff --git a/rxjava/src/main/java/com/baelding/rxjava/HotObservableBackPressureBatching.java b/rxjava/src/main/java/com/baelding/rxjava/HotObservableBackPressureBatching.java index 42c705774a..c13f94c4f7 100644 --- a/rxjava/src/main/java/com/baelding/rxjava/HotObservableBackPressureBatching.java +++ b/rxjava/src/main/java/com/baelding/rxjava/HotObservableBackPressureBatching.java @@ -7,7 +7,6 @@ public class HotObservableBackPressureBatching { public static void main(String[] args) throws InterruptedException { PublishSubject source = PublishSubject.create(); - //buffer source.window(500) .observeOn(Schedulers.computation()) .subscribe(ComputeFunction::compute, Throwable::printStackTrace); diff --git a/rxjava/src/main/java/com/baelding/rxjava/HotObservableBackPressureBuffering.java b/rxjava/src/main/java/com/baelding/rxjava/HotObservableBackPressureBuffering.java index 38451bab05..67922e2efb 100644 --- a/rxjava/src/main/java/com/baelding/rxjava/HotObservableBackPressureBuffering.java +++ b/rxjava/src/main/java/com/baelding/rxjava/HotObservableBackPressureBuffering.java @@ -8,7 +8,6 @@ public class HotObservableBackPressureBuffering { public static void main(String[] args) throws InterruptedException { PublishSubject source = PublishSubject.create(); - //buffer source .buffer(1024) .observeOn(Schedulers.computation()) diff --git a/rxjava/src/main/java/com/baelding/rxjava/HotObservableBackPressureSkipping.java b/rxjava/src/main/java/com/baelding/rxjava/HotObservableBackPressureSkipping.java index 691198c0fa..2e8244166f 100644 --- a/rxjava/src/main/java/com/baelding/rxjava/HotObservableBackPressureSkipping.java +++ b/rxjava/src/main/java/com/baelding/rxjava/HotObservableBackPressureSkipping.java @@ -9,12 +9,8 @@ public class HotObservableBackPressureSkipping { public static void main(String[] args) throws InterruptedException { PublishSubject source = PublishSubject.create(); - //buffer - source -// .debounce(1, TimeUnit.SECONDS) -// .sample(1, TimeUnit.SECONDS) -// .throttleFirst(100, TimeUnit.MILLISECONDS) - .throttleLast(100, TimeUnit.MILLISECONDS) + source.sample(100, TimeUnit.MILLISECONDS) +// .throttleFirst(100, TimeUnit.MILLISECONDS) .observeOn(Schedulers.computation()) .subscribe(ComputeFunction::compute, Throwable::printStackTrace); diff --git a/rxjava/src/main/java/com/baelding/rxjava/HotObservableOnBackPressure.java b/rxjava/src/main/java/com/baelding/rxjava/HotObservableOnBackPressure.java index f61536e827..bf86312fff 100644 --- a/rxjava/src/main/java/com/baelding/rxjava/HotObservableOnBackPressure.java +++ b/rxjava/src/main/java/com/baelding/rxjava/HotObservableOnBackPressure.java @@ -5,8 +5,6 @@ import rx.BackpressureOverflow; import rx.Observable; import rx.schedulers.Schedulers; -import java.util.concurrent.TimeUnit; - public class HotObservableOnBackPressure { public static void main(String[] args) throws InterruptedException { Observable.range(1, 1_000_000) @@ -18,9 +16,8 @@ public class HotObservableOnBackPressure { }, Throwable::printStackTrace); - Observable.interval(1, TimeUnit.MINUTES) + Observable.range(1, 1_000_000) .onBackpressureDrop() -// .onBackpressureLatest() .observeOn(Schedulers.io()) .doOnNext(ComputeFunction::compute) .subscribe(v -> { diff --git a/rxjava/src/main/java/com/baelding/rxjava/HotObservableWithoutBackPressure.java b/rxjava/src/main/java/com/baelding/rxjava/HotObservableWithoutBackPressure.java index eea595b3b4..07ff5b42c0 100644 --- a/rxjava/src/main/java/com/baelding/rxjava/HotObservableWithoutBackPressure.java +++ b/rxjava/src/main/java/com/baelding/rxjava/HotObservableWithoutBackPressure.java @@ -8,9 +8,8 @@ public class HotObservableWithoutBackPressure { public static void main(String[] args) throws InterruptedException { PublishSubject source = PublishSubject.create(); - //buffer source.observeOn(Schedulers.computation()) - .subscribe(ComputeFunction::compute, Throwable::printStackTrace); + .subscribe(ComputeFunction::compute, Throwable::printStackTrace); for (int i = 0; i < 1_000_000; i++) { From 75860a063e73b98a2a11575cefa52f5ffdbb7a0b Mon Sep 17 00:00:00 2001 From: Andrew Morgan Date: Thu, 2 Feb 2017 23:15:23 +0100 Subject: [PATCH 05/18] Added a test class which shows the PriorityBlockingQueue being used --- .../PriorityBlockingQueueUnitTest.java | 57 +++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 core-java/src/test/java/com/baeldung/concurrent/priorityblockingqueue/PriorityBlockingQueueUnitTest.java diff --git a/core-java/src/test/java/com/baeldung/concurrent/priorityblockingqueue/PriorityBlockingQueueUnitTest.java b/core-java/src/test/java/com/baeldung/concurrent/priorityblockingqueue/PriorityBlockingQueueUnitTest.java new file mode 100644 index 0000000000..f417b6b1a8 --- /dev/null +++ b/core-java/src/test/java/com/baeldung/concurrent/priorityblockingqueue/PriorityBlockingQueueUnitTest.java @@ -0,0 +1,57 @@ +package com.baeldung.concurrent.priorityblockingqueue; + +import org.assertj.core.api.Assertions; +import org.junit.Test; + +import java.util.ArrayList; +import java.util.concurrent.PriorityBlockingQueue; +import java.util.concurrent.TimeUnit; +import java.util.stream.IntStream; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.util.Lists.newArrayList; + +public class PriorityBlockingQueueUnitTest { + + @Test + public void shouldOrderQueue_whenPolling() throws InterruptedException { + PriorityBlockingQueue queue = new PriorityBlockingQueue<>(); + ArrayList polledElements = new ArrayList<>(); + + queue.add(1); + queue.add(5); + queue.add(2); + queue.add(3); + queue.add(4); + + polledElements.add(queue.poll()); + polledElements.add(queue.poll()); + polledElements.add(queue.poll()); + polledElements.add(queue.poll()); + polledElements.add(queue.poll()); + + assertThat(polledElements).containsExactly(1, 2, 3, 4, 5); + } + + @Test + public void shouldBlockThread_WhenPollingEmptyQueue() throws InterruptedException { + PriorityBlockingQueue queue = new PriorityBlockingQueue<>(); + + final Thread thread = new Thread(() -> { + System.out.println("Polling..."); + while (true) { + try { + Integer poll = queue.take(); + System.out.println("Polled: " + poll); + } catch (InterruptedException e) {} + } + }); + thread.start(); + + Thread.sleep(TimeUnit.SECONDS.toMillis(5)); + System.out.println("Adding to queue"); + + queue.addAll(newArrayList(1, 5, 6, 1, 2, 6, 7)); + Thread.sleep(TimeUnit.SECONDS.toMillis(1)); + } +} From b9c4496a711b53dab540873d05143a326880be8b Mon Sep 17 00:00:00 2001 From: pivovarit Date: Fri, 3 Feb 2017 07:46:29 +0100 Subject: [PATCH 06/18] Refactor JExcelHelper --- .../java/com/baeldung/excel/JExcelHelper.java | 22 ++++++++++--------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/spring-mvc-java/src/main/java/com/baeldung/excel/JExcelHelper.java b/spring-mvc-java/src/main/java/com/baeldung/excel/JExcelHelper.java index eb65987e8b..d0e33bf471 100644 --- a/spring-mvc-java/src/main/java/com/baeldung/excel/JExcelHelper.java +++ b/spring-mvc-java/src/main/java/com/baeldung/excel/JExcelHelper.java @@ -1,22 +1,24 @@ package com.baeldung.excel; -import jxl.*; -import java.util.Map; -import java.util.HashMap; -import java.util.ArrayList; +import jxl.Sheet; +import jxl.Workbook; +import jxl.format.Colour; import jxl.read.biff.BiffException; -import java.io.File; -import java.io.IOException; -import org.springframework.stereotype.Service; import jxl.write.*; import jxl.write.Number; -import jxl.format.Colour; +import org.springframework.stereotype.Service; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; @Service public class JExcelHelper { public Map> readJExcel(String fileLocation) throws IOException, BiffException { - Map> data = new HashMap>(); + Map> data = new HashMap<>(); Workbook workbook = Workbook.getWorkbook(new File(fileLocation)); Sheet sheet = workbook.getSheet(0); @@ -24,7 +26,7 @@ public class JExcelHelper { int columns = sheet.getColumns(); for (int i = 0; i < rows; i++) { - data.put(i, new ArrayList()); + data.put(i, new ArrayList<>()); for (int j = 0; j < columns; j++) { data.get(i).add(sheet.getCell(j, i).getContents()); } From 2dcc2311c5775b388cd7a01e55b8b53024ae218f Mon Sep 17 00:00:00 2001 From: Pedja Date: Fri, 3 Feb 2017 17:37:54 +0100 Subject: [PATCH 07/18] BAEL-572 BackPressure -> Backpressure; code reformatted; included rxjava in parent pom --- pom.xml | 1 + .../rxjava/ColdObservableBackpressure.java | 56 +++++++++---------- .../com/baelding/rxjava/ComputeFunction.java | 2 - ...=> HotObservableBackpressureBatching.java} | 7 +-- ...> HotObservableBackpressureBuffering.java} | 9 +-- ...=> HotObservableBackpressureSkipping.java} | 8 +-- .../rxjava/HotObservableOnBackPressure.java | 28 ---------- .../rxjava/HotObservableOnBackpressure.java | 18 ++++++ ... => HotObservableWithoutBackpressure.java} | 2 +- 9 files changed, 52 insertions(+), 79 deletions(-) rename rxjava/src/main/java/com/baelding/rxjava/{HotObservableBackPressureBatching.java => HotObservableBackpressureBatching.java} (63%) rename rxjava/src/main/java/com/baelding/rxjava/{HotObservableBackPressureBuffering.java => HotObservableBackpressureBuffering.java} (61%) rename rxjava/src/main/java/com/baelding/rxjava/{HotObservableBackPressureSkipping.java => HotObservableBackpressureSkipping.java} (65%) delete mode 100644 rxjava/src/main/java/com/baelding/rxjava/HotObservableOnBackPressure.java create mode 100644 rxjava/src/main/java/com/baelding/rxjava/HotObservableOnBackpressure.java rename rxjava/src/main/java/com/baelding/rxjava/{HotObservableWithoutBackPressure.java => HotObservableWithoutBackpressure.java} (91%) diff --git a/pom.xml b/pom.xml index 06feb5e4f5..41235dcc26 100644 --- a/pom.xml +++ b/pom.xml @@ -94,6 +94,7 @@ rest-assured rest-testing resteasy + rxjava selenium-junit-testng solr-fulltext-search diff --git a/rxjava/src/main/java/com/baelding/rxjava/ColdObservableBackpressure.java b/rxjava/src/main/java/com/baelding/rxjava/ColdObservableBackpressure.java index cebc2d35f6..9855123a3b 100644 --- a/rxjava/src/main/java/com/baelding/rxjava/ColdObservableBackpressure.java +++ b/rxjava/src/main/java/com/baelding/rxjava/ColdObservableBackpressure.java @@ -1,44 +1,38 @@ package com.baelding.rxjava; - import rx.Observable; -import rx.Subscriber; import rx.schedulers.Schedulers; -public class ColdObservableBackPressure { +public class ColdObservableBackpressure { public static void main(String[] args) throws InterruptedException { - Observable.range(1, 1_000_000) - .observeOn(Schedulers.computation()) - .subscribe(v -> ComputeFunction.compute(v), Throwable::printStackTrace); + Observable.range(1, 1_000_000).observeOn(Schedulers.computation()).subscribe(v -> ComputeFunction.compute(v), Throwable::printStackTrace); Thread.sleep(10_000); - -// Observable.range(1, 1_000_000) //implementation of reactive pull backpressure on cold observable -// .subscribe(new Subscriber() { -// @Override -// public void onStart() { -// request(1); -// } -// -// public void onNext(Integer v) { -// compute(v); -// -// request(1); -// } -// -// @Override -// public void onError(Throwable ex) { -// ex.printStackTrace(); -// } -// -// @Override -// public void onCompleted() { -// System.out.println("Done!"); -// } -// }); + // Observable.range(1, 1_000_000) //implementation of reactive pull backpressure on cold observable + // .subscribe(new Subscriber() { + // @Override + // public void onStart() { + // request(1); + // } + // + // public void onNext(Integer v) { + // compute(v); + // + // request(1); + // } + // + // @Override + // public void onError(Throwable ex) { + // ex.printStackTrace(); + // } + // + // @Override + // public void onCompleted() { + // System.out.println("Done!"); + // } + // }); } - } diff --git a/rxjava/src/main/java/com/baelding/rxjava/ComputeFunction.java b/rxjava/src/main/java/com/baelding/rxjava/ComputeFunction.java index bebccd0300..924862ab37 100644 --- a/rxjava/src/main/java/com/baelding/rxjava/ComputeFunction.java +++ b/rxjava/src/main/java/com/baelding/rxjava/ComputeFunction.java @@ -1,6 +1,5 @@ package com.baelding.rxjava; - import rx.Observable; import java.util.List; @@ -33,7 +32,6 @@ public class ComputeFunction { } } - public static void compute(Long v) { try { System.out.println("compute integer v: " + v); diff --git a/rxjava/src/main/java/com/baelding/rxjava/HotObservableBackPressureBatching.java b/rxjava/src/main/java/com/baelding/rxjava/HotObservableBackpressureBatching.java similarity index 63% rename from rxjava/src/main/java/com/baelding/rxjava/HotObservableBackPressureBatching.java rename to rxjava/src/main/java/com/baelding/rxjava/HotObservableBackpressureBatching.java index c13f94c4f7..6acda7eaad 100644 --- a/rxjava/src/main/java/com/baelding/rxjava/HotObservableBackPressureBatching.java +++ b/rxjava/src/main/java/com/baelding/rxjava/HotObservableBackpressureBatching.java @@ -3,14 +3,11 @@ package com.baelding.rxjava; import rx.schedulers.Schedulers; import rx.subjects.PublishSubject; -public class HotObservableBackPressureBatching { +public class HotObservableBackpressureBatching { public static void main(String[] args) throws InterruptedException { PublishSubject source = PublishSubject.create(); - source.window(500) - .observeOn(Schedulers.computation()) - .subscribe(ComputeFunction::compute, Throwable::printStackTrace); - + source.window(500).observeOn(Schedulers.computation()).subscribe(ComputeFunction::compute, Throwable::printStackTrace); for (int i = 0; i < 1_000_000; i++) { source.onNext(i); diff --git a/rxjava/src/main/java/com/baelding/rxjava/HotObservableBackPressureBuffering.java b/rxjava/src/main/java/com/baelding/rxjava/HotObservableBackpressureBuffering.java similarity index 61% rename from rxjava/src/main/java/com/baelding/rxjava/HotObservableBackPressureBuffering.java rename to rxjava/src/main/java/com/baelding/rxjava/HotObservableBackpressureBuffering.java index 67922e2efb..50638f4c8a 100644 --- a/rxjava/src/main/java/com/baelding/rxjava/HotObservableBackPressureBuffering.java +++ b/rxjava/src/main/java/com/baelding/rxjava/HotObservableBackpressureBuffering.java @@ -3,16 +3,11 @@ package com.baelding.rxjava; import rx.schedulers.Schedulers; import rx.subjects.PublishSubject; - -public class HotObservableBackPressureBuffering { +public class HotObservableBackpressureBuffering { public static void main(String[] args) throws InterruptedException { PublishSubject source = PublishSubject.create(); - source - .buffer(1024) - .observeOn(Schedulers.computation()) - .subscribe(ComputeFunction::compute, Throwable::printStackTrace); - + source.buffer(1024).observeOn(Schedulers.computation()).subscribe(ComputeFunction::compute, Throwable::printStackTrace); for (int i = 0; i < 1_000_000; i++) { source.onNext(i); diff --git a/rxjava/src/main/java/com/baelding/rxjava/HotObservableBackPressureSkipping.java b/rxjava/src/main/java/com/baelding/rxjava/HotObservableBackpressureSkipping.java similarity index 65% rename from rxjava/src/main/java/com/baelding/rxjava/HotObservableBackPressureSkipping.java rename to rxjava/src/main/java/com/baelding/rxjava/HotObservableBackpressureSkipping.java index 2e8244166f..f6f8b9f563 100644 --- a/rxjava/src/main/java/com/baelding/rxjava/HotObservableBackPressureSkipping.java +++ b/rxjava/src/main/java/com/baelding/rxjava/HotObservableBackpressureSkipping.java @@ -5,15 +5,13 @@ import rx.subjects.PublishSubject; import java.util.concurrent.TimeUnit; -public class HotObservableBackPressureSkipping { +public class HotObservableBackpressureSkipping { public static void main(String[] args) throws InterruptedException { PublishSubject source = PublishSubject.create(); source.sample(100, TimeUnit.MILLISECONDS) -// .throttleFirst(100, TimeUnit.MILLISECONDS) - .observeOn(Schedulers.computation()) - .subscribe(ComputeFunction::compute, Throwable::printStackTrace); - + // .throttleFirst(100, TimeUnit.MILLISECONDS) + .observeOn(Schedulers.computation()).subscribe(ComputeFunction::compute, Throwable::printStackTrace); for (int i = 0; i < 1_000_000; i++) { source.onNext(i); diff --git a/rxjava/src/main/java/com/baelding/rxjava/HotObservableOnBackPressure.java b/rxjava/src/main/java/com/baelding/rxjava/HotObservableOnBackPressure.java deleted file mode 100644 index bf86312fff..0000000000 --- a/rxjava/src/main/java/com/baelding/rxjava/HotObservableOnBackPressure.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.baelding.rxjava; - - -import rx.BackpressureOverflow; -import rx.Observable; -import rx.schedulers.Schedulers; - -public class HotObservableOnBackPressure { - public static void main(String[] args) throws InterruptedException { - Observable.range(1, 1_000_000) - .onBackpressureBuffer(16, () -> { - }, - BackpressureOverflow.ON_OVERFLOW_DROP_OLDEST) - .observeOn(Schedulers.computation()) - .subscribe(e -> { - }, Throwable::printStackTrace); - - - Observable.range(1, 1_000_000) - .onBackpressureDrop() - .observeOn(Schedulers.io()) - .doOnNext(ComputeFunction::compute) - .subscribe(v -> { - }, Throwable::printStackTrace); - Thread.sleep(10_000); - - } -} diff --git a/rxjava/src/main/java/com/baelding/rxjava/HotObservableOnBackpressure.java b/rxjava/src/main/java/com/baelding/rxjava/HotObservableOnBackpressure.java new file mode 100644 index 0000000000..afef8027bf --- /dev/null +++ b/rxjava/src/main/java/com/baelding/rxjava/HotObservableOnBackpressure.java @@ -0,0 +1,18 @@ +package com.baelding.rxjava; + +import rx.BackpressureOverflow; +import rx.Observable; +import rx.schedulers.Schedulers; + +public class HotObservableOnBackpressure { + public static void main(String[] args) throws InterruptedException { + Observable.range(1, 1_000_000).onBackpressureBuffer(16, () -> { + }, BackpressureOverflow.ON_OVERFLOW_DROP_OLDEST).observeOn(Schedulers.computation()).subscribe(e -> { + }, Throwable::printStackTrace); + + Observable.range(1, 1_000_000).onBackpressureDrop().observeOn(Schedulers.io()).doOnNext(ComputeFunction::compute).subscribe(v -> { + }, Throwable::printStackTrace); + Thread.sleep(10_000); + + } +} diff --git a/rxjava/src/main/java/com/baelding/rxjava/HotObservableWithoutBackPressure.java b/rxjava/src/main/java/com/baelding/rxjava/HotObservableWithoutBackpressure.java similarity index 91% rename from rxjava/src/main/java/com/baelding/rxjava/HotObservableWithoutBackPressure.java rename to rxjava/src/main/java/com/baelding/rxjava/HotObservableWithoutBackpressure.java index 07ff5b42c0..7745dbe5c4 100644 --- a/rxjava/src/main/java/com/baelding/rxjava/HotObservableWithoutBackPressure.java +++ b/rxjava/src/main/java/com/baelding/rxjava/HotObservableWithoutBackpressure.java @@ -4,7 +4,7 @@ package com.baelding.rxjava; import rx.schedulers.Schedulers; import rx.subjects.PublishSubject; -public class HotObservableWithoutBackPressure { +public class HotObservableWithoutBackpressure { public static void main(String[] args) throws InterruptedException { PublishSubject source = PublishSubject.create(); From cd921fe6d330ed3125efe995ad3c258ee96b3693 Mon Sep 17 00:00:00 2001 From: Chima Ejiofor Date: Fri, 3 Feb 2017 23:50:52 +0100 Subject: [PATCH 08/18] Fixed Unit Test for hibernate one to many --- .../HibernateOneToManyAnnotationMainTest.java | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/spring-hibernate4/src/test/java/com/baeldung/hibernate/oneToMany/main/HibernateOneToManyAnnotationMainTest.java b/spring-hibernate4/src/test/java/com/baeldung/hibernate/oneToMany/main/HibernateOneToManyAnnotationMainTest.java index 539298ae1e..742bb2b470 100644 --- a/spring-hibernate4/src/test/java/com/baeldung/hibernate/oneToMany/main/HibernateOneToManyAnnotationMainTest.java +++ b/spring-hibernate4/src/test/java/com/baeldung/hibernate/oneToMany/main/HibernateOneToManyAnnotationMainTest.java @@ -18,8 +18,10 @@ import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import static org.junit.Assert.*; +import org.junit.runner.RunWith; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; - +//@RunWith(SpringJUnit4ClassRunner.class) public class HibernateOneToManyAnnotationMainTest { private static SessionFactory sessionFactory; @@ -45,6 +47,15 @@ public class HibernateOneToManyAnnotationMainTest { } + @Test + public void givenSession_checkIfDatabaseIsEmpty(){ + Cart cart = (Cart) session.get(Cart.class, new Long(1)); + assertNull(cart); + + } + + + @Test @@ -63,7 +74,7 @@ public class HibernateOneToManyAnnotationMainTest { } @Test - public void testSaveCart(){ + public void givenSession_checkIfDatabaseIsPopulated_afterCommit(){ Cart cart = new Cart(); Set cartItems = new HashSet<>(); cartItems = cart.getItems(); @@ -81,6 +92,8 @@ public class HibernateOneToManyAnnotationMainTest { assertNotNull(cart); session.persist(cart); session.getTransaction().commit(); + cart = (Cart) session.get(Cart.class, new Long(1)); + assertNotNull(cart); session.close(); } From 318aeb7aa38d310b61745a74e35aa2cd33de6358 Mon Sep 17 00:00:00 2001 From: Predrag Maric Date: Fri, 3 Feb 2017 23:59:34 +0100 Subject: [PATCH 09/18] BAEL-616 Renamed tests --- .../priorityblockingqueue/PriorityBlockingQueueUnitTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core-java/src/test/java/com/baeldung/concurrent/priorityblockingqueue/PriorityBlockingQueueUnitTest.java b/core-java/src/test/java/com/baeldung/concurrent/priorityblockingqueue/PriorityBlockingQueueUnitTest.java index f417b6b1a8..063e07d859 100644 --- a/core-java/src/test/java/com/baeldung/concurrent/priorityblockingqueue/PriorityBlockingQueueUnitTest.java +++ b/core-java/src/test/java/com/baeldung/concurrent/priorityblockingqueue/PriorityBlockingQueueUnitTest.java @@ -14,7 +14,7 @@ import static org.assertj.core.util.Lists.newArrayList; public class PriorityBlockingQueueUnitTest { @Test - public void shouldOrderQueue_whenPolling() throws InterruptedException { + public void givenUnorderedValues_whenPolling_thenShouldOrderQueue() throws InterruptedException { PriorityBlockingQueue queue = new PriorityBlockingQueue<>(); ArrayList polledElements = new ArrayList<>(); @@ -34,7 +34,7 @@ public class PriorityBlockingQueueUnitTest { } @Test - public void shouldBlockThread_WhenPollingEmptyQueue() throws InterruptedException { + public void whenPollingEmptyQueue_thenShouldBlockThread() throws InterruptedException { PriorityBlockingQueue queue = new PriorityBlockingQueue<>(); final Thread thread = new Thread(() -> { From 896a193fb0baa5baf56fa35b83d38ede8445ba9b Mon Sep 17 00:00:00 2001 From: adamd1985 Date: Sat, 4 Feb 2017 00:25:07 +0100 Subject: [PATCH 10/18] Pr/1089 (#1100) * String to char array and char array to String. * Method change * Custom ThreadPool In Java 8 Parallel Streams * Implemented suggested edits from editor. * Broke long method signature * Changed primitive type int to long and formula. * Update wrapper type to Long * Added "Test" suffix to test class name. --- ...nParallelStream.java => ThreadPoolInParallelStreamTest.java} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename core-java/src/test/java/org/baeldung/java/streams/{ThreadPoolInParallelStream.java => ThreadPoolInParallelStreamTest.java} (93%) diff --git a/core-java/src/test/java/org/baeldung/java/streams/ThreadPoolInParallelStream.java b/core-java/src/test/java/org/baeldung/java/streams/ThreadPoolInParallelStreamTest.java similarity index 93% rename from core-java/src/test/java/org/baeldung/java/streams/ThreadPoolInParallelStream.java rename to core-java/src/test/java/org/baeldung/java/streams/ThreadPoolInParallelStreamTest.java index b8c0991b8d..5fd3fa4cb0 100644 --- a/core-java/src/test/java/org/baeldung/java/streams/ThreadPoolInParallelStream.java +++ b/core-java/src/test/java/org/baeldung/java/streams/ThreadPoolInParallelStreamTest.java @@ -13,7 +13,7 @@ import java.util.stream.Stream; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; -public class ThreadPoolInParallelStream { +public class ThreadPoolInParallelStreamTest { @Test public void giveRangeOfLongs_whenSummedInParallel_shouldBeEqualToExpectedTotal() From 4d5624161f46863203cad5486a15fe20d80f3d7c Mon Sep 17 00:00:00 2001 From: pivovarit Date: Sat, 4 Feb 2017 06:15:54 +0100 Subject: [PATCH 11/18] Refactor Spring with Lombok samples --- .../lombok/{Apologizer.java => ApologizeService.java} | 4 ++-- .../lombok/{Fareweller.java => FarewellService.java} | 4 ++-- .../lombok/{Greeter.java => GreetingService.java} | 2 +- .../lombok/{Thanker.java => ThankingService.java} | 3 +-- ...ngTest.java => ApologizeServiceAutowiringTest.java} | 6 +++--- .../{ApologizerTest.java => ApologizeServiceTest.java} | 6 +++--- .../com/baeldung/lombok/FarewellAutowiringTest.java | 4 ++-- .../{FarewellerTest.java => FarewellServiceTest.java} | 6 +++--- .../{GreeterTest.java => GreetingServiceTest.java} | 10 +++++----- ...ingTest.java => ThankingServiceAutowiringTest.java} | 6 +++--- .../{ThankerTest.java => ThankingServiceTest.java} | 6 +++--- 11 files changed, 28 insertions(+), 29 deletions(-) rename spring-core/src/main/java/com/baeldung/lombok/{Apologizer.java => ApologizeService.java} (83%) rename spring-core/src/main/java/com/baeldung/lombok/{Fareweller.java => FarewellService.java} (79%) rename spring-core/src/main/java/com/baeldung/lombok/{Greeter.java => GreetingService.java} (90%) rename spring-core/src/main/java/com/baeldung/lombok/{Thanker.java => ThankingService.java} (76%) rename spring-core/src/test/java/com/baeldung/lombok/{ApologizerAutowiringTest.java => ApologizeServiceAutowiringTest.java} (84%) rename spring-core/src/test/java/com/baeldung/lombok/{ApologizerTest.java => ApologizeServiceTest.java} (72%) rename spring-core/src/test/java/com/baeldung/lombok/{FarewellerTest.java => FarewellServiceTest.java} (70%) rename spring-core/src/test/java/com/baeldung/lombok/{GreeterTest.java => GreetingServiceTest.java} (79%) rename spring-core/src/test/java/com/baeldung/lombok/{ThankerAutowiringTest.java => ThankingServiceAutowiringTest.java} (84%) rename spring-core/src/test/java/com/baeldung/lombok/{ThankerTest.java => ThankingServiceTest.java} (71%) diff --git a/spring-core/src/main/java/com/baeldung/lombok/Apologizer.java b/spring-core/src/main/java/com/baeldung/lombok/ApologizeService.java similarity index 83% rename from spring-core/src/main/java/com/baeldung/lombok/Apologizer.java rename to spring-core/src/main/java/com/baeldung/lombok/ApologizeService.java index ddce9cdc52..25ef65cad2 100644 --- a/spring-core/src/main/java/com/baeldung/lombok/Apologizer.java +++ b/spring-core/src/main/java/com/baeldung/lombok/ApologizeService.java @@ -6,13 +6,13 @@ import org.springframework.stereotype.Component; @Component @AllArgsConstructor -public class Apologizer { +public class ApologizeService { private final Translator translator; private final String message; @Autowired - public Apologizer(Translator translator) { + public ApologizeService(Translator translator) { this(translator, "sorry"); } diff --git a/spring-core/src/main/java/com/baeldung/lombok/Fareweller.java b/spring-core/src/main/java/com/baeldung/lombok/FarewellService.java similarity index 79% rename from spring-core/src/main/java/com/baeldung/lombok/Fareweller.java rename to spring-core/src/main/java/com/baeldung/lombok/FarewellService.java index b10ebb72b9..4e8c4993cb 100644 --- a/spring-core/src/main/java/com/baeldung/lombok/Fareweller.java +++ b/spring-core/src/main/java/com/baeldung/lombok/FarewellService.java @@ -4,11 +4,11 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @Component -public class Fareweller { +public class FarewellService { private final Translator translator; - public Fareweller(Translator translator) { + public FarewellService(Translator translator) { this.translator = translator; } diff --git a/spring-core/src/main/java/com/baeldung/lombok/Greeter.java b/spring-core/src/main/java/com/baeldung/lombok/GreetingService.java similarity index 90% rename from spring-core/src/main/java/com/baeldung/lombok/Greeter.java rename to spring-core/src/main/java/com/baeldung/lombok/GreetingService.java index ddbc024ce7..0e03e177e1 100644 --- a/spring-core/src/main/java/com/baeldung/lombok/Greeter.java +++ b/spring-core/src/main/java/com/baeldung/lombok/GreetingService.java @@ -4,7 +4,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @Component -public class Greeter { +public class GreetingService { @Autowired private Translator translator; diff --git a/spring-core/src/main/java/com/baeldung/lombok/Thanker.java b/spring-core/src/main/java/com/baeldung/lombok/ThankingService.java similarity index 76% rename from spring-core/src/main/java/com/baeldung/lombok/Thanker.java rename to spring-core/src/main/java/com/baeldung/lombok/ThankingService.java index 784100c258..f3bdf8bb7f 100644 --- a/spring-core/src/main/java/com/baeldung/lombok/Thanker.java +++ b/spring-core/src/main/java/com/baeldung/lombok/ThankingService.java @@ -1,12 +1,11 @@ package com.baeldung.lombok; import lombok.AllArgsConstructor; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @Component @AllArgsConstructor -public class Thanker { +public class ThankingService { private final Translator translator; diff --git a/spring-core/src/test/java/com/baeldung/lombok/ApologizerAutowiringTest.java b/spring-core/src/test/java/com/baeldung/lombok/ApologizeServiceAutowiringTest.java similarity index 84% rename from spring-core/src/test/java/com/baeldung/lombok/ApologizerAutowiringTest.java rename to spring-core/src/test/java/com/baeldung/lombok/ApologizeServiceAutowiringTest.java index 3e7c775f91..755fc5868b 100644 --- a/spring-core/src/test/java/com/baeldung/lombok/ApologizerAutowiringTest.java +++ b/spring-core/src/test/java/com/baeldung/lombok/ApologizeServiceAutowiringTest.java @@ -14,12 +14,12 @@ import static org.mockito.Mockito.when; @ContextConfiguration( loader = AnnotationConfigContextLoader.class, classes = TestConfig.class) -public class ApologizerAutowiringTest { +public class ApologizeServiceAutowiringTest { private final static String TRANSLATED = "TRANSLATED"; @Autowired - private Apologizer apologizer; + private ApologizeService apologizeService; @Autowired private Translator translator; @@ -27,7 +27,7 @@ public class ApologizerAutowiringTest { @Test public void apologizeWithTranslatedMessage() { when(translator.translate("sorry")).thenReturn(TRANSLATED); - assertEquals(TRANSLATED, apologizer.apologize()); + assertEquals(TRANSLATED, apologizeService.apologize()); } } \ No newline at end of file diff --git a/spring-core/src/test/java/com/baeldung/lombok/ApologizerTest.java b/spring-core/src/test/java/com/baeldung/lombok/ApologizeServiceTest.java similarity index 72% rename from spring-core/src/test/java/com/baeldung/lombok/ApologizerTest.java rename to spring-core/src/test/java/com/baeldung/lombok/ApologizeServiceTest.java index 28bd08c89f..ab545e7adf 100644 --- a/spring-core/src/test/java/com/baeldung/lombok/ApologizerTest.java +++ b/spring-core/src/test/java/com/baeldung/lombok/ApologizeServiceTest.java @@ -6,7 +6,7 @@ import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; -public class ApologizerTest { +public class ApologizeServiceTest { private final static String MESSAGE = "MESSAGE"; private final static String TRANSLATED = "TRANSLATED"; @@ -14,8 +14,8 @@ public class ApologizerTest { @Test public void apologizeWithCustomTranslatedMessage() { Translator translator = mock(Translator.class); - Apologizer apologizer = new Apologizer(translator, MESSAGE); + ApologizeService apologizeService = new ApologizeService(translator, MESSAGE); when(translator.translate(MESSAGE)).thenReturn(TRANSLATED); - assertEquals(TRANSLATED, apologizer.apologize()); + assertEquals(TRANSLATED, apologizeService.apologize()); } } diff --git a/spring-core/src/test/java/com/baeldung/lombok/FarewellAutowiringTest.java b/spring-core/src/test/java/com/baeldung/lombok/FarewellAutowiringTest.java index d55d44fb3e..592e309236 100644 --- a/spring-core/src/test/java/com/baeldung/lombok/FarewellAutowiringTest.java +++ b/spring-core/src/test/java/com/baeldung/lombok/FarewellAutowiringTest.java @@ -17,7 +17,7 @@ import static org.mockito.Mockito.when; public class FarewellAutowiringTest { @Autowired - private Fareweller fareweller; + private FarewellService farewellService; @Autowired private Translator translator; @@ -26,6 +26,6 @@ public class FarewellAutowiringTest { public void sayByeWithTranslatedMessage() { String translated = "translated"; when(translator.translate("bye")).thenReturn(translated); - assertEquals(translated, fareweller.farewell()); + assertEquals(translated, farewellService.farewell()); } } diff --git a/spring-core/src/test/java/com/baeldung/lombok/FarewellerTest.java b/spring-core/src/test/java/com/baeldung/lombok/FarewellServiceTest.java similarity index 70% rename from spring-core/src/test/java/com/baeldung/lombok/FarewellerTest.java rename to spring-core/src/test/java/com/baeldung/lombok/FarewellServiceTest.java index a02ad1d8ac..9ad593a489 100644 --- a/spring-core/src/test/java/com/baeldung/lombok/FarewellerTest.java +++ b/spring-core/src/test/java/com/baeldung/lombok/FarewellServiceTest.java @@ -6,7 +6,7 @@ import static org.junit.Assert.*; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; -public class FarewellerTest { +public class FarewellServiceTest { private final static String TRANSLATED = "TRANSLATED"; @@ -14,7 +14,7 @@ public class FarewellerTest { public void sayByeWithTranslatedMessage() { Translator translator = mock(Translator.class); when(translator.translate("bye")).thenReturn(TRANSLATED); - Fareweller fareweller = new Fareweller(translator); - assertEquals(TRANSLATED, fareweller.farewell()); + FarewellService farewellService = new FarewellService(translator); + assertEquals(TRANSLATED, farewellService.farewell()); } } \ No newline at end of file diff --git a/spring-core/src/test/java/com/baeldung/lombok/GreeterTest.java b/spring-core/src/test/java/com/baeldung/lombok/GreetingServiceTest.java similarity index 79% rename from spring-core/src/test/java/com/baeldung/lombok/GreeterTest.java rename to spring-core/src/test/java/com/baeldung/lombok/GreetingServiceTest.java index 0f66eaf301..d0207d681b 100644 --- a/spring-core/src/test/java/com/baeldung/lombok/GreeterTest.java +++ b/spring-core/src/test/java/com/baeldung/lombok/GreetingServiceTest.java @@ -14,10 +14,10 @@ import static org.mockito.Mockito.when; @ContextConfiguration( loader = AnnotationConfigContextLoader.class, classes = TestConfig.class) -public class GreeterTest { +public class GreetingServiceTest { @Autowired - private Greeter greeter; + private GreetingService greetingService; @Autowired private Translator translator; @@ -26,12 +26,12 @@ public class GreeterTest { public void greetWithTranslatedMessage() { String translated = "translated"; when(translator.translate("hello")).thenReturn(translated); - assertEquals(translated, greeter.greet()); + assertEquals(translated, greetingService.greet()); } @Test(expected = NullPointerException.class) public void throwWhenInstantiated() { - Greeter greeter = new Greeter(); - greeter.greet(); + GreetingService greetingService = new GreetingService(); + greetingService.greet(); } } \ No newline at end of file diff --git a/spring-core/src/test/java/com/baeldung/lombok/ThankerAutowiringTest.java b/spring-core/src/test/java/com/baeldung/lombok/ThankingServiceAutowiringTest.java similarity index 84% rename from spring-core/src/test/java/com/baeldung/lombok/ThankerAutowiringTest.java rename to spring-core/src/test/java/com/baeldung/lombok/ThankingServiceAutowiringTest.java index 59aded5831..b2a338b18f 100644 --- a/spring-core/src/test/java/com/baeldung/lombok/ThankerAutowiringTest.java +++ b/spring-core/src/test/java/com/baeldung/lombok/ThankingServiceAutowiringTest.java @@ -14,10 +14,10 @@ import static org.mockito.Mockito.when; @ContextConfiguration( loader = AnnotationConfigContextLoader.class, classes = TestConfig.class) -public class ThankerAutowiringTest { +public class ThankingServiceAutowiringTest { @Autowired - private Thanker thanker; + private ThankingService thankingService; @Autowired private Translator translator; @@ -26,6 +26,6 @@ public class ThankerAutowiringTest { public void thankWithTranslatedMessage() { String translated = "translated"; when(translator.translate("thank you")).thenReturn(translated); - assertEquals(translated, thanker.thank()); + assertEquals(translated, thankingService.thank()); } } \ No newline at end of file diff --git a/spring-core/src/test/java/com/baeldung/lombok/ThankerTest.java b/spring-core/src/test/java/com/baeldung/lombok/ThankingServiceTest.java similarity index 71% rename from spring-core/src/test/java/com/baeldung/lombok/ThankerTest.java rename to spring-core/src/test/java/com/baeldung/lombok/ThankingServiceTest.java index 466762fa50..7dc663622b 100644 --- a/spring-core/src/test/java/com/baeldung/lombok/ThankerTest.java +++ b/spring-core/src/test/java/com/baeldung/lombok/ThankingServiceTest.java @@ -6,7 +6,7 @@ import static org.junit.Assert.*; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; -public class ThankerTest { +public class ThankingServiceTest { private final static String TRANSLATED = "TRANSLATED"; @@ -14,7 +14,7 @@ public class ThankerTest { public void thankWithTranslatedMessage() { Translator translator = mock(Translator.class); when(translator.translate("thank you")).thenReturn(TRANSLATED); - Thanker thanker = new Thanker(translator); - assertEquals(TRANSLATED, thanker.thank()); + ThankingService thankingService = new ThankingService(translator); + assertEquals(TRANSLATED, thankingService.thank()); } } \ No newline at end of file From bd6fe7269e19db914d2ef0b7dbfc8899d5ba38b7 Mon Sep 17 00:00:00 2001 From: eugenp Date: Sat, 4 Feb 2017 14:14:23 +0200 Subject: [PATCH 12/18] minor cleanup work - formatting --- .../config/HibernateAnnotationUtil.java | 35 +++-- .../HibernateOneToManyAnnotationMain.java | 85 ++++++------ .../hibernate/oneToMany/model/Cart.java | 87 ++++++------ .../hibernate/oneToMany/model/Items.java | 129 ++++++++++-------- .../HibernateOneToManyAnnotationMainTest.java | 93 ++++++------- 5 files changed, 221 insertions(+), 208 deletions(-) diff --git a/spring-hibernate4/src/main/java/com/baeldung/hibernate/oneToMany/config/HibernateAnnotationUtil.java b/spring-hibernate4/src/main/java/com/baeldung/hibernate/oneToMany/config/HibernateAnnotationUtil.java index ba54985853..e522dab48d 100644 --- a/spring-hibernate4/src/main/java/com/baeldung/hibernate/oneToMany/config/HibernateAnnotationUtil.java +++ b/spring-hibernate4/src/main/java/com/baeldung/hibernate/oneToMany/config/HibernateAnnotationUtil.java @@ -7,32 +7,31 @@ import org.hibernate.service.ServiceRegistry; public class HibernateAnnotationUtil { - private static SessionFactory sessionFactory; - - private static SessionFactory buildSessionFactory() { + private static SessionFactory sessionFactory; + + private static SessionFactory buildSessionFactory() { try { // Create the SessionFactory from hibernate-annotation.cfg.xml - Configuration configuration = new Configuration(); - configuration.configure("hibernate-annotation.cfg.xml"); - System.out.println("Hibernate Annotation Configuration loaded"); - - ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build(); - System.out.println("Hibernate Annotation serviceRegistry created"); - - SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry); - - + Configuration configuration = new Configuration(); + configuration.configure("hibernate-annotation.cfg.xml"); + System.out.println("Hibernate Annotation Configuration loaded"); + + ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build(); + System.out.println("Hibernate Annotation serviceRegistry created"); + + SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry); + return sessionFactory; - } - catch (Throwable ex) { + } catch (Throwable ex) { System.err.println("Initial SessionFactory creation failed." + ex); ex.printStackTrace(); throw new ExceptionInInitializerError(ex); } } - - public static SessionFactory getSessionFactory() { - if(sessionFactory == null) sessionFactory = buildSessionFactory(); + + public static SessionFactory getSessionFactory() { + if (sessionFactory == null) + sessionFactory = buildSessionFactory(); return sessionFactory; } } diff --git a/spring-hibernate4/src/main/java/com/baeldung/hibernate/oneToMany/main/HibernateOneToManyAnnotationMain.java b/spring-hibernate4/src/main/java/com/baeldung/hibernate/oneToMany/main/HibernateOneToManyAnnotationMain.java index d5c41bcfab..63b6450bf4 100644 --- a/spring-hibernate4/src/main/java/com/baeldung/hibernate/oneToMany/main/HibernateOneToManyAnnotationMain.java +++ b/spring-hibernate4/src/main/java/com/baeldung/hibernate/oneToMany/main/HibernateOneToManyAnnotationMain.java @@ -13,48 +13,49 @@ import com.baeldung.hibernate.oneToMany.model.Items; public class HibernateOneToManyAnnotationMain { - public static void main(String[] args) { + public static void main(String[] args) { - Cart cart = new Cart(); - cart.setName("MyCart"); - - Items item1 = new Items("I10", 10, 1, cart); - Items item2 = new Items("I20", 20, 2, cart); - Set itemsSet = new HashSet(); - itemsSet.add(item1); itemsSet.add(item2); - - cart.setItems(itemsSet); - cart.setTotal(10*1 + 20*2); - - SessionFactory sessionFactory = null; - Session session = null; - Transaction tx = null; - try{ - //Get Session - sessionFactory = HibernateAnnotationUtil.getSessionFactory(); - session = sessionFactory.getCurrentSession(); - System.out.println("Session created"); - //start transaction - tx = session.beginTransaction(); - //Save the Model object - session.save(cart); - session.save(item1); - session.save(item2); - //Commit transaction - tx.commit(); - System.out.println("Cart ID="+cart.getId()); - System.out.println("item1 ID="+item1.getId()+", Foreign Key Cart ID="+item1.getCart().getId()); - System.out.println("item2 ID="+item2.getId()+", Foreign Key Cart ID="+item1.getCart().getId()); - - }catch(Exception e){ - System.out.println("Exception occured. "+e.getMessage()); - e.printStackTrace(); - }finally{ - if(!sessionFactory.isClosed()){ - System.out.println("Closing SessionFactory"); - sessionFactory.close(); - } - } - } + Cart cart = new Cart(); + cart.setName("MyCart"); + + Items item1 = new Items("I10", 10, 1, cart); + Items item2 = new Items("I20", 20, 2, cart); + Set itemsSet = new HashSet(); + itemsSet.add(item1); + itemsSet.add(item2); + + cart.setItems(itemsSet); + cart.setTotal(10 * 1 + 20 * 2); + + SessionFactory sessionFactory = null; + Session session = null; + Transaction tx = null; + try { + // Get Session + sessionFactory = HibernateAnnotationUtil.getSessionFactory(); + session = sessionFactory.getCurrentSession(); + System.out.println("Session created"); + // start transaction + tx = session.beginTransaction(); + // Save the Model object + session.save(cart); + session.save(item1); + session.save(item2); + // Commit transaction + tx.commit(); + System.out.println("Cart ID=" + cart.getId()); + System.out.println("item1 ID=" + item1.getId() + ", Foreign Key Cart ID=" + item1.getCart().getId()); + System.out.println("item2 ID=" + item2.getId() + ", Foreign Key Cart ID=" + item1.getCart().getId()); + + } catch (Exception e) { + System.out.println("Exception occured. " + e.getMessage()); + e.printStackTrace(); + } finally { + if (!sessionFactory.isClosed()) { + System.out.println("Closing SessionFactory"); + sessionFactory.close(); + } + } + } } diff --git a/spring-hibernate4/src/main/java/com/baeldung/hibernate/oneToMany/model/Cart.java b/spring-hibernate4/src/main/java/com/baeldung/hibernate/oneToMany/model/Cart.java index fdbfda2279..61a32ba43f 100644 --- a/spring-hibernate4/src/main/java/com/baeldung/hibernate/oneToMany/model/Cart.java +++ b/spring-hibernate4/src/main/java/com/baeldung/hibernate/oneToMany/model/Cart.java @@ -11,46 +11,53 @@ import javax.persistence.OneToMany; import javax.persistence.Table; @Entity -@Table(name="CART") +@Table(name = "CART") public class Cart { - @Id - @GeneratedValue(strategy=GenerationType.IDENTITY) - @Column(name="cart_id") - private long id; - - @Column(name="total") - private double total; - - @Column(name="name") - private String name; - - @OneToMany(mappedBy="cart") - private Set items; - - public long getId() { - return id; - } - public void setId(long id) { - this.id = id; - } - public double getTotal() { - return total; - } - public void setTotal(double total) { - this.total = total; - } - public String getName() { - return name; - } - public void setName(String name) { - this.name = name; - } - public Set getItems() { - return items; - } - public void setItems(Set items) { - this.items = items; - } - + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "cart_id") + private long id; + + @Column(name = "total") + private double total; + + @Column(name = "name") + private String name; + + @OneToMany(mappedBy = "cart") + private Set items; + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + public double getTotal() { + return total; + } + + public void setTotal(double total) { + this.total = total; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Set getItems() { + return items; + } + + public void setItems(Set items) { + this.items = items; + } + } diff --git a/spring-hibernate4/src/main/java/com/baeldung/hibernate/oneToMany/model/Items.java b/spring-hibernate4/src/main/java/com/baeldung/hibernate/oneToMany/model/Items.java index 630bf0a12e..40ee6fdea1 100644 --- a/spring-hibernate4/src/main/java/com/baeldung/hibernate/oneToMany/model/Items.java +++ b/spring-hibernate4/src/main/java/com/baeldung/hibernate/oneToMany/model/Items.java @@ -10,65 +10,76 @@ import javax.persistence.ManyToOne; import javax.persistence.Table; @Entity -@Table(name="ITEMS") +@Table(name = "ITEMS") public class Items { - @Id - @GeneratedValue(strategy=GenerationType.IDENTITY) - @Column(name="id") - private long id; - - @Column(name="item_id") - private String itemId; - - @Column(name="item_total") - private double itemTotal; - - @Column(name="quantity") - private int quantity; - - @ManyToOne - @JoinColumn(name="cart_id", nullable=false) - private Cart cart; - - //Hibernate requires no-args constructor - public Items(){} - - public Items(String itemId, double total, int qty, Cart c){ - this.itemId=itemId; - this.itemTotal=total; - this.quantity=qty; - this.cart=c; - } - public String getItemId() { - return itemId; - } - public void setItemId(String itemId) { - this.itemId = itemId; - } - public double getItemTotal() { - return itemTotal; - } - public void setItemTotal(double itemTotal) { - this.itemTotal = itemTotal; - } - public int getQuantity() { - return quantity; - } - public void setQuantity(int quantity) { - this.quantity = quantity; - } - public Cart getCart() { - return cart; - } - public void setCart(Cart cart) { - this.cart = cart; - } - public long getId() { - return id; - } - public void setId(long id) { - this.id = id; - } - + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private long id; + + @Column(name = "item_id") + private String itemId; + + @Column(name = "item_total") + private double itemTotal; + + @Column(name = "quantity") + private int quantity; + + @ManyToOne + @JoinColumn(name = "cart_id", nullable = false) + private Cart cart; + + // Hibernate requires no-args constructor + public Items() { + } + + public Items(String itemId, double total, int qty, Cart c) { + this.itemId = itemId; + this.itemTotal = total; + this.quantity = qty; + this.cart = c; + } + + public String getItemId() { + return itemId; + } + + public void setItemId(String itemId) { + this.itemId = itemId; + } + + public double getItemTotal() { + return itemTotal; + } + + public void setItemTotal(double itemTotal) { + this.itemTotal = itemTotal; + } + + public int getQuantity() { + return quantity; + } + + public void setQuantity(int quantity) { + this.quantity = quantity; + } + + public Cart getCart() { + return cart; + } + + public void setCart(Cart cart) { + this.cart = cart; + } + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + } diff --git a/spring-hibernate4/src/test/java/com/baeldung/hibernate/oneToMany/main/HibernateOneToManyAnnotationMainTest.java b/spring-hibernate4/src/test/java/com/baeldung/hibernate/oneToMany/main/HibernateOneToManyAnnotationMainTest.java index 742bb2b470..10a89cdf14 100644 --- a/spring-hibernate4/src/test/java/com/baeldung/hibernate/oneToMany/main/HibernateOneToManyAnnotationMainTest.java +++ b/spring-hibernate4/src/test/java/com/baeldung/hibernate/oneToMany/main/HibernateOneToManyAnnotationMainTest.java @@ -1,12 +1,12 @@ package com.baeldung.hibernate.oneToMany.main; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; -import com.baeldung.hibernate.oneToMany.model.Cart; -import com.baeldung.hibernate.oneToMany.model.Items; import java.util.HashSet; import java.util.Set; -import static org.hamcrest.Matchers.hasSize; + import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.boot.registry.StandardServiceRegistryBuilder; @@ -17,51 +17,47 @@ import org.junit.Assert; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; -import static org.junit.Assert.*; -import org.junit.runner.RunWith; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +import com.baeldung.hibernate.oneToMany.model.Cart; +import com.baeldung.hibernate.oneToMany.model.Items; //@RunWith(SpringJUnit4ClassRunner.class) public class HibernateOneToManyAnnotationMainTest { - + private static SessionFactory sessionFactory; private Session session; - + public HibernateOneToManyAnnotationMainTest() { } - - + @BeforeClass public static void beforeTests() { - Configuration configuration = new Configuration().addAnnotatedClass(Cart.class).addAnnotatedClass(Items.class).setProperty("hibernate.dialect", HSQLDialect.class.getName()).setProperty("hibernate.connection.driver_class", org.hsqldb.jdbcDriver.class.getName()) - .setProperty("hibernate.connection.url", "jdbc:hsqldb:mem:test").setProperty("hibernate.connection.username", "sa").setProperty("hibernate.connection.password", "").setProperty("hibernate.hbm2ddl.auto", "update"); + Configuration configuration = new Configuration().addAnnotatedClass(Cart.class).addAnnotatedClass(Items.class).setProperty("hibernate.dialect", HSQLDialect.class.getName()) + .setProperty("hibernate.connection.driver_class", org.hsqldb.jdbcDriver.class.getName()).setProperty("hibernate.connection.url", "jdbc:hsqldb:mem:test").setProperty("hibernate.connection.username", "sa") + .setProperty("hibernate.connection.password", "").setProperty("hibernate.hbm2ddl.auto", "update"); ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build(); sessionFactory = configuration.buildSessionFactory(serviceRegistry); } - + @Before public void setUp() { session = sessionFactory.openSession(); - session.beginTransaction(); - + session.beginTransaction(); + } - + @Test - public void givenSession_checkIfDatabaseIsEmpty(){ + public void givenSession_checkIfDatabaseIsEmpty() { Cart cart = (Cart) session.get(Cart.class, new Long(1)); assertNull(cart); - + } - - - - @Test public void testAddItemsToCart() { Cart cart = new Cart(); - Set cartItems = new HashSet<>(); + Set cartItems = new HashSet<>(); cartItems = cart.getItems(); Assert.assertNull(cartItems); Items item1 = new Items("I10", 10, 1, cart); @@ -70,33 +66,32 @@ public class HibernateOneToManyAnnotationMainTest { cart.setItems(itemsSet); assertNotNull(cart); System.out.println("Items added to cart"); - + } - + @Test - public void givenSession_checkIfDatabaseIsPopulated_afterCommit(){ - Cart cart = new Cart(); - Set cartItems = new HashSet<>(); - cartItems = cart.getItems(); - Assert.assertNull(cartItems); - Items item1 = new Items(); - item1.setItemId("I10"); - item1.setItemTotal(10); - item1.setQuantity(1); - item1.setCart(cart); - assertNotNull(item1); - Set itemsSet = new HashSet(); - itemsSet.add(item1); - assertNotNull(itemsSet); - cart.setItems(itemsSet); - assertNotNull(cart); - session.persist(cart); - session.getTransaction().commit(); - cart = (Cart) session.get(Cart.class, new Long(1)); - assertNotNull(cart); - session.close(); - + public void givenSession_checkIfDatabaseIsPopulated_afterCommit() { + Cart cart = new Cart(); + Set cartItems = new HashSet<>(); + cartItems = cart.getItems(); + Assert.assertNull(cartItems); + Items item1 = new Items(); + item1.setItemId("I10"); + item1.setItemTotal(10); + item1.setQuantity(1); + item1.setCart(cart); + assertNotNull(item1); + Set itemsSet = new HashSet(); + itemsSet.add(item1); + assertNotNull(itemsSet); + cart.setItems(itemsSet); + assertNotNull(cart); + session.persist(cart); + session.getTransaction().commit(); + cart = (Cart) session.get(Cart.class, new Long(1)); + assertNotNull(cart); + session.close(); + } - - + } From f69deeca2d23b2ae154a2d17468d33c80b25dfcc Mon Sep 17 00:00:00 2001 From: Predrag Maric Date: Sat, 4 Feb 2017 15:59:49 +0100 Subject: [PATCH 13/18] BAEL-598 Removed try-catch block, added throws declaration --- .../java/com/baeldung/thrift/Application.java | 4 +++- .../thrift/CrossPlatformServiceServer.java | 19 ++++++++----------- .../thrift/CrossPlatformServiceTest.java | 9 ++++++++- 3 files changed, 19 insertions(+), 13 deletions(-) diff --git a/apache-thrift/src/main/java/com/baeldung/thrift/Application.java b/apache-thrift/src/main/java/com/baeldung/thrift/Application.java index 09d5cc74f3..3321a0927a 100644 --- a/apache-thrift/src/main/java/com/baeldung/thrift/Application.java +++ b/apache-thrift/src/main/java/com/baeldung/thrift/Application.java @@ -1,8 +1,10 @@ package com.baeldung.thrift; +import org.apache.thrift.transport.TTransportException; + public class Application { - public static void main(String[] args) { + public static void main(String[] args) throws TTransportException { CrossPlatformServiceServer server = new CrossPlatformServiceServer(); server.start(); } diff --git a/apache-thrift/src/main/java/com/baeldung/thrift/CrossPlatformServiceServer.java b/apache-thrift/src/main/java/com/baeldung/thrift/CrossPlatformServiceServer.java index 9a21512b52..32c7891ef2 100644 --- a/apache-thrift/src/main/java/com/baeldung/thrift/CrossPlatformServiceServer.java +++ b/apache-thrift/src/main/java/com/baeldung/thrift/CrossPlatformServiceServer.java @@ -6,25 +6,22 @@ import org.apache.thrift.server.TServer; import org.apache.thrift.server.TSimpleServer; import org.apache.thrift.transport.TServerSocket; import org.apache.thrift.transport.TServerTransport; +import org.apache.thrift.transport.TTransportException; public class CrossPlatformServiceServer { private TServer server; - public void start() { - try { - TServerTransport serverTransport = new TServerSocket(9090); - server = new TSimpleServer(new TServer.Args(serverTransport) - .processor(new CrossPlatformService.Processor<>(new CrossPlatformServiceImpl()))); + public void start() throws TTransportException { + TServerTransport serverTransport = new TServerSocket(9090); + server = new TSimpleServer(new TServer.Args(serverTransport) + .processor(new CrossPlatformService.Processor<>(new CrossPlatformServiceImpl()))); - System.out.print("Starting the server... "); + System.out.print("Starting the server... "); - server.serve(); + server.serve(); - System.out.println("done."); - } catch (Exception e) { - e.printStackTrace(); - } + System.out.println("done."); } public void stop() { diff --git a/apache-thrift/src/test/java/com/baeldung/thrift/CrossPlatformServiceTest.java b/apache-thrift/src/test/java/com/baeldung/thrift/CrossPlatformServiceTest.java index 8a7022a281..4ba9ef2914 100644 --- a/apache-thrift/src/test/java/com/baeldung/thrift/CrossPlatformServiceTest.java +++ b/apache-thrift/src/test/java/com/baeldung/thrift/CrossPlatformServiceTest.java @@ -1,5 +1,6 @@ package com.baeldung.thrift; +import org.apache.thrift.transport.TTransportException; import org.junit.After; import org.junit.Assert; import org.junit.Before; @@ -11,7 +12,13 @@ public class CrossPlatformServiceTest { @Before public void setUp() { - new Thread(() -> server.start()).start(); + new Thread(() -> { + try { + server.start(); + } catch (TTransportException e) { + e.printStackTrace(); + } + }).start(); try { // wait for the server start up Thread.sleep(1000); From 02245b75a8bbf1db1b526bba56df25253adcff7d Mon Sep 17 00:00:00 2001 From: pivovarit Date: Sat, 4 Feb 2017 17:02:46 +0100 Subject: [PATCH 14/18] Refactor PriorityBlockingQueue examples --- .../PriorityBlockingQueueUnitTest.java | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/core-java/src/test/java/com/baeldung/concurrent/priorityblockingqueue/PriorityBlockingQueueUnitTest.java b/core-java/src/test/java/com/baeldung/concurrent/priorityblockingqueue/PriorityBlockingQueueUnitTest.java index 063e07d859..5e6855e18a 100644 --- a/core-java/src/test/java/com/baeldung/concurrent/priorityblockingqueue/PriorityBlockingQueueUnitTest.java +++ b/core-java/src/test/java/com/baeldung/concurrent/priorityblockingqueue/PriorityBlockingQueueUnitTest.java @@ -1,12 +1,10 @@ package com.baeldung.concurrent.priorityblockingqueue; -import org.assertj.core.api.Assertions; import org.junit.Test; import java.util.ArrayList; import java.util.concurrent.PriorityBlockingQueue; import java.util.concurrent.TimeUnit; -import java.util.stream.IntStream; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.util.Lists.newArrayList; @@ -24,11 +22,7 @@ public class PriorityBlockingQueueUnitTest { queue.add(3); queue.add(4); - polledElements.add(queue.poll()); - polledElements.add(queue.poll()); - polledElements.add(queue.poll()); - polledElements.add(queue.poll()); - polledElements.add(queue.poll()); + queue.drainTo(polledElements); assertThat(polledElements).containsExactly(1, 2, 3, 4, 5); } From 4771252f6bb4f6064b27e6b1b5862088f61f1b5b Mon Sep 17 00:00:00 2001 From: pivovarit Date: Sat, 4 Feb 2017 17:22:28 +0100 Subject: [PATCH 15/18] AppTest -> AppLiveTest --- .../intro/{AppTest.java => AppLiveTest.java} | 76 +++++++++---------- 1 file changed, 38 insertions(+), 38 deletions(-) rename spring-boot/src/test/java/com/baeldung/intro/{AppTest.java => AppLiveTest.java} (95%) diff --git a/spring-boot/src/test/java/com/baeldung/intro/AppTest.java b/spring-boot/src/test/java/com/baeldung/intro/AppLiveTest.java similarity index 95% rename from spring-boot/src/test/java/com/baeldung/intro/AppTest.java rename to spring-boot/src/test/java/com/baeldung/intro/AppLiveTest.java index 749fe68838..772709dc30 100644 --- a/spring-boot/src/test/java/com/baeldung/intro/AppTest.java +++ b/spring-boot/src/test/java/com/baeldung/intro/AppLiveTest.java @@ -1,39 +1,39 @@ -package com.baeldung.intro; - -import static org.hamcrest.Matchers.equalTo; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; - -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.http.MediaType; -import org.springframework.test.context.junit4.SpringRunner; -import org.springframework.test.web.servlet.MockMvc; -import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; - -@RunWith(SpringRunner.class) -@SpringBootTest -@AutoConfigureMockMvc -public class AppTest { - - @Autowired - private MockMvc mvc; - - @Test - public void getIndex() throws Exception { - mvc.perform(MockMvcRequestBuilders.get("/").accept(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()) - .andExpect(content().string(equalTo("Index Page"))); - } - - @Test - public void getLocal() throws Exception { - mvc.perform(MockMvcRequestBuilders.get("/local").accept(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()) - .andExpect(content().string(equalTo("/local"))); - } - +package com.baeldung.intro; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.http.MediaType; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; + +import static org.hamcrest.Matchers.equalTo; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +@RunWith(SpringRunner.class) +@SpringBootTest +@AutoConfigureMockMvc +public class AppLiveTest { + + @Autowired + private MockMvc mvc; + + @Test + public void getIndex() throws Exception { + mvc.perform(MockMvcRequestBuilders.get("/").accept(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()) + .andExpect(content().string(equalTo("Index Page"))); + } + + @Test + public void getLocal() throws Exception { + mvc.perform(MockMvcRequestBuilders.get("/local").accept(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()) + .andExpect(content().string(equalTo("/local"))); + } + } \ No newline at end of file From 93c704cbf7ede95fc7e9b6b582217e315d5837a6 Mon Sep 17 00:00:00 2001 From: Andrew Morgan Date: Sat, 4 Feb 2017 16:18:17 +0000 Subject: [PATCH 16/18] mesos marathon demo --- mesos-marathon/Dockerfile | 4 ++ mesos-marathon/dockerise.sh | 5 ++ mesos-marathon/marathon.json | 14 ++++++ mesos-marathon/pom.xml | 46 +++++++++++++++++++ .../java/com/mogronalol/DemoApplication.java | 14 ++++++ .../java/com/mogronalol/HelloController.java | 17 +++++++ .../src/main/resources/application.properties | 1 + .../com/mogronalol/DemoApplicationTests.java | 34 ++++++++++++++ pom.xml | 1 + 9 files changed, 136 insertions(+) create mode 100644 mesos-marathon/Dockerfile create mode 100644 mesos-marathon/dockerise.sh create mode 100644 mesos-marathon/marathon.json create mode 100644 mesos-marathon/pom.xml create mode 100644 mesos-marathon/src/main/java/com/mogronalol/DemoApplication.java create mode 100644 mesos-marathon/src/main/java/com/mogronalol/HelloController.java create mode 100644 mesos-marathon/src/main/resources/application.properties create mode 100644 mesos-marathon/src/test/java/com/mogronalol/DemoApplicationTests.java diff --git a/mesos-marathon/Dockerfile b/mesos-marathon/Dockerfile new file mode 100644 index 0000000000..9f92f7fa6a --- /dev/null +++ b/mesos-marathon/Dockerfile @@ -0,0 +1,4 @@ +FROM openjdk:8-jre-alpine +ADD build/libs/demo-0.0.1-SNAPSHOT.jar app.jar +EXPOSE 8082 +ENTRYPOINT ["java","-jar","/app.jar"] \ No newline at end of file diff --git a/mesos-marathon/dockerise.sh b/mesos-marathon/dockerise.sh new file mode 100644 index 0000000000..85b8554b52 --- /dev/null +++ b/mesos-marathon/dockerise.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash +set -e +docker login -u mogronalol -p $DOCKER_PASSWORD +docker build -t mogronalol/mesos-marathon-demo:$BUILD_NUMBER . +docker push mogronalol/mesos-marathon-demo:$BUILD_NUMBER diff --git a/mesos-marathon/marathon.json b/mesos-marathon/marathon.json new file mode 100644 index 0000000000..6471259e92 --- /dev/null +++ b/mesos-marathon/marathon.json @@ -0,0 +1,14 @@ +{ + "id": "mesos-marathon-demo", + "container": { + "type": "DOCKER", + "docker": { + "image": "", + "network": "BRIDGE", + "portMappings": [ + { "containerPort": 8082, "hostPort": 0 } + ] + }, + "volumes": [] + } +} \ No newline at end of file diff --git a/mesos-marathon/pom.xml b/mesos-marathon/pom.xml new file mode 100644 index 0000000000..ca17a5c4c4 --- /dev/null +++ b/mesos-marathon/pom.xml @@ -0,0 +1,46 @@ + + + 4.0.0 + + com.baeldung + mesos-marathon + 0.0.1-SNAPSHOT + + + org.springframework.boot + spring-boot-starter-parent + 1.5.1.RELEASE + + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + org.springframework.boot + spring-boot-maven-plugin + 1.5.1.RELEASE + + + + repackage + + + + + + + + \ No newline at end of file diff --git a/mesos-marathon/src/main/java/com/mogronalol/DemoApplication.java b/mesos-marathon/src/main/java/com/mogronalol/DemoApplication.java new file mode 100644 index 0000000000..f757178026 --- /dev/null +++ b/mesos-marathon/src/main/java/com/mogronalol/DemoApplication.java @@ -0,0 +1,14 @@ +package com.mogronalol; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +import javax.annotation.PostConstruct; + +@SpringBootApplication +public class DemoApplication { + + public static void main(String[] args) { + SpringApplication.run(DemoApplication.class, args); + } +} diff --git a/mesos-marathon/src/main/java/com/mogronalol/HelloController.java b/mesos-marathon/src/main/java/com/mogronalol/HelloController.java new file mode 100644 index 0000000000..2059280ba0 --- /dev/null +++ b/mesos-marathon/src/main/java/com/mogronalol/HelloController.java @@ -0,0 +1,17 @@ +package com.mogronalol; + +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +@RestController(value = "/") +public class HelloController { + + @GetMapping + @ResponseBody + public String getMapping() { + return "Hello world"; + } + +} diff --git a/mesos-marathon/src/main/resources/application.properties b/mesos-marathon/src/main/resources/application.properties new file mode 100644 index 0000000000..8d51d0c619 --- /dev/null +++ b/mesos-marathon/src/main/resources/application.properties @@ -0,0 +1 @@ +server.port=8082 \ No newline at end of file diff --git a/mesos-marathon/src/test/java/com/mogronalol/DemoApplicationTests.java b/mesos-marathon/src/test/java/com/mogronalol/DemoApplicationTests.java new file mode 100644 index 0000000000..5e88f9a70f --- /dev/null +++ b/mesos-marathon/src/test/java/com/mogronalol/DemoApplicationTests.java @@ -0,0 +1,34 @@ +package com.mogronalol; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.context.embedded.LocalServerPort; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.web.client.RestTemplate; + +import static org.assertj.core.api.Assertions.assertThat; + +@RunWith(SpringJUnit4ClassRunner.class) +@SpringBootTest(classes = {DemoApplication.class}, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +public class DemoApplicationTests { + + private RestTemplate restTemplate; + + @LocalServerPort + private int port; + + @Before + public void setUp() { + restTemplate = new RestTemplate(); + } + + @Test + public void contextLoads() { + final String result = restTemplate.getForObject("http://localhost:" + port + "/", String.class); + assertThat(result).isEqualTo("Hello world"); + } + +} diff --git a/pom.xml b/pom.xml index 41235dcc26..a17b8fc9ce 100644 --- a/pom.xml +++ b/pom.xml @@ -79,6 +79,7 @@ mapstruct metrics + mesos-marathon mockito mocks From ad104bfe8cf5c9790b78deda2984d278addf659f Mon Sep 17 00:00:00 2001 From: Andrew Morgan Date: Sat, 4 Feb 2017 17:21:41 +0000 Subject: [PATCH 17/18] Revert "mesos marathon demo" This reverts commit 93c704cbf7ede95fc7e9b6b582217e315d5837a6. --- mesos-marathon/Dockerfile | 4 -- mesos-marathon/dockerise.sh | 5 -- mesos-marathon/marathon.json | 14 ------ mesos-marathon/pom.xml | 46 ------------------- .../java/com/mogronalol/DemoApplication.java | 14 ------ .../java/com/mogronalol/HelloController.java | 17 ------- .../src/main/resources/application.properties | 1 - .../com/mogronalol/DemoApplicationTests.java | 34 -------------- pom.xml | 1 - 9 files changed, 136 deletions(-) delete mode 100644 mesos-marathon/Dockerfile delete mode 100644 mesos-marathon/dockerise.sh delete mode 100644 mesos-marathon/marathon.json delete mode 100644 mesos-marathon/pom.xml delete mode 100644 mesos-marathon/src/main/java/com/mogronalol/DemoApplication.java delete mode 100644 mesos-marathon/src/main/java/com/mogronalol/HelloController.java delete mode 100644 mesos-marathon/src/main/resources/application.properties delete mode 100644 mesos-marathon/src/test/java/com/mogronalol/DemoApplicationTests.java diff --git a/mesos-marathon/Dockerfile b/mesos-marathon/Dockerfile deleted file mode 100644 index 9f92f7fa6a..0000000000 --- a/mesos-marathon/Dockerfile +++ /dev/null @@ -1,4 +0,0 @@ -FROM openjdk:8-jre-alpine -ADD build/libs/demo-0.0.1-SNAPSHOT.jar app.jar -EXPOSE 8082 -ENTRYPOINT ["java","-jar","/app.jar"] \ No newline at end of file diff --git a/mesos-marathon/dockerise.sh b/mesos-marathon/dockerise.sh deleted file mode 100644 index 85b8554b52..0000000000 --- a/mesos-marathon/dockerise.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/usr/bin/env bash -set -e -docker login -u mogronalol -p $DOCKER_PASSWORD -docker build -t mogronalol/mesos-marathon-demo:$BUILD_NUMBER . -docker push mogronalol/mesos-marathon-demo:$BUILD_NUMBER diff --git a/mesos-marathon/marathon.json b/mesos-marathon/marathon.json deleted file mode 100644 index 6471259e92..0000000000 --- a/mesos-marathon/marathon.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "id": "mesos-marathon-demo", - "container": { - "type": "DOCKER", - "docker": { - "image": "", - "network": "BRIDGE", - "portMappings": [ - { "containerPort": 8082, "hostPort": 0 } - ] - }, - "volumes": [] - } -} \ No newline at end of file diff --git a/mesos-marathon/pom.xml b/mesos-marathon/pom.xml deleted file mode 100644 index ca17a5c4c4..0000000000 --- a/mesos-marathon/pom.xml +++ /dev/null @@ -1,46 +0,0 @@ - - - 4.0.0 - - com.baeldung - mesos-marathon - 0.0.1-SNAPSHOT - - - org.springframework.boot - spring-boot-starter-parent - 1.5.1.RELEASE - - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - - org.springframework.boot - spring-boot-maven-plugin - 1.5.1.RELEASE - - - - repackage - - - - - - - - \ No newline at end of file diff --git a/mesos-marathon/src/main/java/com/mogronalol/DemoApplication.java b/mesos-marathon/src/main/java/com/mogronalol/DemoApplication.java deleted file mode 100644 index f757178026..0000000000 --- a/mesos-marathon/src/main/java/com/mogronalol/DemoApplication.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.mogronalol; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; - -import javax.annotation.PostConstruct; - -@SpringBootApplication -public class DemoApplication { - - public static void main(String[] args) { - SpringApplication.run(DemoApplication.class, args); - } -} diff --git a/mesos-marathon/src/main/java/com/mogronalol/HelloController.java b/mesos-marathon/src/main/java/com/mogronalol/HelloController.java deleted file mode 100644 index 2059280ba0..0000000000 --- a/mesos-marathon/src/main/java/com/mogronalol/HelloController.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.mogronalol; - -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.RestController; - -@RestController(value = "/") -public class HelloController { - - @GetMapping - @ResponseBody - public String getMapping() { - return "Hello world"; - } - -} diff --git a/mesos-marathon/src/main/resources/application.properties b/mesos-marathon/src/main/resources/application.properties deleted file mode 100644 index 8d51d0c619..0000000000 --- a/mesos-marathon/src/main/resources/application.properties +++ /dev/null @@ -1 +0,0 @@ -server.port=8082 \ No newline at end of file diff --git a/mesos-marathon/src/test/java/com/mogronalol/DemoApplicationTests.java b/mesos-marathon/src/test/java/com/mogronalol/DemoApplicationTests.java deleted file mode 100644 index 5e88f9a70f..0000000000 --- a/mesos-marathon/src/test/java/com/mogronalol/DemoApplicationTests.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.mogronalol; - -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.boot.context.embedded.LocalServerPort; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import org.springframework.web.client.RestTemplate; - -import static org.assertj.core.api.Assertions.assertThat; - -@RunWith(SpringJUnit4ClassRunner.class) -@SpringBootTest(classes = {DemoApplication.class}, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) -public class DemoApplicationTests { - - private RestTemplate restTemplate; - - @LocalServerPort - private int port; - - @Before - public void setUp() { - restTemplate = new RestTemplate(); - } - - @Test - public void contextLoads() { - final String result = restTemplate.getForObject("http://localhost:" + port + "/", String.class); - assertThat(result).isEqualTo("Hello world"); - } - -} diff --git a/pom.xml b/pom.xml index a17b8fc9ce..41235dcc26 100644 --- a/pom.xml +++ b/pom.xml @@ -79,7 +79,6 @@ mapstruct metrics - mesos-marathon mockito mocks From ffd17c1b21071a912624792a6de2ccca2bbdf2d0 Mon Sep 17 00:00:00 2001 From: maibin Date: Sat, 4 Feb 2017 18:47:30 +0100 Subject: [PATCH 18/18] Fix the Hibernate4 issues (#1106) * Binary genetic algorithm * Fix the junit tests conflict --- .../com/baeldung/algorithms/RunAlgorithm.java | 44 ++++--- .../algorithms/ga/binary/Individual.java | 44 +++++++ .../algorithms/ga/binary/Population.java | 40 ++++++ .../ga/binary/SimpleGeneticAlgorithm.java | 119 +++++++++++++++++ .../BinaryGeneticAlgorithmTest.java | 16 +++ spring-hibernate4/.gitignore | 3 +- .../HibernateOneToManyAnnotationMainTest.java | 124 +++++++++--------- 7 files changed, 308 insertions(+), 82 deletions(-) create mode 100644 core-java/src/main/java/com/baeldung/algorithms/ga/binary/Individual.java create mode 100644 core-java/src/main/java/com/baeldung/algorithms/ga/binary/Population.java create mode 100644 core-java/src/main/java/com/baeldung/algorithms/ga/binary/SimpleGeneticAlgorithm.java create mode 100644 core-java/src/test/java/com/baeldung/algorithms/BinaryGeneticAlgorithmTest.java diff --git a/core-java/src/main/java/com/baeldung/algorithms/RunAlgorithm.java b/core-java/src/main/java/com/baeldung/algorithms/RunAlgorithm.java index 113ac1cc53..6d696dd272 100644 --- a/core-java/src/main/java/com/baeldung/algorithms/RunAlgorithm.java +++ b/core-java/src/main/java/com/baeldung/algorithms/RunAlgorithm.java @@ -3,28 +3,34 @@ package com.baeldung.algorithms; import java.util.Scanner; import com.baeldung.algorithms.annealing.SimulatedAnnealing; +import com.baeldung.algorithms.ga.binary.SimpleGeneticAlgorithm; import com.baeldung.algorithms.slope_one.SlopeOne; public class RunAlgorithm { - public static void main(String[] args) { - Scanner in = new Scanner(System.in); - System.out.println("Run algorithm:"); - System.out.println("1 - Simulated Annealing"); - System.out.println("2 - Slope One"); - int decision = in.nextInt(); - switch (decision) { - case 1: - System.out.println("Optimized distance for travel: " + SimulatedAnnealing.simulateAnnealing(10, 10000, 0.9995)); - break; - case 2: - SlopeOne.slopeOne(3); - break; - default: - System.out.println("Unknown option"); - break; - } - in.close(); - } + public static void main(String[] args) { + Scanner in = new Scanner(System.in); + System.out.println("Run algorithm:"); + System.out.println("1 - Simulated Annealing"); + System.out.println("2 - Slope One"); + System.out.println("3 - Simple Genetic Algorithm"); + int decision = in.nextInt(); + switch (decision) { + case 1: + System.out.println( + "Optimized distance for travel: " + SimulatedAnnealing.simulateAnnealing(10, 10000, 0.9995)); + break; + case 2: + SlopeOne.slopeOne(3); + break; + case 3: + SimpleGeneticAlgorithm.runAlgorithm(50, "1011000100000100010000100000100111001000000100000100000000001111"); + break; + default: + System.out.println("Unknown option"); + break; + } + in.close(); + } } diff --git a/core-java/src/main/java/com/baeldung/algorithms/ga/binary/Individual.java b/core-java/src/main/java/com/baeldung/algorithms/ga/binary/Individual.java new file mode 100644 index 0000000000..e9b6c8f66a --- /dev/null +++ b/core-java/src/main/java/com/baeldung/algorithms/ga/binary/Individual.java @@ -0,0 +1,44 @@ +package com.baeldung.algorithms.ga.binary; + +import lombok.Data; + +@Data +public class Individual { + + protected int defaultGeneLength = 64; + private byte[] genes = new byte[defaultGeneLength]; + private int fitness = 0; + + public Individual() { + for (int i = 0; i < genes.length; i++) { + byte gene = (byte) Math.round(Math.random()); + genes[i] = gene; + } + } + + protected byte getSingleGene(int index) { + return genes[index]; + } + + protected void setSingleGene(int index, byte value) { + genes[index] = value; + fitness = 0; + } + + public int getFitness() { + if (fitness == 0) { + fitness = SimpleGeneticAlgorithm.getFitness(this); + } + return fitness; + } + + @Override + public String toString() { + String geneString = ""; + for (int i = 0; i < genes.length; i++) { + geneString += getSingleGene(i); + } + return geneString; + } + +} diff --git a/core-java/src/main/java/com/baeldung/algorithms/ga/binary/Population.java b/core-java/src/main/java/com/baeldung/algorithms/ga/binary/Population.java new file mode 100644 index 0000000000..dbd1e04e0f --- /dev/null +++ b/core-java/src/main/java/com/baeldung/algorithms/ga/binary/Population.java @@ -0,0 +1,40 @@ +package com.baeldung.algorithms.ga.binary; + +import java.util.ArrayList; +import java.util.List; + +import lombok.Data; + +@Data +public class Population { + + private List individuals; + + public Population(int size, boolean createNew) { + individuals = new ArrayList<>(); + if (createNew) { + createNewPopulation(size); + } + } + + protected Individual getIndividual(int index) { + return individuals.get(index); + } + + protected Individual getFittest() { + Individual fittest = individuals.get(0); + for (int i = 0; i < individuals.size(); i++) { + if (fittest.getFitness() <= getIndividual(i).getFitness()) { + fittest = getIndividual(i); + } + } + return fittest; + } + + private void createNewPopulation(int size) { + for (int i = 0; i < size; i++) { + Individual newIndividual = new Individual(); + individuals.add(i, newIndividual); + } + } +} diff --git a/core-java/src/main/java/com/baeldung/algorithms/ga/binary/SimpleGeneticAlgorithm.java b/core-java/src/main/java/com/baeldung/algorithms/ga/binary/SimpleGeneticAlgorithm.java new file mode 100644 index 0000000000..0f640e676a --- /dev/null +++ b/core-java/src/main/java/com/baeldung/algorithms/ga/binary/SimpleGeneticAlgorithm.java @@ -0,0 +1,119 @@ +package com.baeldung.algorithms.ga.binary; + +import lombok.Data; + +@Data +public class SimpleGeneticAlgorithm { + + private static final double uniformRate = 0.5; + private static final double mutationRate = 0.025; + private static final int tournamentSize = 5; + private static final boolean elitism = true; + private static byte[] solution = new byte[64]; + + public static boolean runAlgorithm(int populationSize, String solution) { + if (solution.length() != SimpleGeneticAlgorithm.solution.length) { + throw new RuntimeException( + "The solution needs to have " + SimpleGeneticAlgorithm.solution.length + " bytes"); + } + SimpleGeneticAlgorithm.setSolution(solution); + Population myPop = new Population(populationSize, true); + + int generationCount = 1; + while (myPop.getFittest().getFitness() < SimpleGeneticAlgorithm.getMaxFitness()) { + System.out.println( + "Generation: " + generationCount + " Correct genes found: " + myPop.getFittest().getFitness()); + myPop = SimpleGeneticAlgorithm.evolvePopulation(myPop); + generationCount++; + } + System.out.println("Solution found!"); + System.out.println("Generation: " + generationCount); + System.out.println("Genes: "); + System.out.println(myPop.getFittest()); + return true; + } + + public static Population evolvePopulation(Population pop) { + int elitismOffset; + Population newPopulation = new Population(pop.getIndividuals().size(), false); + + if (elitism) { + newPopulation.getIndividuals().add(0, pop.getFittest()); + elitismOffset = 1; + } else { + elitismOffset = 0; + } + + for (int i = elitismOffset; i < pop.getIndividuals().size(); i++) { + Individual indiv1 = tournamentSelection(pop); + Individual indiv2 = tournamentSelection(pop); + Individual newIndiv = crossover(indiv1, indiv2); + newPopulation.getIndividuals().add(i, newIndiv); + } + + for (int i = elitismOffset; i < newPopulation.getIndividuals().size(); i++) { + mutate(newPopulation.getIndividual(i)); + } + + return newPopulation; + } + + private static Individual crossover(Individual indiv1, Individual indiv2) { + Individual newSol = new Individual(); + for (int i = 0; i < newSol.getDefaultGeneLength(); i++) { + if (Math.random() <= uniformRate) { + newSol.setSingleGene(i, indiv1.getSingleGene(i)); + } else { + newSol.setSingleGene(i, indiv2.getSingleGene(i)); + } + } + return newSol; + } + + private static void mutate(Individual indiv) { + for (int i = 0; i < indiv.getDefaultGeneLength(); i++) { + if (Math.random() <= mutationRate) { + byte gene = (byte) Math.round(Math.random()); + indiv.setSingleGene(i, gene); + } + } + } + + private static Individual tournamentSelection(Population pop) { + Population tournament = new Population(tournamentSize, false); + for (int i = 0; i < tournamentSize; i++) { + int randomId = (int) (Math.random() * pop.getIndividuals().size()); + tournament.getIndividuals().add(i, pop.getIndividual(randomId)); + } + Individual fittest = tournament.getFittest(); + return fittest; + } + + protected static int getFitness(Individual individual) { + int fitness = 0; + for (int i = 0; i < individual.getDefaultGeneLength() && i < solution.length; i++) { + if (individual.getSingleGene(i) == solution[i]) { + fitness++; + } + } + return fitness; + } + + protected static int getMaxFitness() { + int maxFitness = solution.length; + return maxFitness; + } + + protected static void setSolution(String newSolution) { + solution = new byte[newSolution.length()]; + for (int i = 0; i < newSolution.length(); i++) { + String character = newSolution.substring(i, i + 1); + if (character.contains("0") || character.contains("1")) { + solution[i] = Byte.parseByte(character); + } else { + solution[i] = 0; + } + } + } + +} diff --git a/core-java/src/test/java/com/baeldung/algorithms/BinaryGeneticAlgorithmTest.java b/core-java/src/test/java/com/baeldung/algorithms/BinaryGeneticAlgorithmTest.java new file mode 100644 index 0000000000..8a16311dfb --- /dev/null +++ b/core-java/src/test/java/com/baeldung/algorithms/BinaryGeneticAlgorithmTest.java @@ -0,0 +1,16 @@ +package com.baeldung.algorithms; + +import org.junit.Assert; +import org.junit.Test; + +import com.baeldung.algorithms.ga.binary.SimpleGeneticAlgorithm; + +public class BinaryGeneticAlgorithmTest { + + @Test + public void testGA() { + Assert.assertTrue(SimpleGeneticAlgorithm.runAlgorithm(50, + "1011000100000100010000100000100111001000000100000100000000001111")); + } + +} diff --git a/spring-hibernate4/.gitignore b/spring-hibernate4/.gitignore index 83c05e60c8..478cca6dac 100644 --- a/spring-hibernate4/.gitignore +++ b/spring-hibernate4/.gitignore @@ -10,4 +10,5 @@ # Packaged files # *.jar *.war -*.ear \ No newline at end of file +*.ear +/target/ diff --git a/spring-hibernate4/src/test/java/com/baeldung/hibernate/oneToMany/main/HibernateOneToManyAnnotationMainTest.java b/spring-hibernate4/src/test/java/com/baeldung/hibernate/oneToMany/main/HibernateOneToManyAnnotationMainTest.java index 10a89cdf14..688329e329 100644 --- a/spring-hibernate4/src/test/java/com/baeldung/hibernate/oneToMany/main/HibernateOneToManyAnnotationMainTest.java +++ b/spring-hibernate4/src/test/java/com/baeldung/hibernate/oneToMany/main/HibernateOneToManyAnnotationMainTest.java @@ -1,4 +1,3 @@ - package com.baeldung.hibernate.oneToMany.main; import static org.junit.Assert.assertNotNull; @@ -13,85 +12,86 @@ import org.hibernate.boot.registry.StandardServiceRegistryBuilder; import org.hibernate.cfg.Configuration; import org.hibernate.dialect.HSQLDialect; import org.hibernate.service.ServiceRegistry; +import org.junit.After; +import org.junit.AfterClass; import org.junit.Assert; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; - import com.baeldung.hibernate.oneToMany.model.Cart; import com.baeldung.hibernate.oneToMany.model.Items; -//@RunWith(SpringJUnit4ClassRunner.class) public class HibernateOneToManyAnnotationMainTest { - private static SessionFactory sessionFactory; + private static SessionFactory sessionFactory; - private Session session; + private Session session; - public HibernateOneToManyAnnotationMainTest() { - } + public HibernateOneToManyAnnotationMainTest() { + } - @BeforeClass - public static void beforeTests() { - Configuration configuration = new Configuration().addAnnotatedClass(Cart.class).addAnnotatedClass(Items.class).setProperty("hibernate.dialect", HSQLDialect.class.getName()) - .setProperty("hibernate.connection.driver_class", org.hsqldb.jdbcDriver.class.getName()).setProperty("hibernate.connection.url", "jdbc:hsqldb:mem:test").setProperty("hibernate.connection.username", "sa") - .setProperty("hibernate.connection.password", "").setProperty("hibernate.hbm2ddl.auto", "update"); - ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build(); - sessionFactory = configuration.buildSessionFactory(serviceRegistry); - } + @BeforeClass + public static void beforeTests() { + Configuration configuration = new Configuration().addAnnotatedClass(Cart.class).addAnnotatedClass(Items.class) + .setProperty("hibernate.dialect", HSQLDialect.class.getName()) + .setProperty("hibernate.connection.driver_class", org.hsqldb.jdbcDriver.class.getName()) + .setProperty("hibernate.connection.url", "jdbc:hsqldb:mem:test") + .setProperty("hibernate.connection.username", "sa").setProperty("hibernate.connection.password", "") + .setProperty("hibernate.hbm2ddl.auto", "update"); + ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder() + .applySettings(configuration.getProperties()).build(); + sessionFactory = configuration.buildSessionFactory(serviceRegistry); + } - @Before - public void setUp() { - session = sessionFactory.openSession(); - session.beginTransaction(); + @Before + public void setUp() { + session = sessionFactory.openSession(); + session.beginTransaction(); + } - } + @Test + public void givenSession_checkIfDatabaseIsEmpty() { + Cart cart = (Cart) session.get(Cart.class, new Long(1)); + assertNull(cart); - @Test - public void givenSession_checkIfDatabaseIsEmpty() { - Cart cart = (Cart) session.get(Cart.class, new Long(1)); - assertNull(cart); + } - } + @Test + public void givenSession_checkIfDatabaseIsPopulated_afterCommit() { + Cart cart = new Cart(); + Set cartItems = new HashSet<>(); + cartItems = cart.getItems(); + Assert.assertNull(cartItems); + Items item1 = new Items(); + item1.setItemId("I10"); + item1.setItemTotal(10); + item1.setQuantity(1); + item1.setCart(cart); + assertNotNull(item1); + Set itemsSet = new HashSet(); + itemsSet.add(item1); + assertNotNull(itemsSet); + cart.setItems(itemsSet); + assertNotNull(cart); + session.persist(cart); + session.getTransaction().commit(); + session.close(); - @Test - public void testAddItemsToCart() { - Cart cart = new Cart(); - Set cartItems = new HashSet<>(); - cartItems = cart.getItems(); - Assert.assertNull(cartItems); - Items item1 = new Items("I10", 10, 1, cart); - assertNotNull(item1); - Set itemsSet = new HashSet(); - cart.setItems(itemsSet); - assertNotNull(cart); - System.out.println("Items added to cart"); + session = sessionFactory.openSession(); + session.beginTransaction(); + cart = (Cart) session.get(Cart.class, new Long(1)); + assertNotNull(cart); + } - } + @After + public void tearDown() { + session.getTransaction().commit(); + session.close(); + } - @Test - public void givenSession_checkIfDatabaseIsPopulated_afterCommit() { - Cart cart = new Cart(); - Set cartItems = new HashSet<>(); - cartItems = cart.getItems(); - Assert.assertNull(cartItems); - Items item1 = new Items(); - item1.setItemId("I10"); - item1.setItemTotal(10); - item1.setQuantity(1); - item1.setCart(cart); - assertNotNull(item1); - Set itemsSet = new HashSet(); - itemsSet.add(item1); - assertNotNull(itemsSet); - cart.setItems(itemsSet); - assertNotNull(cart); - session.persist(cart); - session.getTransaction().commit(); - cart = (Cart) session.get(Cart.class, new Long(1)); - assertNotNull(cart); - session.close(); - - } + @AfterClass + public static void afterTests() { + sessionFactory.close(); + } }