negativeCase, int probability) {
+ SplittableRandom random = this.random.get();
+ if (random.nextInt(1, 101) <= probability) {
+ return positiveCase.get();
+ } else {
+ return negativeCase.get();
+ }
+ }
+}
diff --git a/java-numbers-4/src/test/java/com/baeldung/probability/RandomInvokerUnitTest.java b/java-numbers-4/src/test/java/com/baeldung/probability/RandomInvokerUnitTest.java
new file mode 100644
index 0000000000..b08c086e30
--- /dev/null
+++ b/java-numbers-4/src/test/java/com/baeldung/probability/RandomInvokerUnitTest.java
@@ -0,0 +1,24 @@
+package com.baeldung.probability;
+
+import org.assertj.core.data.Offset;
+import org.junit.Test;
+
+import java.util.stream.Stream;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+public class RandomInvokerUnitTest {
+ @Test
+ public void givenProbability_whenInvoked_invokeWithProbability() {
+ RandomInvoker randomInvoker = new RandomInvoker();
+
+ int numberOfSamples = 1_000_000;
+ int probability = 10;
+ int howManyTimesInvoked = Stream.generate(() -> randomInvoker.withProbability(() -> 1, () -> 0, probability))
+ .limit(numberOfSamples)
+ .mapToInt(e -> e).sum();
+ int monteCarloProbability = (howManyTimesInvoked * 100) / numberOfSamples;
+
+ assertThat(monteCarloProbability).isCloseTo(probability, Offset.offset(1));
+ }
+}
diff --git a/javax-servlets/README.md b/javax-servlets/README.md
index 7dbe1a02ad..fe070f73b5 100644
--- a/javax-servlets/README.md
+++ b/javax-servlets/README.md
@@ -12,3 +12,4 @@ This module contains articles about Servlets.
- [Jakarta EE Servlet Exception Handling](https://www.baeldung.com/servlet-exceptions)
- [Context and Servlet Initialization Parameters](https://www.baeldung.com/context-servlet-initialization-param)
- [The Difference between getRequestURI and getPathInfo in HttpServletRequest](https://www.baeldung.com/http-servlet-request-requesturi-pathinfo)
+- [Difference between request.getSession() and request.getSession(true)](https://www.baeldung.com/java-request-getsession)
diff --git a/javax-servlets/src/main/java/com/baeldung/servlets/MainServlet.java b/javax-servlets/src/main/java/com/baeldung/servlets/MainServlet.java
new file mode 100644
index 0000000000..d4417b0b4e
--- /dev/null
+++ b/javax-servlets/src/main/java/com/baeldung/servlets/MainServlet.java
@@ -0,0 +1,22 @@
+package com.baeldung.servlets;
+
+import java.io.IOException;
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+@WebServlet("/main")
+public class MainServlet extends HttpServlet {
+
+
+ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
+
+ response.sendRedirect("main.jsp");
+ }
+
+
+
+
+}
diff --git a/javax-servlets/src/main/java/com/baeldung/servlets/UpdateServlet.java b/javax-servlets/src/main/java/com/baeldung/servlets/UpdateServlet.java
new file mode 100644
index 0000000000..d0404d0cd4
--- /dev/null
+++ b/javax-servlets/src/main/java/com/baeldung/servlets/UpdateServlet.java
@@ -0,0 +1,30 @@
+package com.baeldung.servlets;
+
+
+import java.io.IOException;
+
+import javax.servlet.RequestDispatcher;
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+
+@WebServlet("/update")
+public class UpdateServlet extends HttpServlet {
+
+ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
+
+ HttpSession session = request.getSession(false);
+
+ session.setAttribute("userName", request.getParameter("userName"));
+ session.setAttribute("age", request.getParameter("age"));
+
+ request.setAttribute("sessionData", session);
+ RequestDispatcher requestDispather = request.getRequestDispatcher("update.jsp");
+
+ requestDispather.forward(request, response);
+ }
+
+}
diff --git a/javax-servlets/src/main/java/com/baeldung/servlets/UserLoginServlet.java b/javax-servlets/src/main/java/com/baeldung/servlets/UserLoginServlet.java
new file mode 100644
index 0000000000..6becf04a0c
--- /dev/null
+++ b/javax-servlets/src/main/java/com/baeldung/servlets/UserLoginServlet.java
@@ -0,0 +1,30 @@
+package com.baeldung.servlets;
+
+
+import java.io.IOException;
+
+import javax.servlet.RequestDispatcher;
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+
+@WebServlet("/u_login")
+public class UserLoginServlet extends HttpServlet {
+
+ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
+ HttpSession session = request.getSession();
+
+ session.setAttribute("userId", request.getParameter("userId"));
+
+ request.setAttribute("id", session.getAttribute("userId"));
+
+ RequestDispatcher requestDispather = request.getRequestDispatcher("userlogin.jsp");
+
+ requestDispather.forward(request, response);
+
+ }
+
+}
diff --git a/javax-servlets/src/main/webapp/WEB-INF/jsp/main.jsp b/javax-servlets/src/main/webapp/WEB-INF/jsp/main.jsp
new file mode 100644
index 0000000000..cbbb578770
--- /dev/null
+++ b/javax-servlets/src/main/webapp/WEB-INF/jsp/main.jsp
@@ -0,0 +1,15 @@
+<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
+ pageEncoding="ISO-8859-1"%>
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/javax-servlets/src/main/webapp/WEB-INF/jsp/update.jsp b/javax-servlets/src/main/webapp/WEB-INF/jsp/update.jsp
new file mode 100644
index 0000000000..36ac2d277b
--- /dev/null
+++ b/javax-servlets/src/main/webapp/WEB-INF/jsp/update.jsp
@@ -0,0 +1,17 @@
+<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
+ pageEncoding="ISO-8859-1"%>
+
+
+
+
+
+
+
+ Hi, User : ${sessionData.getAttribute("userId")}
+
+
Your User Data has been updated as below :
+
User Name: ${sessionData.getAttribute("userName")}
+
Age : ${sessionData.getAttribute("age")}
+
+
+
\ No newline at end of file
diff --git a/javax-servlets/src/main/webapp/WEB-INF/jsp/userlogin.jsp b/javax-servlets/src/main/webapp/WEB-INF/jsp/userlogin.jsp
new file mode 100644
index 0000000000..f181222f39
--- /dev/null
+++ b/javax-servlets/src/main/webapp/WEB-INF/jsp/userlogin.jsp
@@ -0,0 +1,18 @@
+<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
+ pageEncoding="ISO-8859-1"%>
+
+
+
+
+
+
+ Update your User Details:
+
+
+
+
\ No newline at end of file
diff --git a/jgit/src/main/java/com/baeldung/jgit/porcelain/AddFile.java b/jgit/src/main/java/com/baeldung/jgit/porcelain/AddFile.java
index 314366f08c..e6b5dc1afc 100644
--- a/jgit/src/main/java/com/baeldung/jgit/porcelain/AddFile.java
+++ b/jgit/src/main/java/com/baeldung/jgit/porcelain/AddFile.java
@@ -6,6 +6,8 @@ import com.baeldung.jgit.helper.Helper;
import org.eclipse.jgit.api.Git;
import org.eclipse.jgit.api.errors.GitAPIException;
import org.eclipse.jgit.lib.Repository;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* Simple snippet which shows how to add a file to the index
@@ -14,6 +16,8 @@ import org.eclipse.jgit.lib.Repository;
*/
public class AddFile {
+ private static final Logger logger = LoggerFactory.getLogger(AddFile.class);
+
public static void main(String[] args) throws IOException, GitAPIException {
// prepare a new test-repository
try (Repository repository = Helper.createNewRepository()) {
@@ -29,7 +33,7 @@ public class AddFile {
.addFilepattern("testfile")
.call();
- System.out.println("Added file " + myfile + " to repository at " + repository.getDirectory());
+ logger.debug("Added file " + myfile + " to repository at " + repository.getDirectory());
}
}
}
diff --git a/jgit/src/main/java/com/baeldung/jgit/porcelain/CommitAll.java b/jgit/src/main/java/com/baeldung/jgit/porcelain/CommitAll.java
index 4c0956ebf8..a2d071f392 100644
--- a/jgit/src/main/java/com/baeldung/jgit/porcelain/CommitAll.java
+++ b/jgit/src/main/java/com/baeldung/jgit/porcelain/CommitAll.java
@@ -7,6 +7,8 @@ import com.baeldung.jgit.helper.Helper;
import org.eclipse.jgit.api.Git;
import org.eclipse.jgit.api.errors.GitAPIException;
import org.eclipse.jgit.lib.Repository;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* Simple snippet which shows how to commit all files
@@ -15,6 +17,8 @@ import org.eclipse.jgit.lib.Repository;
*/
public class CommitAll {
+ private static final Logger logger = LoggerFactory.getLogger(CommitAll.class);
+
public static void main(String[] args) throws IOException, GitAPIException {
// prepare a new test-repository
try (Repository repository = Helper.createNewRepository()) {
@@ -44,7 +48,7 @@ public class CommitAll {
.call();
- System.out.println("Committed all changes to repository at " + repository.getDirectory());
+ logger.debug("Committed all changes to repository at " + repository.getDirectory());
}
}
}
diff --git a/jgit/src/main/java/com/baeldung/jgit/porcelain/CreateAndDeleteTag.java b/jgit/src/main/java/com/baeldung/jgit/porcelain/CreateAndDeleteTag.java
index 0f735daf8c..e7b0e424e2 100644
--- a/jgit/src/main/java/com/baeldung/jgit/porcelain/CreateAndDeleteTag.java
+++ b/jgit/src/main/java/com/baeldung/jgit/porcelain/CreateAndDeleteTag.java
@@ -9,6 +9,8 @@ import org.eclipse.jgit.lib.Ref;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.revwalk.RevCommit;
import org.eclipse.jgit.revwalk.RevWalk;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* Simple snippet which shows how to create a tag
@@ -17,6 +19,8 @@ import org.eclipse.jgit.revwalk.RevWalk;
*/
public class CreateAndDeleteTag {
+ private static final Logger logger = LoggerFactory.getLogger(CreateAndDeleteTag.class);
+
public static void main(String[] args) throws IOException, GitAPIException {
// prepare test-repository
try (Repository repository = Helper.openJGitRepository()) {
@@ -26,7 +30,7 @@ public class CreateAndDeleteTag {
// set it on the current HEAD
Ref tag = git.tag().setName("tag_for_testing").call();
- System.out.println("Created/moved tag " + tag + " to repository at " + repository.getDirectory());
+ logger.debug("Created/moved tag " + tag + " to repository at " + repository.getDirectory());
// remove the tag again
git.tagDelete().setTags("tag_for_testing").call();
@@ -36,14 +40,14 @@ public class CreateAndDeleteTag {
try (RevWalk walk = new RevWalk(repository)) {
RevCommit commit = walk.parseCommit(id);
tag = git.tag().setObjectId(commit).setName("tag_for_testing").call();
- System.out.println("Created/moved tag " + tag + " to repository at " + repository.getDirectory());
+ logger.debug("Created/moved tag " + tag + " to repository at " + repository.getDirectory());
// remove the tag again
git.tagDelete().setTags("tag_for_testing").call();
// create an annotated tag
tag = git.tag().setName("tag_for_testing").setAnnotated(true).call();
- System.out.println("Created/moved tag " + tag + " to repository at " + repository.getDirectory());
+ logger.debug("Created/moved tag " + tag + " to repository at " + repository.getDirectory());
// remove the tag again
git.tagDelete().setTags("tag_for_testing").call();
diff --git a/jgit/src/main/java/com/baeldung/jgit/porcelain/Log.java b/jgit/src/main/java/com/baeldung/jgit/porcelain/Log.java
index a50028a9ae..fba8a82962 100644
--- a/jgit/src/main/java/com/baeldung/jgit/porcelain/Log.java
+++ b/jgit/src/main/java/com/baeldung/jgit/porcelain/Log.java
@@ -7,6 +7,9 @@ import org.eclipse.jgit.api.errors.GitAPIException;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.revwalk.RevCommit;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
/**
* Simple snippet which shows how to get the commit-ids for a file to provide log information.
*
@@ -14,6 +17,8 @@ import org.eclipse.jgit.revwalk.RevCommit;
*/
public class Log {
+ private static final Logger logger = LoggerFactory.getLogger(Log.class);
+
@SuppressWarnings("unused")
public static void main(String[] args) throws IOException, GitAPIException {
try (Repository repository = Helper.openJGitRepository()) {
@@ -22,30 +27,30 @@ public class Log {
.call();
int count = 0;
for (RevCommit rev : logs) {
- //System.out.println("Commit: " + rev /* + ", name: " + rev.getName() + ", id: " + rev.getId().getName() */);
+ logger.trace("Commit: " + rev /* + ", name: " + rev.getName() + ", id: " + rev.getId().getName() */);
count++;
}
- System.out.println("Had " + count + " commits overall on current branch");
+ logger.debug("Had " + count + " commits overall on current branch");
logs = git.log()
.add(repository.resolve(git.getRepository().getFullBranch()))
.call();
count = 0;
for (RevCommit rev : logs) {
- System.out.println("Commit: " + rev /* + ", name: " + rev.getName() + ", id: " + rev.getId().getName() */);
+ logger.trace("Commit: " + rev /* + ", name: " + rev.getName() + ", id: " + rev.getId().getName() */);
count++;
}
- System.out.println("Had " + count + " commits overall on "+git.getRepository().getFullBranch());
+ logger.debug("Had " + count + " commits overall on "+git.getRepository().getFullBranch());
logs = git.log()
.all()
.call();
count = 0;
for (RevCommit rev : logs) {
- //System.out.println("Commit: " + rev /* + ", name: " + rev.getName() + ", id: " + rev.getId().getName() */);
+ logger.trace("Commit: " + rev /* + ", name: " + rev.getName() + ", id: " + rev.getId().getName() */);
count++;
}
- System.out.println("Had " + count + " commits overall in repository");
+ logger.debug("Had " + count + " commits overall in repository");
logs = git.log()
// for all log.all()
@@ -53,10 +58,10 @@ public class Log {
.call();
count = 0;
for (RevCommit rev : logs) {
- //System.out.println("Commit: " + rev /* + ", name: " + rev.getName() + ", id: " + rev.getId().getName() */);
+ logger.trace("Commit: " + rev /* + ", name: " + rev.getName() + ", id: " + rev.getId().getName() */);
count++;
}
- System.out.println("Had " + count + " commits on README.md");
+ logger.debug("Had " + count + " commits on README.md");
logs = git.log()
// for all log.all()
@@ -64,10 +69,10 @@ public class Log {
.call();
count = 0;
for (RevCommit rev : logs) {
- //System.out.println("Commit: " + rev /* + ", name: " + rev.getName() + ", id: " + rev.getId().getName() */);
+ logger.trace("Commit: " + rev /* + ", name: " + rev.getName() + ", id: " + rev.getId().getName() */);
count++;
}
- System.out.println("Had " + count + " commits on pom.xml");
+ logger.debug("Had " + count + " commits on pom.xml");
}
}
}
diff --git a/jgit/src/test/java/com/baeldung/jgit/porcelain/PorcelainUnitTest.java b/jgit/src/test/java/com/baeldung/jgit/porcelain/PorcelainUnitTest.java
index d3b3358664..842705e6ac 100644
--- a/jgit/src/test/java/com/baeldung/jgit/porcelain/PorcelainUnitTest.java
+++ b/jgit/src/test/java/com/baeldung/jgit/porcelain/PorcelainUnitTest.java
@@ -11,7 +11,8 @@ public class PorcelainUnitTest {
CommitAll.main(null);
CreateAndDeleteTag.main(null);
-
- Log.main(null);
+
+ Log.main(null);
+
}
}
diff --git a/jhipster-5/bookstore-monolith/pom.xml b/jhipster-5/bookstore-monolith/pom.xml
index 4e4c82f327..c965fd962d 100644
--- a/jhipster-5/bookstore-monolith/pom.xml
+++ b/jhipster-5/bookstore-monolith/pom.xml
@@ -3,7 +3,7 @@
4.0.0
com.baeldung.jhipster5
- bookstore
+ bookstore-monolith
0.0.1-SNAPSHOT
war
Bookstore
@@ -1008,6 +1008,68 @@
+
+ default-first
+
+
+
+
+ com.github.eirslett
+ frontend-maven-plugin
+
+
+
+ install node and npm
+ none
+
+
+ npm install
+ none
+
+
+ webpack build dev
+ none
+
+
+ webpack build test
+ none
+
+
+
+
+
+
+
+ default-second
+
+
+
+
+ com.github.eirslett
+ frontend-maven-plugin
+
+
+
+ install node and npm
+ none
+
+
+ npm install
+ none
+
+
+ webpack build dev
+ none
+
+
+ webpack build test
+ none
+
+
+
+
+
+
diff --git a/jib/pom.xml b/jib/pom.xml
index 1d7413cc18..15e7e44e7c 100644
--- a/jib/pom.xml
+++ b/jib/pom.xml
@@ -40,6 +40,6 @@
- 0.9.10
+ 2.5.0
diff --git a/jmh/README.md b/jmh/README.md
index 3a5370c9f2..3cfe847a3c 100644
--- a/jmh/README.md
+++ b/jmh/README.md
@@ -5,4 +5,5 @@ This module contains articles about the Java Microbenchmark Harness (JMH).
### Relevant articles:
- [Microbenchmarking with Java](https://www.baeldung.com/java-microbenchmark-harness)
-
+- [A Guide to False Sharing and @Contended](https://www.baeldung.com/java-false-sharing-contended)
+- [Performance Comparison of boolean[] vs BitSet](https://www.baeldung.com/java-boolean-array-bitset-performance)
diff --git a/jmh/pom.xml b/jmh/pom.xml
index 735198036e..16a5bc54a4 100644
--- a/jmh/pom.xml
+++ b/jmh/pom.xml
@@ -26,6 +26,11 @@
jmh-generator-annprocess
${openjdk.jmh.version}