diff --git a/aspectj/README.md b/aspectj/README.md
deleted file mode 100644
index 71724e76b6..0000000000
--- a/aspectj/README.md
+++ /dev/null
@@ -1,3 +0,0 @@
-### Relevant Articles:
-- [Intro to AspectJ](http://www.baeldung.com/aspectj)
-- [Spring Performance Logging](http://www.baeldung.com/spring-performance-logging)
diff --git a/aspectj/pom.xml b/aspectj/pom.xml
deleted file mode 100644
index 2ef2ae9df7..0000000000
--- a/aspectj/pom.xml
+++ /dev/null
@@ -1,138 +0,0 @@
-
- 4.0.0
- com.baeldung
- aspectj
- 0.0.1-SNAPSHOT
- aspectj
-
-
-
- org.aspectj
- aspectjrt
- ${aspectj.version}
-
-
-
- org.aspectj
- aspectjweaver
- ${aspectj.version}
-
-
-
-
- org.slf4j
- slf4j-api
- ${org.slf4j.version}
-
-
-
- ch.qos.logback
- logback-classic
- ${logback.version}
-
-
-
- ch.qos.logback
- logback-core
- ${logback.version}
-
-
-
-
- junit
- junit
- ${junit.version}
-
-
-
- org.springframework
- spring-context
- 4.3.4.RELEASE
-
-
- org.springframework
- spring-beans
- 4.3.4.RELEASE
-
-
- org.springframework
- spring-core
- 4.3.4.RELEASE
-
-
- cglib
- cglib
- 3.2.4
-
-
- org.springframework
- spring-aop
- 4.3.4.RELEASE
-
-
-
-
- aspectj
-
-
- src/main/resources
- true
-
-
-
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
- ${maven-compiler-plugin.version}
-
- ${source.version}
- ${source.version}
-
-
-
-
-
- org.codehaus.mojo
- aspectj-maven-plugin
- 1.7
-
- ${source.version}
- ${source.version}
- ${source.version}
- true
- true
- ignore
- ${project.build.sourceEncoding}
-
-
-
-
-
-
- compile
- test-compile
-
-
-
-
-
-
-
-
-
-
- 1.8
- UTF-8
- 1.8.9
- 1.7.21
- 1.1.7
- 3.6.0
- 4.12
-
-
-
\ No newline at end of file
diff --git a/assertj/README.md b/assertj/README.md
deleted file mode 100644
index 86eff05057..0000000000
--- a/assertj/README.md
+++ /dev/null
@@ -1,3 +0,0 @@
-### Relevant Articles:
-- [AssertJ’s Java 8 Features](http://www.baeldung.com/assertJ-java-8-features)
-- [AssertJ for Guava](http://www.baeldung.com/assertJ-for-guava)
diff --git a/assertj/pom.xml b/assertj/pom.xml
deleted file mode 100644
index 032f33c89d..0000000000
--- a/assertj/pom.xml
+++ /dev/null
@@ -1,61 +0,0 @@
-
-
- 4.0.0
-
- com.baeldung
- assertj
- 1.0.0-SNAPSHOT
-
-
-
-
- com.google.guava
- guava
- ${guava.version}
-
-
- org.assertj
- assertj-guava
- 3.0.0
-
-
-
- junit
- junit
- ${junit.version}
- test
-
-
- org.assertj
- assertj-core
- ${assertj-core.version}
- test
-
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
- ${maven-compiler-plugin.version}
-
- 1.8
- 1.8
-
-
-
-
-
-
- 19.0
- 3.1.0
- 4.12
- 3.6.1
-
- 3.6.0
-
-
-
\ No newline at end of file
diff --git a/core-java/src/main/java/com/baeldung/jdo/GuideToJDO.java b/core-java/src/main/java/com/baeldung/jdo/GuideToJDO.java
index e17004c149..fb7bd184ee 100644
--- a/core-java/src/main/java/com/baeldung/jdo/GuideToJDO.java
+++ b/core-java/src/main/java/com/baeldung/jdo/GuideToJDO.java
@@ -1,33 +1,55 @@
package com.baeldung.jdo;
+import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Random;
import java.util.logging.Level;
import java.util.logging.Logger;
-import javax.jdo.JDOHelper;
import javax.jdo.PersistenceManager;
import javax.jdo.PersistenceManagerFactory;
import javax.jdo.Query;
import javax.jdo.Transaction;
+import org.datanucleus.api.jdo.JDOPersistenceManagerFactory;
+import org.datanucleus.metadata.PersistenceUnitMetaData;
+
public class GuideToJDO {
private static final Logger LOGGER = Logger.getLogger(GuideToJDO.class.getName());
private Random rnd = new Random();
+ private PersistenceUnitMetaData pumd;
public static void main(String[] args) {
new GuideToJDO();
}
public GuideToJDO() {
+ CreateProperties();
CreateProducts();
ListProducts();
+ UpdateProducts();
+ ListProducts();
+ DeleteProducts();
+ ListProducts();
}
+ public void CreateProperties(){
+
+ pumd = new PersistenceUnitMetaData("dynamic-unit", "RESOURCE_LOCAL", null);
+ pumd.addClassName("com.baeldung.jdo.Product");
+ pumd.setExcludeUnlistedClasses();
+ pumd.addProperty("javax.jdo.option.ConnectionDriverName", "org.h2.Driver");
+ pumd.addProperty("javax.jdo.option.ConnectionURL", "jdbc:h2:mem:mypersistence");
+ pumd.addProperty("javax.jdo.option.ConnectionUserName", "sa");
+ pumd.addProperty("javax.jdo.option.ConnectionPassword", "");
+ pumd.addProperty("datanucleus.autoCreateSchema", "true");
+
+ }
+
public void CreateProducts() {
- PersistenceManagerFactory pmf = JDOHelper.getPersistenceManagerFactory("Tutorial");
+ PersistenceManagerFactory pmf = new JDOPersistenceManagerFactory(pumd, null);
PersistenceManager pm = pmf.getPersistenceManager();
Transaction tx = pm.currentTransaction();
try {
@@ -51,26 +73,64 @@ public class GuideToJDO {
}
pm.close();
}
-
}
- @SuppressWarnings("unchecked")
+ @SuppressWarnings("rawtypes")
+ public void UpdateProducts(){
+ PersistenceManagerFactory pmf = new JDOPersistenceManagerFactory(pumd, null);
+ PersistenceManager pm = pmf.getPersistenceManager();
+ Transaction tx = pm.currentTransaction();
+ try {
+ tx.begin();
+ Query query = pm.newQuery(Product.class, "name == \"Phone\"");
+ Collection result = (Collection) query.execute();
+ Product product = (Product) result.iterator().next();
+ product.setName("Android Phone");
+ tx.commit();
+ } finally {
+ if (tx.isActive()) {
+ tx.rollback();
+ }
+ pm.close();
+ }
+ }
+
+ @SuppressWarnings("rawtypes")
+ public void DeleteProducts(){
+ PersistenceManagerFactory pmf = new JDOPersistenceManagerFactory(pumd, null);
+ PersistenceManager pm = pmf.getPersistenceManager();
+ Transaction tx = pm.currentTransaction();
+ try {
+ tx.begin();
+ Query query = pm.newQuery(Product.class, "name == \"Android Phone\"");
+ Collection result = (Collection) query.execute();
+ Product product = (Product) result.iterator().next();
+ pm.deletePersistent(product);
+ tx.commit();
+ } finally {
+ if (tx.isActive()) {
+ tx.rollback();
+ }
+ pm.close();
+ }
+ }
+
+ @SuppressWarnings({ "rawtypes", "unchecked" })
public void ListProducts() {
- PersistenceManagerFactory pmf = JDOHelper.getPersistenceManagerFactory("Tutorial");
+ PersistenceManagerFactory pmf = new JDOPersistenceManagerFactory(pumd, null);
PersistenceManager pm = pmf.getPersistenceManager();
Transaction tx = pm.currentTransaction();
try {
tx.begin();
- @SuppressWarnings("rawtypes")
- Query q = pm.newQuery("SELECT FROM " + Product.class.getName() + " WHERE price < 1");
+ Query q = pm.newQuery("SELECT FROM " + Product.class.getName() + " WHERE price > 10");
List products = (List) q.execute();
Iterator iter = products.iterator();
while (iter.hasNext()) {
Product p = iter.next();
LOGGER.log(Level.WARNING, "Product name: {0} - Price: {1}", new Object[] { p.name, p.price });
}
-
+ LOGGER.log(Level.INFO, "--------------------------------------------------------------");
tx.commit();
} finally {
if (tx.isActive()) {
@@ -80,4 +140,4 @@ public class GuideToJDO {
pm.close();
}
}
-}
+}
\ No newline at end of file
diff --git a/core-java/src/test/java/com/baeldung/concurrent/accumulator/LongAccumulatorTest.java b/core-java/src/test/java/com/baeldung/concurrent/accumulator/LongAccumulatorTest.java
new file mode 100644
index 0000000000..46e107b607
--- /dev/null
+++ b/core-java/src/test/java/com/baeldung/concurrent/accumulator/LongAccumulatorTest.java
@@ -0,0 +1,41 @@
+package com.baeldung.concurrent.accumulator;
+
+import org.junit.Test;
+
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.LongAccumulator;
+import java.util.function.LongBinaryOperator;
+import java.util.stream.IntStream;
+
+import static junit.framework.TestCase.assertEquals;
+
+public class LongAccumulatorTest {
+
+ @Test
+ public void givenLongAccumulator_whenApplyActionOnItFromMultipleThrads_thenShouldProduceProperResult() throws InterruptedException {
+ //given
+ ExecutorService executorService = Executors.newFixedThreadPool(8);
+ LongBinaryOperator higherValueFinder = (currentValue, previousValue) -> currentValue > previousValue ? currentValue : previousValue;
+ LongAccumulator accumulator = new LongAccumulator(higherValueFinder, 0L);
+
+ int numberOfThreads = 4;
+ int numberOfIncrements = 100;
+
+ //when
+ Runnable accumulateAction = () -> IntStream
+ .rangeClosed(0, numberOfIncrements)
+ .forEach(accumulator::accumulate);
+
+ for (int i = 0; i < numberOfThreads; i++) {
+ executorService.execute(accumulateAction);
+ }
+
+ //then
+ executorService.awaitTermination(500, TimeUnit.MILLISECONDS);
+ executorService.shutdown();
+
+ assertEquals(accumulator.get(), 100);
+ }
+}
diff --git a/core-java/src/test/java/com/baeldung/concurrent/adder/LongAdderTest.java b/core-java/src/test/java/com/baeldung/concurrent/adder/LongAdderTest.java
new file mode 100644
index 0000000000..854db5d9b9
--- /dev/null
+++ b/core-java/src/test/java/com/baeldung/concurrent/adder/LongAdderTest.java
@@ -0,0 +1,65 @@
+package com.baeldung.concurrent.adder;
+
+import org.junit.Test;
+
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.LongAdder;
+import java.util.stream.IntStream;
+
+import static junit.framework.TestCase.assertEquals;
+
+public class LongAdderTest {
+ @Test
+ public void givenMultipleThread_whenTheyWriteToSharedLongAdder_thenShouldCalculateSumForThem() throws InterruptedException {
+ //given
+ LongAdder counter = new LongAdder();
+ ExecutorService executorService = Executors.newFixedThreadPool(8);
+
+ int numberOfThreads = 4;
+ int numberOfIncrements = 100;
+
+ //when
+ Runnable incrementAction = () -> IntStream
+ .range(0, numberOfIncrements)
+ .forEach((i) -> counter.increment());
+
+ for (int i = 0; i < numberOfThreads; i++) {
+ executorService.execute(incrementAction);
+ }
+
+ //then
+ executorService.awaitTermination(500, TimeUnit.MILLISECONDS);
+ executorService.shutdown();
+
+ assertEquals(counter.sum(), numberOfIncrements * numberOfThreads);
+ assertEquals(counter.sum(), numberOfIncrements * numberOfThreads);
+ }
+
+ @Test
+ public void givenMultipleThread_whenTheyWriteToSharedLongAdder_thenShouldCalculateSumForThemAndResetAdderAfterward() throws InterruptedException {
+ //given
+ LongAdder counter = new LongAdder();
+ ExecutorService executorService = Executors.newFixedThreadPool(8);
+
+ int numberOfThreads = 4;
+ int numberOfIncrements = 100;
+
+ //when
+ Runnable incrementAction = () -> IntStream
+ .range(0, numberOfIncrements)
+ .forEach((i) -> counter.increment());
+
+ for (int i = 0; i < numberOfThreads; i++) {
+ executorService.execute(incrementAction);
+ }
+
+ //then
+ executorService.awaitTermination(500, TimeUnit.MILLISECONDS);
+ executorService.shutdown();
+
+ assertEquals(counter.sumThenReset(), numberOfIncrements * numberOfThreads);
+ assertEquals(counter.sum(), 0);
+ }
+}
diff --git a/core-java/src/test/java/com/baeldung/jdo/GuideToJDOTest.java b/core-java/src/test/java/com/baeldung/jdo/GuideToJDOTest.java
index 6ab7481118..b8a8d2adb3 100644
--- a/core-java/src/test/java/com/baeldung/jdo/GuideToJDOTest.java
+++ b/core-java/src/test/java/com/baeldung/jdo/GuideToJDOTest.java
@@ -6,18 +6,28 @@ import static org.junit.Assert.fail;
import java.util.Iterator;
import java.util.List;
-import javax.jdo.JDOHelper;
import javax.jdo.PersistenceManager;
import javax.jdo.PersistenceManagerFactory;
import javax.jdo.Query;
import javax.jdo.Transaction;
+import org.datanucleus.api.jdo.JDOPersistenceManagerFactory;
+import org.datanucleus.metadata.PersistenceUnitMetaData;
import org.junit.Test;
public class GuideToJDOTest {
@Test
public void givenProduct_WhenNewThenPerformTransaction() {
- PersistenceManagerFactory pmf = JDOHelper.getPersistenceManagerFactory("Tutorial");
+ PersistenceUnitMetaData pumd = new PersistenceUnitMetaData("dynamic-unit", "RESOURCE_LOCAL", null);
+ pumd.addClassName("com.baeldung.jdo.Product");
+ pumd.setExcludeUnlistedClasses();
+ pumd.addProperty("javax.jdo.option.ConnectionDriverName", "org.h2.Driver");
+ pumd.addProperty("javax.jdo.option.ConnectionURL", "jdbc:h2:mem:mypersistence");
+ pumd.addProperty("javax.jdo.option.ConnectionUserName", "sa");
+ pumd.addProperty("javax.jdo.option.ConnectionPassword", "");
+ pumd.addProperty("datanucleus.autoCreateSchema", "true");
+
+ PersistenceManagerFactory pmf = new JDOPersistenceManagerFactory(pumd, null);
PersistenceManager pm = pmf.getPersistenceManager();
Transaction tx = pm.currentTransaction();
try {
@@ -43,7 +53,16 @@ public class GuideToJDOTest {
@Test
public void givenProduct_WhenQueryThenExist() {
- PersistenceManagerFactory pmf = JDOHelper.getPersistenceManagerFactory("Tutorial");
+ PersistenceUnitMetaData pumd = new PersistenceUnitMetaData("dynamic-unit", "RESOURCE_LOCAL", null);
+ pumd.addClassName("com.baeldung.jdo.Product");
+ pumd.setExcludeUnlistedClasses();
+ pumd.addProperty("javax.jdo.option.ConnectionDriverName", "org.h2.Driver");
+ pumd.addProperty("javax.jdo.option.ConnectionURL", "jdbc:h2:mem:mypersistence");
+ pumd.addProperty("javax.jdo.option.ConnectionUserName", "sa");
+ pumd.addProperty("javax.jdo.option.ConnectionPassword", "");
+ pumd.addProperty("datanucleus.autoCreateSchema", "true");
+
+ PersistenceManagerFactory pmf = new JDOPersistenceManagerFactory(pumd, null);
PersistenceManager pm = pmf.getPersistenceManager();
Transaction tx = pm.currentTransaction();
try {
@@ -66,7 +85,7 @@ public class GuideToJDOTest {
pmf.close();
- PersistenceManagerFactory pmf2 = JDOHelper.getPersistenceManagerFactory("Tutorial");
+ PersistenceManagerFactory pmf2 = new JDOPersistenceManagerFactory(pumd, null);
PersistenceManager pm2 = pmf2.getPersistenceManager();
Transaction tx2 = pm2.currentTransaction();
try {
@@ -93,4 +112,4 @@ public class GuideToJDOTest {
}
-}
+}
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index e3dc78eece..57041f2340 100644
--- a/pom.xml
+++ b/pom.xml
@@ -22,8 +22,6 @@
apache-fop
apache-poi
apache-thrift
- aspectj
- assertj
autovalue
axon
diff --git a/spring-aop/README.md b/spring-aop/README.md
index 28295faf23..03d5d8f429 100644
--- a/spring-aop/README.md
+++ b/spring-aop/README.md
@@ -1,3 +1,5 @@
### Relevant articles
- [Implementing a Custom Spring AOP Annotation](http://www.baeldung.com/spring-aop-annotation)
+- [Intro to AspectJ](http://www.baeldung.com/aspectj)
+- [Spring Performance Logging](http://www.baeldung.com/spring-performance-logging)
\ No newline at end of file
diff --git a/aspectj/src/main/java/com/baeldung/aspectj/Account.java b/spring-aop/src/main/java/org/baeldung/aspectj/Account.java
similarity index 88%
rename from aspectj/src/main/java/com/baeldung/aspectj/Account.java
rename to spring-aop/src/main/java/org/baeldung/aspectj/Account.java
index bc9ca375aa..2c551116f4 100644
--- a/aspectj/src/main/java/com/baeldung/aspectj/Account.java
+++ b/spring-aop/src/main/java/org/baeldung/aspectj/Account.java
@@ -1,4 +1,4 @@
-package com.baeldung.aspectj;
+package org.baeldung.aspectj;
public class Account {
int balance = 20;
diff --git a/aspectj/src/main/java/com/baeldung/aspectj/AccountAspect.aj b/spring-aop/src/main/java/org/baeldung/aspectj/AccountAspect.aj
similarity index 96%
rename from aspectj/src/main/java/com/baeldung/aspectj/AccountAspect.aj
rename to spring-aop/src/main/java/org/baeldung/aspectj/AccountAspect.aj
index 8423c1da97..f08d7dc281 100644
--- a/aspectj/src/main/java/com/baeldung/aspectj/AccountAspect.aj
+++ b/spring-aop/src/main/java/org/baeldung/aspectj/AccountAspect.aj
@@ -1,4 +1,4 @@
-package com.baeldung.aspectj;
+package org.baeldung.aspectj;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
diff --git a/aspectj/src/main/java/com/baeldung/aspectj/Secured.java b/spring-aop/src/main/java/org/baeldung/aspectj/Secured.java
similarity index 90%
rename from aspectj/src/main/java/com/baeldung/aspectj/Secured.java
rename to spring-aop/src/main/java/org/baeldung/aspectj/Secured.java
index 923f208c2f..08711d5db1 100644
--- a/aspectj/src/main/java/com/baeldung/aspectj/Secured.java
+++ b/spring-aop/src/main/java/org/baeldung/aspectj/Secured.java
@@ -1,4 +1,4 @@
-package com.baeldung.aspectj;
+package org.baeldung.aspectj;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
diff --git a/aspectj/src/main/java/com/baeldung/aspectj/SecuredMethod.java b/spring-aop/src/main/java/org/baeldung/aspectj/SecuredMethod.java
similarity index 94%
rename from aspectj/src/main/java/com/baeldung/aspectj/SecuredMethod.java
rename to spring-aop/src/main/java/org/baeldung/aspectj/SecuredMethod.java
index aa4b733a00..d1f7d43738 100644
--- a/aspectj/src/main/java/com/baeldung/aspectj/SecuredMethod.java
+++ b/spring-aop/src/main/java/org/baeldung/aspectj/SecuredMethod.java
@@ -1,4 +1,4 @@
-package com.baeldung.aspectj;
+package org.baeldung.aspectj;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
diff --git a/aspectj/src/main/java/com/baeldung/aspectj/SecuredMethodAspect.java b/spring-aop/src/main/java/org/baeldung/aspectj/SecuredMethodAspect.java
similarity index 96%
rename from aspectj/src/main/java/com/baeldung/aspectj/SecuredMethodAspect.java
rename to spring-aop/src/main/java/org/baeldung/aspectj/SecuredMethodAspect.java
index 9ea45ec43b..b474f266ab 100644
--- a/aspectj/src/main/java/com/baeldung/aspectj/SecuredMethodAspect.java
+++ b/spring-aop/src/main/java/org/baeldung/aspectj/SecuredMethodAspect.java
@@ -1,4 +1,4 @@
-package com.baeldung.aspectj;
+package org.baeldung.aspectj;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
diff --git a/aspectj/src/main/java/com/baeldung/performancemonitor/AopConfiguration.java b/spring-aop/src/main/java/org/baeldung/performancemonitor/AopConfiguration.java
similarity index 98%
rename from aspectj/src/main/java/com/baeldung/performancemonitor/AopConfiguration.java
rename to spring-aop/src/main/java/org/baeldung/performancemonitor/AopConfiguration.java
index 5e2ef90c0f..a5f36fb716 100644
--- a/aspectj/src/main/java/com/baeldung/performancemonitor/AopConfiguration.java
+++ b/spring-aop/src/main/java/org/baeldung/performancemonitor/AopConfiguration.java
@@ -1,7 +1,4 @@
-package com.baeldung.performancemonitor;
-
-import java.time.LocalDate;
-import java.time.Month;
+package org.baeldung.performancemonitor;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.aop.Advisor;
@@ -12,6 +9,9 @@ import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
+import java.time.LocalDate;
+import java.time.Month;
+
@Configuration
@EnableAspectJAutoProxy
public class AopConfiguration {
diff --git a/aspectj/src/main/java/com/baeldung/performancemonitor/MyPerformanceMonitorInterceptor.java b/spring-aop/src/main/java/org/baeldung/performancemonitor/MyPerformanceMonitorInterceptor.java
similarity index 96%
rename from aspectj/src/main/java/com/baeldung/performancemonitor/MyPerformanceMonitorInterceptor.java
rename to spring-aop/src/main/java/org/baeldung/performancemonitor/MyPerformanceMonitorInterceptor.java
index e995e52182..d098d9466c 100644
--- a/aspectj/src/main/java/com/baeldung/performancemonitor/MyPerformanceMonitorInterceptor.java
+++ b/spring-aop/src/main/java/org/baeldung/performancemonitor/MyPerformanceMonitorInterceptor.java
@@ -1,11 +1,11 @@
-package com.baeldung.performancemonitor;
-
-import java.util.Date;
+package org.baeldung.performancemonitor;
import org.aopalliance.intercept.MethodInvocation;
import org.apache.commons.logging.Log;
import org.springframework.aop.interceptor.AbstractMonitoringInterceptor;
+import java.util.Date;
+
public class MyPerformanceMonitorInterceptor extends AbstractMonitoringInterceptor {
public MyPerformanceMonitorInterceptor() {
diff --git a/aspectj/src/main/java/com/baeldung/performancemonitor/PerfomanceApp.java b/spring-aop/src/main/java/org/baeldung/performancemonitor/PerfomanceApp.java
similarity index 93%
rename from aspectj/src/main/java/com/baeldung/performancemonitor/PerfomanceApp.java
rename to spring-aop/src/main/java/org/baeldung/performancemonitor/PerfomanceApp.java
index 00268c978e..d0fb3a5393 100644
--- a/aspectj/src/main/java/com/baeldung/performancemonitor/PerfomanceApp.java
+++ b/spring-aop/src/main/java/org/baeldung/performancemonitor/PerfomanceApp.java
@@ -1,4 +1,4 @@
-package com.baeldung.performancemonitor;
+package org.baeldung.performancemonitor;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
diff --git a/aspectj/src/main/java/com/baeldung/performancemonitor/Person.java b/spring-aop/src/main/java/org/baeldung/performancemonitor/Person.java
similarity index 95%
rename from aspectj/src/main/java/com/baeldung/performancemonitor/Person.java
rename to spring-aop/src/main/java/org/baeldung/performancemonitor/Person.java
index f16f28fdef..abd2465764 100644
--- a/aspectj/src/main/java/com/baeldung/performancemonitor/Person.java
+++ b/spring-aop/src/main/java/org/baeldung/performancemonitor/Person.java
@@ -1,4 +1,4 @@
-package com.baeldung.performancemonitor;
+package org.baeldung.performancemonitor;
import java.time.LocalDate;
diff --git a/aspectj/src/main/java/com/baeldung/performancemonitor/PersonService.java b/spring-aop/src/main/java/org/baeldung/performancemonitor/PersonService.java
similarity index 89%
rename from aspectj/src/main/java/com/baeldung/performancemonitor/PersonService.java
rename to spring-aop/src/main/java/org/baeldung/performancemonitor/PersonService.java
index f5bfdddc12..5b98aaf436 100644
--- a/aspectj/src/main/java/com/baeldung/performancemonitor/PersonService.java
+++ b/spring-aop/src/main/java/org/baeldung/performancemonitor/PersonService.java
@@ -1,4 +1,4 @@
-package com.baeldung.performancemonitor;
+package org.baeldung.performancemonitor;
import java.time.LocalDate;
import java.time.Period;
diff --git a/aspectj/src/main/resources/META-INF/aop.xml b/spring-aop/src/main/resources/META-INF/aop.xml
similarity index 73%
rename from aspectj/src/main/resources/META-INF/aop.xml
rename to spring-aop/src/main/resources/META-INF/aop.xml
index f930cde942..e5bddcc30c 100644
--- a/aspectj/src/main/resources/META-INF/aop.xml
+++ b/spring-aop/src/main/resources/META-INF/aop.xml
@@ -1,6 +1,6 @@
-
+
diff --git a/aspectj/src/main/resources/logback.xml b/spring-aop/src/main/resources/logback.xml
similarity index 100%
rename from aspectj/src/main/resources/logback.xml
rename to spring-aop/src/main/resources/logback.xml
diff --git a/aspectj/src/test/java/com/baeldung/aspectj/test/AccountTest.java b/spring-aop/src/test/java/org/baeldung/aspectj/AccountTest.java
similarity index 79%
rename from aspectj/src/test/java/com/baeldung/aspectj/test/AccountTest.java
rename to spring-aop/src/test/java/org/baeldung/aspectj/AccountTest.java
index d90793f681..f118dad034 100644
--- a/aspectj/src/test/java/com/baeldung/aspectj/test/AccountTest.java
+++ b/spring-aop/src/test/java/org/baeldung/aspectj/AccountTest.java
@@ -1,11 +1,10 @@
-package com.baeldung.aspectj.test;
-
-import static org.junit.Assert.*;
+package org.baeldung.aspectj;
import org.junit.Before;
import org.junit.Test;
-import com.baeldung.aspectj.Account;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
public class AccountTest {
private Account account;
diff --git a/aspectj/src/test/java/com/baeldung/aspectj/test/SecuredMethodTest.java b/spring-aop/src/test/java/org/baeldung/aspectj/SecuredMethodTest.java
similarity index 75%
rename from aspectj/src/test/java/com/baeldung/aspectj/test/SecuredMethodTest.java
rename to spring-aop/src/test/java/org/baeldung/aspectj/SecuredMethodTest.java
index 924bb279fd..7ecb2a3ee3 100644
--- a/aspectj/src/test/java/com/baeldung/aspectj/test/SecuredMethodTest.java
+++ b/spring-aop/src/test/java/org/baeldung/aspectj/SecuredMethodTest.java
@@ -1,9 +1,7 @@
-package com.baeldung.aspectj.test;
+package org.baeldung.aspectj;
import org.junit.Test;
-import com.baeldung.aspectj.SecuredMethod;
-
public class SecuredMethodTest {
@Test
public void testMethod() throws Exception {
diff --git a/spring-boot/src/main/java/org/baeldung/Application.java b/spring-boot/src/main/java/org/baeldung/Application.java
index c47bb90830..8b49f4d6ab 100644
--- a/spring-boot/src/main/java/org/baeldung/Application.java
+++ b/spring-boot/src/main/java/org/baeldung/Application.java
@@ -1,11 +1,12 @@
package org.baeldung;
import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
import com.baeldung.autoconfiguration.MySQLAutoconfiguration;
-@org.springframework.boot.autoconfigure.SpringBootApplication(exclude=MySQLAutoconfiguration.class)
+@SpringBootApplication(exclude=MySQLAutoconfiguration.class)
public class Application {
private static ApplicationContext applicationContext;
diff --git a/spring-boot/src/main/java/org/baeldung/config/H2JpaConfig.java b/spring-boot/src/main/java/org/baeldung/config/H2JpaConfig.java
index ace7bb5a6d..62791bf180 100644
--- a/spring-boot/src/main/java/org/baeldung/config/H2JpaConfig.java
+++ b/spring-boot/src/main/java/org/baeldung/config/H2JpaConfig.java
@@ -18,7 +18,7 @@ import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
import org.springframework.transaction.annotation.EnableTransactionManagement;
@Configuration
-@EnableJpaRepositories(basePackages = { "org.baeldung.repository", "org.baeldung.boot.repository" })
+@EnableJpaRepositories(basePackages = { "org.baeldung.repository", "org.baeldung.boot.repository", "org.baeldung.boot.boottest" })
@PropertySource("classpath:persistence-generic-entity.properties")
@EnableTransactionManagement
public class H2JpaConfig {
@@ -41,7 +41,7 @@ public class H2JpaConfig {
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
final LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
em.setDataSource(dataSource());
- em.setPackagesToScan(new String[] { "org.baeldung.domain", "org.baeldung.boot.model" });
+ em.setPackagesToScan(new String[] { "org.baeldung.domain", "org.baeldung.boot.model", "org.baeldung.boot.boottest" });
em.setJpaVendorAdapter(new HibernateJpaVendorAdapter());
em.setJpaProperties(additionalProperties());
return em;
diff --git a/spring-boot/src/test/java/org/baeldung/SpringBootApplicationIntegrationTest.java b/spring-boot/src/test/java/org/baeldung/SpringBootApplicationIntegrationTest.java
index 4ce0678bdd..c5cca3c5fb 100644
--- a/spring-boot/src/test/java/org/baeldung/SpringBootApplicationIntegrationTest.java
+++ b/spring-boot/src/test/java/org/baeldung/SpringBootApplicationIntegrationTest.java
@@ -1,9 +1,5 @@
package org.baeldung;
-import static org.hamcrest.Matchers.equalTo;
-import static org.hamcrest.Matchers.hasSize;
-import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
-
import org.baeldung.domain.Modes;
import org.junit.Before;
import org.junit.Test;
@@ -21,12 +17,18 @@ import org.springframework.web.context.WebApplicationContext;
import java.nio.charset.Charset;
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.hasSize;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
+
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = Application.class)
@WebAppConfiguration
public class SpringBootApplicationIntegrationTest {
+
@Autowired
private WebApplicationContext webApplicationContext;
+
private MockMvc mockMvc;
@Before
diff --git a/spring-boot/src/test/java/org/baeldung/config/H2TestProfileJPAConfig.java b/spring-boot/src/test/java/org/baeldung/config/H2TestProfileJPAConfig.java
index 1d696f4a5d..eff383b440 100644
--- a/spring-boot/src/test/java/org/baeldung/config/H2TestProfileJPAConfig.java
+++ b/spring-boot/src/test/java/org/baeldung/config/H2TestProfileJPAConfig.java
@@ -18,7 +18,7 @@ import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
import org.springframework.transaction.annotation.EnableTransactionManagement;
@Configuration
-@EnableJpaRepositories(basePackages = { "org.baeldung.repository", "org.baeldung.boot.repository" })
+@EnableJpaRepositories(basePackages = { "org.baeldung.repository", "org.baeldung.boot.repository", "org.baeldung.boot.boottest" })
@EnableTransactionManagement
public class H2TestProfileJPAConfig {
@@ -41,7 +41,7 @@ public class H2TestProfileJPAConfig {
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
final LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
em.setDataSource(dataSource());
- em.setPackagesToScan(new String[] { "org.baeldung.domain", "org.baeldung.boot.model" });
+ em.setPackagesToScan(new String[] { "org.baeldung.domain", "org.baeldung.boot.model", "org.baeldung.boot.boottest" });
em.setJpaVendorAdapter(new HibernateJpaVendorAdapter());
em.setJpaProperties(additionalProperties());
return em;
diff --git a/spring-dispatcher-servlet/README.md b/spring-dispatcher-servlet/README.md
index 56bb353487..a93993679f 100644
--- a/spring-dispatcher-servlet/README.md
+++ b/spring-dispatcher-servlet/README.md
@@ -1,3 +1,3 @@
## Relevant articles:
-- [Spring DispatcherServlet](http://www.baeldung.com/spring-dispatcher-servlet)
+- [An Intro to the Spring DispatcherServlet](http://www.baeldung.com/spring-dispatcherservlet)
diff --git a/stripe/README.md b/stripe/README.md
new file mode 100644
index 0000000000..8a44ff9d33
--- /dev/null
+++ b/stripe/README.md
@@ -0,0 +1,8 @@
+### Stripe API for Java Sample Project
+
+This is Spring Boot project that displays a checkout form and charges a credit card using the Stripe API for Java.
+
+### Relevant articles
+
+- [Introduction to the Stripe API for Java](http://www.baeldung.com/java-stripe-api)
+
diff --git a/testing/README.md b/testing/README.md
index 121472ae13..0960ce5957 100644
--- a/testing/README.md
+++ b/testing/README.md
@@ -5,4 +5,7 @@
### Relevant Articles:
- [Introduction to Mutation Testing Using the PITest Library](http://www.baeldung.com/java-mutation-testing-with-pitest)
- [Intro to JaCoCo](http://www.baeldung.com/jacoco)
+- [AssertJ’s Java 8 Features](http://www.baeldung.com/assertJ-java-8-features)
+- [AssertJ for Guava](http://www.baeldung.com/assertJ-for-guava)
+- [Introduction to AssertJ](http://www.baeldung.com/introduction-to-assertj)
diff --git a/testing/pom.xml b/testing/pom.xml
index 1bdc5c87f0..3b336d0904 100644
--- a/testing/pom.xml
+++ b/testing/pom.xml
@@ -1,17 +1,37 @@
+ 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
- mutation-testing
+ testing
0.1-SNAPSHOT
- mutation-testing
-
-
- 1.1.10
- 4.12
- 0.7.7.201606060606
-
+ testing
+
+
+ com.google.guava
+ guava
+ ${guava.version}
+
+
+ org.assertj
+ assertj-guava
+ 3.0.0
+
+
+
+ junit
+ junit
+ ${junit.version}
+ test
+
+
+ org.assertj
+ assertj-core
+ ${assertj-core.version}
+ test
+
+
+
org.pitest
pitest-parent
@@ -78,6 +98,26 @@
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ ${maven-compiler-plugin.version}
+
+ 1.8
+ 1.8
+
+
+
+
+ 1.1.10
+ 4.12
+ 0.7.7.201606060606
+ 19.0
+ 3.1.0
+ 4.12
+ 3.6.1
+ 3.6.0
+
diff --git a/assertj/src/main/java/com/baeldung/assertj/introduction/domain/Dog.java b/testing/src/main/java/com/baeldung/testing/assertj/Dog.java
similarity index 85%
rename from assertj/src/main/java/com/baeldung/assertj/introduction/domain/Dog.java
rename to testing/src/main/java/com/baeldung/testing/assertj/Dog.java
index 623f71214c..7a1c158500 100644
--- a/assertj/src/main/java/com/baeldung/assertj/introduction/domain/Dog.java
+++ b/testing/src/main/java/com/baeldung/testing/assertj/Dog.java
@@ -1,4 +1,4 @@
-package com.baeldung.assertj.introduction.domain;
+package com.baeldung.testing.assertj;
public class Dog {
private String name;
diff --git a/assertj/src/main/java/com/baeldung/assertj/introduction/domain/Person.java b/testing/src/main/java/com/baeldung/testing/assertj/Person.java
similarity index 85%
rename from assertj/src/main/java/com/baeldung/assertj/introduction/domain/Person.java
rename to testing/src/main/java/com/baeldung/testing/assertj/Person.java
index 90ef787ebe..43e9ff8884 100644
--- a/assertj/src/main/java/com/baeldung/assertj/introduction/domain/Person.java
+++ b/testing/src/main/java/com/baeldung/testing/assertj/Person.java
@@ -1,4 +1,4 @@
-package com.baeldung.assertj.introduction.domain;
+package com.baeldung.testing.assertj;
public class Person {
private String name;
diff --git a/assertj/src/test/java/com/baeldung/assertj/introduction/AssertJCoreTest.java b/testing/src/test/java/com/baeldung/testing/assertj/AssertJCoreTest.java
similarity index 95%
rename from assertj/src/test/java/com/baeldung/assertj/introduction/AssertJCoreTest.java
rename to testing/src/test/java/com/baeldung/testing/assertj/AssertJCoreTest.java
index 10bb011903..2e95355df5 100644
--- a/assertj/src/test/java/com/baeldung/assertj/introduction/AssertJCoreTest.java
+++ b/testing/src/test/java/com/baeldung/testing/assertj/AssertJCoreTest.java
@@ -1,7 +1,5 @@
-package com.baeldung.assertj.introduction;
+package com.baeldung.testing.assertj;
-import com.baeldung.assertj.introduction.domain.Dog;
-import com.baeldung.assertj.introduction.domain.Person;
import org.assertj.core.util.Maps;
import org.junit.Ignore;
import org.junit.Test;
diff --git a/assertj/src/test/java/com/baeldung/assertj/introduction/AssertJGuavaTest.java b/testing/src/test/java/com/baeldung/testing/assertj/AssertJGuavaTest.java
similarity index 98%
rename from assertj/src/test/java/com/baeldung/assertj/introduction/AssertJGuavaTest.java
rename to testing/src/test/java/com/baeldung/testing/assertj/AssertJGuavaTest.java
index 84aaf46dd1..d226c3fce9 100644
--- a/assertj/src/test/java/com/baeldung/assertj/introduction/AssertJGuavaTest.java
+++ b/testing/src/test/java/com/baeldung/testing/assertj/AssertJGuavaTest.java
@@ -1,4 +1,4 @@
-package com.baeldung.assertj.introduction;
+package com.baeldung.testing.assertj;
import com.google.common.base.Optional;
import com.google.common.collect.ArrayListMultimap;
diff --git a/assertj/src/test/java/com/baeldung/assertj/introduction/AssertJJava8Test.java b/testing/src/test/java/com/baeldung/testing/assertj/AssertJJava8Test.java
similarity index 98%
rename from assertj/src/test/java/com/baeldung/assertj/introduction/AssertJJava8Test.java
rename to testing/src/test/java/com/baeldung/testing/assertj/AssertJJava8Test.java
index f89defaed1..a671a49da1 100644
--- a/assertj/src/test/java/com/baeldung/assertj/introduction/AssertJJava8Test.java
+++ b/testing/src/test/java/com/baeldung/testing/assertj/AssertJJava8Test.java
@@ -1,4 +1,4 @@
-package com.baeldung.assertj.introduction;
+package com.baeldung.testing.assertj;
import org.junit.Test;