diff --git a/akka-http/pom.xml b/akka-http/pom.xml
new file mode 100644
index 0000000000..51e70fb583
--- /dev/null
+++ b/akka-http/pom.xml
@@ -0,0 +1,48 @@
+
+
+
+ 4.0.0
+ akka-http
+ akka-http
+
+
+ parent-modules
+ com.baeldung
+ 1.0.0-SNAPSHOT
+
+
+
+
+ com.typesafe.akka
+ akka-http_2.12
+ ${akka.http.version}
+
+
+ com.typesafe.akka
+ akka-stream_2.12
+ 2.5.11
+
+
+ com.typesafe.akka
+ akka-http-jackson_2.12
+ ${akka.http.version}
+
+
+ com.typesafe.akka
+ akka-http-testkit_2.12
+ ${akka.http.version}
+ test
+
+
+
+
+ UTF-8
+ UTF-8
+ 1.8
+ 10.0.11
+ 2.5.11
+
+
diff --git a/akka-http/src/main/java/com/baeldung/akkahttp/User.java b/akka-http/src/main/java/com/baeldung/akkahttp/User.java
new file mode 100644
index 0000000000..43c21eca62
--- /dev/null
+++ b/akka-http/src/main/java/com/baeldung/akkahttp/User.java
@@ -0,0 +1,26 @@
+package com.baeldung.akkahttp;
+
+public class User {
+
+ private final Long id;
+
+ private final String name;
+
+ public User() {
+ this.name = "";
+ this.id = null;
+ }
+
+ public User(Long id, String name) {
+ this.name = name;
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public Long getId() {
+ return id;
+ }
+}
\ No newline at end of file
diff --git a/akka-http/src/main/java/com/baeldung/akkahttp/UserActor.java b/akka-http/src/main/java/com/baeldung/akkahttp/UserActor.java
new file mode 100644
index 0000000000..431014a88b
--- /dev/null
+++ b/akka-http/src/main/java/com/baeldung/akkahttp/UserActor.java
@@ -0,0 +1,41 @@
+package com.baeldung.akkahttp;
+
+import akka.actor.AbstractActor;
+import akka.actor.Props;
+import akka.japi.pf.FI;
+import com.baeldung.akkahttp.UserMessages.ActionPerformed;
+import com.baeldung.akkahttp.UserMessages.CreateUserMessage;
+import com.baeldung.akkahttp.UserMessages.GetUserMessage;
+
+
+class UserActor extends AbstractActor {
+
+ private UserService userService = new UserService();
+
+ static Props props() {
+ return Props.create(UserActor.class);
+ }
+
+ @Override
+ public Receive createReceive() {
+ return receiveBuilder()
+ .match(CreateUserMessage.class, handleCreateUser())
+ .match(GetUserMessage.class, handleGetUser())
+ .build();
+ }
+
+ private FI.UnitApply handleCreateUser() {
+ return createUserMessageMessage -> {
+ userService.createUser(createUserMessageMessage.getUser());
+ sender().tell(new ActionPerformed(String.format("User %s created.", createUserMessageMessage.getUser()
+ .getName())), getSelf());
+ };
+ }
+
+ private FI.UnitApply handleGetUser() {
+ return getUserMessageMessage -> {
+ sender().tell(userService.getUser(getUserMessageMessage.getUserId()), getSelf());
+ };
+ }
+
+}
diff --git a/akka-http/src/main/java/com/baeldung/akkahttp/UserMessages.java b/akka-http/src/main/java/com/baeldung/akkahttp/UserMessages.java
new file mode 100644
index 0000000000..995b92bcb0
--- /dev/null
+++ b/akka-http/src/main/java/com/baeldung/akkahttp/UserMessages.java
@@ -0,0 +1,49 @@
+package com.baeldung.akkahttp;
+
+import java.io.Serializable;
+
+public interface UserMessages {
+
+ class ActionPerformed implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ private final String description;
+
+ public ActionPerformed(String description) {
+ this.description = description;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+ }
+
+ class CreateUserMessage implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+ private final User user;
+
+ public CreateUserMessage(User user) {
+ this.user = user;
+ }
+
+ public User getUser() {
+ return user;
+ }
+ }
+
+ class GetUserMessage implements Serializable {
+ private static final long serialVersionUID = 1L;
+ private final Long userId;
+
+ public GetUserMessage(Long userId) {
+ this.userId = userId;
+ }
+
+ public Long getUserId() {
+ return userId;
+ }
+ }
+
+}
diff --git a/akka-http/src/main/java/com/baeldung/akkahttp/UserServer.java b/akka-http/src/main/java/com/baeldung/akkahttp/UserServer.java
new file mode 100644
index 0000000000..0c1dbd1f60
--- /dev/null
+++ b/akka-http/src/main/java/com/baeldung/akkahttp/UserServer.java
@@ -0,0 +1,70 @@
+package com.baeldung.akkahttp;
+
+import java.util.Optional;
+import java.util.concurrent.CompletionStage;
+import java.util.concurrent.TimeUnit;
+
+import akka.actor.ActorRef;
+import akka.actor.ActorSystem;
+import akka.http.javadsl.marshallers.jackson.Jackson;
+import akka.http.javadsl.model.StatusCodes;
+import akka.http.javadsl.server.HttpApp;
+import akka.http.javadsl.server.Route;
+import akka.pattern.PatternsCS;
+import akka.util.Timeout;
+import com.baeldung.akkahttp.UserMessages.ActionPerformed;
+import com.baeldung.akkahttp.UserMessages.CreateUserMessage;
+import com.baeldung.akkahttp.UserMessages.GetUserMessage;
+import scala.concurrent.duration.Duration;
+import static akka.http.javadsl.server.PathMatchers.*;
+
+class UserServer extends HttpApp {
+
+ private final ActorRef userActor;
+
+ Timeout timeout = new Timeout(Duration.create(5, TimeUnit.SECONDS));
+
+ UserServer(ActorRef userActor) {
+ this.userActor = userActor;
+ }
+
+ @Override
+ public Route routes() {
+ return path("users", this::postUser)
+ .orElse(path(segment("users").slash(longSegment()), id ->
+ route(getUser(id))));
+ }
+
+ private Route getUser(Long id) {
+ return get(() -> {
+ CompletionStage> user = PatternsCS.ask(userActor, new GetUserMessage(id), timeout)
+ .thenApply(obj -> (Optional) obj);
+
+ return onSuccess(() -> user, performed -> {
+ if (performed.isPresent())
+ return complete(StatusCodes.OK, performed.get(), Jackson.marshaller());
+ else
+ return complete(StatusCodes.NOT_FOUND);
+ });
+ });
+ }
+
+ private Route postUser() {
+ return route(post(() -> entity(Jackson.unmarshaller(User.class), user -> {
+ CompletionStage userCreated = PatternsCS.ask(userActor, new CreateUserMessage(user), timeout)
+ .thenApply(obj -> (ActionPerformed) obj);
+
+ return onSuccess(() -> userCreated, performed -> {
+ return complete(StatusCodes.CREATED, performed, Jackson.marshaller());
+ });
+ })));
+ }
+
+ public static void main(String[] args) throws Exception {
+ ActorSystem system = ActorSystem.create("userServer");
+ ActorRef userActor = system.actorOf(UserActor.props(), "userActor");
+ UserServer server = new UserServer(userActor);
+ server.startServer("localhost", 8080, system);
+ }
+
+}
diff --git a/akka-http/src/main/java/com/baeldung/akkahttp/UserService.java b/akka-http/src/main/java/com/baeldung/akkahttp/UserService.java
new file mode 100644
index 0000000000..50dc1e1b28
--- /dev/null
+++ b/akka-http/src/main/java/com/baeldung/akkahttp/UserService.java
@@ -0,0 +1,35 @@
+package com.baeldung.akkahttp;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Optional;
+
+public class UserService {
+
+ private final static List users = new ArrayList<>();
+
+ static {
+ users.add(new User(1l, "Alice"));
+ users.add(new User(2l, "Bob"));
+ users.add(new User(3l, "Chris"));
+ users.add(new User(4l, "Dick"));
+ users.add(new User(5l, "Eve"));
+ users.add(new User(6l, "Finn"));
+ }
+
+ public Optional getUser(Long id) {
+ return users.stream()
+ .filter(user -> user.getId()
+ .equals(id))
+ .findFirst();
+ }
+
+ public void createUser(User user) {
+ users.add(user);
+ }
+
+ public List getUsers(){
+ return users;
+ }
+
+}
diff --git a/akka-http/src/test/java/com/baeldung/akkahttp/UserServerUnitTest.java b/akka-http/src/test/java/com/baeldung/akkahttp/UserServerUnitTest.java
new file mode 100644
index 0000000000..1170a2d761
--- /dev/null
+++ b/akka-http/src/test/java/com/baeldung/akkahttp/UserServerUnitTest.java
@@ -0,0 +1,50 @@
+package com.baeldung.akkahttp;
+
+import akka.actor.ActorRef;
+import akka.actor.ActorSystem;
+import akka.http.javadsl.model.ContentTypes;
+import akka.http.javadsl.model.HttpEntities;
+import akka.http.javadsl.model.HttpRequest;
+import akka.http.javadsl.testkit.JUnitRouteTest;
+import akka.http.javadsl.testkit.TestRoute;
+import org.junit.Test;
+
+public class UserServerUnitTest extends JUnitRouteTest {
+
+ ActorSystem system = ActorSystem.create("helloAkkaHttpServer");
+
+ ActorRef userActorRef = system.actorOf(UserActor.props(), "userActor");
+
+ TestRoute appRoute = testRoute(new UserServer(userActorRef).routes());
+
+ @Test
+ public void whenRequest_thenActorResponds() {
+
+ appRoute.run(HttpRequest.GET("/users/1"))
+ .assertEntity(alice())
+ .assertStatusCode(200);
+
+ appRoute.run(HttpRequest.GET("/users/42"))
+ .assertStatusCode(404);
+
+ appRoute.run(HttpRequest.DELETE("/users/1"))
+ .assertStatusCode(200);
+
+ appRoute.run(HttpRequest.DELETE("/users/42"))
+ .assertStatusCode(200);
+
+ appRoute.run(HttpRequest.POST("/users")
+ .withEntity(HttpEntities.create(ContentTypes.APPLICATION_JSON, zaphod())))
+ .assertStatusCode(201);
+
+ }
+
+ private String alice() {
+ return "{\"id\":1,\"name\":\"Alice\"}";
+ }
+
+ private String zaphod() {
+ return "{\"id\":42,\"name\":\"Zaphod\"}";
+ }
+
+}
diff --git a/algorithms-miscellaneous-1/README.md b/algorithms-miscellaneous-1/README.md
index a04874c4d2..a725bbd141 100644
--- a/algorithms-miscellaneous-1/README.md
+++ b/algorithms-miscellaneous-1/README.md
@@ -10,4 +10,6 @@
- [Multi-Swarm Optimization Algorithm in Java](http://www.baeldung.com/java-multi-swarm-algorithm)
- [String Search Algorithms for Large Texts](http://www.baeldung.com/java-full-text-search-algorithms)
- [Check If a String Contains All The Letters of The Alphabet](https://www.baeldung.com/java-string-contains-all-letters)
-- [Find the Middle Element of a Linked List](http://www.baeldung.com/java-linked-list-middle-element)
\ No newline at end of file
+- [Find the Middle Element of a Linked List](http://www.baeldung.com/java-linked-list-middle-element)
+- [Calculate Factorial in Java](https://www.baeldung.com/java-calculate-factorial)
+- [Find Substrings That Are Palindromes in Java](https://www.baeldung.com/java-palindrome-substrings)
\ No newline at end of file
diff --git a/apache-curator/pom.xml b/apache-curator/pom.xml
index bcca38b199..e6be32277d 100644
--- a/apache-curator/pom.xml
+++ b/apache-curator/pom.xml
@@ -59,7 +59,7 @@
4.0.1
3.4.11
- 2.9.4
+ 2.9.7
3.6.1
1.7.0
diff --git a/core-java-8/src/main/java/com/baeldung/interfaces/Electronic.java b/core-java-8/src/main/java/com/baeldung/interfaces/Electronic.java
new file mode 100644
index 0000000000..bfbc381483
--- /dev/null
+++ b/core-java-8/src/main/java/com/baeldung/interfaces/Electronic.java
@@ -0,0 +1,22 @@
+package com.baeldung.interfaces;
+
+public interface Electronic {
+ //Constant variable
+ public static final String LED = "LED";
+
+ //Abstract method
+ public int getElectricityUse();
+
+ // Static method
+ public static boolean isEnergyEfficient(String electtronicType) {
+ if (electtronicType.equals(LED)) {
+ return true;
+ }
+ return false;
+ }
+
+ //Default method
+ public default void printDescription() {
+ System.out.println("Electronic Description");
+ }
+}
diff --git a/core-java-8/src/main/java/com/baeldung/interfaces/Employee.java b/core-java-8/src/main/java/com/baeldung/interfaces/Employee.java
new file mode 100644
index 0000000000..903bc81e6f
--- /dev/null
+++ b/core-java-8/src/main/java/com/baeldung/interfaces/Employee.java
@@ -0,0 +1,15 @@
+package com.baeldung.interfaces;
+
+public class Employee {
+
+ private double salary;
+
+ public double getSalary() {
+ return salary;
+ }
+
+ public void setSalary(double salary) {
+ this.salary = salary;
+ }
+
+}
diff --git a/core-java-8/src/main/java/com/baeldung/interfaces/EmployeeSalaryComparator.java b/core-java-8/src/main/java/com/baeldung/interfaces/EmployeeSalaryComparator.java
new file mode 100644
index 0000000000..cfa4226c1a
--- /dev/null
+++ b/core-java-8/src/main/java/com/baeldung/interfaces/EmployeeSalaryComparator.java
@@ -0,0 +1,18 @@
+package com.baeldung.interfaces;
+
+import java.util.Comparator;
+
+public class EmployeeSalaryComparator implements Comparator {
+
+ @Override
+ public int compare(Employee employeeA, Employee employeeB) {
+
+ if(employeeA.getSalary() < employeeB.getSalary()){
+ return -1;
+ }else if(employeeA.getSalary() > employeeB.getSalary()){
+ return 1;
+ }else{
+ return 0;
+ }
+ }
+}
diff --git a/core-java-8/src/main/java/com/baeldung/interfaces/HasColor.java b/core-java-8/src/main/java/com/baeldung/interfaces/HasColor.java
new file mode 100644
index 0000000000..6eface2d47
--- /dev/null
+++ b/core-java-8/src/main/java/com/baeldung/interfaces/HasColor.java
@@ -0,0 +1,5 @@
+package com.baeldung.interfaces;
+
+public interface HasColor {
+ public String getColor();
+}
\ No newline at end of file
diff --git a/core-java-8/src/main/java/com/baeldung/interfaces/Motorcycle.java b/core-java-8/src/main/java/com/baeldung/interfaces/Motorcycle.java
new file mode 100644
index 0000000000..6003f476a3
--- /dev/null
+++ b/core-java-8/src/main/java/com/baeldung/interfaces/Motorcycle.java
@@ -0,0 +1,10 @@
+package com.baeldung.interfaces;
+
+import com.baeldung.interfaces.multiinheritance.Transform;
+
+public class Motorcycle implements Transform {
+ @Override
+ public void transform() {
+ // Implementation
+ }
+}
\ No newline at end of file
diff --git a/core-java-8/src/main/java/com/baeldung/interfaces/Truck.java b/core-java-8/src/main/java/com/baeldung/interfaces/Truck.java
new file mode 100644
index 0000000000..d78de23371
--- /dev/null
+++ b/core-java-8/src/main/java/com/baeldung/interfaces/Truck.java
@@ -0,0 +1,8 @@
+package com.baeldung.interfaces;
+
+public class Truck extends Vehicle {
+ @Override
+ public void transform() {
+ // implementation
+ }
+}
diff --git a/core-java-8/src/main/java/com/baeldung/interfaces/Vehicle.java b/core-java-8/src/main/java/com/baeldung/interfaces/Vehicle.java
new file mode 100644
index 0000000000..8b4662e1a3
--- /dev/null
+++ b/core-java-8/src/main/java/com/baeldung/interfaces/Vehicle.java
@@ -0,0 +1,6 @@
+package com.baeldung.interfaces;
+
+import com.baeldung.interfaces.multiinheritance.Transform;
+
+public abstract class Vehicle implements Transform {
+}
diff --git a/core-java-8/src/main/java/com/baeldung/interfaces/multiinheritance/Car.java b/core-java-8/src/main/java/com/baeldung/interfaces/multiinheritance/Car.java
new file mode 100644
index 0000000000..b951fc0273
--- /dev/null
+++ b/core-java-8/src/main/java/com/baeldung/interfaces/multiinheritance/Car.java
@@ -0,0 +1,13 @@
+package com.baeldung.interfaces.multiinheritance;
+
+public class Car implements Fly, Transform {
+ @Override
+ public void fly() {
+ System.out.println("I can Fly!!");
+ }
+
+ @Override
+ public void transform() {
+ System.out.println("I can Transform!!");
+ }
+}
diff --git a/core-java-8/src/main/java/com/baeldung/interfaces/multiinheritance/Transform.java b/core-java-8/src/main/java/com/baeldung/interfaces/multiinheritance/Transform.java
index a18bbafdc1..8bdba43a05 100644
--- a/core-java-8/src/main/java/com/baeldung/interfaces/multiinheritance/Transform.java
+++ b/core-java-8/src/main/java/com/baeldung/interfaces/multiinheritance/Transform.java
@@ -1,5 +1,10 @@
package com.baeldung.interfaces.multiinheritance;
public interface Transform {
+
void transform();
+
+ default void printSpecs(){
+ System.out.println("Transform Specification");
+ }
}
diff --git a/core-java-8/src/main/java/com/baeldung/interfaces/polymorphysim/Circle.java b/core-java-8/src/main/java/com/baeldung/interfaces/polymorphysim/Circle.java
index bf0e613567..afb3142d96 100644
--- a/core-java-8/src/main/java/com/baeldung/interfaces/polymorphysim/Circle.java
+++ b/core-java-8/src/main/java/com/baeldung/interfaces/polymorphysim/Circle.java
@@ -18,4 +18,8 @@ public class Circle implements Shape {
return Math.PI * (radius * radius);
}
+ @Override
+ public String getColor() {
+ return "green";
+ }
}
diff --git a/core-java-8/src/main/java/com/baeldung/interfaces/polymorphysim/DisplayShape.java b/core-java-8/src/main/java/com/baeldung/interfaces/polymorphysim/DisplayShape.java
index 2cf4fafee1..d9c9dd107a 100644
--- a/core-java-8/src/main/java/com/baeldung/interfaces/polymorphysim/DisplayShape.java
+++ b/core-java-8/src/main/java/com/baeldung/interfaces/polymorphysim/DisplayShape.java
@@ -6,6 +6,10 @@ public class DisplayShape {
private ArrayList shapes;
+ public ArrayList getShapes() {
+ return shapes;
+ }
+
public DisplayShape() {
shapes = new ArrayList<>();
}
diff --git a/core-java-8/src/main/java/com/baeldung/interfaces/polymorphysim/FunctionalMain.java b/core-java-8/src/main/java/com/baeldung/interfaces/polymorphysim/FunctionalMain.java
new file mode 100644
index 0000000000..5316dd7db7
--- /dev/null
+++ b/core-java-8/src/main/java/com/baeldung/interfaces/polymorphysim/FunctionalMain.java
@@ -0,0 +1,23 @@
+package com.baeldung.interfaces.polymorphysim;
+
+import java.util.function.Predicate;
+
+public class FunctionalMain {
+
+public static void main(String[] args) {
+ Shape circleShape = new Circle(2);
+ Shape squareShape = new Square(2);
+
+ DisplayShape DisplayShape = new DisplayShape();
+ DisplayShape.add(circleShape);
+ DisplayShape.add(squareShape);
+
+ Predicate checkArea = (shape) -> shape.area() < 5;
+
+ for (Shape shape : DisplayShape.getShapes()) {
+ if (checkArea.test(shape)) {
+ System.out.println(shape.name() + " " + shape.area());
+ }
+ }
+}
+}
diff --git a/core-java-8/src/main/java/com/baeldung/interfaces/polymorphysim/Shape.java b/core-java-8/src/main/java/com/baeldung/interfaces/polymorphysim/Shape.java
index fcb0c65e7b..560e07a80a 100644
--- a/core-java-8/src/main/java/com/baeldung/interfaces/polymorphysim/Shape.java
+++ b/core-java-8/src/main/java/com/baeldung/interfaces/polymorphysim/Shape.java
@@ -1,6 +1,9 @@
package com.baeldung.interfaces.polymorphysim;
-public interface Shape {
+import com.baeldung.interfaces.HasColor;
+
+public interface Shape extends HasColor {
+
public abstract String name();
public abstract double area();
}
diff --git a/core-java-8/src/main/java/com/baeldung/interfaces/polymorphysim/Square.java b/core-java-8/src/main/java/com/baeldung/interfaces/polymorphysim/Square.java
index 9c440150b5..00b75ace20 100644
--- a/core-java-8/src/main/java/com/baeldung/interfaces/polymorphysim/Square.java
+++ b/core-java-8/src/main/java/com/baeldung/interfaces/polymorphysim/Square.java
@@ -17,4 +17,9 @@ public class Square implements Shape {
public double area() {
return width * width;
}
+
+ @Override
+ public String getColor() {
+ return "red";
+ }
}
diff --git a/core-java-collections/src/test/java/com/baeldung/hashmapvshashtable/HashmapVsHashtableDifferenceUnitTest.java b/core-java-collections/src/test/java/com/baeldung/hashmapvshashtable/HashmapVsHashtableDifferenceUnitTest.java
new file mode 100644
index 0000000000..5218332d60
--- /dev/null
+++ b/core-java-collections/src/test/java/com/baeldung/hashmapvshashtable/HashmapVsHashtableDifferenceUnitTest.java
@@ -0,0 +1,98 @@
+package com.baeldung.hashmapvshashtable;
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.Collections;
+import java.util.ConcurrentModificationException;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+
+import org.junit.Test;
+
+import com.google.common.collect.Lists;
+
+public class HashmapVsHashtableDifferenceUnitTest {
+
+ // null values
+ @Test(expected = NullPointerException.class)
+ public void givenHashtable_whenAddNullKey_thenNullPointerExceptionThrown() {
+ Hashtable table = new Hashtable();
+ table.put(null, "value");
+ }
+
+ @Test(expected = NullPointerException.class)
+ public void givenHashtable_whenAddNullValue_thenNullPointerExceptionThrown() {
+ Hashtable table = new Hashtable();
+ table.put("key", null);
+ }
+
+ @Test
+ public void givenHashmap_whenAddNullKeyAndValue_thenObjectAdded() {
+ HashMap map = new HashMap();
+ map.put(null, "value");
+ map.put("key1", null);
+ map.put("key2", null);
+
+ assertEquals(3, map.size());
+ }
+
+ // fail-fast iterator
+ @Test(expected = ConcurrentModificationException.class)
+ public void givenHashmap_whenModifyUnderlyingCollection_thenConcurrentModificationExceptionThrown() {
+ HashMap map = new HashMap();
+ map.put("key1", "value1");
+ map.put("key2", "value2");
+ map.put("key3", "value3");
+
+ Iterator iterator = map.keySet().iterator();
+ while(iterator.hasNext()){
+ iterator.next();
+ map.put("key4", "value4");
+ }
+ }
+
+ @Test
+ public void givenHashtable_whenModifyUnderlyingCollection_thenItHasNoEffectOnIteratedCollection() {
+ Hashtable table = new Hashtable();
+ table.put("key1", "value1");
+ table.put("key2", "value2");
+
+ List keysSelected = Lists.newArrayList();
+ Enumeration keys = table.keys();
+ while (keys.hasMoreElements()) {
+ String key = keys.nextElement();
+ keysSelected.add(key);
+
+ if (key.equals("key1")) {
+ table.put("key3", "value3");
+ }
+ }
+
+ assertEquals(2, keysSelected.size());
+ }
+
+ // synchronized map
+ @Test
+ public void givenHashmap_thenCreateSynchronizedMap() {
+ HashMap map = new HashMap();
+ map.put("key1", "value1");
+ map.put("key2", "value2");
+ map.put("key3", "value3");
+
+ Set> set = map.entrySet();
+ synchronized (map) {
+ Iterator> it = set.iterator();
+ while(it.hasNext()) {
+ Map.Entry elem = (Map.Entry)it.next();
+ }
+ }
+
+ Map syncMap = Collections.synchronizedMap(map);
+ }
+}
diff --git a/core-java-concurrency/.gitignore b/core-java-concurrency-advanced/.gitignore
similarity index 100%
rename from core-java-concurrency/.gitignore
rename to core-java-concurrency-advanced/.gitignore
diff --git a/core-java-concurrency/README.md b/core-java-concurrency-advanced/README.md
similarity index 56%
rename from core-java-concurrency/README.md
rename to core-java-concurrency-advanced/README.md
index 2db7b91cde..bcbec9d687 100644
--- a/core-java-concurrency/README.md
+++ b/core-java-concurrency-advanced/README.md
@@ -1,33 +1,24 @@
=========
-## Core Java Concurrency Examples
+## Core Java Concurrency Advanced Examples
### Relevant Articles:
-- [Guide To CompletableFuture](http://www.baeldung.com/java-completablefuture)
-- [A Guide to the Java ExecutorService](http://www.baeldung.com/java-executor-service-tutorial)
- [Introduction to Thread Pools in Java](http://www.baeldung.com/thread-pool-java-and-guava)
-- [Guide to java.util.concurrent.Future](http://www.baeldung.com/java-future)
- [Guide to CountDownLatch in Java](http://www.baeldung.com/java-countdown-latch)
- [Guide to java.util.concurrent.Locks](http://www.baeldung.com/java-concurrent-locks)
- [An Introduction to ThreadLocal in Java](http://www.baeldung.com/java-threadlocal)
-- [Difference Between Wait and Sleep in Java](http://www.baeldung.com/java-wait-and-sleep)
- [LongAdder and LongAccumulator in Java](http://www.baeldung.com/java-longadder-and-longaccumulator)
- [The Dining Philosophers Problem in Java](http://www.baeldung.com/java-dining-philoshophers)
- [Guide to the Java Phaser](http://www.baeldung.com/java-phaser)
-- [Guide to Synchronized Keyword in Java](http://www.baeldung.com/java-synchronized)
- [An Introduction to Atomic Variables in Java](http://www.baeldung.com/java-atomic-variables)
- [CyclicBarrier in Java](http://www.baeldung.com/java-cyclic-barrier)
- [Guide to Volatile Keyword in Java](http://www.baeldung.com/java-volatile)
-- [Overview of the java.util.concurrent](http://www.baeldung.com/java-util-concurrent)
- [Semaphores in Java](http://www.baeldung.com/java-semaphore)
- [Daemon Threads in Java](http://www.baeldung.com/java-daemon-thread)
-- [Implementing a Runnable vs Extending a Thread](http://www.baeldung.com/java-runnable-vs-extending-thread)
-- [How to Kill a Java Thread](http://www.baeldung.com/java-thread-stop)
-- [ExecutorService - Waiting for Threads to Finish](http://www.baeldung.com/java-executor-wait-for-threads)
-- [wait and notify() Methods in Java](http://www.baeldung.com/java-wait-notify)
- [Priority-based Job Scheduling in Java](http://www.baeldung.com/java-priority-job-schedule)
-- [Life Cycle of a Thread in Java](http://www.baeldung.com/java-thread-lifecycle)
-- [Runnable vs. Callable in Java](http://www.baeldung.com/java-runnable-callable)
- [Brief Introduction to Java Thread.yield()](https://www.baeldung.com/java-thread-yield)
- [Print Even and Odd Numbers Using 2 Threads](https://www.baeldung.com/java-even-odd-numbers-with-2-threads)
- [Java CyclicBarrier vs CountDownLatch](https://www.baeldung.com/java-cyclicbarrier-countdownlatch)
+- [Guide to the Fork/Join Framework in Java](http://www.baeldung.com/java-fork-join)
+- [A Guide to ThreadLocalRandom in Java](http://www.baeldung.com/java-thread-local-random)
+- [The Thread.join() Method in Java](http://www.baeldung.com/java-thread-join)
\ No newline at end of file
diff --git a/core-java-concurrency/pom.xml b/core-java-concurrency-advanced/pom.xml
similarity index 78%
rename from core-java-concurrency/pom.xml
rename to core-java-concurrency-advanced/pom.xml
index bd22253c2c..1209cba619 100644
--- a/core-java-concurrency/pom.xml
+++ b/core-java-concurrency-advanced/pom.xml
@@ -2,10 +2,10 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
com.baeldung
- core-java-concurrency
+ core-java-concurrency-advanced
0.1.0-SNAPSHOT
jar
- core-java-concurrency
+ core-java-concurrency-advanced
com.baeldung
@@ -47,10 +47,20 @@
${avaitility.version}
test
+
+ org.openjdk.jmh
+ jmh-core
+ ${jmh-core.version}
+
+
+ org.openjdk.jmh
+ jmh-generator-annprocess
+ ${jmh-generator-annprocess.version}
+
- core-java-concurrency
+ core-java-concurrency-advanced
src/main/resources
@@ -69,6 +79,8 @@
3.6.1
1.7.0
+ 1.19
+ 1.19
diff --git a/core-java-concurrency/src/main/java/com/baeldung/concurrent/atomic/SafeCounterWithLock.java b/core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/atomic/SafeCounterWithLock.java
similarity index 94%
rename from core-java-concurrency/src/main/java/com/baeldung/concurrent/atomic/SafeCounterWithLock.java
rename to core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/atomic/SafeCounterWithLock.java
index e3a1629ce1..ef6b7ee8c8 100644
--- a/core-java-concurrency/src/main/java/com/baeldung/concurrent/atomic/SafeCounterWithLock.java
+++ b/core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/atomic/SafeCounterWithLock.java
@@ -1,13 +1,13 @@
-package com.baeldung.concurrent.atomic;
-
-public class SafeCounterWithLock {
- private volatile int counter;
-
- int getValue() {
- return counter;
- }
-
- synchronized void increment() {
- counter++;
- }
-}
+package com.baeldung.concurrent.atomic;
+
+public class SafeCounterWithLock {
+ private volatile int counter;
+
+ int getValue() {
+ return counter;
+ }
+
+ synchronized void increment() {
+ counter++;
+ }
+}
diff --git a/core-java-concurrency/src/main/java/com/baeldung/concurrent/atomic/SafeCounterWithoutLock.java b/core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/atomic/SafeCounterWithoutLock.java
similarity index 96%
rename from core-java-concurrency/src/main/java/com/baeldung/concurrent/atomic/SafeCounterWithoutLock.java
rename to core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/atomic/SafeCounterWithoutLock.java
index 18ade35efb..8b2aebba7c 100644
--- a/core-java-concurrency/src/main/java/com/baeldung/concurrent/atomic/SafeCounterWithoutLock.java
+++ b/core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/atomic/SafeCounterWithoutLock.java
@@ -1,21 +1,21 @@
-package com.baeldung.concurrent.atomic;
-
-import java.util.concurrent.atomic.AtomicInteger;
-
-public class SafeCounterWithoutLock {
- private final AtomicInteger counter = new AtomicInteger(0);
-
- int getValue() {
- return counter.get();
- }
-
- void increment() {
- while(true) {
- int existingValue = getValue();
- int newValue = existingValue + 1;
- if(counter.compareAndSet(existingValue, newValue)) {
- return;
- }
- }
- }
-}
+package com.baeldung.concurrent.atomic;
+
+import java.util.concurrent.atomic.AtomicInteger;
+
+public class SafeCounterWithoutLock {
+ private final AtomicInteger counter = new AtomicInteger(0);
+
+ int getValue() {
+ return counter.get();
+ }
+
+ void increment() {
+ while(true) {
+ int existingValue = getValue();
+ int newValue = existingValue + 1;
+ if(counter.compareAndSet(existingValue, newValue)) {
+ return;
+ }
+ }
+ }
+}
diff --git a/core-java-concurrency/src/main/java/com/baeldung/concurrent/atomic/UnsafeCounter.java b/core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/atomic/UnsafeCounter.java
similarity index 94%
rename from core-java-concurrency/src/main/java/com/baeldung/concurrent/atomic/UnsafeCounter.java
rename to core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/atomic/UnsafeCounter.java
index 500ef5bd7e..290c26b73d 100644
--- a/core-java-concurrency/src/main/java/com/baeldung/concurrent/atomic/UnsafeCounter.java
+++ b/core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/atomic/UnsafeCounter.java
@@ -1,13 +1,13 @@
-package com.baeldung.concurrent.atomic;
-
-public class UnsafeCounter {
- private int counter;
-
- int getValue() {
- return counter;
- }
-
- void increment() {
- counter++;
- }
-}
+package com.baeldung.concurrent.atomic;
+
+public class UnsafeCounter {
+ private int counter;
+
+ int getValue() {
+ return counter;
+ }
+
+ void increment() {
+ counter++;
+ }
+}
diff --git a/core-java-concurrency/src/main/java/com/baeldung/concurrent/countdownlatch/BrokenWorker.java b/core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/countdownlatch/BrokenWorker.java
similarity index 100%
rename from core-java-concurrency/src/main/java/com/baeldung/concurrent/countdownlatch/BrokenWorker.java
rename to core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/countdownlatch/BrokenWorker.java
diff --git a/core-java-concurrency/src/main/java/com/baeldung/concurrent/countdownlatch/CountdownLatchCountExample.java b/core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/countdownlatch/CountdownLatchCountExample.java
similarity index 100%
rename from core-java-concurrency/src/main/java/com/baeldung/concurrent/countdownlatch/CountdownLatchCountExample.java
rename to core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/countdownlatch/CountdownLatchCountExample.java
diff --git a/core-java-concurrency/src/main/java/com/baeldung/concurrent/countdownlatch/CountdownLatchResetExample.java b/core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/countdownlatch/CountdownLatchResetExample.java
similarity index 100%
rename from core-java-concurrency/src/main/java/com/baeldung/concurrent/countdownlatch/CountdownLatchResetExample.java
rename to core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/countdownlatch/CountdownLatchResetExample.java
diff --git a/core-java-concurrency/src/main/java/com/baeldung/concurrent/countdownlatch/WaitingWorker.java b/core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/countdownlatch/WaitingWorker.java
similarity index 100%
rename from core-java-concurrency/src/main/java/com/baeldung/concurrent/countdownlatch/WaitingWorker.java
rename to core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/countdownlatch/WaitingWorker.java
diff --git a/core-java-concurrency/src/main/java/com/baeldung/concurrent/countdownlatch/Worker.java b/core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/countdownlatch/Worker.java
similarity index 100%
rename from core-java-concurrency/src/main/java/com/baeldung/concurrent/countdownlatch/Worker.java
rename to core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/countdownlatch/Worker.java
diff --git a/core-java-concurrency/src/main/java/com/baeldung/concurrent/cyclicbarrier/CyclicBarrierCompletionMethodExample.java b/core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/cyclicbarrier/CyclicBarrierCompletionMethodExample.java
similarity index 100%
rename from core-java-concurrency/src/main/java/com/baeldung/concurrent/cyclicbarrier/CyclicBarrierCompletionMethodExample.java
rename to core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/cyclicbarrier/CyclicBarrierCompletionMethodExample.java
diff --git a/core-java-concurrency/src/main/java/com/baeldung/concurrent/cyclicbarrier/CyclicBarrierCountExample.java b/core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/cyclicbarrier/CyclicBarrierCountExample.java
similarity index 100%
rename from core-java-concurrency/src/main/java/com/baeldung/concurrent/cyclicbarrier/CyclicBarrierCountExample.java
rename to core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/cyclicbarrier/CyclicBarrierCountExample.java
diff --git a/core-java-concurrency/src/main/java/com/baeldung/concurrent/cyclicbarrier/CyclicBarrierDemo.java b/core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/cyclicbarrier/CyclicBarrierDemo.java
similarity index 100%
rename from core-java-concurrency/src/main/java/com/baeldung/concurrent/cyclicbarrier/CyclicBarrierDemo.java
rename to core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/cyclicbarrier/CyclicBarrierDemo.java
diff --git a/core-java-concurrency/src/main/java/com/baeldung/concurrent/cyclicbarrier/CyclicBarrierResetExample.java b/core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/cyclicbarrier/CyclicBarrierResetExample.java
similarity index 100%
rename from core-java-concurrency/src/main/java/com/baeldung/concurrent/cyclicbarrier/CyclicBarrierResetExample.java
rename to core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/cyclicbarrier/CyclicBarrierResetExample.java
diff --git a/core-java-concurrency/src/main/java/com/baeldung/concurrent/daemon/MultipleThreadsExample.java b/core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/daemon/MultipleThreadsExample.java
similarity index 100%
rename from core-java-concurrency/src/main/java/com/baeldung/concurrent/daemon/MultipleThreadsExample.java
rename to core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/daemon/MultipleThreadsExample.java
diff --git a/core-java-concurrency/src/main/java/com/baeldung/concurrent/daemon/NewThread.java b/core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/daemon/NewThread.java
similarity index 100%
rename from core-java-concurrency/src/main/java/com/baeldung/concurrent/daemon/NewThread.java
rename to core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/daemon/NewThread.java
diff --git a/core-java-concurrency/src/main/java/com/baeldung/concurrent/daemon/SingleThreadExample.java b/core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/daemon/SingleThreadExample.java
similarity index 100%
rename from core-java-concurrency/src/main/java/com/baeldung/concurrent/daemon/SingleThreadExample.java
rename to core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/daemon/SingleThreadExample.java
diff --git a/core-java-concurrency/src/main/java/com/baeldung/concurrent/diningphilosophers/DiningPhilosophers.java b/core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/diningphilosophers/DiningPhilosophers.java
similarity index 100%
rename from core-java-concurrency/src/main/java/com/baeldung/concurrent/diningphilosophers/DiningPhilosophers.java
rename to core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/diningphilosophers/DiningPhilosophers.java
diff --git a/core-java-concurrency/src/main/java/com/baeldung/concurrent/diningphilosophers/Philosopher.java b/core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/diningphilosophers/Philosopher.java
similarity index 100%
rename from core-java-concurrency/src/main/java/com/baeldung/concurrent/diningphilosophers/Philosopher.java
rename to core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/diningphilosophers/Philosopher.java
diff --git a/core-java-concurrency/src/main/java/com/baeldung/concurrent/evenandodd/PrintEvenOddSemaphore.java b/core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/evenandodd/PrintEvenOddSemaphore.java
similarity index 100%
rename from core-java-concurrency/src/main/java/com/baeldung/concurrent/evenandodd/PrintEvenOddSemaphore.java
rename to core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/evenandodd/PrintEvenOddSemaphore.java
diff --git a/core-java-concurrency/src/main/java/com/baeldung/concurrent/evenandodd/PrintEvenOddWaitNotify.java b/core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/evenandodd/PrintEvenOddWaitNotify.java
similarity index 100%
rename from core-java-concurrency/src/main/java/com/baeldung/concurrent/evenandodd/PrintEvenOddWaitNotify.java
rename to core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/evenandodd/PrintEvenOddWaitNotify.java
diff --git a/core-java-concurrency/src/main/java/com/baeldung/concurrent/locks/ReentrantLockWithCondition.java b/core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/locks/ReentrantLockWithCondition.java
similarity index 100%
rename from core-java-concurrency/src/main/java/com/baeldung/concurrent/locks/ReentrantLockWithCondition.java
rename to core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/locks/ReentrantLockWithCondition.java
diff --git a/core-java-concurrency/src/main/java/com/baeldung/concurrent/locks/SharedObjectWithLock.java b/core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/locks/SharedObjectWithLock.java
similarity index 100%
rename from core-java-concurrency/src/main/java/com/baeldung/concurrent/locks/SharedObjectWithLock.java
rename to core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/locks/SharedObjectWithLock.java
diff --git a/core-java-concurrency/src/main/java/com/baeldung/concurrent/locks/StampedLockDemo.java b/core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/locks/StampedLockDemo.java
similarity index 100%
rename from core-java-concurrency/src/main/java/com/baeldung/concurrent/locks/StampedLockDemo.java
rename to core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/locks/StampedLockDemo.java
diff --git a/core-java-concurrency/src/main/java/com/baeldung/concurrent/locks/SynchronizedHashMapWithRWLock.java b/core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/locks/SynchronizedHashMapWithRWLock.java
similarity index 100%
rename from core-java-concurrency/src/main/java/com/baeldung/concurrent/locks/SynchronizedHashMapWithRWLock.java
rename to core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/locks/SynchronizedHashMapWithRWLock.java
diff --git a/core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/parameter/AverageCalculator.java b/core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/parameter/AverageCalculator.java
new file mode 100644
index 0000000000..a548b5d4a7
--- /dev/null
+++ b/core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/parameter/AverageCalculator.java
@@ -0,0 +1,20 @@
+package com.baeldung.concurrent.parameter;
+
+import java.util.concurrent.Callable;
+import java.util.stream.IntStream;
+
+public class AverageCalculator implements Callable {
+
+ int[] numbers;
+
+ public AverageCalculator(int... parameter) {
+ this.numbers = parameter == null ? new int[0] : parameter;
+ }
+
+ @Override
+ public Double call() throws Exception {
+ return IntStream.of(this.numbers)
+ .average()
+ .orElse(0d);
+ }
+}
diff --git a/core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/parameter/ParameterizedThreadExample.java b/core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/parameter/ParameterizedThreadExample.java
new file mode 100644
index 0000000000..73c61f3fb1
--- /dev/null
+++ b/core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/parameter/ParameterizedThreadExample.java
@@ -0,0 +1,32 @@
+package com.baeldung.concurrent.parameter;
+
+import java.util.concurrent.Callable;
+import java.util.stream.IntStream;
+
+public class ParameterizedThreadExample {
+
+ public static void parameterisedThreadAnonymousClass() {
+ final String parameter = "123";
+ Thread parameterizedThread = new Thread(new Runnable() {
+
+ @Override
+ public void run() {
+ System.out.println(Thread.currentThread()
+ .getName() + " : " + parameter);
+ }
+ });
+
+ parameterizedThread.start();
+ }
+
+ public static Callable sumCalculator(int... numbers) {
+ return () -> numbers != null ? IntStream.of(numbers)
+ .sum() : 0;
+ }
+
+ public static Callable averageCalculator(int... numbers) {
+ return () -> numbers != null ? IntStream.of(numbers)
+ .average()
+ .orElse(0d) : 0d;
+ }
+}
diff --git a/core-java-concurrency/src/main/java/com/baeldung/concurrent/phaser/LongRunningAction.java b/core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/phaser/LongRunningAction.java
similarity index 100%
rename from core-java-concurrency/src/main/java/com/baeldung/concurrent/phaser/LongRunningAction.java
rename to core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/phaser/LongRunningAction.java
diff --git a/core-java-concurrency/src/main/java/com/baeldung/concurrent/prioritytaskexecution/Job.java b/core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/prioritytaskexecution/Job.java
similarity index 100%
rename from core-java-concurrency/src/main/java/com/baeldung/concurrent/prioritytaskexecution/Job.java
rename to core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/prioritytaskexecution/Job.java
diff --git a/core-java-concurrency/src/main/java/com/baeldung/concurrent/prioritytaskexecution/JobPriority.java b/core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/prioritytaskexecution/JobPriority.java
similarity index 100%
rename from core-java-concurrency/src/main/java/com/baeldung/concurrent/prioritytaskexecution/JobPriority.java
rename to core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/prioritytaskexecution/JobPriority.java
diff --git a/core-java-concurrency/src/main/java/com/baeldung/concurrent/prioritytaskexecution/PriorityJobScheduler.java b/core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/prioritytaskexecution/PriorityJobScheduler.java
similarity index 100%
rename from core-java-concurrency/src/main/java/com/baeldung/concurrent/prioritytaskexecution/PriorityJobScheduler.java
rename to core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/prioritytaskexecution/PriorityJobScheduler.java
diff --git a/core-java-concurrency/src/main/java/com/baeldung/concurrent/semaphores/CounterUsingMutex.java b/core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/semaphores/CounterUsingMutex.java
similarity index 100%
rename from core-java-concurrency/src/main/java/com/baeldung/concurrent/semaphores/CounterUsingMutex.java
rename to core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/semaphores/CounterUsingMutex.java
diff --git a/core-java-concurrency/src/main/java/com/baeldung/concurrent/semaphores/DelayQueueUsingTimedSemaphore.java b/core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/semaphores/DelayQueueUsingTimedSemaphore.java
similarity index 100%
rename from core-java-concurrency/src/main/java/com/baeldung/concurrent/semaphores/DelayQueueUsingTimedSemaphore.java
rename to core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/semaphores/DelayQueueUsingTimedSemaphore.java
diff --git a/core-java-concurrency/src/main/java/com/baeldung/concurrent/semaphores/LoginQueueUsingSemaphore.java b/core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/semaphores/LoginQueueUsingSemaphore.java
similarity index 100%
rename from core-java-concurrency/src/main/java/com/baeldung/concurrent/semaphores/LoginQueueUsingSemaphore.java
rename to core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/semaphores/LoginQueueUsingSemaphore.java
diff --git a/core-java-concurrency/src/main/java/com/baeldung/concurrent/volatilekeyword/SharedObject.java b/core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/volatilekeyword/SharedObject.java
similarity index 100%
rename from core-java-concurrency/src/main/java/com/baeldung/concurrent/volatilekeyword/SharedObject.java
rename to core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/volatilekeyword/SharedObject.java
diff --git a/core-java-concurrency/src/main/java/com/baeldung/concurrent/yield/ThreadYield.java b/core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/yield/ThreadYield.java
similarity index 100%
rename from core-java-concurrency/src/main/java/com/baeldung/concurrent/yield/ThreadYield.java
rename to core-java-concurrency-advanced/src/main/java/com/baeldung/concurrent/yield/ThreadYield.java
diff --git a/core-java/src/main/java/com/baeldung/forkjoin/CustomRecursiveAction.java b/core-java-concurrency-advanced/src/main/java/com/baeldung/forkjoin/CustomRecursiveAction.java
similarity index 100%
rename from core-java/src/main/java/com/baeldung/forkjoin/CustomRecursiveAction.java
rename to core-java-concurrency-advanced/src/main/java/com/baeldung/forkjoin/CustomRecursiveAction.java
diff --git a/core-java/src/main/java/com/baeldung/forkjoin/CustomRecursiveTask.java b/core-java-concurrency-advanced/src/main/java/com/baeldung/forkjoin/CustomRecursiveTask.java
similarity index 100%
rename from core-java/src/main/java/com/baeldung/forkjoin/CustomRecursiveTask.java
rename to core-java-concurrency-advanced/src/main/java/com/baeldung/forkjoin/CustomRecursiveTask.java
diff --git a/core-java/src/main/java/com/baeldung/forkjoin/util/PoolUtil.java b/core-java-concurrency-advanced/src/main/java/com/baeldung/forkjoin/util/PoolUtil.java
similarity index 100%
rename from core-java/src/main/java/com/baeldung/forkjoin/util/PoolUtil.java
rename to core-java-concurrency-advanced/src/main/java/com/baeldung/forkjoin/util/PoolUtil.java
diff --git a/core-java-concurrency/src/main/java/com/baeldung/threadlocal/Context.java b/core-java-concurrency-advanced/src/main/java/com/baeldung/threadlocal/Context.java
similarity index 100%
rename from core-java-concurrency/src/main/java/com/baeldung/threadlocal/Context.java
rename to core-java-concurrency-advanced/src/main/java/com/baeldung/threadlocal/Context.java
diff --git a/core-java-concurrency/src/main/java/com/baeldung/threadlocal/SharedMapWithUserContext.java b/core-java-concurrency-advanced/src/main/java/com/baeldung/threadlocal/SharedMapWithUserContext.java
similarity index 100%
rename from core-java-concurrency/src/main/java/com/baeldung/threadlocal/SharedMapWithUserContext.java
rename to core-java-concurrency-advanced/src/main/java/com/baeldung/threadlocal/SharedMapWithUserContext.java
diff --git a/core-java-concurrency/src/main/java/com/baeldung/threadlocal/ThreadLocalWithUserContext.java b/core-java-concurrency-advanced/src/main/java/com/baeldung/threadlocal/ThreadLocalWithUserContext.java
similarity index 100%
rename from core-java-concurrency/src/main/java/com/baeldung/threadlocal/ThreadLocalWithUserContext.java
rename to core-java-concurrency-advanced/src/main/java/com/baeldung/threadlocal/ThreadLocalWithUserContext.java
diff --git a/core-java-concurrency/src/main/java/com/baeldung/threadlocal/UserRepository.java b/core-java-concurrency-advanced/src/main/java/com/baeldung/threadlocal/UserRepository.java
similarity index 100%
rename from core-java-concurrency/src/main/java/com/baeldung/threadlocal/UserRepository.java
rename to core-java-concurrency-advanced/src/main/java/com/baeldung/threadlocal/UserRepository.java
diff --git a/core-java/src/main/java/com/baeldung/threadlocalrandom/ThreadLocalRandomBenchMarkRunner.java b/core-java-concurrency-advanced/src/main/java/com/baeldung/threadlocalrandom/ThreadLocalRandomBenchMarkRunner.java
similarity index 100%
rename from core-java/src/main/java/com/baeldung/threadlocalrandom/ThreadLocalRandomBenchMarkRunner.java
rename to core-java-concurrency-advanced/src/main/java/com/baeldung/threadlocalrandom/ThreadLocalRandomBenchMarkRunner.java
diff --git a/core-java/src/main/java/com/baeldung/threadlocalrandom/ThreadLocalRandomBenchMarker.java b/core-java-concurrency-advanced/src/main/java/com/baeldung/threadlocalrandom/ThreadLocalRandomBenchMarker.java
similarity index 100%
rename from core-java/src/main/java/com/baeldung/threadlocalrandom/ThreadLocalRandomBenchMarker.java
rename to core-java-concurrency-advanced/src/main/java/com/baeldung/threadlocalrandom/ThreadLocalRandomBenchMarker.java
diff --git a/core-java-concurrency/src/main/java/com/baeldung/threadpool/CountingTask.java b/core-java-concurrency-advanced/src/main/java/com/baeldung/threadpool/CountingTask.java
similarity index 100%
rename from core-java-concurrency/src/main/java/com/baeldung/threadpool/CountingTask.java
rename to core-java-concurrency-advanced/src/main/java/com/baeldung/threadpool/CountingTask.java
diff --git a/core-java-concurrency/src/main/java/com/baeldung/threadpool/ExitingExecutorServiceExample.java b/core-java-concurrency-advanced/src/main/java/com/baeldung/threadpool/ExitingExecutorServiceExample.java
similarity index 100%
rename from core-java-concurrency/src/main/java/com/baeldung/threadpool/ExitingExecutorServiceExample.java
rename to core-java-concurrency-advanced/src/main/java/com/baeldung/threadpool/ExitingExecutorServiceExample.java
diff --git a/core-java-concurrency/src/main/java/com/baeldung/threadpool/TreeNode.java b/core-java-concurrency-advanced/src/main/java/com/baeldung/threadpool/TreeNode.java
similarity index 100%
rename from core-java-concurrency/src/main/java/com/baeldung/threadpool/TreeNode.java
rename to core-java-concurrency-advanced/src/main/java/com/baeldung/threadpool/TreeNode.java
diff --git a/core-java-concurrency/src/main/java/log4j.properties b/core-java-concurrency-advanced/src/main/java/log4j.properties
similarity index 100%
rename from core-java-concurrency/src/main/java/log4j.properties
rename to core-java-concurrency-advanced/src/main/java/log4j.properties
diff --git a/core-java-concurrency/src/main/resources/logback.xml b/core-java-concurrency-advanced/src/main/resources/logback.xml
similarity index 100%
rename from core-java-concurrency/src/main/resources/logback.xml
rename to core-java-concurrency-advanced/src/main/resources/logback.xml
diff --git a/core-java-concurrency/src/test/java/com/baeldung/concurrent/accumulator/LongAccumulatorUnitTest.java b/core-java-concurrency-advanced/src/test/java/com/baeldung/concurrent/accumulator/LongAccumulatorUnitTest.java
similarity index 100%
rename from core-java-concurrency/src/test/java/com/baeldung/concurrent/accumulator/LongAccumulatorUnitTest.java
rename to core-java-concurrency-advanced/src/test/java/com/baeldung/concurrent/accumulator/LongAccumulatorUnitTest.java
diff --git a/core-java-concurrency/src/test/java/com/baeldung/concurrent/adder/LongAdderUnitTest.java b/core-java-concurrency-advanced/src/test/java/com/baeldung/concurrent/adder/LongAdderUnitTest.java
similarity index 100%
rename from core-java-concurrency/src/test/java/com/baeldung/concurrent/adder/LongAdderUnitTest.java
rename to core-java-concurrency-advanced/src/test/java/com/baeldung/concurrent/adder/LongAdderUnitTest.java
diff --git a/core-java-concurrency/src/test/java/com/baeldung/concurrent/atomic/ThreadSafeCounterIntegrationTest.java b/core-java-concurrency-advanced/src/test/java/com/baeldung/concurrent/atomic/ThreadSafeCounterIntegrationTest.java
similarity index 97%
rename from core-java-concurrency/src/test/java/com/baeldung/concurrent/atomic/ThreadSafeCounterIntegrationTest.java
rename to core-java-concurrency-advanced/src/test/java/com/baeldung/concurrent/atomic/ThreadSafeCounterIntegrationTest.java
index 4eead471f8..c3c44b40cf 100644
--- a/core-java-concurrency/src/test/java/com/baeldung/concurrent/atomic/ThreadSafeCounterIntegrationTest.java
+++ b/core-java-concurrency-advanced/src/test/java/com/baeldung/concurrent/atomic/ThreadSafeCounterIntegrationTest.java
@@ -1,38 +1,38 @@
-package com.baeldung.concurrent.atomic;
-
-import static org.junit.Assert.assertEquals;
-
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.TimeUnit;
-import java.util.stream.IntStream;
-
-import org.junit.Test;
-
-public class ThreadSafeCounterIntegrationTest {
-
- @Test
- public void givenMultiThread_whenSafeCounterWithLockIncrement() throws InterruptedException {
- ExecutorService service = Executors.newFixedThreadPool(3);
- SafeCounterWithLock safeCounter = new SafeCounterWithLock();
-
- IntStream.range(0, 1000)
- .forEach(count -> service.submit(safeCounter::increment));
- service.awaitTermination(100, TimeUnit.MILLISECONDS);
-
- assertEquals(1000, safeCounter.getValue());
- }
-
- @Test
- public void givenMultiThread_whenSafeCounterWithoutLockIncrement() throws InterruptedException {
- ExecutorService service = Executors.newFixedThreadPool(3);
- SafeCounterWithoutLock safeCounter = new SafeCounterWithoutLock();
-
- IntStream.range(0, 1000)
- .forEach(count -> service.submit(safeCounter::increment));
- service.awaitTermination(100, TimeUnit.MILLISECONDS);
-
- assertEquals(1000, safeCounter.getValue());
- }
-
-}
+package com.baeldung.concurrent.atomic;
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.TimeUnit;
+import java.util.stream.IntStream;
+
+import org.junit.Test;
+
+public class ThreadSafeCounterIntegrationTest {
+
+ @Test
+ public void givenMultiThread_whenSafeCounterWithLockIncrement() throws InterruptedException {
+ ExecutorService service = Executors.newFixedThreadPool(3);
+ SafeCounterWithLock safeCounter = new SafeCounterWithLock();
+
+ IntStream.range(0, 1000)
+ .forEach(count -> service.submit(safeCounter::increment));
+ service.awaitTermination(100, TimeUnit.MILLISECONDS);
+
+ assertEquals(1000, safeCounter.getValue());
+ }
+
+ @Test
+ public void givenMultiThread_whenSafeCounterWithoutLockIncrement() throws InterruptedException {
+ ExecutorService service = Executors.newFixedThreadPool(3);
+ SafeCounterWithoutLock safeCounter = new SafeCounterWithoutLock();
+
+ IntStream.range(0, 1000)
+ .forEach(count -> service.submit(safeCounter::increment));
+ service.awaitTermination(100, TimeUnit.MILLISECONDS);
+
+ assertEquals(1000, safeCounter.getValue());
+ }
+
+}
diff --git a/core-java-concurrency/src/test/java/com/baeldung/concurrent/atomic/ThreadUnsafeCounterManualTest.java b/core-java-concurrency-advanced/src/test/java/com/baeldung/concurrent/atomic/ThreadUnsafeCounterManualTest.java
similarity index 97%
rename from core-java-concurrency/src/test/java/com/baeldung/concurrent/atomic/ThreadUnsafeCounterManualTest.java
rename to core-java-concurrency-advanced/src/test/java/com/baeldung/concurrent/atomic/ThreadUnsafeCounterManualTest.java
index cc7cc18bb5..bf451e58de 100644
--- a/core-java-concurrency/src/test/java/com/baeldung/concurrent/atomic/ThreadUnsafeCounterManualTest.java
+++ b/core-java-concurrency-advanced/src/test/java/com/baeldung/concurrent/atomic/ThreadUnsafeCounterManualTest.java
@@ -1,33 +1,33 @@
-package com.baeldung.concurrent.atomic;
-
-import static org.junit.Assert.assertEquals;
-
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.TimeUnit;
-import java.util.stream.IntStream;
-
-import org.junit.Test;
-
-/**
- * This test shows the behaviour of a thread-unsafe class in a multithreaded scenario. We are calling
- * the increment methods 1000 times from a pool of 3 threads. In most of the cases, the counter will
- * less than 1000, because of lost updates, however, occasionally it may reach 1000, when no threads
- * called the method simultaneously. This may cause the build to fail occasionally. Hence excluding this
- * test from build by adding this in manual test
- */
-public class ThreadUnsafeCounterManualTest {
-
- @Test
- public void givenMultiThread_whenUnsafeCounterIncrement() throws InterruptedException {
- ExecutorService service = Executors.newFixedThreadPool(3);
- UnsafeCounter unsafeCounter = new UnsafeCounter();
-
- IntStream.range(0, 1000)
- .forEach(count -> service.submit(unsafeCounter::increment));
- service.awaitTermination(100, TimeUnit.MILLISECONDS);
-
- assertEquals(1000, unsafeCounter.getValue());
- }
-
-}
+package com.baeldung.concurrent.atomic;
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.TimeUnit;
+import java.util.stream.IntStream;
+
+import org.junit.Test;
+
+/**
+ * This test shows the behaviour of a thread-unsafe class in a multithreaded scenario. We are calling
+ * the increment methods 1000 times from a pool of 3 threads. In most of the cases, the counter will
+ * less than 1000, because of lost updates, however, occasionally it may reach 1000, when no threads
+ * called the method simultaneously. This may cause the build to fail occasionally. Hence excluding this
+ * test from build by adding this in manual test
+ */
+public class ThreadUnsafeCounterManualTest {
+
+ @Test
+ public void givenMultiThread_whenUnsafeCounterIncrement() throws InterruptedException {
+ ExecutorService service = Executors.newFixedThreadPool(3);
+ UnsafeCounter unsafeCounter = new UnsafeCounter();
+
+ IntStream.range(0, 1000)
+ .forEach(count -> service.submit(unsafeCounter::increment));
+ service.awaitTermination(100, TimeUnit.MILLISECONDS);
+
+ assertEquals(1000, unsafeCounter.getValue());
+ }
+
+}
diff --git a/core-java-concurrency/src/test/java/com/baeldung/concurrent/countdownlatch/CountdownLatchCountExampleUnitTest.java b/core-java-concurrency-advanced/src/test/java/com/baeldung/concurrent/countdownlatch/CountdownLatchCountExampleUnitTest.java
similarity index 100%
rename from core-java-concurrency/src/test/java/com/baeldung/concurrent/countdownlatch/CountdownLatchCountExampleUnitTest.java
rename to core-java-concurrency-advanced/src/test/java/com/baeldung/concurrent/countdownlatch/CountdownLatchCountExampleUnitTest.java
diff --git a/core-java-concurrency/src/test/java/com/baeldung/concurrent/countdownlatch/CountdownLatchExampleIntegrationTest.java b/core-java-concurrency-advanced/src/test/java/com/baeldung/concurrent/countdownlatch/CountdownLatchExampleIntegrationTest.java
similarity index 100%
rename from core-java-concurrency/src/test/java/com/baeldung/concurrent/countdownlatch/CountdownLatchExampleIntegrationTest.java
rename to core-java-concurrency-advanced/src/test/java/com/baeldung/concurrent/countdownlatch/CountdownLatchExampleIntegrationTest.java
diff --git a/core-java-concurrency/src/test/java/com/baeldung/concurrent/countdownlatch/CountdownLatchResetExampleUnitTest.java b/core-java-concurrency-advanced/src/test/java/com/baeldung/concurrent/countdownlatch/CountdownLatchResetExampleUnitTest.java
similarity index 100%
rename from core-java-concurrency/src/test/java/com/baeldung/concurrent/countdownlatch/CountdownLatchResetExampleUnitTest.java
rename to core-java-concurrency-advanced/src/test/java/com/baeldung/concurrent/countdownlatch/CountdownLatchResetExampleUnitTest.java
diff --git a/core-java-concurrency/src/test/java/com/baeldung/concurrent/cyclicbarrier/CyclicBarrierCompletionMethodExampleUnitTest.java b/core-java-concurrency-advanced/src/test/java/com/baeldung/concurrent/cyclicbarrier/CyclicBarrierCompletionMethodExampleUnitTest.java
similarity index 100%
rename from core-java-concurrency/src/test/java/com/baeldung/concurrent/cyclicbarrier/CyclicBarrierCompletionMethodExampleUnitTest.java
rename to core-java-concurrency-advanced/src/test/java/com/baeldung/concurrent/cyclicbarrier/CyclicBarrierCompletionMethodExampleUnitTest.java
diff --git a/core-java-concurrency/src/test/java/com/baeldung/concurrent/cyclicbarrier/CyclicBarrierCountExampleUnitTest.java b/core-java-concurrency-advanced/src/test/java/com/baeldung/concurrent/cyclicbarrier/CyclicBarrierCountExampleUnitTest.java
similarity index 100%
rename from core-java-concurrency/src/test/java/com/baeldung/concurrent/cyclicbarrier/CyclicBarrierCountExampleUnitTest.java
rename to core-java-concurrency-advanced/src/test/java/com/baeldung/concurrent/cyclicbarrier/CyclicBarrierCountExampleUnitTest.java
diff --git a/core-java-concurrency/src/test/java/com/baeldung/concurrent/cyclicbarrier/CyclicBarrierResetExampleUnitTest.java b/core-java-concurrency-advanced/src/test/java/com/baeldung/concurrent/cyclicbarrier/CyclicBarrierResetExampleUnitTest.java
similarity index 100%
rename from core-java-concurrency/src/test/java/com/baeldung/concurrent/cyclicbarrier/CyclicBarrierResetExampleUnitTest.java
rename to core-java-concurrency-advanced/src/test/java/com/baeldung/concurrent/cyclicbarrier/CyclicBarrierResetExampleUnitTest.java
diff --git a/core-java-concurrency/src/test/java/com/baeldung/concurrent/daemon/DaemonThreadUnitTest.java b/core-java-concurrency-advanced/src/test/java/com/baeldung/concurrent/daemon/DaemonThreadUnitTest.java
similarity index 100%
rename from core-java-concurrency/src/test/java/com/baeldung/concurrent/daemon/DaemonThreadUnitTest.java
rename to core-java-concurrency-advanced/src/test/java/com/baeldung/concurrent/daemon/DaemonThreadUnitTest.java
diff --git a/core-java-concurrency/src/test/java/com/baeldung/concurrent/locks/SharedObjectWithLockManualTest.java b/core-java-concurrency-advanced/src/test/java/com/baeldung/concurrent/locks/SharedObjectWithLockManualTest.java
similarity index 100%
rename from core-java-concurrency/src/test/java/com/baeldung/concurrent/locks/SharedObjectWithLockManualTest.java
rename to core-java-concurrency-advanced/src/test/java/com/baeldung/concurrent/locks/SharedObjectWithLockManualTest.java
diff --git a/core-java-concurrency/src/test/java/com/baeldung/concurrent/locks/SynchronizedHashMapWithRWLockManualTest.java b/core-java-concurrency-advanced/src/test/java/com/baeldung/concurrent/locks/SynchronizedHashMapWithRWLockManualTest.java
similarity index 100%
rename from core-java-concurrency/src/test/java/com/baeldung/concurrent/locks/SynchronizedHashMapWithRWLockManualTest.java
rename to core-java-concurrency-advanced/src/test/java/com/baeldung/concurrent/locks/SynchronizedHashMapWithRWLockManualTest.java
diff --git a/core-java-concurrency/src/test/java/com/baeldung/concurrent/phaser/PhaserUnitTest.java b/core-java-concurrency-advanced/src/test/java/com/baeldung/concurrent/phaser/PhaserUnitTest.java
similarity index 100%
rename from core-java-concurrency/src/test/java/com/baeldung/concurrent/phaser/PhaserUnitTest.java
rename to core-java-concurrency-advanced/src/test/java/com/baeldung/concurrent/phaser/PhaserUnitTest.java
diff --git a/core-java-concurrency/src/test/java/com/baeldung/concurrent/prioritytaskexecution/PriorityJobSchedulerUnitTest.java b/core-java-concurrency-advanced/src/test/java/com/baeldung/concurrent/prioritytaskexecution/PriorityJobSchedulerUnitTest.java
similarity index 100%
rename from core-java-concurrency/src/test/java/com/baeldung/concurrent/prioritytaskexecution/PriorityJobSchedulerUnitTest.java
rename to core-java-concurrency-advanced/src/test/java/com/baeldung/concurrent/prioritytaskexecution/PriorityJobSchedulerUnitTest.java
diff --git a/core-java-concurrency/src/test/java/com/baeldung/concurrent/semaphores/SemaphoresManualTest.java b/core-java-concurrency-advanced/src/test/java/com/baeldung/concurrent/semaphores/SemaphoresManualTest.java
similarity index 100%
rename from core-java-concurrency/src/test/java/com/baeldung/concurrent/semaphores/SemaphoresManualTest.java
rename to core-java-concurrency-advanced/src/test/java/com/baeldung/concurrent/semaphores/SemaphoresManualTest.java
diff --git a/core-java-concurrency/src/test/java/com/baeldung/concurrent/volatilekeyword/SharedObjectManualTest.java b/core-java-concurrency-advanced/src/test/java/com/baeldung/concurrent/volatilekeyword/SharedObjectManualTest.java
similarity index 100%
rename from core-java-concurrency/src/test/java/com/baeldung/concurrent/volatilekeyword/SharedObjectManualTest.java
rename to core-java-concurrency-advanced/src/test/java/com/baeldung/concurrent/volatilekeyword/SharedObjectManualTest.java
diff --git a/core-java/src/test/java/com/baeldung/java8/Java8ForkJoinIntegrationTest.java b/core-java-concurrency-advanced/src/test/java/com/baeldung/java8/Java8ForkJoinIntegrationTest.java
similarity index 100%
rename from core-java/src/test/java/com/baeldung/java8/Java8ForkJoinIntegrationTest.java
rename to core-java-concurrency-advanced/src/test/java/com/baeldung/java8/Java8ForkJoinIntegrationTest.java
diff --git a/core-java-concurrency-advanced/src/test/java/com/baeldung/parameters/ParameterizedThreadUnitTest.java b/core-java-concurrency-advanced/src/test/java/com/baeldung/parameters/ParameterizedThreadUnitTest.java
new file mode 100644
index 0000000000..21b374e609
--- /dev/null
+++ b/core-java-concurrency-advanced/src/test/java/com/baeldung/parameters/ParameterizedThreadUnitTest.java
@@ -0,0 +1,43 @@
+package com.baeldung.parameters;
+
+import com.baeldung.concurrent.parameter.AverageCalculator;
+import org.junit.Test;
+
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+import java.util.stream.IntStream;
+
+import static org.junit.Assert.assertEquals;
+
+public class ParameterizedThreadUnitTest {
+
+ @Test
+ public void whenSendingParameterToCallable_thenSuccessful() throws Exception {
+ ExecutorService executorService = Executors.newSingleThreadExecutor();
+ Future result = executorService.submit(new AverageCalculator(1, 2, 3));
+ try {
+ assertEquals(Double.valueOf(2.0), result.get());
+ } finally {
+ executorService.shutdown();
+ }
+ }
+
+ @Test
+ public void whenParametersToThreadWithLamda_thenParametersPassedCorrectly() throws Exception {
+ ExecutorService executorService = Executors.newFixedThreadPool(2);
+ int[] numbers = new int[] { 4, 5, 6 };
+ try {
+ Future sumResult = executorService.submit(() -> IntStream.of(numbers)
+ .sum());
+ Future averageResult = executorService.submit(() -> IntStream.of(numbers)
+ .average()
+ .orElse(0d));
+ assertEquals(Integer.valueOf(15), sumResult.get());
+ assertEquals(Double.valueOf(5.0), averageResult.get());
+ } finally {
+ executorService.shutdown();
+ }
+ }
+
+}
diff --git a/core-java/src/test/java/com/baeldung/thread/join/ThreadJoinUnitTest.java b/core-java-concurrency-advanced/src/test/java/com/baeldung/thread/join/ThreadJoinUnitTest.java
similarity index 100%
rename from core-java/src/test/java/com/baeldung/thread/join/ThreadJoinUnitTest.java
rename to core-java-concurrency-advanced/src/test/java/com/baeldung/thread/join/ThreadJoinUnitTest.java
diff --git a/core-java-concurrency/src/test/java/com/baeldung/threadlocal/ThreadLocalIntegrationTest.java b/core-java-concurrency-advanced/src/test/java/com/baeldung/threadlocal/ThreadLocalIntegrationTest.java
similarity index 100%
rename from core-java-concurrency/src/test/java/com/baeldung/threadlocal/ThreadLocalIntegrationTest.java
rename to core-java-concurrency-advanced/src/test/java/com/baeldung/threadlocal/ThreadLocalIntegrationTest.java
diff --git a/core-java/src/test/java/com/baeldung/threadlocalrandom/ThreadLocalRandomIntegrationTest.java b/core-java-concurrency-advanced/src/test/java/com/baeldung/threadlocalrandom/ThreadLocalRandomIntegrationTest.java
similarity index 100%
rename from core-java/src/test/java/com/baeldung/threadlocalrandom/ThreadLocalRandomIntegrationTest.java
rename to core-java-concurrency-advanced/src/test/java/com/baeldung/threadlocalrandom/ThreadLocalRandomIntegrationTest.java
diff --git a/core-java-concurrency/src/test/java/com/baeldung/threadpool/CoreThreadPoolIntegrationTest.java b/core-java-concurrency-advanced/src/test/java/com/baeldung/threadpool/CoreThreadPoolIntegrationTest.java
similarity index 100%
rename from core-java-concurrency/src/test/java/com/baeldung/threadpool/CoreThreadPoolIntegrationTest.java
rename to core-java-concurrency-advanced/src/test/java/com/baeldung/threadpool/CoreThreadPoolIntegrationTest.java
diff --git a/core-java-concurrency/src/test/java/com/baeldung/threadpool/GuavaThreadPoolIntegrationTest.java b/core-java-concurrency-advanced/src/test/java/com/baeldung/threadpool/GuavaThreadPoolIntegrationTest.java
similarity index 100%
rename from core-java-concurrency/src/test/java/com/baeldung/threadpool/GuavaThreadPoolIntegrationTest.java
rename to core-java-concurrency-advanced/src/test/java/com/baeldung/threadpool/GuavaThreadPoolIntegrationTest.java
diff --git a/core-java-concurrency/src/test/resources/.gitignore b/core-java-concurrency-advanced/src/test/resources/.gitignore
similarity index 100%
rename from core-java-concurrency/src/test/resources/.gitignore
rename to core-java-concurrency-advanced/src/test/resources/.gitignore
diff --git a/core-java-concurrency-basic/.gitignore b/core-java-concurrency-basic/.gitignore
new file mode 100644
index 0000000000..3de4cc647e
--- /dev/null
+++ b/core-java-concurrency-basic/.gitignore
@@ -0,0 +1,26 @@
+*.class
+
+0.*
+
+#folders#
+/target
+/neoDb*
+/data
+/src/main/webapp/WEB-INF/classes
+*/META-INF/*
+.resourceCache
+
+# Packaged files #
+*.jar
+*.war
+*.ear
+
+# Files generated by integration tests
+*.txt
+backup-pom.xml
+/bin/
+/temp
+
+#IntelliJ specific
+.idea/
+*.iml
\ No newline at end of file
diff --git a/core-java-concurrency-basic/README.md b/core-java-concurrency-basic/README.md
new file mode 100644
index 0000000000..1c43149d03
--- /dev/null
+++ b/core-java-concurrency-basic/README.md
@@ -0,0 +1,17 @@
+=========
+
+## Core Java Concurrency Basic Examples
+
+### Relevant Articles:
+- [Guide To CompletableFuture](http://www.baeldung.com/java-completablefuture)
+- [A Guide to the Java ExecutorService](http://www.baeldung.com/java-executor-service-tutorial)
+- [Guide to java.util.concurrent.Future](http://www.baeldung.com/java-future)
+- [Difference Between Wait and Sleep in Java](http://www.baeldung.com/java-wait-and-sleep)
+- [Guide to Synchronized Keyword in Java](http://www.baeldung.com/java-synchronized)
+- [Overview of the java.util.concurrent](http://www.baeldung.com/java-util-concurrent)
+- [Implementing a Runnable vs Extending a Thread](http://www.baeldung.com/java-runnable-vs-extending-thread)
+- [How to Kill a Java Thread](http://www.baeldung.com/java-thread-stop)
+- [ExecutorService - Waiting for Threads to Finish](http://www.baeldung.com/java-executor-wait-for-threads)
+- [wait and notify() Methods in Java](http://www.baeldung.com/java-wait-notify)
+- [Life Cycle of a Thread in Java](http://www.baeldung.com/java-thread-lifecycle)
+- [Runnable vs. Callable in Java](http://www.baeldung.com/java-runnable-callable)
\ No newline at end of file
diff --git a/core-java-concurrency-basic/pom.xml b/core-java-concurrency-basic/pom.xml
new file mode 100644
index 0000000000..3544403aca
--- /dev/null
+++ b/core-java-concurrency-basic/pom.xml
@@ -0,0 +1,55 @@
+
+ 4.0.0
+ com.baeldung
+ core-java-concurrency-basic
+ 0.1.0-SNAPSHOT
+ jar
+ core-java-concurrency-basic
+
+
+ com.baeldung
+ parent-java
+ 0.0.1-SNAPSHOT
+ ../parent-java
+
+
+
+
+ org.apache.commons
+ commons-lang3
+ ${commons-lang3.version}
+
+
+ org.assertj
+ assertj-core
+ ${assertj.version}
+ test
+
+
+ com.jayway.awaitility
+ awaitility
+ ${avaitility.version}
+ test
+
+
+
+
+ core-java-concurrency-basic
+
+
+ src/main/resources
+ true
+
+
+
+
+
+
+ 3.5
+
+ 3.6.1
+ 1.7.0
+
+
+
diff --git a/core-java-concurrency/src/main/java/com/baeldung/concurrent/Scheduledexecutorservice/ScheduledExecutorServiceDemo.java b/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/Scheduledexecutorservice/ScheduledExecutorServiceDemo.java
similarity index 100%
rename from core-java-concurrency/src/main/java/com/baeldung/concurrent/Scheduledexecutorservice/ScheduledExecutorServiceDemo.java
rename to core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/Scheduledexecutorservice/ScheduledExecutorServiceDemo.java
diff --git a/core-java-concurrency/src/main/java/com/baeldung/concurrent/callable/FactorialTask.java b/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/callable/FactorialTask.java
similarity index 100%
rename from core-java-concurrency/src/main/java/com/baeldung/concurrent/callable/FactorialTask.java
rename to core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/callable/FactorialTask.java
diff --git a/core-java-concurrency/src/main/java/com/baeldung/concurrent/cyclicbarrier/CyclicBarrierExample.java b/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/cyclicbarrier/CyclicBarrierExample.java
similarity index 100%
rename from core-java-concurrency/src/main/java/com/baeldung/concurrent/cyclicbarrier/CyclicBarrierExample.java
rename to core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/cyclicbarrier/CyclicBarrierExample.java
diff --git a/core-java-concurrency/src/main/java/com/baeldung/concurrent/cyclicbarrier/Task.java b/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/cyclicbarrier/Task.java
similarity index 100%
rename from core-java-concurrency/src/main/java/com/baeldung/concurrent/cyclicbarrier/Task.java
rename to core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/cyclicbarrier/Task.java
diff --git a/core-java-concurrency/src/main/java/com/baeldung/concurrent/executor/ExecutorDemo.java b/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/executor/ExecutorDemo.java
similarity index 100%
rename from core-java-concurrency/src/main/java/com/baeldung/concurrent/executor/ExecutorDemo.java
rename to core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/executor/ExecutorDemo.java
diff --git a/core-java-concurrency/src/main/java/com/baeldung/concurrent/executor/Invoker.java b/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/executor/Invoker.java
similarity index 100%
rename from core-java-concurrency/src/main/java/com/baeldung/concurrent/executor/Invoker.java
rename to core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/executor/Invoker.java
diff --git a/core-java-concurrency/src/main/java/com/baeldung/concurrent/executorservice/DelayedCallable.java b/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/executorservice/DelayedCallable.java
similarity index 100%
rename from core-java-concurrency/src/main/java/com/baeldung/concurrent/executorservice/DelayedCallable.java
rename to core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/executorservice/DelayedCallable.java
diff --git a/core-java-concurrency/src/main/java/com/baeldung/concurrent/executorservice/ExecutorServiceDemo.java b/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/executorservice/ExecutorServiceDemo.java
similarity index 100%
rename from core-java-concurrency/src/main/java/com/baeldung/concurrent/executorservice/ExecutorServiceDemo.java
rename to core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/executorservice/ExecutorServiceDemo.java
diff --git a/core-java-concurrency/src/main/java/com/baeldung/concurrent/executorservice/Task.java b/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/executorservice/Task.java
similarity index 100%
rename from core-java-concurrency/src/main/java/com/baeldung/concurrent/executorservice/Task.java
rename to core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/executorservice/Task.java
diff --git a/core-java-concurrency/src/main/java/com/baeldung/concurrent/future/FactorialSquareCalculator.java b/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/future/FactorialSquareCalculator.java
similarity index 100%
rename from core-java-concurrency/src/main/java/com/baeldung/concurrent/future/FactorialSquareCalculator.java
rename to core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/future/FactorialSquareCalculator.java
diff --git a/core-java-concurrency/src/main/java/com/baeldung/concurrent/future/FutureDemo.java b/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/future/FutureDemo.java
similarity index 100%
rename from core-java-concurrency/src/main/java/com/baeldung/concurrent/future/FutureDemo.java
rename to core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/future/FutureDemo.java
diff --git a/core-java-concurrency/src/main/java/com/baeldung/concurrent/future/SquareCalculator.java b/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/future/SquareCalculator.java
similarity index 100%
rename from core-java-concurrency/src/main/java/com/baeldung/concurrent/future/SquareCalculator.java
rename to core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/future/SquareCalculator.java
diff --git a/core-java-concurrency/src/main/java/com/baeldung/concurrent/runnable/EventLoggingTask.java b/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/runnable/EventLoggingTask.java
similarity index 100%
rename from core-java-concurrency/src/main/java/com/baeldung/concurrent/runnable/EventLoggingTask.java
rename to core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/runnable/EventLoggingTask.java
diff --git a/core-java-concurrency/src/main/java/com/baeldung/concurrent/runnable/TaskRunner.java b/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/runnable/TaskRunner.java
similarity index 100%
rename from core-java-concurrency/src/main/java/com/baeldung/concurrent/runnable/TaskRunner.java
rename to core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/runnable/TaskRunner.java
diff --git a/core-java-concurrency/src/main/java/com/baeldung/concurrent/semaphore/SemaPhoreDemo.java b/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/semaphore/SemaPhoreDemo.java
similarity index 100%
rename from core-java-concurrency/src/main/java/com/baeldung/concurrent/semaphore/SemaPhoreDemo.java
rename to core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/semaphore/SemaPhoreDemo.java
diff --git a/core-java-concurrency/src/main/java/com/baeldung/concurrent/sleepwait/ThreadA.java b/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/sleepwait/ThreadA.java
similarity index 100%
rename from core-java-concurrency/src/main/java/com/baeldung/concurrent/sleepwait/ThreadA.java
rename to core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/sleepwait/ThreadA.java
diff --git a/core-java-concurrency/src/main/java/com/baeldung/concurrent/sleepwait/ThreadB.java b/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/sleepwait/ThreadB.java
similarity index 100%
rename from core-java-concurrency/src/main/java/com/baeldung/concurrent/sleepwait/ThreadB.java
rename to core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/sleepwait/ThreadB.java
diff --git a/core-java-concurrency/src/main/java/com/baeldung/concurrent/sleepwait/WaitSleepExample.java b/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/sleepwait/WaitSleepExample.java
similarity index 100%
rename from core-java-concurrency/src/main/java/com/baeldung/concurrent/sleepwait/WaitSleepExample.java
rename to core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/sleepwait/WaitSleepExample.java
diff --git a/core-java-concurrency/src/main/java/com/baeldung/concurrent/stopping/ControlSubThread.java b/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/stopping/ControlSubThread.java
similarity index 100%
rename from core-java-concurrency/src/main/java/com/baeldung/concurrent/stopping/ControlSubThread.java
rename to core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/stopping/ControlSubThread.java
diff --git a/core-java-concurrency/src/main/java/com/baeldung/concurrent/synchronize/BaeldungSynchronizedBlocks.java b/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/synchronize/BaeldungSynchronizedBlocks.java
similarity index 100%
rename from core-java-concurrency/src/main/java/com/baeldung/concurrent/synchronize/BaeldungSynchronizedBlocks.java
rename to core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/synchronize/BaeldungSynchronizedBlocks.java
diff --git a/core-java-concurrency/src/main/java/com/baeldung/concurrent/synchronize/BaeldungSynchronizedMethods.java b/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/synchronize/BaeldungSynchronizedMethods.java
similarity index 100%
rename from core-java-concurrency/src/main/java/com/baeldung/concurrent/synchronize/BaeldungSynchronizedMethods.java
rename to core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/synchronize/BaeldungSynchronizedMethods.java
diff --git a/core-java-concurrency/src/main/java/com/baeldung/concurrent/threadfactory/BaeldungThreadFactory.java b/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/threadfactory/BaeldungThreadFactory.java
similarity index 100%
rename from core-java-concurrency/src/main/java/com/baeldung/concurrent/threadfactory/BaeldungThreadFactory.java
rename to core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/threadfactory/BaeldungThreadFactory.java
diff --git a/core-java-concurrency/src/main/java/com/baeldung/concurrent/threadfactory/Demo.java b/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/threadfactory/Demo.java
similarity index 100%
rename from core-java-concurrency/src/main/java/com/baeldung/concurrent/threadfactory/Demo.java
rename to core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/threadfactory/Demo.java
diff --git a/core-java-concurrency/src/main/java/com/baeldung/concurrent/threadfactory/Task.java b/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/threadfactory/Task.java
similarity index 100%
rename from core-java-concurrency/src/main/java/com/baeldung/concurrent/threadfactory/Task.java
rename to core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/threadfactory/Task.java
diff --git a/core-java-concurrency/src/main/java/com/baeldung/concurrent/threadlifecycle/BlockedState.java b/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/threadlifecycle/BlockedState.java
similarity index 100%
rename from core-java-concurrency/src/main/java/com/baeldung/concurrent/threadlifecycle/BlockedState.java
rename to core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/threadlifecycle/BlockedState.java
diff --git a/core-java-concurrency/src/main/java/com/baeldung/concurrent/threadlifecycle/NewState.java b/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/threadlifecycle/NewState.java
similarity index 100%
rename from core-java-concurrency/src/main/java/com/baeldung/concurrent/threadlifecycle/NewState.java
rename to core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/threadlifecycle/NewState.java
diff --git a/core-java-concurrency/src/main/java/com/baeldung/concurrent/threadlifecycle/RunnableState.java b/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/threadlifecycle/RunnableState.java
similarity index 100%
rename from core-java-concurrency/src/main/java/com/baeldung/concurrent/threadlifecycle/RunnableState.java
rename to core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/threadlifecycle/RunnableState.java
diff --git a/core-java-concurrency/src/main/java/com/baeldung/concurrent/threadlifecycle/TerminatedState.java b/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/threadlifecycle/TerminatedState.java
similarity index 100%
rename from core-java-concurrency/src/main/java/com/baeldung/concurrent/threadlifecycle/TerminatedState.java
rename to core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/threadlifecycle/TerminatedState.java
diff --git a/core-java-concurrency/src/main/java/com/baeldung/concurrent/threadlifecycle/TimedWaitingState.java b/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/threadlifecycle/TimedWaitingState.java
similarity index 100%
rename from core-java-concurrency/src/main/java/com/baeldung/concurrent/threadlifecycle/TimedWaitingState.java
rename to core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/threadlifecycle/TimedWaitingState.java
diff --git a/core-java-concurrency/src/main/java/com/baeldung/concurrent/threadlifecycle/WaitingState.java b/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/threadlifecycle/WaitingState.java
similarity index 100%
rename from core-java-concurrency/src/main/java/com/baeldung/concurrent/threadlifecycle/WaitingState.java
rename to core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/threadlifecycle/WaitingState.java
diff --git a/core-java-concurrency/src/main/java/com/baeldung/concurrent/waitandnotify/Data.java b/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/waitandnotify/Data.java
similarity index 100%
rename from core-java-concurrency/src/main/java/com/baeldung/concurrent/waitandnotify/Data.java
rename to core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/waitandnotify/Data.java
diff --git a/core-java-concurrency/src/main/java/com/baeldung/concurrent/waitandnotify/NetworkDriver.java b/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/waitandnotify/NetworkDriver.java
similarity index 100%
rename from core-java-concurrency/src/main/java/com/baeldung/concurrent/waitandnotify/NetworkDriver.java
rename to core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/waitandnotify/NetworkDriver.java
diff --git a/core-java-concurrency/src/main/java/com/baeldung/concurrent/waitandnotify/Receiver.java b/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/waitandnotify/Receiver.java
similarity index 100%
rename from core-java-concurrency/src/main/java/com/baeldung/concurrent/waitandnotify/Receiver.java
rename to core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/waitandnotify/Receiver.java
diff --git a/core-java-concurrency/src/main/java/com/baeldung/concurrent/waitandnotify/Sender.java b/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/waitandnotify/Sender.java
similarity index 100%
rename from core-java-concurrency/src/main/java/com/baeldung/concurrent/waitandnotify/Sender.java
rename to core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/waitandnotify/Sender.java
diff --git a/core-java-concurrency-basic/src/main/resources/logback.xml b/core-java-concurrency-basic/src/main/resources/logback.xml
new file mode 100644
index 0000000000..56af2d397e
--- /dev/null
+++ b/core-java-concurrency-basic/src/main/resources/logback.xml
@@ -0,0 +1,19 @@
+
+
+
+
+ %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/core-java-concurrency/src/test/java/com/baeldung/completablefuture/CompletableFutureLongRunningUnitTest.java b/core-java-concurrency-basic/src/test/java/com/baeldung/completablefuture/CompletableFutureLongRunningUnitTest.java
similarity index 100%
rename from core-java-concurrency/src/test/java/com/baeldung/completablefuture/CompletableFutureLongRunningUnitTest.java
rename to core-java-concurrency-basic/src/test/java/com/baeldung/completablefuture/CompletableFutureLongRunningUnitTest.java
diff --git a/core-java-concurrency/src/test/java/com/baeldung/concurrent/callable/FactorialTaskManualTest.java b/core-java-concurrency-basic/src/test/java/com/baeldung/concurrent/callable/FactorialTaskManualTest.java
similarity index 100%
rename from core-java-concurrency/src/test/java/com/baeldung/concurrent/callable/FactorialTaskManualTest.java
rename to core-java-concurrency-basic/src/test/java/com/baeldung/concurrent/callable/FactorialTaskManualTest.java
diff --git a/core-java-concurrency/src/test/java/com/baeldung/concurrent/executorservice/WaitingForThreadsToFinishManualTest.java b/core-java-concurrency-basic/src/test/java/com/baeldung/concurrent/executorservice/WaitingForThreadsToFinishManualTest.java
similarity index 100%
rename from core-java-concurrency/src/test/java/com/baeldung/concurrent/executorservice/WaitingForThreadsToFinishManualTest.java
rename to core-java-concurrency-basic/src/test/java/com/baeldung/concurrent/executorservice/WaitingForThreadsToFinishManualTest.java
diff --git a/core-java-concurrency/src/test/java/com/baeldung/concurrent/future/FactorialSquareCalculatorUnitTest.java b/core-java-concurrency-basic/src/test/java/com/baeldung/concurrent/future/FactorialSquareCalculatorUnitTest.java
similarity index 100%
rename from core-java-concurrency/src/test/java/com/baeldung/concurrent/future/FactorialSquareCalculatorUnitTest.java
rename to core-java-concurrency-basic/src/test/java/com/baeldung/concurrent/future/FactorialSquareCalculatorUnitTest.java
diff --git a/core-java-concurrency/src/test/java/com/baeldung/concurrent/future/SquareCalculatorIntegrationTest.java b/core-java-concurrency-basic/src/test/java/com/baeldung/concurrent/future/SquareCalculatorIntegrationTest.java
similarity index 100%
rename from core-java-concurrency/src/test/java/com/baeldung/concurrent/future/SquareCalculatorIntegrationTest.java
rename to core-java-concurrency-basic/src/test/java/com/baeldung/concurrent/future/SquareCalculatorIntegrationTest.java
diff --git a/core-java-concurrency/src/test/java/com/baeldung/concurrent/runnable/RunnableVsThreadLiveTest.java b/core-java-concurrency-basic/src/test/java/com/baeldung/concurrent/runnable/RunnableVsThreadLiveTest.java
similarity index 100%
rename from core-java-concurrency/src/test/java/com/baeldung/concurrent/runnable/RunnableVsThreadLiveTest.java
rename to core-java-concurrency-basic/src/test/java/com/baeldung/concurrent/runnable/RunnableVsThreadLiveTest.java
diff --git a/core-java-concurrency/src/test/java/com/baeldung/concurrent/stopping/StopThreadManualTest.java b/core-java-concurrency-basic/src/test/java/com/baeldung/concurrent/stopping/StopThreadManualTest.java
similarity index 100%
rename from core-java-concurrency/src/test/java/com/baeldung/concurrent/stopping/StopThreadManualTest.java
rename to core-java-concurrency-basic/src/test/java/com/baeldung/concurrent/stopping/StopThreadManualTest.java
diff --git a/core-java-concurrency/src/test/java/com/baeldung/concurrent/synchronize/BaeldungSychronizedBlockUnitTest.java b/core-java-concurrency-basic/src/test/java/com/baeldung/concurrent/synchronize/BaeldungSychronizedBlockUnitTest.java
similarity index 100%
rename from core-java-concurrency/src/test/java/com/baeldung/concurrent/synchronize/BaeldungSychronizedBlockUnitTest.java
rename to core-java-concurrency-basic/src/test/java/com/baeldung/concurrent/synchronize/BaeldungSychronizedBlockUnitTest.java
diff --git a/core-java-concurrency/src/test/java/com/baeldung/concurrent/synchronize/BaeldungSynchronizeMethodsUnitTest.java b/core-java-concurrency-basic/src/test/java/com/baeldung/concurrent/synchronize/BaeldungSynchronizeMethodsUnitTest.java
similarity index 100%
rename from core-java-concurrency/src/test/java/com/baeldung/concurrent/synchronize/BaeldungSynchronizeMethodsUnitTest.java
rename to core-java-concurrency-basic/src/test/java/com/baeldung/concurrent/synchronize/BaeldungSynchronizeMethodsUnitTest.java
diff --git a/core-java-concurrency/src/test/java/com/baeldung/concurrent/waitandnotify/NetworkIntegrationTest.java b/core-java-concurrency-basic/src/test/java/com/baeldung/concurrent/waitandnotify/NetworkIntegrationTest.java
similarity index 100%
rename from core-java-concurrency/src/test/java/com/baeldung/concurrent/waitandnotify/NetworkIntegrationTest.java
rename to core-java-concurrency-basic/src/test/java/com/baeldung/concurrent/waitandnotify/NetworkIntegrationTest.java
diff --git a/core-java-concurrency/src/test/java/com/baeldung/java8/Java8ExecutorServiceIntegrationTest.java b/core-java-concurrency-basic/src/test/java/com/baeldung/java8/Java8ExecutorServiceIntegrationTest.java
similarity index 100%
rename from core-java-concurrency/src/test/java/com/baeldung/java8/Java8ExecutorServiceIntegrationTest.java
rename to core-java-concurrency-basic/src/test/java/com/baeldung/java8/Java8ExecutorServiceIntegrationTest.java
diff --git a/core-java-concurrency-basic/src/test/resources/.gitignore b/core-java-concurrency-basic/src/test/resources/.gitignore
new file mode 100644
index 0000000000..83c05e60c8
--- /dev/null
+++ b/core-java-concurrency-basic/src/test/resources/.gitignore
@@ -0,0 +1,13 @@
+*.class
+
+#folders#
+/target
+/neoDb*
+/data
+/src/main/webapp/WEB-INF/classes
+*/META-INF/*
+
+# Packaged files #
+*.jar
+*.war
+*.ear
\ No newline at end of file
diff --git a/core-java-io/pom.xml b/core-java-io/pom.xml
index efa32b8e3e..ac5f1f7c2e 100644
--- a/core-java-io/pom.xml
+++ b/core-java-io/pom.xml
@@ -236,7 +236,7 @@
- 2.8.5
+ 2.9.7
3.5
diff --git a/core-java-lang-oop/.gitignore b/core-java-lang-oop/.gitignore
new file mode 100644
index 0000000000..3de4cc647e
--- /dev/null
+++ b/core-java-lang-oop/.gitignore
@@ -0,0 +1,26 @@
+*.class
+
+0.*
+
+#folders#
+/target
+/neoDb*
+/data
+/src/main/webapp/WEB-INF/classes
+*/META-INF/*
+.resourceCache
+
+# Packaged files #
+*.jar
+*.war
+*.ear
+
+# Files generated by integration tests
+*.txt
+backup-pom.xml
+/bin/
+/temp
+
+#IntelliJ specific
+.idea/
+*.iml
\ No newline at end of file
diff --git a/core-java-lang-oop/README.md b/core-java-lang-oop/README.md
new file mode 100644
index 0000000000..bbc3d26c99
--- /dev/null
+++ b/core-java-lang-oop/README.md
@@ -0,0 +1,24 @@
+=========
+
+## Core Java Lang OOP Cookbooks and Examples
+
+### Relevant Articles:
+- [Guide to hashCode() in Java](http://www.baeldung.com/java-hashcode)
+- [A Guide to the Static Keyword in Java](http://www.baeldung.com/java-static)
+- [A Guide to Java Initialization](http://www.baeldung.com/java-initialization)
+- [Polymorphism in Java](http://www.baeldung.com/java-polymorphism)
+- [Method Overloading and Overriding in Java](http://www.baeldung.com/java-method-overload-override)
+- [How to Make a Deep Copy of an Object in Java](http://www.baeldung.com/java-deep-copy)
+- [Guide to Inheritance in Java](http://www.baeldung.com/java-inheritance)
+- [Object Type Casting in Java](http://www.baeldung.com/java-type-casting)
+- [The "final" Keyword in Java](http://www.baeldung.com/java-final)
+- [Type Erasure in Java Explained](http://www.baeldung.com/java-type-erasure)
+- [Pass-By-Value as a Parameter Passing Mechanism in Java](http://www.baeldung.com/java-pass-by-value-or-pass-by-reference)
+- [Variable and Method Hiding in Java](http://www.baeldung.com/java-variable-method-hiding)
+- [Access Modifiers in Java](http://www.baeldung.com/java-access-modifiers)
+- [Guide to the super Java Keyword](http://www.baeldung.com/java-super)
+- [Guide to the this Java Keyword](http://www.baeldung.com/java-this)
+- [Immutable Objects in Java](http://www.baeldung.com/java-immutable-object)
+- [Inheritance and Composition (Is-a vs Has-a relationship) in Java](http://www.baeldung.com/java-inheritance-composition)
+- [A Guide to Constructors in Java](https://www.baeldung.com/java-constructors)
+- [Java equals() and hashCode() Contracts](https://www.baeldung.com/java-equals-hashcode-contracts)
diff --git a/core-java-lang-oop/pom.xml b/core-java-lang-oop/pom.xml
new file mode 100644
index 0000000000..262408c024
--- /dev/null
+++ b/core-java-lang-oop/pom.xml
@@ -0,0 +1,91 @@
+
+ 4.0.0
+ com.baeldung
+ core-java-lang-oop
+ 0.1.0-SNAPSHOT
+ jar
+ core-java-lang-oop
+
+
+ com.baeldung
+ parent-java
+ 0.0.1-SNAPSHOT
+ ../parent-java
+
+
+
+
+ org.apache.commons
+ commons-lang3
+ ${commons-lang3.version}
+
+
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+ ${jackson.version}
+
+
+ com.google.code.gson
+ gson
+ ${gson.version}
+
+
+
+ log4j
+ log4j
+ ${log4j.version}
+
+
+ org.slf4j
+ log4j-over-slf4j
+ ${org.slf4j.version}
+
+
+ org.projectlombok
+ lombok
+ ${lombok.version}
+ provided
+
+
+
+ org.assertj
+ assertj-core
+ ${assertj-core.version}
+ test
+
+
+ nl.jqno.equalsverifier
+ equalsverifier
+ ${equalsverifier.version}
+ test
+
+
+
+
+ core-java-lang-oop
+
+
+ src/main/resources
+ true
+
+
+
+
+
+
+
+ 2.8.5
+ 2.8.2
+
+
+ 3.5
+ 1.16.12
+
+ 3.10.0
+ 3.0.3
+
+
+
diff --git a/core-java-lang/src/main/java/com/baeldung/accessmodifiers/Public.java b/core-java-lang-oop/src/main/java/com/baeldung/accessmodifiers/Public.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/accessmodifiers/Public.java
rename to core-java-lang-oop/src/main/java/com/baeldung/accessmodifiers/Public.java
diff --git a/core-java-lang/src/main/java/com/baeldung/accessmodifiers/SubClass.java b/core-java-lang-oop/src/main/java/com/baeldung/accessmodifiers/SubClass.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/accessmodifiers/SubClass.java
rename to core-java-lang-oop/src/main/java/com/baeldung/accessmodifiers/SubClass.java
diff --git a/core-java-lang/src/main/java/com/baeldung/accessmodifiers/SuperPublic.java b/core-java-lang-oop/src/main/java/com/baeldung/accessmodifiers/SuperPublic.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/accessmodifiers/SuperPublic.java
rename to core-java-lang-oop/src/main/java/com/baeldung/accessmodifiers/SuperPublic.java
diff --git a/core-java-lang/src/main/java/com/baeldung/accessmodifiers/another/AnotherPublic.java b/core-java-lang-oop/src/main/java/com/baeldung/accessmodifiers/another/AnotherPublic.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/accessmodifiers/another/AnotherPublic.java
rename to core-java-lang-oop/src/main/java/com/baeldung/accessmodifiers/another/AnotherPublic.java
diff --git a/core-java-lang/src/main/java/com/baeldung/accessmodifiers/another/AnotherSubClass.java b/core-java-lang-oop/src/main/java/com/baeldung/accessmodifiers/another/AnotherSubClass.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/accessmodifiers/another/AnotherSubClass.java
rename to core-java-lang-oop/src/main/java/com/baeldung/accessmodifiers/another/AnotherSubClass.java
diff --git a/core-java-lang/src/main/java/com/baeldung/accessmodifiers/another/AnotherSuperPublic.java b/core-java-lang-oop/src/main/java/com/baeldung/accessmodifiers/another/AnotherSuperPublic.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/accessmodifiers/another/AnotherSuperPublic.java
rename to core-java-lang-oop/src/main/java/com/baeldung/accessmodifiers/another/AnotherSuperPublic.java
diff --git a/core-java-lang/src/main/java/com/baeldung/casting/Animal.java b/core-java-lang-oop/src/main/java/com/baeldung/casting/Animal.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/casting/Animal.java
rename to core-java-lang-oop/src/main/java/com/baeldung/casting/Animal.java
diff --git a/core-java-lang/src/main/java/com/baeldung/casting/AnimalFeeder.java b/core-java-lang-oop/src/main/java/com/baeldung/casting/AnimalFeeder.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/casting/AnimalFeeder.java
rename to core-java-lang-oop/src/main/java/com/baeldung/casting/AnimalFeeder.java
diff --git a/core-java-lang/src/main/java/com/baeldung/casting/AnimalFeederGeneric.java b/core-java-lang-oop/src/main/java/com/baeldung/casting/AnimalFeederGeneric.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/casting/AnimalFeederGeneric.java
rename to core-java-lang-oop/src/main/java/com/baeldung/casting/AnimalFeederGeneric.java
diff --git a/core-java-lang/src/main/java/com/baeldung/casting/Cat.java b/core-java-lang-oop/src/main/java/com/baeldung/casting/Cat.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/casting/Cat.java
rename to core-java-lang-oop/src/main/java/com/baeldung/casting/Cat.java
diff --git a/core-java-lang/src/main/java/com/baeldung/casting/Dog.java b/core-java-lang-oop/src/main/java/com/baeldung/casting/Dog.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/casting/Dog.java
rename to core-java-lang-oop/src/main/java/com/baeldung/casting/Dog.java
diff --git a/core-java-lang/src/main/java/com/baeldung/casting/Mew.java b/core-java-lang-oop/src/main/java/com/baeldung/casting/Mew.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/casting/Mew.java
rename to core-java-lang-oop/src/main/java/com/baeldung/casting/Mew.java
diff --git a/core-java-lang/src/main/java/com/baeldung/constructors/BankAccount.java b/core-java-lang-oop/src/main/java/com/baeldung/constructors/BankAccount.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/constructors/BankAccount.java
rename to core-java-lang-oop/src/main/java/com/baeldung/constructors/BankAccount.java
diff --git a/core-java-lang/src/main/java/com/baeldung/constructors/Transaction.java b/core-java-lang-oop/src/main/java/com/baeldung/constructors/Transaction.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/constructors/Transaction.java
rename to core-java-lang-oop/src/main/java/com/baeldung/constructors/Transaction.java
diff --git a/core-java-lang/src/main/java/com/baeldung/deepcopy/Address.java b/core-java-lang-oop/src/main/java/com/baeldung/deepcopy/Address.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/deepcopy/Address.java
rename to core-java-lang-oop/src/main/java/com/baeldung/deepcopy/Address.java
diff --git a/core-java-lang/src/main/java/com/baeldung/deepcopy/User.java b/core-java-lang-oop/src/main/java/com/baeldung/deepcopy/User.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/deepcopy/User.java
rename to core-java-lang-oop/src/main/java/com/baeldung/deepcopy/User.java
diff --git a/core-java-lang/src/main/java/com/baeldung/equalshashcode/Money.java b/core-java-lang-oop/src/main/java/com/baeldung/equalshashcode/Money.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/equalshashcode/Money.java
rename to core-java-lang-oop/src/main/java/com/baeldung/equalshashcode/Money.java
diff --git a/core-java-lang/src/main/java/com/baeldung/equalshashcode/Team.java b/core-java-lang-oop/src/main/java/com/baeldung/equalshashcode/Team.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/equalshashcode/Team.java
rename to core-java-lang-oop/src/main/java/com/baeldung/equalshashcode/Team.java
diff --git a/core-java-lang/src/main/java/com/baeldung/equalshashcode/Voucher.java b/core-java-lang-oop/src/main/java/com/baeldung/equalshashcode/Voucher.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/equalshashcode/Voucher.java
rename to core-java-lang-oop/src/main/java/com/baeldung/equalshashcode/Voucher.java
diff --git a/core-java-lang/src/main/java/com/baeldung/equalshashcode/WrongTeam.java b/core-java-lang-oop/src/main/java/com/baeldung/equalshashcode/WrongTeam.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/equalshashcode/WrongTeam.java
rename to core-java-lang-oop/src/main/java/com/baeldung/equalshashcode/WrongTeam.java
diff --git a/core-java-lang/src/main/java/com/baeldung/equalshashcode/WrongVoucher.java b/core-java-lang-oop/src/main/java/com/baeldung/equalshashcode/WrongVoucher.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/equalshashcode/WrongVoucher.java
rename to core-java-lang-oop/src/main/java/com/baeldung/equalshashcode/WrongVoucher.java
diff --git a/core-java-lang/src/main/java/com/baeldung/equalshashcode/entities/ComplexClass.java b/core-java-lang-oop/src/main/java/com/baeldung/equalshashcode/entities/ComplexClass.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/equalshashcode/entities/ComplexClass.java
rename to core-java-lang-oop/src/main/java/com/baeldung/equalshashcode/entities/ComplexClass.java
diff --git a/core-java-lang/src/main/java/com/baeldung/equalshashcode/entities/PrimitiveClass.java b/core-java-lang-oop/src/main/java/com/baeldung/equalshashcode/entities/PrimitiveClass.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/equalshashcode/entities/PrimitiveClass.java
rename to core-java-lang-oop/src/main/java/com/baeldung/equalshashcode/entities/PrimitiveClass.java
diff --git a/core-java-lang/src/main/java/com/baeldung/equalshashcode/entities/Rectangle.java b/core-java-lang-oop/src/main/java/com/baeldung/equalshashcode/entities/Rectangle.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/equalshashcode/entities/Rectangle.java
rename to core-java-lang-oop/src/main/java/com/baeldung/equalshashcode/entities/Rectangle.java
diff --git a/core-java-lang/src/main/java/com/baeldung/equalshashcode/entities/Shape.java b/core-java-lang-oop/src/main/java/com/baeldung/equalshashcode/entities/Shape.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/equalshashcode/entities/Shape.java
rename to core-java-lang-oop/src/main/java/com/baeldung/equalshashcode/entities/Shape.java
diff --git a/core-java-lang/src/main/java/com/baeldung/equalshashcode/entities/Square.java b/core-java-lang-oop/src/main/java/com/baeldung/equalshashcode/entities/Square.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/equalshashcode/entities/Square.java
rename to core-java-lang-oop/src/main/java/com/baeldung/equalshashcode/entities/Square.java
diff --git a/core-java-lang/src/main/java/com/baeldung/finalkeyword/BlackCat.java b/core-java-lang-oop/src/main/java/com/baeldung/finalkeyword/BlackCat.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/finalkeyword/BlackCat.java
rename to core-java-lang-oop/src/main/java/com/baeldung/finalkeyword/BlackCat.java
diff --git a/core-java-lang/src/main/java/com/baeldung/finalkeyword/BlackDog.java b/core-java-lang-oop/src/main/java/com/baeldung/finalkeyword/BlackDog.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/finalkeyword/BlackDog.java
rename to core-java-lang-oop/src/main/java/com/baeldung/finalkeyword/BlackDog.java
diff --git a/core-java-lang/src/main/java/com/baeldung/finalkeyword/Cat.java b/core-java-lang-oop/src/main/java/com/baeldung/finalkeyword/Cat.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/finalkeyword/Cat.java
rename to core-java-lang-oop/src/main/java/com/baeldung/finalkeyword/Cat.java
diff --git a/core-java-lang/src/main/java/com/baeldung/finalkeyword/Dog.java b/core-java-lang-oop/src/main/java/com/baeldung/finalkeyword/Dog.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/finalkeyword/Dog.java
rename to core-java-lang-oop/src/main/java/com/baeldung/finalkeyword/Dog.java
diff --git a/core-java-lang/src/main/java/com/baeldung/hashcode/entities/User.java b/core-java-lang-oop/src/main/java/com/baeldung/hashcode/entities/User.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/hashcode/entities/User.java
rename to core-java-lang-oop/src/main/java/com/baeldung/hashcode/entities/User.java
diff --git a/core-java-lang/src/main/java/com/baeldung/immutableobjects/Currency.java b/core-java-lang-oop/src/main/java/com/baeldung/immutableobjects/Currency.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/immutableobjects/Currency.java
rename to core-java-lang-oop/src/main/java/com/baeldung/immutableobjects/Currency.java
diff --git a/core-java-lang/src/main/java/com/baeldung/immutableobjects/Money.java b/core-java-lang-oop/src/main/java/com/baeldung/immutableobjects/Money.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/immutableobjects/Money.java
rename to core-java-lang-oop/src/main/java/com/baeldung/immutableobjects/Money.java
diff --git a/core-java-lang/src/main/java/com/baeldung/inheritance/ArmoredCar.java b/core-java-lang-oop/src/main/java/com/baeldung/inheritance/ArmoredCar.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/inheritance/ArmoredCar.java
rename to core-java-lang-oop/src/main/java/com/baeldung/inheritance/ArmoredCar.java
diff --git a/core-java-lang/src/main/java/com/baeldung/inheritance/BMW.java b/core-java-lang-oop/src/main/java/com/baeldung/inheritance/BMW.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/inheritance/BMW.java
rename to core-java-lang-oop/src/main/java/com/baeldung/inheritance/BMW.java
diff --git a/core-java-lang/src/main/java/com/baeldung/inheritance/Car.java b/core-java-lang-oop/src/main/java/com/baeldung/inheritance/Car.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/inheritance/Car.java
rename to core-java-lang-oop/src/main/java/com/baeldung/inheritance/Car.java
diff --git a/core-java-lang/src/main/java/com/baeldung/inheritance/Employee.java b/core-java-lang-oop/src/main/java/com/baeldung/inheritance/Employee.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/inheritance/Employee.java
rename to core-java-lang-oop/src/main/java/com/baeldung/inheritance/Employee.java
diff --git a/core-java-lang/src/main/java/com/baeldung/inheritance/Floatable.java b/core-java-lang-oop/src/main/java/com/baeldung/inheritance/Floatable.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/inheritance/Floatable.java
rename to core-java-lang-oop/src/main/java/com/baeldung/inheritance/Floatable.java
diff --git a/core-java-lang/src/main/java/com/baeldung/inheritance/Flyable.java b/core-java-lang-oop/src/main/java/com/baeldung/inheritance/Flyable.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/inheritance/Flyable.java
rename to core-java-lang-oop/src/main/java/com/baeldung/inheritance/Flyable.java
diff --git a/core-java-lang/src/main/java/com/baeldung/inheritance/SpaceCar.java b/core-java-lang-oop/src/main/java/com/baeldung/inheritance/SpaceCar.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/inheritance/SpaceCar.java
rename to core-java-lang-oop/src/main/java/com/baeldung/inheritance/SpaceCar.java
diff --git a/core-java-lang/src/main/java/com/baeldung/inheritance/SpaceTraveller.java b/core-java-lang-oop/src/main/java/com/baeldung/inheritance/SpaceTraveller.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/inheritance/SpaceTraveller.java
rename to core-java-lang-oop/src/main/java/com/baeldung/inheritance/SpaceTraveller.java
diff --git a/core-java-lang/src/main/java/com/baeldung/inheritancecomposition/application/Application.java b/core-java-lang-oop/src/main/java/com/baeldung/inheritancecomposition/application/Application.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/inheritancecomposition/application/Application.java
rename to core-java-lang-oop/src/main/java/com/baeldung/inheritancecomposition/application/Application.java
diff --git a/core-java-lang/src/main/java/com/baeldung/inheritancecomposition/model/Actress.java b/core-java-lang-oop/src/main/java/com/baeldung/inheritancecomposition/model/Actress.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/inheritancecomposition/model/Actress.java
rename to core-java-lang-oop/src/main/java/com/baeldung/inheritancecomposition/model/Actress.java
diff --git a/core-java-lang/src/main/java/com/baeldung/inheritancecomposition/model/Computer.java b/core-java-lang-oop/src/main/java/com/baeldung/inheritancecomposition/model/Computer.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/inheritancecomposition/model/Computer.java
rename to core-java-lang-oop/src/main/java/com/baeldung/inheritancecomposition/model/Computer.java
diff --git a/core-java-lang/src/main/java/com/baeldung/inheritancecomposition/model/Memory.java b/core-java-lang-oop/src/main/java/com/baeldung/inheritancecomposition/model/Memory.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/inheritancecomposition/model/Memory.java
rename to core-java-lang-oop/src/main/java/com/baeldung/inheritancecomposition/model/Memory.java
diff --git a/core-java-lang/src/main/java/com/baeldung/inheritancecomposition/model/Person.java b/core-java-lang-oop/src/main/java/com/baeldung/inheritancecomposition/model/Person.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/inheritancecomposition/model/Person.java
rename to core-java-lang-oop/src/main/java/com/baeldung/inheritancecomposition/model/Person.java
diff --git a/core-java-lang/src/main/java/com/baeldung/inheritancecomposition/model/Processor.java b/core-java-lang-oop/src/main/java/com/baeldung/inheritancecomposition/model/Processor.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/inheritancecomposition/model/Processor.java
rename to core-java-lang-oop/src/main/java/com/baeldung/inheritancecomposition/model/Processor.java
diff --git a/core-java-lang/src/main/java/com/baeldung/inheritancecomposition/model/SoundCard.java b/core-java-lang-oop/src/main/java/com/baeldung/inheritancecomposition/model/SoundCard.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/inheritancecomposition/model/SoundCard.java
rename to core-java-lang-oop/src/main/java/com/baeldung/inheritancecomposition/model/SoundCard.java
diff --git a/core-java-lang/src/main/java/com/baeldung/inheritancecomposition/model/StandardMemory.java b/core-java-lang-oop/src/main/java/com/baeldung/inheritancecomposition/model/StandardMemory.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/inheritancecomposition/model/StandardMemory.java
rename to core-java-lang-oop/src/main/java/com/baeldung/inheritancecomposition/model/StandardMemory.java
diff --git a/core-java-lang/src/main/java/com/baeldung/inheritancecomposition/model/StandardProcessor.java b/core-java-lang-oop/src/main/java/com/baeldung/inheritancecomposition/model/StandardProcessor.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/inheritancecomposition/model/StandardProcessor.java
rename to core-java-lang-oop/src/main/java/com/baeldung/inheritancecomposition/model/StandardProcessor.java
diff --git a/core-java-lang/src/main/java/com/baeldung/inheritancecomposition/model/StandardSoundCard.java b/core-java-lang-oop/src/main/java/com/baeldung/inheritancecomposition/model/StandardSoundCard.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/inheritancecomposition/model/StandardSoundCard.java
rename to core-java-lang-oop/src/main/java/com/baeldung/inheritancecomposition/model/StandardSoundCard.java
diff --git a/core-java-lang/src/main/java/com/baeldung/inheritancecomposition/model/Waitress.java b/core-java-lang-oop/src/main/java/com/baeldung/inheritancecomposition/model/Waitress.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/inheritancecomposition/model/Waitress.java
rename to core-java-lang-oop/src/main/java/com/baeldung/inheritancecomposition/model/Waitress.java
diff --git a/core-java-lang/src/main/java/com/baeldung/initializationguide/User.java b/core-java-lang-oop/src/main/java/com/baeldung/initializationguide/User.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/initializationguide/User.java
rename to core-java-lang-oop/src/main/java/com/baeldung/initializationguide/User.java
diff --git a/core-java-lang/src/main/java/com/baeldung/keyword/KeywordDemo.java b/core-java-lang-oop/src/main/java/com/baeldung/keyword/KeywordDemo.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/keyword/KeywordDemo.java
rename to core-java-lang-oop/src/main/java/com/baeldung/keyword/KeywordDemo.java
diff --git a/core-java-lang/src/main/java/com/baeldung/keyword/superkeyword/SuperBase.java b/core-java-lang-oop/src/main/java/com/baeldung/keyword/superkeyword/SuperBase.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/keyword/superkeyword/SuperBase.java
rename to core-java-lang-oop/src/main/java/com/baeldung/keyword/superkeyword/SuperBase.java
diff --git a/core-java-lang/src/main/java/com/baeldung/keyword/superkeyword/SuperSub.java b/core-java-lang-oop/src/main/java/com/baeldung/keyword/superkeyword/SuperSub.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/keyword/superkeyword/SuperSub.java
rename to core-java-lang-oop/src/main/java/com/baeldung/keyword/superkeyword/SuperSub.java
diff --git a/core-java-lang/src/main/java/com/baeldung/keyword/thiskeyword/KeywordUnitTest.java b/core-java-lang-oop/src/main/java/com/baeldung/keyword/thiskeyword/KeywordUnitTest.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/keyword/thiskeyword/KeywordUnitTest.java
rename to core-java-lang-oop/src/main/java/com/baeldung/keyword/thiskeyword/KeywordUnitTest.java
diff --git a/core-java-lang/src/main/java/com/baeldung/methodoverloadingoverriding/application/Application.java b/core-java-lang-oop/src/main/java/com/baeldung/methodoverloadingoverriding/application/Application.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/methodoverloadingoverriding/application/Application.java
rename to core-java-lang-oop/src/main/java/com/baeldung/methodoverloadingoverriding/application/Application.java
diff --git a/core-java-lang/src/main/java/com/baeldung/methodoverloadingoverriding/model/Car.java b/core-java-lang-oop/src/main/java/com/baeldung/methodoverloadingoverriding/model/Car.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/methodoverloadingoverriding/model/Car.java
rename to core-java-lang-oop/src/main/java/com/baeldung/methodoverloadingoverriding/model/Car.java
diff --git a/core-java-lang/src/main/java/com/baeldung/methodoverloadingoverriding/model/Vehicle.java b/core-java-lang-oop/src/main/java/com/baeldung/methodoverloadingoverriding/model/Vehicle.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/methodoverloadingoverriding/model/Vehicle.java
rename to core-java-lang-oop/src/main/java/com/baeldung/methodoverloadingoverriding/model/Vehicle.java
diff --git a/core-java-lang/src/main/java/com/baeldung/methodoverloadingoverriding/util/Multiplier.java b/core-java-lang-oop/src/main/java/com/baeldung/methodoverloadingoverriding/util/Multiplier.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/methodoverloadingoverriding/util/Multiplier.java
rename to core-java-lang-oop/src/main/java/com/baeldung/methodoverloadingoverriding/util/Multiplier.java
diff --git a/core-java-lang/src/main/java/com/baeldung/polymorphism/FileManager.java b/core-java-lang-oop/src/main/java/com/baeldung/polymorphism/FileManager.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/polymorphism/FileManager.java
rename to core-java-lang-oop/src/main/java/com/baeldung/polymorphism/FileManager.java
diff --git a/core-java-lang/src/main/java/com/baeldung/polymorphism/GenericFile.java b/core-java-lang-oop/src/main/java/com/baeldung/polymorphism/GenericFile.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/polymorphism/GenericFile.java
rename to core-java-lang-oop/src/main/java/com/baeldung/polymorphism/GenericFile.java
diff --git a/core-java-lang/src/main/java/com/baeldung/polymorphism/ImageFile.java b/core-java-lang-oop/src/main/java/com/baeldung/polymorphism/ImageFile.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/polymorphism/ImageFile.java
rename to core-java-lang-oop/src/main/java/com/baeldung/polymorphism/ImageFile.java
diff --git a/core-java-lang/src/main/java/com/baeldung/polymorphism/TextFile.java b/core-java-lang-oop/src/main/java/com/baeldung/polymorphism/TextFile.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/polymorphism/TextFile.java
rename to core-java-lang-oop/src/main/java/com/baeldung/polymorphism/TextFile.java
diff --git a/core-java-lang/src/main/java/com/baeldung/scope/method/BaseMethodClass.java b/core-java-lang-oop/src/main/java/com/baeldung/scope/method/BaseMethodClass.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/scope/method/BaseMethodClass.java
rename to core-java-lang-oop/src/main/java/com/baeldung/scope/method/BaseMethodClass.java
diff --git a/core-java-lang/src/main/java/com/baeldung/scope/method/ChildMethodClass.java b/core-java-lang-oop/src/main/java/com/baeldung/scope/method/ChildMethodClass.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/scope/method/ChildMethodClass.java
rename to core-java-lang-oop/src/main/java/com/baeldung/scope/method/ChildMethodClass.java
diff --git a/core-java-lang/src/main/java/com/baeldung/scope/method/MethodHidingDemo.java b/core-java-lang-oop/src/main/java/com/baeldung/scope/method/MethodHidingDemo.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/scope/method/MethodHidingDemo.java
rename to core-java-lang-oop/src/main/java/com/baeldung/scope/method/MethodHidingDemo.java
diff --git a/core-java-lang/src/main/java/com/baeldung/scope/variable/ChildVariable.java b/core-java-lang-oop/src/main/java/com/baeldung/scope/variable/ChildVariable.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/scope/variable/ChildVariable.java
rename to core-java-lang-oop/src/main/java/com/baeldung/scope/variable/ChildVariable.java
diff --git a/core-java-lang/src/main/java/com/baeldung/scope/variable/HideVariable.java b/core-java-lang-oop/src/main/java/com/baeldung/scope/variable/HideVariable.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/scope/variable/HideVariable.java
rename to core-java-lang-oop/src/main/java/com/baeldung/scope/variable/HideVariable.java
diff --git a/core-java-lang/src/main/java/com/baeldung/scope/variable/ParentVariable.java b/core-java-lang-oop/src/main/java/com/baeldung/scope/variable/ParentVariable.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/scope/variable/ParentVariable.java
rename to core-java-lang-oop/src/main/java/com/baeldung/scope/variable/ParentVariable.java
diff --git a/core-java-lang/src/main/java/com/baeldung/scope/variable/VariableHidingDemo.java b/core-java-lang-oop/src/main/java/com/baeldung/scope/variable/VariableHidingDemo.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/scope/variable/VariableHidingDemo.java
rename to core-java-lang-oop/src/main/java/com/baeldung/scope/variable/VariableHidingDemo.java
diff --git a/core-java-lang/src/main/java/com/baeldung/staticdemo/Car.java b/core-java-lang-oop/src/main/java/com/baeldung/staticdemo/Car.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/staticdemo/Car.java
rename to core-java-lang-oop/src/main/java/com/baeldung/staticdemo/Car.java
diff --git a/core-java-lang/src/main/java/com/baeldung/staticdemo/Singleton.java b/core-java-lang-oop/src/main/java/com/baeldung/staticdemo/Singleton.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/staticdemo/Singleton.java
rename to core-java-lang-oop/src/main/java/com/baeldung/staticdemo/Singleton.java
diff --git a/core-java-lang/src/main/java/com/baeldung/staticdemo/StaticBlock.java b/core-java-lang-oop/src/main/java/com/baeldung/staticdemo/StaticBlock.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/staticdemo/StaticBlock.java
rename to core-java-lang-oop/src/main/java/com/baeldung/staticdemo/StaticBlock.java
diff --git a/core-java-lang/src/main/java/com/baeldung/typeerasure/ArrayContentPrintUtil.java b/core-java-lang-oop/src/main/java/com/baeldung/typeerasure/ArrayContentPrintUtil.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/typeerasure/ArrayContentPrintUtil.java
rename to core-java-lang-oop/src/main/java/com/baeldung/typeerasure/ArrayContentPrintUtil.java
diff --git a/core-java-lang/src/main/java/com/baeldung/typeerasure/BoundStack.java b/core-java-lang-oop/src/main/java/com/baeldung/typeerasure/BoundStack.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/typeerasure/BoundStack.java
rename to core-java-lang-oop/src/main/java/com/baeldung/typeerasure/BoundStack.java
diff --git a/core-java-lang/src/main/java/com/baeldung/typeerasure/IntegerStack.java b/core-java-lang-oop/src/main/java/com/baeldung/typeerasure/IntegerStack.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/typeerasure/IntegerStack.java
rename to core-java-lang-oop/src/main/java/com/baeldung/typeerasure/IntegerStack.java
diff --git a/core-java-lang/src/main/java/com/baeldung/typeerasure/Stack.java b/core-java-lang-oop/src/main/java/com/baeldung/typeerasure/Stack.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/typeerasure/Stack.java
rename to core-java-lang-oop/src/main/java/com/baeldung/typeerasure/Stack.java
diff --git a/core-java-lang-oop/src/main/resources/logback.xml b/core-java-lang-oop/src/main/resources/logback.xml
new file mode 100644
index 0000000000..56af2d397e
--- /dev/null
+++ b/core-java-lang-oop/src/main/resources/logback.xml
@@ -0,0 +1,19 @@
+
+
+
+
+ %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/core-java-lang/src/test/java/com/baeldung/casting/CastingUnitTest.java b/core-java-lang-oop/src/test/java/com/baeldung/casting/CastingUnitTest.java
similarity index 100%
rename from core-java-lang/src/test/java/com/baeldung/casting/CastingUnitTest.java
rename to core-java-lang-oop/src/test/java/com/baeldung/casting/CastingUnitTest.java
diff --git a/core-java-lang/src/test/java/com/baeldung/constructors/ConstructorUnitTest.java b/core-java-lang-oop/src/test/java/com/baeldung/constructors/ConstructorUnitTest.java
similarity index 100%
rename from core-java-lang/src/test/java/com/baeldung/constructors/ConstructorUnitTest.java
rename to core-java-lang-oop/src/test/java/com/baeldung/constructors/ConstructorUnitTest.java
diff --git a/core-java-lang/src/test/java/com/baeldung/deepcopy/DeepCopyUnitTest.java b/core-java-lang-oop/src/test/java/com/baeldung/deepcopy/DeepCopyUnitTest.java
similarity index 100%
rename from core-java-lang/src/test/java/com/baeldung/deepcopy/DeepCopyUnitTest.java
rename to core-java-lang-oop/src/test/java/com/baeldung/deepcopy/DeepCopyUnitTest.java
diff --git a/core-java-lang/src/test/java/com/baeldung/deepcopy/ShallowCopyUnitTest.java b/core-java-lang-oop/src/test/java/com/baeldung/deepcopy/ShallowCopyUnitTest.java
similarity index 100%
rename from core-java-lang/src/test/java/com/baeldung/deepcopy/ShallowCopyUnitTest.java
rename to core-java-lang-oop/src/test/java/com/baeldung/deepcopy/ShallowCopyUnitTest.java
diff --git a/core-java-lang/src/test/java/com/baeldung/equalshashcode/MoneyUnitTest.java b/core-java-lang-oop/src/test/java/com/baeldung/equalshashcode/MoneyUnitTest.java
similarity index 100%
rename from core-java-lang/src/test/java/com/baeldung/equalshashcode/MoneyUnitTest.java
rename to core-java-lang-oop/src/test/java/com/baeldung/equalshashcode/MoneyUnitTest.java
diff --git a/core-java-lang/src/test/java/com/baeldung/equalshashcode/TeamUnitTest.java b/core-java-lang-oop/src/test/java/com/baeldung/equalshashcode/TeamUnitTest.java
similarity index 100%
rename from core-java-lang/src/test/java/com/baeldung/equalshashcode/TeamUnitTest.java
rename to core-java-lang-oop/src/test/java/com/baeldung/equalshashcode/TeamUnitTest.java
diff --git a/core-java-lang/src/test/java/com/baeldung/equalshashcode/entities/ComplexClassUnitTest.java b/core-java-lang-oop/src/test/java/com/baeldung/equalshashcode/entities/ComplexClassUnitTest.java
similarity index 100%
rename from core-java-lang/src/test/java/com/baeldung/equalshashcode/entities/ComplexClassUnitTest.java
rename to core-java-lang-oop/src/test/java/com/baeldung/equalshashcode/entities/ComplexClassUnitTest.java
diff --git a/core-java-lang/src/test/java/com/baeldung/equalshashcode/entities/PrimitiveClassUnitTest.java b/core-java-lang-oop/src/test/java/com/baeldung/equalshashcode/entities/PrimitiveClassUnitTest.java
similarity index 100%
rename from core-java-lang/src/test/java/com/baeldung/equalshashcode/entities/PrimitiveClassUnitTest.java
rename to core-java-lang-oop/src/test/java/com/baeldung/equalshashcode/entities/PrimitiveClassUnitTest.java
diff --git a/core-java-lang/src/test/java/com/baeldung/equalshashcode/entities/SquareClassUnitTest.java b/core-java-lang-oop/src/test/java/com/baeldung/equalshashcode/entities/SquareClassUnitTest.java
similarity index 100%
rename from core-java-lang/src/test/java/com/baeldung/equalshashcode/entities/SquareClassUnitTest.java
rename to core-java-lang-oop/src/test/java/com/baeldung/equalshashcode/entities/SquareClassUnitTest.java
diff --git a/core-java-lang/src/test/java/com/baeldung/finalkeyword/FinalUnitTest.java b/core-java-lang-oop/src/test/java/com/baeldung/finalkeyword/FinalUnitTest.java
similarity index 100%
rename from core-java-lang/src/test/java/com/baeldung/finalkeyword/FinalUnitTest.java
rename to core-java-lang-oop/src/test/java/com/baeldung/finalkeyword/FinalUnitTest.java
diff --git a/core-java-lang/src/test/java/com/baeldung/hashcode/application/ApplicationUnitTest.java b/core-java-lang-oop/src/test/java/com/baeldung/hashcode/application/ApplicationUnitTest.java
similarity index 100%
rename from core-java-lang/src/test/java/com/baeldung/hashcode/application/ApplicationUnitTest.java
rename to core-java-lang-oop/src/test/java/com/baeldung/hashcode/application/ApplicationUnitTest.java
diff --git a/core-java-lang/src/test/java/com/baeldung/hashcode/entities/UserUnitTest.java b/core-java-lang-oop/src/test/java/com/baeldung/hashcode/entities/UserUnitTest.java
similarity index 100%
rename from core-java-lang/src/test/java/com/baeldung/hashcode/entities/UserUnitTest.java
rename to core-java-lang-oop/src/test/java/com/baeldung/hashcode/entities/UserUnitTest.java
diff --git a/core-java-lang/src/test/java/com/baeldung/immutableobjects/ImmutableObjectsUnitTest.java b/core-java-lang-oop/src/test/java/com/baeldung/immutableobjects/ImmutableObjectsUnitTest.java
similarity index 100%
rename from core-java-lang/src/test/java/com/baeldung/immutableobjects/ImmutableObjectsUnitTest.java
rename to core-java-lang-oop/src/test/java/com/baeldung/immutableobjects/ImmutableObjectsUnitTest.java
diff --git a/core-java-lang/src/test/java/com/baeldung/inheritance/AppUnitTest.java b/core-java-lang-oop/src/test/java/com/baeldung/inheritance/AppUnitTest.java
similarity index 100%
rename from core-java-lang/src/test/java/com/baeldung/inheritance/AppUnitTest.java
rename to core-java-lang-oop/src/test/java/com/baeldung/inheritance/AppUnitTest.java
diff --git a/core-java-lang/src/test/java/com/baeldung/inheritancecomposition/test/ActressUnitTest.java b/core-java-lang-oop/src/test/java/com/baeldung/inheritancecomposition/test/ActressUnitTest.java
similarity index 100%
rename from core-java-lang/src/test/java/com/baeldung/inheritancecomposition/test/ActressUnitTest.java
rename to core-java-lang-oop/src/test/java/com/baeldung/inheritancecomposition/test/ActressUnitTest.java
diff --git a/core-java-lang/src/test/java/com/baeldung/inheritancecomposition/test/CompositionUnitTest.java b/core-java-lang-oop/src/test/java/com/baeldung/inheritancecomposition/test/CompositionUnitTest.java
similarity index 100%
rename from core-java-lang/src/test/java/com/baeldung/inheritancecomposition/test/CompositionUnitTest.java
rename to core-java-lang-oop/src/test/java/com/baeldung/inheritancecomposition/test/CompositionUnitTest.java
diff --git a/core-java-lang/src/test/java/com/baeldung/inheritancecomposition/test/InheritanceUnitTest.java b/core-java-lang-oop/src/test/java/com/baeldung/inheritancecomposition/test/InheritanceUnitTest.java
similarity index 100%
rename from core-java-lang/src/test/java/com/baeldung/inheritancecomposition/test/InheritanceUnitTest.java
rename to core-java-lang-oop/src/test/java/com/baeldung/inheritancecomposition/test/InheritanceUnitTest.java
diff --git a/core-java-lang/src/test/java/com/baeldung/inheritancecomposition/test/PersonUnitTest.java b/core-java-lang-oop/src/test/java/com/baeldung/inheritancecomposition/test/PersonUnitTest.java
similarity index 100%
rename from core-java-lang/src/test/java/com/baeldung/inheritancecomposition/test/PersonUnitTest.java
rename to core-java-lang-oop/src/test/java/com/baeldung/inheritancecomposition/test/PersonUnitTest.java
diff --git a/core-java-lang/src/test/java/com/baeldung/inheritancecomposition/test/WaitressUnitTest.java b/core-java-lang-oop/src/test/java/com/baeldung/inheritancecomposition/test/WaitressUnitTest.java
similarity index 100%
rename from core-java-lang/src/test/java/com/baeldung/inheritancecomposition/test/WaitressUnitTest.java
rename to core-java-lang-oop/src/test/java/com/baeldung/inheritancecomposition/test/WaitressUnitTest.java
diff --git a/core-java-lang/src/test/java/com/baeldung/initializationguide/UserUnitTest.java b/core-java-lang-oop/src/test/java/com/baeldung/initializationguide/UserUnitTest.java
similarity index 100%
rename from core-java-lang/src/test/java/com/baeldung/initializationguide/UserUnitTest.java
rename to core-java-lang-oop/src/test/java/com/baeldung/initializationguide/UserUnitTest.java
diff --git a/core-java-lang/src/test/java/com/baeldung/methodoverloadingoverriding/test/MethodOverloadingUnitTest.java b/core-java-lang-oop/src/test/java/com/baeldung/methodoverloadingoverriding/test/MethodOverloadingUnitTest.java
similarity index 100%
rename from core-java-lang/src/test/java/com/baeldung/methodoverloadingoverriding/test/MethodOverloadingUnitTest.java
rename to core-java-lang-oop/src/test/java/com/baeldung/methodoverloadingoverriding/test/MethodOverloadingUnitTest.java
diff --git a/core-java-lang/src/test/java/com/baeldung/methodoverloadingoverriding/test/MethodOverridingUnitTest.java b/core-java-lang-oop/src/test/java/com/baeldung/methodoverloadingoverriding/test/MethodOverridingUnitTest.java
similarity index 100%
rename from core-java-lang/src/test/java/com/baeldung/methodoverloadingoverriding/test/MethodOverridingUnitTest.java
rename to core-java-lang-oop/src/test/java/com/baeldung/methodoverloadingoverriding/test/MethodOverridingUnitTest.java
diff --git a/core-java-lang/src/test/java/com/baeldung/parameterpassing/NonPrimitivesUnitTest.java b/core-java-lang-oop/src/test/java/com/baeldung/parameterpassing/NonPrimitivesUnitTest.java
similarity index 100%
rename from core-java-lang/src/test/java/com/baeldung/parameterpassing/NonPrimitivesUnitTest.java
rename to core-java-lang-oop/src/test/java/com/baeldung/parameterpassing/NonPrimitivesUnitTest.java
diff --git a/core-java-lang/src/test/java/com/baeldung/parameterpassing/PrimitivesUnitTest.java b/core-java-lang-oop/src/test/java/com/baeldung/parameterpassing/PrimitivesUnitTest.java
similarity index 100%
rename from core-java-lang/src/test/java/com/baeldung/parameterpassing/PrimitivesUnitTest.java
rename to core-java-lang-oop/src/test/java/com/baeldung/parameterpassing/PrimitivesUnitTest.java
diff --git a/core-java-lang/src/test/java/com/baeldung/polymorphism/PolymorphismUnitTest.java b/core-java-lang-oop/src/test/java/com/baeldung/polymorphism/PolymorphismUnitTest.java
similarity index 100%
rename from core-java-lang/src/test/java/com/baeldung/polymorphism/PolymorphismUnitTest.java
rename to core-java-lang-oop/src/test/java/com/baeldung/polymorphism/PolymorphismUnitTest.java
diff --git a/core-java-lang/src/test/java/com/baeldung/staticdemo/CarIntegrationTest.java b/core-java-lang-oop/src/test/java/com/baeldung/staticdemo/CarIntegrationTest.java
similarity index 100%
rename from core-java-lang/src/test/java/com/baeldung/staticdemo/CarIntegrationTest.java
rename to core-java-lang-oop/src/test/java/com/baeldung/staticdemo/CarIntegrationTest.java
diff --git a/core-java-lang/src/test/java/com/baeldung/staticdemo/SingletonIntegrationTest.java b/core-java-lang-oop/src/test/java/com/baeldung/staticdemo/SingletonIntegrationTest.java
similarity index 100%
rename from core-java-lang/src/test/java/com/baeldung/staticdemo/SingletonIntegrationTest.java
rename to core-java-lang-oop/src/test/java/com/baeldung/staticdemo/SingletonIntegrationTest.java
diff --git a/core-java-lang/src/test/java/com/baeldung/staticdemo/StaticBlockIntegrationTest.java b/core-java-lang-oop/src/test/java/com/baeldung/staticdemo/StaticBlockIntegrationTest.java
similarity index 100%
rename from core-java-lang/src/test/java/com/baeldung/staticdemo/StaticBlockIntegrationTest.java
rename to core-java-lang-oop/src/test/java/com/baeldung/staticdemo/StaticBlockIntegrationTest.java
diff --git a/core-java-lang/src/test/java/com/baeldung/typeerasure/TypeErasureUnitTest.java b/core-java-lang-oop/src/test/java/com/baeldung/typeerasure/TypeErasureUnitTest.java
similarity index 100%
rename from core-java-lang/src/test/java/com/baeldung/typeerasure/TypeErasureUnitTest.java
rename to core-java-lang-oop/src/test/java/com/baeldung/typeerasure/TypeErasureUnitTest.java
diff --git a/core-java-lang-oop/src/test/resources/.gitignore b/core-java-lang-oop/src/test/resources/.gitignore
new file mode 100644
index 0000000000..83c05e60c8
--- /dev/null
+++ b/core-java-lang-oop/src/test/resources/.gitignore
@@ -0,0 +1,13 @@
+*.class
+
+#folders#
+/target
+/neoDb*
+/data
+/src/main/webapp/WEB-INF/classes
+*/META-INF/*
+
+# Packaged files #
+*.jar
+*.war
+*.ear
\ No newline at end of file
diff --git a/core-java-lang-syntax/.gitignore b/core-java-lang-syntax/.gitignore
new file mode 100644
index 0000000000..374c8bf907
--- /dev/null
+++ b/core-java-lang-syntax/.gitignore
@@ -0,0 +1,25 @@
+*.class
+
+0.*
+
+#folders#
+/target
+/neoDb*
+/data
+/src/main/webapp/WEB-INF/classes
+*/META-INF/*
+.resourceCache
+
+# Packaged files #
+*.jar
+*.war
+*.ear
+
+# Files generated by integration tests
+backup-pom.xml
+/bin/
+/temp
+
+#IntelliJ specific
+.idea/
+*.iml
\ No newline at end of file
diff --git a/core-java-lang-syntax/README.md b/core-java-lang-syntax/README.md
new file mode 100644
index 0000000000..a7c1b7cc4a
--- /dev/null
+++ b/core-java-lang-syntax/README.md
@@ -0,0 +1,19 @@
+=========
+
+## Core Java Lang Syntax Cookbooks and Examples
+
+### Relevant Articles:
+- [Introduction to Java Generics](http://www.baeldung.com/java-generics)
+- [Java Primitive Conversions](http://www.baeldung.com/java-primitive-conversions)
+- [Java Double Brace Initialization](http://www.baeldung.com/java-double-brace-initialization)
+- [Guide to the Diamond Operator in Java](http://www.baeldung.com/java-diamond-operator)
+- [The Java continue and break Keywords](http://www.baeldung.com/java-continue-and-break)
+- [A Guide to Java Initialization](http://www.baeldung.com/java-initialization)
+- [A Guide to Java Loops](http://www.baeldung.com/java-loops)
+- [Varargs in Java](http://www.baeldung.com/java-varargs)
+- [A Guide to Java Enums](http://www.baeldung.com/a-guide-to-java-enums)
+- [Infinite Loops in Java](http://www.baeldung.com/infinite-loops-java)
+- [Quick Guide to java.lang.System](http://www.baeldung.com/java-lang-system)
+- [Java Switch Statement](https://www.baeldung.com/java-switch)
+- [The Modulo Operator in Java](https://www.baeldung.com/modulo-java)
+- [Ternary Operator In Java](https://www.baeldung.com/java-ternary-operator)
\ No newline at end of file
diff --git a/core-java-lang-syntax/pom.xml b/core-java-lang-syntax/pom.xml
new file mode 100644
index 0000000000..9481f29459
--- /dev/null
+++ b/core-java-lang-syntax/pom.xml
@@ -0,0 +1,53 @@
+
+ 4.0.0
+ com.baeldung
+ core-java-lang-syntax
+ 0.1.0-SNAPSHOT
+ jar
+ core-java-lang-syntax
+
+
+ com.baeldung
+ parent-java
+ 0.0.1-SNAPSHOT
+ ../parent-java
+
+
+
+
+
+ log4j
+ log4j
+ ${log4j.version}
+
+
+ org.slf4j
+ log4j-over-slf4j
+ ${org.slf4j.version}
+
+
+
+ org.assertj
+ assertj-core
+ ${assertj-core.version}
+ test
+
+
+
+
+ core-java-lang-syntax
+
+
+ src/main/resources
+ true
+
+
+
+
+
+
+ 3.10.0
+
+
+
diff --git a/core-java-lang/src/main/java/com/baeldung/breakcontinue/BreakContinue.java b/core-java-lang-syntax/src/main/java/com/baeldung/breakcontinue/BreakContinue.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/breakcontinue/BreakContinue.java
rename to core-java-lang-syntax/src/main/java/com/baeldung/breakcontinue/BreakContinue.java
diff --git a/core-java-lang/src/main/java/com/baeldung/enums/Pizza.java b/core-java-lang-syntax/src/main/java/com/baeldung/enums/Pizza.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/enums/Pizza.java
rename to core-java-lang-syntax/src/main/java/com/baeldung/enums/Pizza.java
diff --git a/core-java-lang/src/main/java/com/baeldung/enums/PizzaDeliveryStrategy.java b/core-java-lang-syntax/src/main/java/com/baeldung/enums/PizzaDeliveryStrategy.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/enums/PizzaDeliveryStrategy.java
rename to core-java-lang-syntax/src/main/java/com/baeldung/enums/PizzaDeliveryStrategy.java
diff --git a/core-java-lang/src/main/java/com/baeldung/enums/PizzaDeliverySystemConfiguration.java b/core-java-lang-syntax/src/main/java/com/baeldung/enums/PizzaDeliverySystemConfiguration.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/enums/PizzaDeliverySystemConfiguration.java
rename to core-java-lang-syntax/src/main/java/com/baeldung/enums/PizzaDeliverySystemConfiguration.java
diff --git a/core-java-lang/src/main/java/com/baeldung/enums/README.md b/core-java-lang-syntax/src/main/java/com/baeldung/enums/README.md
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/enums/README.md
rename to core-java-lang-syntax/src/main/java/com/baeldung/enums/README.md
diff --git a/core-java-lang/src/main/java/com/baeldung/generics/Building.java b/core-java-lang-syntax/src/main/java/com/baeldung/generics/Building.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/generics/Building.java
rename to core-java-lang-syntax/src/main/java/com/baeldung/generics/Building.java
diff --git a/core-java-lang/src/main/java/com/baeldung/generics/Generics.java b/core-java-lang-syntax/src/main/java/com/baeldung/generics/Generics.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/generics/Generics.java
rename to core-java-lang-syntax/src/main/java/com/baeldung/generics/Generics.java
diff --git a/core-java-lang/src/main/java/com/baeldung/generics/House.java b/core-java-lang-syntax/src/main/java/com/baeldung/generics/House.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/generics/House.java
rename to core-java-lang-syntax/src/main/java/com/baeldung/generics/House.java
diff --git a/core-java-lang-syntax/src/main/java/com/baeldung/initializationguide/User.java b/core-java-lang-syntax/src/main/java/com/baeldung/initializationguide/User.java
new file mode 100644
index 0000000000..e2e3f051dd
--- /dev/null
+++ b/core-java-lang-syntax/src/main/java/com/baeldung/initializationguide/User.java
@@ -0,0 +1,53 @@
+package com.baeldung.initializationguide;
+
+import java.io.Serializable;
+
+public class User implements Serializable, Cloneable {
+ private static final long serialVersionUID = 1L;
+ static String forum;
+ private String name;
+ private int id;
+
+ {
+ id = 0;
+ System.out.println("Instance Initializer");
+ }
+
+ static {
+ forum = "Java";
+ System.out.println("Static Initializer");
+ }
+
+ public User(String name, int id) {
+ super();
+ this.name = name;
+ this.id = id;
+ }
+
+ public User() {
+ System.out.println("Constructor");
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+ @Override
+ protected Object clone() throws CloneNotSupportedException {
+ return this;
+ }
+
+}
+
diff --git a/core-java-lang/src/main/java/com/baeldung/loops/InfiniteLoops.java b/core-java-lang-syntax/src/main/java/com/baeldung/loops/InfiniteLoops.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/loops/InfiniteLoops.java
rename to core-java-lang-syntax/src/main/java/com/baeldung/loops/InfiniteLoops.java
diff --git a/core-java-lang/src/main/java/com/baeldung/loops/LoopsInJava.java b/core-java-lang-syntax/src/main/java/com/baeldung/loops/LoopsInJava.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/loops/LoopsInJava.java
rename to core-java-lang-syntax/src/main/java/com/baeldung/loops/LoopsInJava.java
diff --git a/core-java-lang/src/main/java/com/baeldung/switchstatement/SwitchStatement.java b/core-java-lang-syntax/src/main/java/com/baeldung/switchstatement/SwitchStatement.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/switchstatement/SwitchStatement.java
rename to core-java-lang-syntax/src/main/java/com/baeldung/switchstatement/SwitchStatement.java
diff --git a/core-java-lang/src/main/java/com/baeldung/system/ChatWindow.java b/core-java-lang-syntax/src/main/java/com/baeldung/system/ChatWindow.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/system/ChatWindow.java
rename to core-java-lang-syntax/src/main/java/com/baeldung/system/ChatWindow.java
diff --git a/core-java-lang/src/main/java/com/baeldung/system/DateTimeService.java b/core-java-lang-syntax/src/main/java/com/baeldung/system/DateTimeService.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/system/DateTimeService.java
rename to core-java-lang-syntax/src/main/java/com/baeldung/system/DateTimeService.java
diff --git a/core-java-lang/src/main/java/com/baeldung/system/EnvironmentVariables.java b/core-java-lang-syntax/src/main/java/com/baeldung/system/EnvironmentVariables.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/system/EnvironmentVariables.java
rename to core-java-lang-syntax/src/main/java/com/baeldung/system/EnvironmentVariables.java
diff --git a/core-java-lang/src/main/java/com/baeldung/system/SystemErrDemo.java b/core-java-lang-syntax/src/main/java/com/baeldung/system/SystemErrDemo.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/system/SystemErrDemo.java
rename to core-java-lang-syntax/src/main/java/com/baeldung/system/SystemErrDemo.java
diff --git a/core-java-lang/src/main/java/com/baeldung/system/SystemExitDemo.java b/core-java-lang-syntax/src/main/java/com/baeldung/system/SystemExitDemo.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/system/SystemExitDemo.java
rename to core-java-lang-syntax/src/main/java/com/baeldung/system/SystemExitDemo.java
diff --git a/core-java-lang/src/main/java/com/baeldung/system/SystemOutDemo.java b/core-java-lang-syntax/src/main/java/com/baeldung/system/SystemOutDemo.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/system/SystemOutDemo.java
rename to core-java-lang-syntax/src/main/java/com/baeldung/system/SystemOutDemo.java
diff --git a/core-java-lang/src/main/java/com/baeldung/system/UserCredentials.java b/core-java-lang-syntax/src/main/java/com/baeldung/system/UserCredentials.java
similarity index 100%
rename from core-java-lang/src/main/java/com/baeldung/system/UserCredentials.java
rename to core-java-lang-syntax/src/main/java/com/baeldung/system/UserCredentials.java
diff --git a/core-java-lang/src/test/java/com/baeldung/breakcontinue/BreakContinueUnitTest.java b/core-java-lang-syntax/src/test/java/com/baeldung/breakcontinue/BreakContinueUnitTest.java
similarity index 100%
rename from core-java-lang/src/test/java/com/baeldung/breakcontinue/BreakContinueUnitTest.java
rename to core-java-lang-syntax/src/test/java/com/baeldung/breakcontinue/BreakContinueUnitTest.java
diff --git a/core-java-lang/src/test/java/com/baeldung/enums/PizzaUnitTest.java b/core-java-lang-syntax/src/test/java/com/baeldung/enums/PizzaUnitTest.java
similarity index 100%
rename from core-java-lang/src/test/java/com/baeldung/enums/PizzaUnitTest.java
rename to core-java-lang-syntax/src/test/java/com/baeldung/enums/PizzaUnitTest.java
diff --git a/core-java-lang/src/test/java/com/baeldung/generics/GenericsUnitTest.java b/core-java-lang-syntax/src/test/java/com/baeldung/generics/GenericsUnitTest.java
similarity index 100%
rename from core-java-lang/src/test/java/com/baeldung/generics/GenericsUnitTest.java
rename to core-java-lang-syntax/src/test/java/com/baeldung/generics/GenericsUnitTest.java
diff --git a/core-java-lang-syntax/src/test/java/com/baeldung/initializationguide/UserUnitTest.java b/core-java-lang-syntax/src/test/java/com/baeldung/initializationguide/UserUnitTest.java
new file mode 100644
index 0000000000..f74384e6f7
--- /dev/null
+++ b/core-java-lang-syntax/src/test/java/com/baeldung/initializationguide/UserUnitTest.java
@@ -0,0 +1,37 @@
+package com.baeldung.initializationguide;
+import org.junit.Before;
+import org.junit.Test;
+
+import static org.assertj.core.api.Assertions.*;
+
+import java.lang.reflect.InvocationTargetException;
+
+public class UserUnitTest {
+
+ @Test
+ public void givenUserInstance_whenIntializedWithNew_thenInstanceIsNotNull() {
+ User user = new User("Alice", 1);
+ assertThat(user).isNotNull();
+ }
+
+ @Test
+ public void givenUserInstance_whenInitializedWithReflection_thenInstanceIsNotNull() throws InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException {
+ User user = User.class.getConstructor(String.class, int.class)
+ .newInstance("Alice", 2);
+ assertThat(user).isNotNull();
+ }
+
+ @Test
+ public void givenUserInstance_whenCopiedWithClone_thenExactMatchIsCreated() throws CloneNotSupportedException {
+ User user = new User("Alice", 3);
+ User clonedUser = (User) user.clone();
+ assertThat(clonedUser).isEqualTo(user);
+ }
+
+ @Test
+ public void givenUserInstance_whenValuesAreNotInitialized_thenUserNameAndIdReturnDefault() {
+ User user = new User();
+ assertThat(user.getName()).isNull();
+ assertThat(user.getId() == 0);
+ }
+}
diff --git a/core-java-lang/src/test/java/com/baeldung/java/diamond/Car.java b/core-java-lang-syntax/src/test/java/com/baeldung/java/diamond/Car.java
similarity index 100%
rename from core-java-lang/src/test/java/com/baeldung/java/diamond/Car.java
rename to core-java-lang-syntax/src/test/java/com/baeldung/java/diamond/Car.java
diff --git a/core-java-lang/src/test/java/com/baeldung/java/diamond/DiamondOperatorUnitTest.java b/core-java-lang-syntax/src/test/java/com/baeldung/java/diamond/DiamondOperatorUnitTest.java
similarity index 100%
rename from core-java-lang/src/test/java/com/baeldung/java/diamond/DiamondOperatorUnitTest.java
rename to core-java-lang-syntax/src/test/java/com/baeldung/java/diamond/DiamondOperatorUnitTest.java
diff --git a/core-java-lang/src/test/java/com/baeldung/java/diamond/Diesel.java b/core-java-lang-syntax/src/test/java/com/baeldung/java/diamond/Diesel.java
similarity index 100%
rename from core-java-lang/src/test/java/com/baeldung/java/diamond/Diesel.java
rename to core-java-lang-syntax/src/test/java/com/baeldung/java/diamond/Diesel.java
diff --git a/core-java-lang/src/test/java/com/baeldung/java/diamond/Engine.java b/core-java-lang-syntax/src/test/java/com/baeldung/java/diamond/Engine.java
similarity index 100%
rename from core-java-lang/src/test/java/com/baeldung/java/diamond/Engine.java
rename to core-java-lang-syntax/src/test/java/com/baeldung/java/diamond/Engine.java
diff --git a/core-java-lang/src/test/java/com/baeldung/java/diamond/Vehicle.java b/core-java-lang-syntax/src/test/java/com/baeldung/java/diamond/Vehicle.java
similarity index 100%
rename from core-java-lang/src/test/java/com/baeldung/java/diamond/Vehicle.java
rename to core-java-lang-syntax/src/test/java/com/baeldung/java/diamond/Vehicle.java
diff --git a/core-java-lang/src/test/java/com/baeldung/java/doublebrace/DoubleBraceUnitTest.java b/core-java-lang-syntax/src/test/java/com/baeldung/java/doublebrace/DoubleBraceUnitTest.java
similarity index 100%
rename from core-java-lang/src/test/java/com/baeldung/java/doublebrace/DoubleBraceUnitTest.java
rename to core-java-lang-syntax/src/test/java/com/baeldung/java/doublebrace/DoubleBraceUnitTest.java
diff --git a/core-java-lang/src/test/java/com/baeldung/loops/WhenUsingLoops.java b/core-java-lang-syntax/src/test/java/com/baeldung/loops/WhenUsingLoops.java
similarity index 100%
rename from core-java-lang/src/test/java/com/baeldung/loops/WhenUsingLoops.java
rename to core-java-lang-syntax/src/test/java/com/baeldung/loops/WhenUsingLoops.java
diff --git a/core-java-lang/src/test/java/com/baeldung/modulo/ModuloUnitTest.java b/core-java-lang-syntax/src/test/java/com/baeldung/modulo/ModuloUnitTest.java
similarity index 100%
rename from core-java-lang/src/test/java/com/baeldung/modulo/ModuloUnitTest.java
rename to core-java-lang-syntax/src/test/java/com/baeldung/modulo/ModuloUnitTest.java
diff --git a/core-java-lang/src/test/java/com/baeldung/primitiveconversion/PrimitiveConversionsJUnitTest.java b/core-java-lang-syntax/src/test/java/com/baeldung/primitiveconversion/PrimitiveConversionsJUnitTest.java
similarity index 100%
rename from core-java-lang/src/test/java/com/baeldung/primitiveconversion/PrimitiveConversionsJUnitTest.java
rename to core-java-lang-syntax/src/test/java/com/baeldung/primitiveconversion/PrimitiveConversionsJUnitTest.java
diff --git a/core-java-lang/src/test/java/com/baeldung/switchstatement/SwitchStatementUnitTest.java b/core-java-lang-syntax/src/test/java/com/baeldung/switchstatement/SwitchStatementUnitTest.java
similarity index 100%
rename from core-java-lang/src/test/java/com/baeldung/switchstatement/SwitchStatementUnitTest.java
rename to core-java-lang-syntax/src/test/java/com/baeldung/switchstatement/SwitchStatementUnitTest.java
diff --git a/core-java-lang/src/test/java/com/baeldung/system/DateTimeServiceUnitTest.java b/core-java-lang-syntax/src/test/java/com/baeldung/system/DateTimeServiceUnitTest.java
similarity index 100%
rename from core-java-lang/src/test/java/com/baeldung/system/DateTimeServiceUnitTest.java
rename to core-java-lang-syntax/src/test/java/com/baeldung/system/DateTimeServiceUnitTest.java
diff --git a/core-java-lang/src/test/java/com/baeldung/system/EnvironmentVariablesUnitTest.java b/core-java-lang-syntax/src/test/java/com/baeldung/system/EnvironmentVariablesUnitTest.java
similarity index 100%
rename from core-java-lang/src/test/java/com/baeldung/system/EnvironmentVariablesUnitTest.java
rename to core-java-lang-syntax/src/test/java/com/baeldung/system/EnvironmentVariablesUnitTest.java
diff --git a/core-java-lang/src/test/java/com/baeldung/system/SystemArrayCopyUnitTest.java b/core-java-lang-syntax/src/test/java/com/baeldung/system/SystemArrayCopyUnitTest.java
similarity index 100%
rename from core-java-lang/src/test/java/com/baeldung/system/SystemArrayCopyUnitTest.java
rename to core-java-lang-syntax/src/test/java/com/baeldung/system/SystemArrayCopyUnitTest.java
diff --git a/core-java-lang/src/test/java/com/baeldung/system/SystemNanoUnitTest.java b/core-java-lang-syntax/src/test/java/com/baeldung/system/SystemNanoUnitTest.java
similarity index 100%
rename from core-java-lang/src/test/java/com/baeldung/system/SystemNanoUnitTest.java
rename to core-java-lang-syntax/src/test/java/com/baeldung/system/SystemNanoUnitTest.java
diff --git a/core-java-lang/src/test/java/com/baeldung/system/SystemPropertiesUnitTest.java b/core-java-lang-syntax/src/test/java/com/baeldung/system/SystemPropertiesUnitTest.java
similarity index 100%
rename from core-java-lang/src/test/java/com/baeldung/system/SystemPropertiesUnitTest.java
rename to core-java-lang-syntax/src/test/java/com/baeldung/system/SystemPropertiesUnitTest.java
diff --git a/core-java-lang/src/test/java/com/baeldung/ternaryoperator/TernaryOperatorUnitTest.java b/core-java-lang-syntax/src/test/java/com/baeldung/ternaryoperator/TernaryOperatorUnitTest.java
similarity index 100%
rename from core-java-lang/src/test/java/com/baeldung/ternaryoperator/TernaryOperatorUnitTest.java
rename to core-java-lang-syntax/src/test/java/com/baeldung/ternaryoperator/TernaryOperatorUnitTest.java
diff --git a/core-java-lang/src/test/java/com/baeldung/varargs/FormatterUnitTest.java b/core-java-lang-syntax/src/test/java/com/baeldung/varargs/FormatterUnitTest.java
similarity index 100%
rename from core-java-lang/src/test/java/com/baeldung/varargs/FormatterUnitTest.java
rename to core-java-lang-syntax/src/test/java/com/baeldung/varargs/FormatterUnitTest.java
diff --git a/core-java-lang/README.md b/core-java-lang/README.md
index 69209bb193..52dfe708a3 100644
--- a/core-java-lang/README.md
+++ b/core-java-lang/README.md
@@ -4,44 +4,24 @@
### Relevant Articles:
- [Guide to Java Reflection](http://www.baeldung.com/java-reflection)
-- [Introduction to Java Generics](http://www.baeldung.com/java-generics)
- [Generate equals() and hashCode() with Eclipse](http://www.baeldung.com/java-eclipse-equals-and-hashcode)
- [Chained Exceptions in Java](http://www.baeldung.com/java-chained-exceptions)
-- [Java Primitive Conversions](http://www.baeldung.com/java-primitive-conversions)
- [Call Methods at Runtime Using Java Reflection](http://www.baeldung.com/java-method-reflection)
- [Iterating Over Enum Values in Java](http://www.baeldung.com/java-enum-iteration)
- [Changing Annotation Parameters At Runtime](http://www.baeldung.com/java-reflection-change-annotation-params)
- [Dynamic Proxies in Java](http://www.baeldung.com/java-dynamic-proxies)
- [Java Double Brace Initialization](http://www.baeldung.com/java-double-brace-initialization)
-- [Guide to hashCode() in Java](http://www.baeldung.com/java-hashcode)
- [Guide to the Diamond Operator in Java](http://www.baeldung.com/java-diamond-operator)
-- [A Guide to the Static Keyword in Java](http://www.baeldung.com/java-static)
- [Quick Example - Comparator vs Comparable in Java](http://www.baeldung.com/java-comparator-comparable)
- [The Java continue and break Keywords](http://www.baeldung.com/java-continue-and-break)
-- [A Guide to Java Initialization](http://www.baeldung.com/java-initialization)
- [Nested Classes in Java](http://www.baeldung.com/java-nested-classes)
-- [A Guide to Java Loops](http://www.baeldung.com/java-loops)
-- [Varargs in Java](http://www.baeldung.com/java-varargs)
- [A Guide to Inner Interfaces in Java](http://www.baeldung.com/java-inner-interfaces)
-- [Polymorphism in Java](http://www.baeldung.com/java-polymorphism)
- [Recursion In Java](http://www.baeldung.com/java-recursion)
- [A Guide to the finalize Method in Java](http://www.baeldung.com/java-finalize)
-- [Method Overloading and Overriding in Java](http://www.baeldung.com/java-method-overload-override)
-- [How to Make a Deep Copy of an Object in Java](http://www.baeldung.com/java-deep-copy)
-- [Guide to Inheritance in Java](http://www.baeldung.com/java-inheritance)
-- [Object Type Casting in Java](http://www.baeldung.com/java-type-casting)
-- [The "final" Keyword in Java](http://www.baeldung.com/java-final)
- [A Guide to Java Enums](http://www.baeldung.com/a-guide-to-java-enums)
- [Infinite Loops in Java](http://www.baeldung.com/infinite-loops-java)
- [Quick Guide to java.lang.System](http://www.baeldung.com/java-lang-system)
-- [Type Erasure in Java Explained](http://www.baeldung.com/java-type-erasure)
- [Using Java Assertions](http://www.baeldung.com/java-assert)
-- [Pass-By-Value as a Parameter Passing Mechanism in Java](http://www.baeldung.com/java-pass-by-value-or-pass-by-reference)
-- [Variable and Method Hiding in Java](http://www.baeldung.com/java-variable-method-hiding)
-- [Access Modifiers in Java](http://www.baeldung.com/java-access-modifiers)
-- [Guide to the super Java Keyword](http://www.baeldung.com/java-super)
-- [Guide to the this Java Keyword](http://www.baeldung.com/java-this)
-- [Immutable Objects in Java](http://www.baeldung.com/java-immutable-object)
- [ClassNotFoundException vs NoClassDefFoundError](http://www.baeldung.com/java-classnotfoundexception-and-noclassdeffounderror)
- [The StackOverflowError in Java](http://www.baeldung.com/java-stack-overflow-error)
- [Create a Custom Exception in Java](http://www.baeldung.com/java-new-custom-exception)
@@ -50,12 +30,6 @@
- [Static and Dynamic Binding in Java](https://www.baeldung.com/java-static-dynamic-binding)
- [Difference Between Throw and Throws in Java](https://www.baeldung.com/java-throw-throws)
- [Synthetic Constructs in Java](https://www.baeldung.com/java-synthetic)
-- [Java Switch Statement](https://www.baeldung.com/java-switch)
-- [The Modulo Operator in Java](https://www.baeldung.com/modulo-java)
-- [Ternary Operator In Java](https://www.baeldung.com/java-ternary-operator)
- [How to Separate Double into Integer and Decimal Parts](https://www.baeldung.com/java-separate-double-into-integer-decimal-parts)
- [“Sneaky Throws” in Java](http://www.baeldung.com/java-sneaky-throws)
-- [Inheritance and Composition (Is-a vs Has-a relationship) in Java](http://www.baeldung.com/java-inheritance-composition)
-- [A Guide to Constructors in Java](https://www.baeldung.com/java-constructors)
- [Retrieving a Class Name in Java](https://www.baeldung.com/java-class-name)
-- [Java equals() and hashCode() Contracts](https://www.baeldung.com/java-equals-hashcode-contracts)
diff --git a/core-java-lang/pom.xml b/core-java-lang/pom.xml
index 2f307859f1..283acab775 100644
--- a/core-java-lang/pom.xml
+++ b/core-java-lang/pom.xml
@@ -56,22 +56,11 @@
${assertj-core.version}
test
-
- org.springframework
- spring-web
- ${springframework.spring-web.version}
-
javax.mail
mail
${javax.mail.version}
-
- nl.jqno.equalsverifier
- equalsverifier
- ${equalsverifier.version}
- test
-
@@ -82,334 +71,12 @@
true
-
-
-
- org.apache.maven.plugins
- maven-surefire-plugin
-
-
- **/*LiveTest.java
- **/*IntegrationTest.java
- **/*IntTest.java
- **/*LongRunningUnitTest.java
- **/*ManualTest.java
-
- true
-
-
-
-
- org.apache.maven.plugins
- maven-dependency-plugin
-
-
- copy-dependencies
- prepare-package
-
- copy-dependencies
-
-
- ${project.build.directory}/libs
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-jar-plugin
- ${maven-jar-plugin.version}
-
-
-
- true
- libs/
- org.baeldung.executable.ExecutableMavenJar
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-assembly-plugin
-
-
- package
-
- single
-
-
- ${project.basedir}
-
-
- org.baeldung.executable.ExecutableMavenJar
-
-
-
- jar-with-dependencies
-
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-shade-plugin
- ${maven-shade-plugin.version}
-
-
-
- shade
-
-
- true
-
-
- org.baeldung.executable.ExecutableMavenJar
-
-
-
-
-
-
-
-
- com.jolira
- onejar-maven-plugin
- ${onejar-maven-plugin.version}
-
-
-
- org.baeldung.executable.ExecutableMavenJar
- true
- ${project.build.finalName}-onejar.${project.packaging}
-
-
- one-jar
-
-
-
-
-
-
- org.springframework.boot
- spring-boot-maven-plugin
- ${spring-boot-maven-plugin.version}
-
-
-
- repackage
-
-
- spring-boot
- org.baeldung.executable.ExecutableMavenJar
-
-
-
-
-
-
- org.codehaus.mojo
- exec-maven-plugin
- ${exec-maven-plugin.version}
-
- java
- com.baeldung.outofmemoryerror.OutOfMemoryGCLimitExceed
-
- -Xmx300m
- -XX:+UseParallelGC
- -classpath
-
- com.baeldung.outofmemoryerror.OutOfMemoryGCLimitExceed
-
-
-
-
-
- org.apache.maven.plugins
- maven-javadoc-plugin
- ${maven-javadoc-plugin.version}
-
- 1.8
- 1.8
-
-
-
-
-
- integration
-
-
-
- org.apache.maven.plugins
- maven-surefire-plugin
-
-
- integration-test
-
- test
-
-
-
- **/*ManualTest.java
-
-
- **/*IntegrationTest.java
- **/*IntTest.java
-
-
-
-
-
-
- json
-
-
-
-
- org.codehaus.mojo
- exec-maven-plugin
- ${exec-maven-plugin.version}
-
-
- run-benchmarks
-
- none
-
- exec
-
-
- test
- java
-
- -classpath
-
- org.openjdk.jmh.Main
- .*
-
-
-
-
-
-
-
-
-
-
-
- buildAgentLoader
-
-
-
- org.apache.maven.plugins
- maven-jar-plugin
-
-
- package
-
- jar
-
-
- agentLoader
- target/classes
-
-
- true
-
- ${project.build.outputDirectory}/META-INF/MANIFEST.MF
-
-
-
- com/baeldung/instrumentation/application/AgentLoader.class
- com/baeldung/instrumentation/application/Launcher.class
-
-
-
-
-
-
-
-
-
- buildApplication
-
-
-
- org.apache.maven.plugins
- maven-jar-plugin
-
-
- package
-
- jar
-
-
- application
- target/classes
-
-
- true
-
- ${project.build.outputDirectory}/META-INF/MANIFEST.MF
-
-
-
- com/baeldung/instrumentation/application/MyAtm.class
- com/baeldung/instrumentation/application/MyAtmApplication.class
- com/baeldung/instrumentation/application/Launcher.class
-
-
-
-
-
-
-
-
-
- buildAgent
-
-
-
- org.apache.maven.plugins
- maven-jar-plugin
-
-
- package
-
- jar
-
-
- agent
- target/classes
-
-
- true
-
- ${project.build.outputDirectory}/META-INF/MANIFEST.MF
-
-
-
- com/baeldung/instrumentation/agent/AtmTransformer.class
- com/baeldung/instrumentation/agent/MyInstrumentationAgent.class
-
-
-
-
-
-
-
-
-
-
- 2.8.5
+ 2.9.7
2.8.2
@@ -420,17 +87,6 @@
3.10.0
-
-
- 2.21.0
- 4.3.4.RELEASE
- 3.0.0-M1
- 3.0.2
- 1.4.4
- 3.1.1
- 2.0.3.RELEASE
- 1.6.0
- 3.0.3
diff --git a/core-java-lang/src/main/java/com/baeldung/controlstructures/Loops.java b/core-java-lang/src/main/java/com/baeldung/controlstructures/Loops.java
index bb858ffe22..bc4515bfc7 100644
--- a/core-java-lang/src/main/java/com/baeldung/controlstructures/Loops.java
+++ b/core-java-lang/src/main/java/com/baeldung/controlstructures/Loops.java
@@ -70,6 +70,40 @@ public class Loops {
}
}
+ /**
+ * Finds the index of {@code name} in a list
+ * @param name The name to look for
+ * @param names The list of names
+ * @return The index where the name was found or -1 otherwise
+ */
+ public static int findFirstInstanceOfName(String name, String[] names) {
+ int index = 0;
+ for ( ; index < names.length; index++) {
+ if (names[index].equals(name)) {
+ break;
+ }
+ }
+ return index == names.length ? -1 : index;
+ }
+
+ /**
+ * Takes several names and makes a list, skipping the specified {@code name}.
+ *
+ * @param name The name to skip
+ * @param names The list of names
+ * @return The list of names as a single string, missing the specified {@code name}.
+ */
+ public static String makeListSkippingName(String name, String[] names) {
+ String list = "";
+ for (int i = 0; i < names.length; i++) {
+ if (names[i].equals(name)) {
+ continue;
+ }
+ list += names[i];
+ }
+ return list;
+ }
+
/**
* Prints an specified amount of even numbers. Shows usage of both {@code break} and {@code continue} branching statements.
* @param amountToPrint Amount of even numbers to print.
diff --git a/core-java-networking/README.md b/core-java-networking/README.md
index 626ea794e6..4b77aa3c1f 100644
--- a/core-java-networking/README.md
+++ b/core-java-networking/README.md
@@ -5,3 +5,9 @@
### Relevant Articles
- [Connecting Through Proxy Servers in Core Java](https://www.baeldung.com/java-connect-via-proxy-server)
+- [Broadcasting and Multicasting in Java](http://www.baeldung.com/java-broadcast-multicast)
+- [A Guide To UDP In Java](http://www.baeldung.com/udp-in-java)
+- [Sending Emails with Java](http://www.baeldung.com/java-email)
+- [A Guide To HTTP Cookies In Java](http://www.baeldung.com/cookies-java)
+- [A Guide to the Java URL](http://www.baeldung.com/java-url)
+- [Working with Network Interfaces in Java](http://www.baeldung.com/java-network-interfaces)
diff --git a/core-java-networking/pom.xml b/core-java-networking/pom.xml
index 178295e1ec..c7fa2af180 100644
--- a/core-java-networking/pom.xml
+++ b/core-java-networking/pom.xml
@@ -13,7 +13,25 @@
../parent-java
+
+
+ javax.mail
+ mail
+ ${javax.mail.version}
+
+
+ commons-io
+ commons-io
+ ${commons-io.version}
+
+
+
core-java-networking
+
+
+ 1.5.0-b01
+ 2.5
+
diff --git a/core-java/src/main/java/com/baeldung/mail/EmailService.java b/core-java-networking/src/main/java/com/baeldung/mail/EmailService.java
similarity index 100%
rename from core-java/src/main/java/com/baeldung/mail/EmailService.java
rename to core-java-networking/src/main/java/com/baeldung/mail/EmailService.java
diff --git a/core-java/src/main/java/com/baeldung/networking/cookies/PersistentCookieStore.java b/core-java-networking/src/main/java/com/baeldung/networking/cookies/PersistentCookieStore.java
similarity index 100%
rename from core-java/src/main/java/com/baeldung/networking/cookies/PersistentCookieStore.java
rename to core-java-networking/src/main/java/com/baeldung/networking/cookies/PersistentCookieStore.java
diff --git a/core-java/src/main/java/com/baeldung/networking/cookies/ProxyAcceptCookiePolicy.java b/core-java-networking/src/main/java/com/baeldung/networking/cookies/ProxyAcceptCookiePolicy.java
similarity index 100%
rename from core-java/src/main/java/com/baeldung/networking/cookies/ProxyAcceptCookiePolicy.java
rename to core-java-networking/src/main/java/com/baeldung/networking/cookies/ProxyAcceptCookiePolicy.java
diff --git a/core-java/src/main/java/com/baeldung/networking/udp/EchoClient.java b/core-java-networking/src/main/java/com/baeldung/networking/udp/EchoClient.java
similarity index 100%
rename from core-java/src/main/java/com/baeldung/networking/udp/EchoClient.java
rename to core-java-networking/src/main/java/com/baeldung/networking/udp/EchoClient.java
diff --git a/core-java/src/main/java/com/baeldung/networking/udp/EchoServer.java b/core-java-networking/src/main/java/com/baeldung/networking/udp/EchoServer.java
similarity index 100%
rename from core-java/src/main/java/com/baeldung/networking/udp/EchoServer.java
rename to core-java-networking/src/main/java/com/baeldung/networking/udp/EchoServer.java
diff --git a/core-java/src/main/java/com/baeldung/networking/udp/broadcast/BroadcastingClient.java b/core-java-networking/src/main/java/com/baeldung/networking/udp/broadcast/BroadcastingClient.java
similarity index 100%
rename from core-java/src/main/java/com/baeldung/networking/udp/broadcast/BroadcastingClient.java
rename to core-java-networking/src/main/java/com/baeldung/networking/udp/broadcast/BroadcastingClient.java
diff --git a/core-java/src/main/java/com/baeldung/networking/udp/broadcast/BroadcastingEchoServer.java b/core-java-networking/src/main/java/com/baeldung/networking/udp/broadcast/BroadcastingEchoServer.java
similarity index 100%
rename from core-java/src/main/java/com/baeldung/networking/udp/broadcast/BroadcastingEchoServer.java
rename to core-java-networking/src/main/java/com/baeldung/networking/udp/broadcast/BroadcastingEchoServer.java
diff --git a/core-java/src/main/java/com/baeldung/networking/udp/multicast/MulticastEchoServer.java b/core-java-networking/src/main/java/com/baeldung/networking/udp/multicast/MulticastEchoServer.java
similarity index 100%
rename from core-java/src/main/java/com/baeldung/networking/udp/multicast/MulticastEchoServer.java
rename to core-java-networking/src/main/java/com/baeldung/networking/udp/multicast/MulticastEchoServer.java
diff --git a/core-java/src/main/java/com/baeldung/networking/udp/multicast/MulticastingClient.java b/core-java-networking/src/main/java/com/baeldung/networking/udp/multicast/MulticastingClient.java
similarity index 100%
rename from core-java/src/main/java/com/baeldung/networking/udp/multicast/MulticastingClient.java
rename to core-java-networking/src/main/java/com/baeldung/networking/udp/multicast/MulticastingClient.java
diff --git a/core-java/src/main/java/com/baeldung/javanetworking/uriurl/URIDemo.java b/core-java-networking/src/main/java/com/baeldung/networking/uriurl/URIDemo.java
similarity index 98%
rename from core-java/src/main/java/com/baeldung/javanetworking/uriurl/URIDemo.java
rename to core-java-networking/src/main/java/com/baeldung/networking/uriurl/URIDemo.java
index 121e0f5d72..91f6e21293 100644
--- a/core-java/src/main/java/com/baeldung/javanetworking/uriurl/URIDemo.java
+++ b/core-java-networking/src/main/java/com/baeldung/networking/uriurl/URIDemo.java
@@ -1,4 +1,4 @@
-package com.baeldung.javanetworking.uriurl;
+package com.baeldung.networking.uriurl;
import java.io.BufferedReader;
import java.io.IOException;
diff --git a/core-java/src/main/java/com/baeldung/javanetworking/uriurl/URLDemo.java b/core-java-networking/src/main/java/com/baeldung/networking/uriurl/URLDemo.java
similarity index 98%
rename from core-java/src/main/java/com/baeldung/javanetworking/uriurl/URLDemo.java
rename to core-java-networking/src/main/java/com/baeldung/networking/uriurl/URLDemo.java
index 109a9951d2..d257e7a295 100644
--- a/core-java/src/main/java/com/baeldung/javanetworking/uriurl/URLDemo.java
+++ b/core-java-networking/src/main/java/com/baeldung/networking/uriurl/URLDemo.java
@@ -1,4 +1,4 @@
-package com.baeldung.javanetworking.uriurl;
+package com.baeldung.networking.uriurl;
import java.io.BufferedReader;
import java.io.IOException;
diff --git a/core-java-networking/src/main/resources/logback.xml b/core-java-networking/src/main/resources/logback.xml
new file mode 100644
index 0000000000..56af2d397e
--- /dev/null
+++ b/core-java-networking/src/main/resources/logback.xml
@@ -0,0 +1,19 @@
+
+
+
+
+ %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/core-java/src/test/java/com/baeldung/java/networking/interfaces/NetworkInterfaceManualTest.java b/core-java-networking/src/test/java/com/baeldung/networking/interfaces/NetworkInterfaceManualTest.java
similarity index 98%
rename from core-java/src/test/java/com/baeldung/java/networking/interfaces/NetworkInterfaceManualTest.java
rename to core-java-networking/src/test/java/com/baeldung/networking/interfaces/NetworkInterfaceManualTest.java
index 8635a24f18..47a598f599 100644
--- a/core-java/src/test/java/com/baeldung/java/networking/interfaces/NetworkInterfaceManualTest.java
+++ b/core-java-networking/src/test/java/com/baeldung/networking/interfaces/NetworkInterfaceManualTest.java
@@ -1,4 +1,4 @@
-package com.baeldung.java.networking.interfaces;
+package com.baeldung.networking.interfaces;
import org.junit.Test;
diff --git a/core-java/src/test/java/com/baeldung/networking/udp/UDPLiveTest.java b/core-java-networking/src/test/java/com/baeldung/networking/udp/UDPLiveTest.java
similarity index 100%
rename from core-java/src/test/java/com/baeldung/networking/udp/UDPLiveTest.java
rename to core-java-networking/src/test/java/com/baeldung/networking/udp/UDPLiveTest.java
diff --git a/core-java/src/test/java/com/baeldung/networking/udp/broadcast/BroadcastLiveTest.java b/core-java-networking/src/test/java/com/baeldung/networking/udp/broadcast/BroadcastLiveTest.java
similarity index 100%
rename from core-java/src/test/java/com/baeldung/networking/udp/broadcast/BroadcastLiveTest.java
rename to core-java-networking/src/test/java/com/baeldung/networking/udp/broadcast/BroadcastLiveTest.java
diff --git a/core-java/src/test/java/com/baeldung/networking/udp/multicast/MulticastLiveTest.java b/core-java-networking/src/test/java/com/baeldung/networking/udp/multicast/MulticastLiveTest.java
similarity index 100%
rename from core-java/src/test/java/com/baeldung/networking/udp/multicast/MulticastLiveTest.java
rename to core-java-networking/src/test/java/com/baeldung/networking/udp/multicast/MulticastLiveTest.java
diff --git a/core-java/src/test/java/com/baeldung/javanetworking/uriurl/test/URIDemoLiveTest.java b/core-java-networking/src/test/java/com/baeldung/networking/uriurl/URIDemoLiveTest.java
similarity index 95%
rename from core-java/src/test/java/com/baeldung/javanetworking/uriurl/test/URIDemoLiveTest.java
rename to core-java-networking/src/test/java/com/baeldung/networking/uriurl/URIDemoLiveTest.java
index 0c312ff613..3b73cc0943 100644
--- a/core-java/src/test/java/com/baeldung/javanetworking/uriurl/test/URIDemoLiveTest.java
+++ b/core-java-networking/src/test/java/com/baeldung/networking/uriurl/URIDemoLiveTest.java
@@ -1,4 +1,4 @@
-package com.baeldung.javanetworking.uriurl.test;
+package com.baeldung.networking.uriurl;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
@@ -20,7 +20,7 @@ import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import com.baeldung.javanetworking.uriurl.URLDemo;
+import com.baeldung.networking.uriurl.URLDemo;
@FixMethodOrder
public class URIDemoLiveTest {
diff --git a/core-java/src/test/java/com/baeldung/javanetworking/uriurl/URIvsURLUnitTest.java b/core-java-networking/src/test/java/com/baeldung/networking/uriurl/URIvsURLUnitTest.java
similarity index 98%
rename from core-java/src/test/java/com/baeldung/javanetworking/uriurl/URIvsURLUnitTest.java
rename to core-java-networking/src/test/java/com/baeldung/networking/uriurl/URIvsURLUnitTest.java
index 8837dc5556..ec1cb4c0c9 100644
--- a/core-java/src/test/java/com/baeldung/javanetworking/uriurl/URIvsURLUnitTest.java
+++ b/core-java-networking/src/test/java/com/baeldung/networking/uriurl/URIvsURLUnitTest.java
@@ -1,4 +1,4 @@
-package com.baeldung.javanetworking.uriurl;
+package com.baeldung.networking.uriurl;
import java.io.IOException;
import java.net.MalformedURLException;
diff --git a/core-java/src/test/java/com/baeldung/javanetworking/uriurl/test/URLDemoLiveTest.java b/core-java-networking/src/test/java/com/baeldung/networking/uriurl/URLDemoLiveTest.java
similarity index 97%
rename from core-java/src/test/java/com/baeldung/javanetworking/uriurl/test/URLDemoLiveTest.java
rename to core-java-networking/src/test/java/com/baeldung/networking/uriurl/URLDemoLiveTest.java
index 15f53ed878..a9104311e6 100644
--- a/core-java/src/test/java/com/baeldung/javanetworking/uriurl/test/URLDemoLiveTest.java
+++ b/core-java-networking/src/test/java/com/baeldung/networking/uriurl/URLDemoLiveTest.java
@@ -1,4 +1,4 @@
-package com.baeldung.javanetworking.uriurl.test;
+package com.baeldung.networking.uriurl;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
@@ -18,7 +18,7 @@ import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import com.baeldung.javanetworking.uriurl.URLDemo;
+import com.baeldung.networking.uriurl.URLDemo;
@FixMethodOrder
public class URLDemoLiveTest {
diff --git a/core-java/src/test/java/com/baeldung/java/networking/url/UrlUnitTest.java b/core-java-networking/src/test/java/com/baeldung/networking/url/UrlUnitTest.java
similarity index 98%
rename from core-java/src/test/java/com/baeldung/java/networking/url/UrlUnitTest.java
rename to core-java-networking/src/test/java/com/baeldung/networking/url/UrlUnitTest.java
index 505d9595ab..112f2cf53f 100644
--- a/core-java/src/test/java/com/baeldung/java/networking/url/UrlUnitTest.java
+++ b/core-java-networking/src/test/java/com/baeldung/networking/url/UrlUnitTest.java
@@ -1,4 +1,4 @@
-package com.baeldung.java.networking.url;
+package com.baeldung.networking.url;
import static org.junit.Assert.assertEquals;
diff --git a/core-java-perf/README.md b/core-java-perf/README.md
new file mode 100644
index 0000000000..6af1c82a0a
--- /dev/null
+++ b/core-java-perf/README.md
@@ -0,0 +1,4 @@
+## Core Java Performance
+
+### Relevant Articles:
+- [Verbose Garbage Collection in Java](https://www.baeldung.com/java-verbose-gc)
diff --git a/core-java-perf/pom.xml b/core-java-perf/pom.xml
new file mode 100644
index 0000000000..062f76db77
--- /dev/null
+++ b/core-java-perf/pom.xml
@@ -0,0 +1,33 @@
+
+ 4.0.0
+ com.baeldung
+ core-java-perf
+ 0.1.0-SNAPSHOT
+ jar
+ core-java-perf
+
+
+ com.baeldung
+ parent-java
+ 0.0.1-SNAPSHOT
+ ../parent-java
+
+
+
+
+ org.apache.commons
+ commons-lang3
+ ${commons-lang3.version}
+
+
+
+
+
+
+
+ 3.8.1
+
+
+
+
diff --git a/core-java/src/main/java/com/baeldung/gc/VerboseGarbageCollectorRunner.java b/core-java-perf/src/main/java/com/baeldung/gc/VerboseGarbageCollectorRunner.java
similarity index 100%
rename from core-java/src/main/java/com/baeldung/gc/VerboseGarbageCollectorRunner.java
rename to core-java-perf/src/main/java/com/baeldung/gc/VerboseGarbageCollectorRunner.java
diff --git a/core-java-sun/pom.xml b/core-java-sun/pom.xml
index 57d5e9da5b..ef68c947ce 100644
--- a/core-java-sun/pom.xml
+++ b/core-java-sun/pom.xml
@@ -262,7 +262,7 @@
- 2.8.5
+ 2.9.7
23.0
diff --git a/core-java/README.md b/core-java/README.md
index 4fbc8bbc6e..b0e8f81e1f 100644
--- a/core-java/README.md
+++ b/core-java/README.md
@@ -7,7 +7,6 @@
- [How to Run a Shell Command in Java](http://www.baeldung.com/run-shell-command-in-java)
- [MD5 Hashing in Java](http://www.baeldung.com/java-md5)
- [A Guide to Java Sockets](http://www.baeldung.com/a-guide-to-java-sockets)
-- [Guide to the Fork/Join Framework in Java](http://www.baeldung.com/java-fork-join)
- [How to Print Screen in Java](http://www.baeldung.com/print-screen-in-java)
- [A Guide To Java Regular Expressions API](http://www.baeldung.com/regular-expressions-java)
- [Getting Started with Java Properties](http://www.baeldung.com/java-properties)
@@ -27,13 +26,11 @@
- [Guide to UUID in Java](http://www.baeldung.com/java-uuid)
- [Guide to Escaping Characters in Java RegExps](http://www.baeldung.com/java-regexp-escape-char)
- [Difference between URL and URI](http://www.baeldung.com/java-url-vs-uri)
-- [Broadcasting and Multicasting in Java](http://www.baeldung.com/java-broadcast-multicast)
- [OutOfMemoryError: GC Overhead Limit Exceeded](http://www.baeldung.com/java-gc-overhead-limit-exceeded)
- [Creating a Java Compiler Plugin](http://www.baeldung.com/java-build-compiler-plugin)
- [Quick Guide to Java Stack](http://www.baeldung.com/java-stack)
- [Guide to java.util.Formatter](http://www.baeldung.com/java-string-formatter)
- [Guide to the Cipher Class](http://www.baeldung.com/java-cipher-class)
-- [A Guide to ThreadLocalRandom in Java](http://www.baeldung.com/java-thread-local-random)
- [Compiling Java *.class Files with javac](http://www.baeldung.com/javac)
- [A Guide to Iterator in Java](http://www.baeldung.com/java-iterator)
- [Introduction to Javadoc](http://www.baeldung.com/javadoc)
@@ -42,31 +39,20 @@
- [How to Detect the OS Using Java](http://www.baeldung.com/java-detect-os)
- [ASCII Art in Java](http://www.baeldung.com/ascii-art-in-java)
- [What is the serialVersionUID?](http://www.baeldung.com/java-serial-version-uid)
-- [A Guide To UDP In Java](http://www.baeldung.com/udp-in-java)
- [A Guide to the ResourceBundle](http://www.baeldung.com/java-resourcebundle)
- [Class Loaders in Java](http://www.baeldung.com/java-classloaders)
-- [Sending Emails with Java](http://www.baeldung.com/java-email)
- [Introduction to SSL in Java](http://www.baeldung.com/java-ssl)
- [Java KeyStore API](http://www.baeldung.com/java-keystore)
- [Double-Checked Locking with Singleton](http://www.baeldung.com/java-singleton-double-checked-locking)
- [Guide to Java Clock Class](http://www.baeldung.com/java-clock)
-- [Introduction to Creational Design Patterns](http://www.baeldung.com/creational-design-patterns)
-- [Proxy, Decorator, Adapter and Bridge Patterns](http://www.baeldung.com/java-structural-design-patterns)
-- [Singletons in Java](http://www.baeldung.com/java-singleton)
-- [Flyweight Pattern in Java](http://www.baeldung.com/java-flyweight)
-- [The Observer Pattern in Java](http://www.baeldung.com/java-observer-pattern)
-- [Service Locator Pattern](http://www.baeldung.com/java-service-locator-pattern)
-- [The Thread.join() Method in Java](http://www.baeldung.com/java-thread-join)
- [Importance of Main Manifest Attribute in a Self-Executing JAR](http://www.baeldung.com/java-jar-executable-manifest-main-class)
- [How to Get the File Extension of a File in Java](http://www.baeldung.com/java-file-extension)
-- [Console I/O in Java](http://www.baeldung.com/java-console-input-output)
- [Java Global Exception Handler](http://www.baeldung.com/java-global-exception-handler)
- [Encrypting and Decrypting Files in Java](http://www.baeldung.com/java-cipher-input-output-stream)
- [How to Get the Size of an Object in Java](http://www.baeldung.com/java-size-of-object)
- [Guide to Java Instrumentation](http://www.baeldung.com/java-instrumentation)
- [Getting a File’s Mime Type in Java](http://www.baeldung.com/java-file-mime-type)
- [Common Java Exceptions](http://www.baeldung.com/java-common-exceptions)
-- [Java Constructors vs Static Factory Methods](https://www.baeldung.com/java-constructors-vs-static-factory-methods)
- [Throw Exception in Optional in Java 8](https://www.baeldung.com/java-optional-throw-exception)
- [Add a Character to a String at a Given Position](https://www.baeldung.com/java-add-character-to-string)
- [Calculating the nth Root in Java](https://www.baeldung.com/java-nth-root)
@@ -85,3 +71,4 @@
- [Calculate the Area of a Circle in Java](https://www.baeldung.com/java-calculate-circle-area)
- [A Guide to the Java Math Class](https://www.baeldung.com/java-lang-math)
- [Graphs in Java](https://www.baeldung.com/java-graphs)
+- [Console I/O in Java](http://www.baeldung.com/java-console-input-output)
diff --git a/core-java/pom.xml b/core-java/pom.xml
index 64345ab14c..442d378dab 100644
--- a/core-java/pom.xml
+++ b/core-java/pom.xml
@@ -131,11 +131,6 @@
h2
${h2database.version}
-
- javax.mail
- mail
- ${javax.mail.version}
-
org.apache.tika
@@ -482,7 +477,7 @@
- 2.8.5
+ 2.9.7
2.8.2
@@ -514,7 +509,6 @@
1.19
3.0.0-M1
- 1.5.0-b01
3.0.2
1.4.4
3.1.1
diff --git a/core-java/src/main/java/com/baeldung/http/FullResponseBuilder.java b/core-java/src/main/java/com/baeldung/http/FullResponseBuilder.java
new file mode 100644
index 0000000000..394255bd70
--- /dev/null
+++ b/core-java/src/main/java/com/baeldung/http/FullResponseBuilder.java
@@ -0,0 +1,65 @@
+package com.baeldung.http;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.net.HttpURLConnection;
+import java.util.Iterator;
+import java.util.List;
+
+public class FullResponseBuilder {
+ public static String getFullResponse(HttpURLConnection con) throws IOException {
+ StringBuilder fullResponseBuilder = new StringBuilder();
+
+ fullResponseBuilder.append(con.getResponseCode())
+ .append(" ")
+ .append(con.getResponseMessage())
+ .append("\n");
+
+ con.getHeaderFields()
+ .entrySet()
+ .stream()
+ .filter(entry -> entry.getKey() != null)
+ .forEach(entry -> {
+
+ fullResponseBuilder.append(entry.getKey())
+ .append(": ");
+
+ List headerValues = entry.getValue();
+ Iterator it = headerValues.iterator();
+ if (it.hasNext()) {
+ fullResponseBuilder.append(it.next());
+
+ while (it.hasNext()) {
+ fullResponseBuilder.append(", ")
+ .append(it.next());
+ }
+ }
+
+ fullResponseBuilder.append("\n");
+ });
+
+ Reader streamReader = null;
+
+ if (con.getResponseCode() > 299) {
+ streamReader = new InputStreamReader(con.getErrorStream());
+ } else {
+ streamReader = new InputStreamReader(con.getInputStream());
+ }
+
+ BufferedReader in = new BufferedReader(streamReader);
+ String inputLine;
+ StringBuilder content = new StringBuilder();
+ while ((inputLine = in.readLine()) != null) {
+ content.append(inputLine);
+ }
+
+ in.close();
+
+ fullResponseBuilder.append("Response: ")
+ .append(content);
+
+ return fullResponseBuilder.toString();
+ }
+}
diff --git a/core-java/src/main/java/com/baeldung/networking/README.md b/core-java/src/main/java/com/baeldung/networking/README.md
deleted file mode 100644
index b9e827f085..0000000000
--- a/core-java/src/main/java/com/baeldung/networking/README.md
+++ /dev/null
@@ -1,5 +0,0 @@
-### Relevant Articles:
-- [A Guide To UDP In Java](http://www.baeldung.com/udp-in-java)
-- [A Guide To HTTP Cookies In Java](http://www.baeldung.com/cookies-java)
-- [A Guide to the Java URL](http://www.baeldung.com/java-url)
-- [Working with Network Interfaces in Java](http://www.baeldung.com/java-network-interfaces)
diff --git a/core-java/src/test/java/com/baeldung/http/HttpRequestLiveTest.java b/core-java/src/test/java/com/baeldung/http/HttpRequestLiveTest.java
index acd6536ac4..752a75daa5 100644
--- a/core-java/src/test/java/com/baeldung/http/HttpRequestLiveTest.java
+++ b/core-java/src/test/java/com/baeldung/http/HttpRequestLiveTest.java
@@ -7,6 +7,7 @@ import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
+import java.io.Reader;
import java.net.CookieManager;
import java.net.HttpCookie;
import java.net.HttpURLConnection;
@@ -48,7 +49,8 @@ public class HttpRequestLiveTest {
in.close();
assertEquals("status code incorrect", status, 200);
- assertTrue("content incorrect", content.toString().contains("Example Domain"));
+ assertTrue("content incorrect", content.toString()
+ .contains("Example Domain"));
}
@Test
@@ -89,18 +91,24 @@ public class HttpRequestLiveTest {
Optional usernameCookie = null;
if (cookiesHeader != null) {
List cookies = HttpCookie.parse(cookiesHeader);
- cookies.forEach(cookie -> cookieManager.getCookieStore().add(null, cookie));
- usernameCookie = cookies.stream().findAny().filter(cookie -> cookie.getName().equals("username"));
+ cookies.forEach(cookie -> cookieManager.getCookieStore()
+ .add(null, cookie));
+ usernameCookie = cookies.stream()
+ .findAny()
+ .filter(cookie -> cookie.getName()
+ .equals("username"));
}
if (usernameCookie == null) {
- cookieManager.getCookieStore().add(null, new HttpCookie("username", "john"));
+ cookieManager.getCookieStore()
+ .add(null, new HttpCookie("username", "john"));
}
con.disconnect();
con = (HttpURLConnection) url.openConnection();
- con.setRequestProperty("Cookie", StringUtils.join(cookieManager.getCookieStore().getCookies(), ";"));
+ con.setRequestProperty("Cookie", StringUtils.join(cookieManager.getCookieStore()
+ .getCookies(), ";"));
int status = con.getResponseCode();
@@ -125,4 +133,56 @@ public class HttpRequestLiveTest {
assertEquals("status code incorrect", con.getResponseCode(), 200);
}
+ @Test
+ public void whenFailedRequest_thenOk() throws IOException {
+ URL url = new URL("http://example.com");
+ HttpURLConnection con = (HttpURLConnection) url.openConnection();
+ con.setRequestMethod("POST");
+
+ con.setConnectTimeout(5000);
+ con.setReadTimeout(5000);
+
+ int status = con.getResponseCode();
+
+ Reader streamReader = null;
+
+ if (status > 299) {
+ streamReader = new InputStreamReader(con.getErrorStream());
+ } else {
+ streamReader = new InputStreamReader(con.getInputStream());
+ }
+
+ BufferedReader in = new BufferedReader(streamReader);
+ String inputLine;
+ StringBuilder content = new StringBuilder();
+ while ((inputLine = in.readLine()) != null) {
+ content.append(inputLine);
+ }
+ in.close();
+
+ con.disconnect();
+
+ assertEquals("status code incorrect", status, 411);
+ assertTrue("error content", content.toString()
+ .contains("411 - Length Required"));
+ }
+
+ @Test
+ public void whenGetRequestFullResponse_thenOk() throws IOException {
+ URL url = new URL("http://example.com");
+ HttpURLConnection con = (HttpURLConnection) url.openConnection();
+ con.setRequestMethod("GET");
+
+ con.setConnectTimeout(5000);
+ con.setReadTimeout(5000);
+
+ String fullResponse = FullResponseBuilder.getFullResponse(con);
+
+ con.disconnect();
+
+ assertEquals("status code incorrect", con.getResponseCode(), 200);
+ assertTrue("header incorrect", fullResponse.contains("Content-Type: text/html; charset=UTF-8"));
+ assertTrue("response incorrect", fullResponse.contains(""));
+ }
+
}
diff --git a/couchbase/pom.xml b/couchbase/pom.xml
index 4f0f8787ca..7da027597e 100644
--- a/couchbase/pom.xml
+++ b/couchbase/pom.xml
@@ -70,7 +70,7 @@
2.5.0
4.3.5.RELEASE
3.5
- 2.9.1
+ 2.9.7
diff --git a/ethereum/pom.xml b/ethereum/pom.xml
index bd1bacb221..85cb260670 100644
--- a/ethereum/pom.xml
+++ b/ethereum/pom.xml
@@ -215,9 +215,9 @@
5.0.5.RELEASE
1.5.6.RELEASE
2.21.0
- 2.5.0
+ 2.9.7
1.3
- 2.9.3
+ 2.9.7
2.3.1
3.1.0
2.4.0
diff --git a/guest/log4j2-example/pom.xml b/guest/log4j2-example/pom.xml
index ab55e0b60e..045ff7325b 100644
--- a/guest/log4j2-example/pom.xml
+++ b/guest/log4j2-example/pom.xml
@@ -41,7 +41,7 @@
- 2.8.8.1
+ 2.9.7
2.8.2
diff --git a/jackson/src/main/java/com/baeldung/jackson/deserialization/dynamicobject/ProductJsonAnySetter.java b/jackson/src/main/java/com/baeldung/jackson/deserialization/dynamicobject/ProductJsonAnySetter.java
new file mode 100644
index 0000000000..13c21e37af
--- /dev/null
+++ b/jackson/src/main/java/com/baeldung/jackson/deserialization/dynamicobject/ProductJsonAnySetter.java
@@ -0,0 +1,39 @@
+package com.baeldung.jackson.deserialization.dynamicobject;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+import com.fasterxml.jackson.annotation.JsonAnySetter;
+
+public class ProductJsonAnySetter {
+
+ private String name;
+ private String category;
+ private Map details = new LinkedHashMap<>();
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getCategory() {
+ return category;
+ }
+
+ public void setCategory(String category) {
+ this.category = category;
+ }
+
+ public Map getDetails() {
+ return details;
+ }
+
+ @JsonAnySetter
+ public void setDetail(String key, Object value) {
+ details.put(key, value);
+ }
+
+}
diff --git a/jackson/src/main/java/com/baeldung/jackson/deserialization/dynamicobject/ProductJsonNode.java b/jackson/src/main/java/com/baeldung/jackson/deserialization/dynamicobject/ProductJsonNode.java
new file mode 100644
index 0000000000..729d542df3
--- /dev/null
+++ b/jackson/src/main/java/com/baeldung/jackson/deserialization/dynamicobject/ProductJsonNode.java
@@ -0,0 +1,35 @@
+package com.baeldung.jackson.deserialization.dynamicobject;
+
+import com.fasterxml.jackson.databind.JsonNode;
+
+public class ProductJsonNode {
+
+ private String name;
+ private String category;
+ private JsonNode details;
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getCategory() {
+ return category;
+ }
+
+ public void setCategory(String category) {
+ this.category = category;
+ }
+
+ public JsonNode getDetails() {
+ return details;
+ }
+
+ public void setDetails(JsonNode details) {
+ this.details = details;
+ }
+
+}
diff --git a/jackson/src/main/java/com/baeldung/jackson/deserialization/dynamicobject/ProductMap.java b/jackson/src/main/java/com/baeldung/jackson/deserialization/dynamicobject/ProductMap.java
new file mode 100644
index 0000000000..65d225f49b
--- /dev/null
+++ b/jackson/src/main/java/com/baeldung/jackson/deserialization/dynamicobject/ProductMap.java
@@ -0,0 +1,35 @@
+package com.baeldung.jackson.deserialization.dynamicobject;
+
+import java.util.Map;
+
+public class ProductMap {
+
+ private String name;
+ private String category;
+ private Map details;
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getCategory() {
+ return category;
+ }
+
+ public void setCategory(String category) {
+ this.category = category;
+ }
+
+ public Map getDetails() {
+ return details;
+ }
+
+ public void setDetails(Map details) {
+ this.details = details;
+ }
+
+}
diff --git a/jackson/src/test/java/com/baeldung/jackson/deserialization/dynamicobject/DynamicObjectDeserializationUnitTest.java b/jackson/src/test/java/com/baeldung/jackson/deserialization/dynamicobject/DynamicObjectDeserializationUnitTest.java
new file mode 100644
index 0000000000..d49677c1a2
--- /dev/null
+++ b/jackson/src/test/java/com/baeldung/jackson/deserialization/dynamicobject/DynamicObjectDeserializationUnitTest.java
@@ -0,0 +1,69 @@
+package com.baeldung.jackson.deserialization.dynamicobject;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import java.io.IOException;
+import java.util.Scanner;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import com.fasterxml.jackson.core.JsonParseException;
+import com.fasterxml.jackson.databind.JsonMappingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+public class DynamicObjectDeserializationUnitTest {
+
+ private ObjectMapper objectMapper;
+
+ @BeforeEach
+ void setup() {
+ objectMapper = new ObjectMapper();
+ }
+
+ private String readResource(String path) {
+ try (Scanner scanner = new Scanner(getClass().getResourceAsStream(path), "UTF-8")) {
+ return scanner.useDelimiter("\\A").next();
+ }
+ }
+
+ @Test
+ void givenJsonString_whenParsingToJsonNode_thenItMustContainDynamicProperties() throws JsonParseException, JsonMappingException, IOException {
+ // given
+ String json = readResource("/deserialize-dynamic-object/embedded.json");
+
+ // when
+ ProductJsonNode product = objectMapper.readValue(json, ProductJsonNode.class);
+
+ // then
+ assertThat(product.getName()).isEqualTo("Pear yPhone 72");
+ assertThat(product.getDetails().get("audioConnector").asText()).isEqualTo("none");
+ }
+
+ @Test
+ void givenJsonString_whenParsingToMap_thenItMustContainDynamicProperties() throws JsonParseException, JsonMappingException, IOException {
+ // given
+ String json = readResource("/deserialize-dynamic-object/embedded.json");
+
+ // when
+ ProductMap product = objectMapper.readValue(json, ProductMap.class);
+
+ // then
+ assertThat(product.getName()).isEqualTo("Pear yPhone 72");
+ assertThat(product.getDetails().get("audioConnector")).isEqualTo("none");
+ }
+
+ @Test
+ void givenJsonString_whenParsingWithJsonAnySetter_thenItMustContainDynamicProperties() throws JsonParseException, JsonMappingException, IOException {
+ // given
+ String json = readResource("/deserialize-dynamic-object/flat.json");
+
+ // when
+ ProductJsonAnySetter product = objectMapper.readValue(json, ProductJsonAnySetter.class);
+
+ // then
+ assertThat(product.getName()).isEqualTo("Pear yPhone 72");
+ assertThat(product.getDetails().get("audioConnector")).isEqualTo("none");
+ }
+
+}
diff --git a/jackson/src/test/java/com/baeldung/jackson/test/JacksonDateUnitTest.java b/jackson/src/test/java/com/baeldung/jackson/test/JacksonDateUnitTest.java
index 390030d0d4..672ff5c6fd 100644
--- a/jackson/src/test/java/com/baeldung/jackson/test/JacksonDateUnitTest.java
+++ b/jackson/src/test/java/com/baeldung/jackson/test/JacksonDateUnitTest.java
@@ -11,7 +11,6 @@ import java.time.LocalDateTime;
import java.util.Date;
import java.util.TimeZone;
-import com.fasterxml.jackson.databind.util.ISO8601DateFormat;
import org.joda.time.DateTime;
import org.joda.time.DateTimeZone;
import org.junit.Test;
@@ -24,8 +23,9 @@ import com.baeldung.jackson.date.EventWithSerializer;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
+import com.fasterxml.jackson.databind.util.StdDateFormat;
import com.fasterxml.jackson.datatype.joda.JodaModule;
-import com.fasterxml.jackson.datatype.jsr310.JSR310Module;
+import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
public class JacksonDateUnitTest {
@@ -54,10 +54,12 @@ public class JacksonDateUnitTest {
final ObjectMapper mapper = new ObjectMapper();
mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
- mapper.setDateFormat(new ISO8601DateFormat());
+
+ // StdDateFormat is ISO8601 since jackson 2.9
+ mapper.setDateFormat(new StdDateFormat().withColonInTimeZone(true));
final String result = mapper.writeValueAsString(event);
- assertThat(result, containsString("1970-01-01T02:30:00Z"));
+ assertThat(result, containsString("1970-01-01T02:30:00.000+00:00"));
}
@Test
@@ -152,7 +154,7 @@ public class JacksonDateUnitTest {
final LocalDateTime date = LocalDateTime.of(2014, 12, 20, 2, 30);
final ObjectMapper mapper = new ObjectMapper();
- mapper.registerModule(new JSR310Module());
+ mapper.registerModule(new JavaTimeModule());
mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
final String result = mapper.writeValueAsString(date);
diff --git a/jackson/src/test/resources/deserialize-dynamic-object/embedded.json b/jackson/src/test/resources/deserialize-dynamic-object/embedded.json
new file mode 100644
index 0000000000..e4f11f7f1f
--- /dev/null
+++ b/jackson/src/test/resources/deserialize-dynamic-object/embedded.json
@@ -0,0 +1,8 @@
+{
+ "name": "Pear yPhone 72",
+ "category": "cellphone",
+ "details": {
+ "displayAspectRatio": "97:3",
+ "audioConnector": "none"
+ }
+}
\ No newline at end of file
diff --git a/jackson/src/test/resources/deserialize-dynamic-object/flat.json b/jackson/src/test/resources/deserialize-dynamic-object/flat.json
new file mode 100644
index 0000000000..799ea9339d
--- /dev/null
+++ b/jackson/src/test/resources/deserialize-dynamic-object/flat.json
@@ -0,0 +1,6 @@
+{
+ "name": "Pear yPhone 72",
+ "category": "cellphone",
+ "displayAspectRatio": "97:3",
+ "audioConnector": "none"
+}
\ No newline at end of file
diff --git a/java-lite/pom.xml b/java-lite/pom.xml
index 03f4e29f4e..b261e521a1 100644
--- a/java-lite/pom.xml
+++ b/java-lite/pom.xml
@@ -95,7 +95,7 @@
1.15
5.1.45
1.7.0
- 1.8.2
+ 2.9.7
1.15
diff --git a/java-strings/src/main/java/com/baeldung/string/ReplaceCharacterInString.java b/java-strings/src/main/java/com/baeldung/string/ReplaceCharacterInString.java
index e8d1ce2d8b..2cc67f0b51 100644
--- a/java-strings/src/main/java/com/baeldung/string/ReplaceCharacterInString.java
+++ b/java-strings/src/main/java/com/baeldung/string/ReplaceCharacterInString.java
@@ -1,12 +1,20 @@
package com.baeldung.string;
public class ReplaceCharacterInString {
- public String replaceCharSubstring(String str, char ch, int index) {
- String myString = str.substring(0, index) + ch + str.substring(index+1);
+
+ public String replaceCharSubstring(String str, char ch, int index) {
+ String myString = str.substring(0, index) + ch + str.substring(index + 1);
return myString;
}
- public String replaceCharStringBuilder(String str, char ch, int index) {
+ public String replaceCharUsingCharArray(String str, char ch, int index) {
+ char[] chars = str.toCharArray();
+ chars[index] = ch;
+ return String.valueOf(chars);
+ }
+
+
+ public String replaceCharStringBuilder(String str, char ch, int index) {
StringBuilder myString = new StringBuilder(str);
myString.setCharAt(index, ch);
return myString.toString();
diff --git a/java-strings/src/test/java/com/baeldung/StringConcatenationUnitTest.java b/java-strings/src/test/java/com/baeldung/StringConcatenationUnitTest.java
new file mode 100644
index 0000000000..c25d4ce8f9
--- /dev/null
+++ b/java-strings/src/test/java/com/baeldung/StringConcatenationUnitTest.java
@@ -0,0 +1,105 @@
+package com.baeldung;
+
+import org.junit.Test;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.StringJoiner;
+import java.util.stream.Collectors;
+
+import static org.junit.Assert.assertEquals;
+
+public class StringConcatenationUnitTest {
+
+ @Test
+ public void givenMultipleStrings_whenConcatUsingStringBuilder_checkStringCorrect() {
+
+ StringBuilder stringBuilder = new StringBuilder(100);
+ stringBuilder.append("Baeldung");
+ stringBuilder.append(" is");
+ stringBuilder.append(" awesome");
+
+ assertEquals("Baeldung is awesome", stringBuilder.toString());
+
+ }
+
+ @Test
+ public void givenMultipleString_whenConcatUsingAdditionOperator_checkStringCorrect() {
+
+ String myString = "The " + "quick " + "brown " + "fox...";
+
+ assertEquals("The quick brown fox...", myString);
+ }
+
+
+ @Test
+ public void givenMultipleStrings_whenConcatUsingStringFormat_checkStringCorrect() {
+
+ String myString = String.format("%s %s %.2f %s %s, %s...", "I",
+ "ate",
+ 2.5056302,
+ "blueberry",
+ "pies",
+ "oops");
+
+
+ assertEquals("I ate 2.51 blueberry pies, oops...", myString);
+ }
+
+ @Test
+ public void givenMultipleStrings_whenStringConcatUsed_checkStringCorrect() {
+
+ String myString = "Both".concat(" fickle")
+ .concat(" dwarves")
+ .concat(" jinx")
+ .concat(" my")
+ .concat(" pig")
+ .concat(" quiz");
+
+ assertEquals("Both fickle dwarves jinx my pig quiz", myString);
+
+
+ }
+
+ @Test
+ public void givenMultipleStrings_whenStringJoinUsed_checkStringCorrect() {
+
+ String[] strings = {"I'm", "running", "out", "of", "pangrams!"};
+
+ String myString = String.join(" ", strings);
+
+ assertEquals("I'm running out of pangrams!", myString);
+
+ }
+
+ @Test
+ public void givenMultipleStrings_whenStringJoinerUsed_checkStringCorrect() {
+
+ StringJoiner fruitJoiner = new StringJoiner(", ");
+ fruitJoiner.add("Apples");
+ fruitJoiner.add("Oranges");
+ fruitJoiner.add("Bananas");
+
+ assertEquals("Apples, Oranges, Bananas", fruitJoiner.toString());
+ }
+
+ @Test
+ public void givenMultipleStrings_whenArrayJoiner_checkStringCorrect() {
+
+ String[] myFavouriteLanguages = {"Java", "JavaScript", "Python"};
+
+ String toString = Arrays.toString(myFavouriteLanguages);
+
+ assertEquals("[Java, JavaScript, Python]", toString);
+ }
+
+ @Test
+ public void givenArrayListOfStrings_whenCollectorsJoin_checkStringCorrect() {
+
+ List awesomeAnimals = Arrays.asList("Shark", "Panda", "Armadillo");
+
+ String animalString = awesomeAnimals.stream().collect(Collectors.joining(", "));
+
+ assertEquals("Shark, Panda, Armadillo", animalString);
+ }
+}
diff --git a/java-strings/src/test/java/com/baeldung/string/ReplaceCharInStringUnitTest.java b/java-strings/src/test/java/com/baeldung/string/ReplaceCharInStringUnitTest.java
index 07e86bb69b..c234c6953c 100644
--- a/java-strings/src/test/java/com/baeldung/string/ReplaceCharInStringUnitTest.java
+++ b/java-strings/src/test/java/com/baeldung/string/ReplaceCharInStringUnitTest.java
@@ -1,23 +1,29 @@
package com.baeldung.string;
import org.junit.Test;
+
import static org.junit.Assert.*;
public class ReplaceCharInStringUnitTest {
private ReplaceCharacterInString characterInString = new ReplaceCharacterInString();
@Test
- public void whenReplaceCharAtIndexUsingSubstring_thenSuccess(){
- assertEquals("abcme",characterInString.replaceCharSubstring("abcde",'m',3));
+ public void whenReplaceCharAtIndexUsingSubstring_thenSuccess() {
+ assertEquals("abcme", characterInString.replaceCharSubstring("abcde", 'm', 3));
}
@Test
- public void whenReplaceCharAtIndexUsingStringBuilder_thenSuccess(){
- assertEquals("abcme",characterInString.replaceCharStringBuilder("abcde",'m',3));
+ public void whenReplaceCharAtIndexUsingCharArray_thenSuccess() {
+ assertEquals("abcme", characterInString.replaceCharUsingCharArray("abcde", 'm', 3));
}
@Test
- public void whenReplaceCharAtIndexUsingStringBuffer_thenSuccess(){
- assertEquals("abcme",characterInString.replaceCharStringBuffer("abcde",'m',3));
+ public void whenReplaceCharAtIndexUsingStringBuilder_thenSuccess() {
+ assertEquals("abcme", characterInString.replaceCharStringBuilder("abcde", 'm', 3));
+ }
+
+ @Test
+ public void whenReplaceCharAtIndexUsingStringBuffer_thenSuccess() {
+ assertEquals("abcme", characterInString.replaceCharStringBuffer("abcde", 'm', 3));
}
}
diff --git a/jhipster/README.md b/jhipster/README.md
index f3655f8ec1..91ba54bf60 100644
--- a/jhipster/README.md
+++ b/jhipster/README.md
@@ -2,3 +2,4 @@
- [JHipster with a Microservice Architecture](http://www.baeldung.com/jhipster-microservices)
- [Intro to JHipster](http://www.baeldung.com/jhipster)
+- [Building a Basic UAA-Secured JHipster Microservice](https://www.baeldung.com/jhipster-uaa-secured-micro-service)
diff --git a/libraries-data/pom.xml b/libraries-data/pom.xml
index f913cf32ca..daf6c8b500 100644
--- a/libraries-data/pom.xml
+++ b/libraries-data/pom.xml
@@ -442,7 +442,7 @@
2.8.2
1.1.0
1.5.0
- 2.8.5
+ 2.9.7
3.0.0
3.6.2
3.8.4
diff --git a/libraries/pom.xml b/libraries/pom.xml
index 3a51ff5be0..c7ef64bc59 100644
--- a/libraries/pom.xml
+++ b/libraries/pom.xml
@@ -818,7 +818,7 @@
1.0
4.5.3
- 2.8.5
+ 2.9.7
2.92
1.9.26
1.41.0
diff --git a/logging-modules/log-mdc/pom.xml b/logging-modules/log-mdc/pom.xml
index 8e9968085e..3031274d0b 100644
--- a/logging-modules/log-mdc/pom.xml
+++ b/logging-modules/log-mdc/pom.xml
@@ -103,7 +103,7 @@
3.3.6
3.3.0.Final
3.1.0
- 2.8.5
+ 2.9.7
2.4
diff --git a/logging-modules/log4j2/pom.xml b/logging-modules/log4j2/pom.xml
index d46f92dcd6..924abfd346 100644
--- a/logging-modules/log4j2/pom.xml
+++ b/logging-modules/log4j2/pom.xml
@@ -115,7 +115,7 @@
- 2.9.5
+ 2.9.7
1.4.193
2.1.1
2.11.0
diff --git a/logging-modules/logback/pom.xml b/logging-modules/logback/pom.xml
index e917754b3c..ef7adbc3ea 100644
--- a/logging-modules/logback/pom.xml
+++ b/logging-modules/logback/pom.xml
@@ -42,7 +42,7 @@
1.2.3
0.1.5
- 2.9.3
+ 2.9.7
diff --git a/patterns/README.md b/patterns/README.md
index 221cba6456..9a15cdff02 100644
--- a/patterns/README.md
+++ b/patterns/README.md
@@ -1,8 +1,3 @@
### Relevant Articles:
- [A Guide to the Front Controller Pattern in Java](http://www.baeldung.com/java-front-controller-pattern)
- [Introduction to Intercepting Filter Pattern in Java](http://www.baeldung.com/intercepting-filter-pattern-in-java)
-- [Implementing the Template Method Pattern in Java](http://www.baeldung.com/java-template-method-pattern)
-- [Chain of Responsibility Design Pattern in Java](http://www.baeldung.com/chain-of-responsibility-pattern)
-- [The Command Pattern in Java](http://www.baeldung.com/java-command-pattern)
-- [The DAO Pattern in Java](http://www.baeldung.com/java-dao-pattern)
-
diff --git a/patterns/design-patterns/README.md b/patterns/design-patterns/README.md
index e56872b3fd..8046d2034b 100644
--- a/patterns/design-patterns/README.md
+++ b/patterns/design-patterns/README.md
@@ -14,3 +14,7 @@
- [State Design Pattern in Java](https://www.baeldung.com/java-state-design-pattern)
- [The Decorator Pattern in Java](https://www.baeldung.com/java-decorator-pattern)
- [Abstract Factory Pattern in Java](https://www.baeldung.com/java-abstract-factory-pattern)
+- [Implementing the Template Method Pattern in Java](http://www.baeldung.com/java-template-method-pattern)
+- [Chain of Responsibility Design Pattern in Java](http://www.baeldung.com/chain-of-responsibility-pattern)
+- [The Command Pattern in Java](http://www.baeldung.com/java-command-pattern)
+- [Java Constructors vs Static Factory Methods](https://www.baeldung.com/java-constructors-vs-static-factory-methods)
diff --git a/core-java/src/main/java/com/baeldung/constructorsstaticfactorymethods/application/Application.java b/patterns/design-patterns/src/main/java/com/baeldung/constructorsstaticfactorymethods/application/Application.java
similarity index 100%
rename from core-java/src/main/java/com/baeldung/constructorsstaticfactorymethods/application/Application.java
rename to patterns/design-patterns/src/main/java/com/baeldung/constructorsstaticfactorymethods/application/Application.java
diff --git a/core-java/src/main/java/com/baeldung/constructorsstaticfactorymethods/entities/User.java b/patterns/design-patterns/src/main/java/com/baeldung/constructorsstaticfactorymethods/entities/User.java
similarity index 100%
rename from core-java/src/main/java/com/baeldung/constructorsstaticfactorymethods/entities/User.java
rename to patterns/design-patterns/src/main/java/com/baeldung/constructorsstaticfactorymethods/entities/User.java
diff --git a/core-java/src/test/java/com/baeldung/constructorsstaticfactorymethods/UserUnitTest.java b/patterns/design-patterns/src/test/java/com/baeldung/constructorsstaticfactorymethods/UserUnitTest.java
similarity index 100%
rename from core-java/src/test/java/com/baeldung/constructorsstaticfactorymethods/UserUnitTest.java
rename to patterns/design-patterns/src/test/java/com/baeldung/constructorsstaticfactorymethods/UserUnitTest.java
diff --git a/persistence-modules/hibernate5/src/test/java/com/baeldung/hibernate/bootstrap/BootstrapAPIIntegrationTest.java b/persistence-modules/hibernate5/src/test/java/com/baeldung/hibernate/bootstrap/BootstrapAPIIntegrationTest.java
new file mode 100644
index 0000000000..19988b45be
--- /dev/null
+++ b/persistence-modules/hibernate5/src/test/java/com/baeldung/hibernate/bootstrap/BootstrapAPIIntegrationTest.java
@@ -0,0 +1,47 @@
+package com.baeldung.hibernate.bootstrap;
+
+import com.baeldung.hibernate.pojo.Movie;
+import org.hibernate.SessionFactory;
+import org.hibernate.boot.Metadata;
+import org.hibernate.boot.MetadataSources;
+import org.hibernate.boot.registry.BootstrapServiceRegistry;
+import org.hibernate.boot.registry.BootstrapServiceRegistryBuilder;
+import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
+import org.hibernate.service.ServiceRegistry;
+import org.junit.After;
+import org.junit.Test;
+
+import java.io.IOException;
+
+import static org.junit.Assert.assertNotNull;
+
+public class BootstrapAPIIntegrationTest {
+
+ SessionFactory sessionFactory = null;
+
+ @Test
+ public void whenServiceRegistryAndMetadata_thenSessionFactory() throws IOException {
+
+ BootstrapServiceRegistry bootstrapRegistry = new BootstrapServiceRegistryBuilder()
+ .build();
+
+ ServiceRegistry standardRegistry = new StandardServiceRegistryBuilder(bootstrapRegistry)
+ // No need for hibernate.cfg.xml file, an hibernate.properties is sufficient.
+ //.configure()
+ .build();
+
+ MetadataSources metadataSources = new MetadataSources(standardRegistry);
+ metadataSources.addAnnotatedClass(Movie.class);
+
+ Metadata metadata = metadataSources.getMetadataBuilder().build();
+
+ sessionFactory = metadata.buildSessionFactory();
+ assertNotNull(sessionFactory);
+ sessionFactory.close();
+ }
+
+ @After
+ public void clean() throws IOException {
+ sessionFactory.close();
+ }
+}
diff --git a/persistence-modules/spring-hibernate4/src/main/java/com/baeldung/hibernate/oneToMany/main/HibernateManyisOwningSide.java b/persistence-modules/spring-hibernate4/src/main/java/com/baeldung/hibernate/oneToMany/main/HibernateManyisOwningSide.java
new file mode 100644
index 0000000000..372fb2fc07
--- /dev/null
+++ b/persistence-modules/spring-hibernate4/src/main/java/com/baeldung/hibernate/oneToMany/main/HibernateManyisOwningSide.java
@@ -0,0 +1,71 @@
+package com.baeldung.hibernate.oneToMany.main;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.hibernate.Session;
+import org.hibernate.SessionFactory;
+import org.hibernate.Transaction;
+
+import com.baeldung.hibernate.oneToMany.config.HibernateAnnotationUtil;
+import com.baeldung.hibernate.oneToMany.model.Cart;
+import com.baeldung.hibernate.oneToMany.model.Items;
+import com.baeldung.hibernate.oneToMany.model.ItemsOIO;
+
+public class HibernateManyisOwningSide {
+ public static void main(String[] args) {
+
+ Cart cart = new Cart();
+ Cart cart2 = new Cart();
+
+ Items item1 = new Items(cart);
+ Items item2 = new Items(cart2);
+ Set itemsSet = new HashSet();
+ itemsSet.add(item1);
+ itemsSet.add(item2);
+
+ cart.setItems(itemsSet);
+
+
+
+ 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(cart2);
+ session.save(item1);
+ session.save(item2);
+ // Commit transaction
+ tx.commit();
+ session = sessionFactory.getCurrentSession();
+ tx = session.beginTransaction();
+
+ item1 = (Items) session.get(Items.class, new Long(1));
+ item2 = (Items) session.get(Items.class, new Long(2));
+ tx.commit();
+
+
+ System.out.println("item1 ID=" + item1.getId() + ", Foreign Key CartOIO ID=" + item1.getCart()
+ .getId());
+ System.out.println("item2 ID=" + item2.getId() + ", Foreign Key CartOIO ID=" + item2.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/persistence-modules/spring-hibernate4/src/main/java/com/baeldung/hibernate/oneToMany/main/HibernateOneisOwningSide.java b/persistence-modules/spring-hibernate4/src/main/java/com/baeldung/hibernate/oneToMany/main/HibernateOneisOwningSide.java
new file mode 100644
index 0000000000..0777664dd0
--- /dev/null
+++ b/persistence-modules/spring-hibernate4/src/main/java/com/baeldung/hibernate/oneToMany/main/HibernateOneisOwningSide.java
@@ -0,0 +1,67 @@
+package com.baeldung.hibernate.oneToMany.main;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.hibernate.Session;
+import org.hibernate.SessionFactory;
+import org.hibernate.Transaction;
+
+import com.baeldung.hibernate.oneToMany.config.HibernateAnnotationUtil;
+import com.baeldung.hibernate.oneToMany.model.CartOIO;
+import com.baeldung.hibernate.oneToMany.model.ItemsOIO;
+
+public class HibernateOneisOwningSide {
+ public static void main(String[] args) {
+
+ CartOIO cart = new CartOIO();
+ CartOIO cart2 = new CartOIO();
+
+ ItemsOIO item1 = new ItemsOIO(cart);
+ ItemsOIO item2 = new ItemsOIO(cart2);
+ Set itemsSet = new HashSet();
+ itemsSet.add(item1);
+ itemsSet.add(item2);
+
+ cart.setItems(itemsSet);
+
+ 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(cart2);
+ session.save(item1);
+ session.save(item2);
+ // Commit transaction
+ tx.commit();
+
+ session = sessionFactory.getCurrentSession();
+ tx = session.beginTransaction();
+ item1 = (ItemsOIO) session.get(ItemsOIO.class, new Long(1));
+ item2 = (ItemsOIO) session.get(ItemsOIO.class, new Long(2));
+ tx.commit();
+
+ System.out.println("item1 ID=" + item1.getId() + ", Foreign Key CartOIO ID=" + item1.getCartOIO()
+ .getId());
+ System.out.println("item2 ID=" + item2.getId() + ", Foreign Key CartOIO ID=" + item2.getCartOIO()
+ .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/persistence-modules/spring-hibernate4/src/main/java/com/baeldung/hibernate/oneToMany/model/CartOIO.java b/persistence-modules/spring-hibernate4/src/main/java/com/baeldung/hibernate/oneToMany/model/CartOIO.java
new file mode 100644
index 0000000000..8a5ed5e7a4
--- /dev/null
+++ b/persistence-modules/spring-hibernate4/src/main/java/com/baeldung/hibernate/oneToMany/model/CartOIO.java
@@ -0,0 +1,42 @@
+package com.baeldung.hibernate.oneToMany.model;
+
+import java.util.Set;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.OneToMany;
+import javax.persistence.Table;
+
+
+
+@Entity
+@Table(name = "CARTOIO")
+public class CartOIO {
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ private long id;
+
+ @OneToMany
+ @JoinColumn(name = "cart_id") // we need to duplicate the physical information
+ private Set items;
+
+ public long getId() {
+ return id;
+ }
+
+ public void setId(long id) {
+ this.id = id;
+ }
+
+ public Set getItems() {
+ return items;
+ }
+
+ public void setItems(Set items) {
+ this.items = items;
+ }
+
+}
diff --git a/persistence-modules/spring-hibernate4/src/main/java/com/baeldung/hibernate/oneToMany/model/ItemsOIO.java b/persistence-modules/spring-hibernate4/src/main/java/com/baeldung/hibernate/oneToMany/model/ItemsOIO.java
new file mode 100644
index 0000000000..a3d6a796c5
--- /dev/null
+++ b/persistence-modules/spring-hibernate4/src/main/java/com/baeldung/hibernate/oneToMany/model/ItemsOIO.java
@@ -0,0 +1,47 @@
+package com.baeldung.hibernate.oneToMany.model;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+
+@Entity
+@Table(name = "ITEMSOIO")
+public class ItemsOIO {
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ private long id;
+
+ @ManyToOne
+ @JoinColumn(name = "cart_id", insertable = false, updatable = false)
+ private CartOIO cart;
+
+ // Hibernate requires no-args constructor
+ public ItemsOIO() {
+ }
+
+ public ItemsOIO(CartOIO c) {
+ this.cart = c;
+ }
+
+ public CartOIO getCartOIO() {
+ return cart;
+ }
+
+ public void setCartOIO(CartOIO cart) {
+ this.cart = cart;
+ }
+
+ public long getId() {
+ return id;
+ }
+
+ public void setId(long id) {
+ this.id = id;
+ }
+
+}
diff --git a/persistence-modules/spring-hibernate4/src/main/resources/hibernate-annotation.cfg.xml b/persistence-modules/spring-hibernate4/src/main/resources/hibernate-annotation.cfg.xml
index 311300c77c..14d853d3fd 100644
--- a/persistence-modules/spring-hibernate4/src/main/resources/hibernate-annotation.cfg.xml
+++ b/persistence-modules/spring-hibernate4/src/main/resources/hibernate-annotation.cfg.xml
@@ -9,11 +9,13 @@
jdbc:mysql://localhost:3306/spring_hibernate_one_to_many?createDatabaseIfNotExist=true
myuser
org.hibernate.dialect.MySQLDialect
-
+ create
thread
true
+
+
diff --git a/pom.xml b/pom.xml
index d3a665b4e1..20bcaef1f9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -379,10 +379,14 @@
core-java-arrays
core-java-collections
+ core-java-concurrency-basic
core-java-concurrency-collections
core-java-io
+ core-java-lang-syntax
core-java-lang
- core-java-networking
+ core-java-lang-oop
+ core-java-networking
+ core-java-perf
core-java-sun
core-scala
couchbase
@@ -988,7 +992,7 @@
parent-kotlin
core-java
- core-java-concurrency
+ core-java-concurrency-advanced
core-kotlin
jenkins/hello-world
@@ -1086,10 +1090,14 @@
core-java-arrays
core-java-collections
+ core-java-concurrency-basic
core-java-concurrency-collections
core-java-io
+ core-java-lang-syntax
core-java-lang
+ core-java-lang-oop
core-java-networking
+ core-java-perf
core-java-sun
core-scala
couchbase
@@ -1531,7 +1539,7 @@
parent-kotlin
core-java
- core-java-concurrency
+ core-java-concurrency-advanced
core-kotlin
jenkins/hello-world
@@ -1604,7 +1612,7 @@
2.3.1
1.9.13
1.2
- 2.5.0
+ 2.9.7
1.3
1.2.0
5.2.0
diff --git a/rest-with-spark-java/pom.xml b/rest-with-spark-java/pom.xml
index a0005b7dec..f7c91f8827 100644
--- a/rest-with-spark-java/pom.xml
+++ b/rest-with-spark-java/pom.xml
@@ -34,8 +34,8 @@
2.5.4
- 2.8.6
- 2.8.6
+ 2.9.7
+ 2.9.7
diff --git a/spring-5-reactive/README.md b/spring-5-reactive/README.md
index fc898a56dc..2a4ee017f4 100644
--- a/spring-5-reactive/README.md
+++ b/spring-5-reactive/README.md
@@ -17,4 +17,4 @@ The "REST With Spring" Classes: http://bit.ly/restwithspring
- [A Guide to Spring Session Reactive Support: WebSession](https://www.baeldung.com/spring-session-reactive)
- [Validation for Functional Endpoints in Spring 5](https://www.baeldung.com/spring-functional-endpoints-validation)
- [Logging a Reactive Sequence](https://www.baeldung.com/spring-reactive-sequence-logging)
-
+- [Testing Reactive Streams Using StepVerifier and TestPublisher](https://www.baeldung.com/reactive-streams-step-verifier-test-publisher)
diff --git a/spring-jersey/pom.xml b/spring-jersey/pom.xml
index 5e7b50d291..b548de3701 100644
--- a/spring-jersey/pom.xml
+++ b/spring-jersey/pom.xml
@@ -101,12 +101,12 @@
com.fasterxml.jackson.jaxrs
jackson-jaxrs-json-provider
- 2.6.0
+ 2.9.7
com.fasterxml.jackson.core
jackson-databind
- 2.6.0
+ 2.9.7
org.slf4j
diff --git a/spring-kafka/pom.xml b/spring-kafka/pom.xml
index 67e732d819..5c370880b4 100644
--- a/spring-kafka/pom.xml
+++ b/spring-kafka/pom.xml
@@ -33,7 +33,8 @@
- 2.6.7
+ 1.1.3.RELEASE
+ 2.9.7
\ No newline at end of file
diff --git a/spring-mvc-simple/pom.xml b/spring-mvc-simple/pom.xml
index 8d7ad0fa7f..65fa4339d6 100644
--- a/spring-mvc-simple/pom.xml
+++ b/spring-mvc-simple/pom.xml
@@ -196,7 +196,7 @@
1.2.5
1.0.2
1.9.0
- 2.9.4
+ 2.9.7
1.4.9
5.1.0
20180130
diff --git a/spring-security-mvc-custom/pom.xml b/spring-security-mvc-custom/pom.xml
index a1a1beb4f4..12520a0d01 100644
--- a/spring-security-mvc-custom/pom.xml
+++ b/spring-security-mvc-custom/pom.xml
@@ -202,7 +202,7 @@
19.0
3.5
- 2.9.4
+ 2.9.7
2.6
diff --git a/spring-security-mvc-socket/pom.xml b/spring-security-mvc-socket/pom.xml
index d1b8365077..b83f10d9fe 100644
--- a/spring-security-mvc-socket/pom.xml
+++ b/spring-security-mvc-socket/pom.xml
@@ -188,7 +188,7 @@
1.11.3.RELEASE
1.4.196
1.2.3
- 2.8.7
+ 2.9.7
\ No newline at end of file
diff --git a/spring-security-rest/pom.xml b/spring-security-rest/pom.xml
index ef16f2201b..37c743e896 100644
--- a/spring-security-rest/pom.xml
+++ b/spring-security-rest/pom.xml
@@ -281,7 +281,7 @@
3.1.0
1.1.0.Final
1.2
- 2.9.2
+ 2.9.7
26.0-jre
diff --git a/spring-swagger-codegen/spring-swagger-codegen-api-client/pom.xml b/spring-swagger-codegen/spring-swagger-codegen-api-client/pom.xml
index 06a92ffae7..c175ea48b3 100644
--- a/spring-swagger-codegen/spring-swagger-codegen-api-client/pom.xml
+++ b/spring-swagger-codegen/spring-swagger-codegen-api-client/pom.xml
@@ -189,7 +189,7 @@
1.5.15
4.3.9.RELEASE
- 2.8.9
+ 2.9.7
2.9.9
2.2
1.5
diff --git a/testing-modules/rest-assured/pom.xml b/testing-modules/rest-assured/pom.xml
index ed7e5e3577..687a9a2fe4 100644
--- a/testing-modules/rest-assured/pom.xml
+++ b/testing-modules/rest-assured/pom.xml
@@ -171,7 +171,7 @@
- 2.8.5
+ 2.9.7
1.8
19.0
diff --git a/testing-modules/rest-testing/pom.xml b/testing-modules/rest-testing/pom.xml
index 9bfd715682..2fa303a98e 100644
--- a/testing-modules/rest-testing/pom.xml
+++ b/testing-modules/rest-testing/pom.xml
@@ -151,7 +151,7 @@
- 2.8.5
+ 2.9.7
19.0
diff --git a/vavr/vavr-validation/src/main/java/com/baeldung/vavrvalidation/application/Application.java b/vavr/src/main/java/com/baeldung/vavrvalidation/application/Application.java
similarity index 95%
rename from vavr/vavr-validation/src/main/java/com/baeldung/vavrvalidation/application/Application.java
rename to vavr/src/main/java/com/baeldung/vavrvalidation/application/Application.java
index 8acc4522af..a23ed185c8 100644
--- a/vavr/vavr-validation/src/main/java/com/baeldung/vavrvalidation/application/Application.java
+++ b/vavr/src/main/java/com/baeldung/vavrvalidation/application/Application.java
@@ -8,10 +8,10 @@ import io.vavr.control.Validation;
public class Application {
public static void main(String[] args) {
-
+
UserValidator userValidator = new UserValidator();
Validation, User> validation = userValidator.validateUser("John", "john@domain.com");
-
+
// process validation results here
- }
+ }
}
diff --git a/vavr/vavr-validation/src/main/java/com/baeldung/vavrvalidation/model/User.java b/vavr/src/main/java/com/baeldung/vavrvalidation/model/User.java
similarity index 100%
rename from vavr/vavr-validation/src/main/java/com/baeldung/vavrvalidation/model/User.java
rename to vavr/src/main/java/com/baeldung/vavrvalidation/model/User.java
diff --git a/vavr/vavr-validation/src/main/java/com/baeldung/vavrvalidation/validator/UserValidator.java b/vavr/src/main/java/com/baeldung/vavrvalidation/validator/UserValidator.java
similarity index 100%
rename from vavr/vavr-validation/src/main/java/com/baeldung/vavrvalidation/validator/UserValidator.java
rename to vavr/src/main/java/com/baeldung/vavrvalidation/validator/UserValidator.java
diff --git a/vavr/vavr-validation/src/test/java/com/baeldung/vavrvalidation/validator/UserValidatorTest.java b/vavr/src/test/java/com/baeldung/vavrvalidation/validator/UserValidatorUnitTest.java
similarity index 95%
rename from vavr/vavr-validation/src/test/java/com/baeldung/vavrvalidation/validator/UserValidatorTest.java
rename to vavr/src/test/java/com/baeldung/vavrvalidation/validator/UserValidatorUnitTest.java
index cb9557fa53..8ac6100b27 100644
--- a/vavr/vavr-validation/src/test/java/com/baeldung/vavrvalidation/validator/UserValidatorTest.java
+++ b/vavr/src/test/java/com/baeldung/vavrvalidation/validator/UserValidatorUnitTest.java
@@ -7,7 +7,7 @@ import com.baeldung.vavrvalidation.validator.UserValidator;
import io.vavr.control.Validation.Invalid;
import io.vavr.control.Validation.Valid;
-public class UserValidatorTest {
+public class UserValidatorUnitTest {
@Test
public void givenValidUserParams_whenValidated_thenInstanceOfValid() {
diff --git a/vavr/vavr-validation/src/test/java/com/baeldung/vavrvalidation/validator/ValidationTest.java b/vavr/src/test/java/com/baeldung/vavrvalidation/validator/ValidationUnitTest.java
similarity index 98%
rename from vavr/vavr-validation/src/test/java/com/baeldung/vavrvalidation/validator/ValidationTest.java
rename to vavr/src/test/java/com/baeldung/vavrvalidation/validator/ValidationUnitTest.java
index c89b43b5e3..7b8c551aeb 100644
--- a/vavr/vavr-validation/src/test/java/com/baeldung/vavrvalidation/validator/ValidationTest.java
+++ b/vavr/src/test/java/com/baeldung/vavrvalidation/validator/ValidationUnitTest.java
@@ -11,7 +11,7 @@ import io.vavr.control.Either.Right;
import io.vavr.control.Validation.Invalid;
import io.vavr.control.Validation.Valid;
-public class ValidationTest {
+public class ValidationUnitTest {
private static UserValidator userValidator;
diff --git a/video-tutorials/jackson-annotations/pom.xml b/video-tutorials/jackson-annotations/pom.xml
index 121609ad4d..b0e1c7e8d9 100644
--- a/video-tutorials/jackson-annotations/pom.xml
+++ b/video-tutorials/jackson-annotations/pom.xml
@@ -138,7 +138,7 @@
- 2.8.5
+ 2.9.7
2.9.6