diff --git a/jta/README.md b/jta/README.md
deleted file mode 100644
index 202019118d..0000000000
--- a/jta/README.md
+++ /dev/null
@@ -1,6 +0,0 @@
-## JTA
-
-This module contains articles about the Java Transaction API (JTA).
-
-### Relevant Articles:
-- [Guide to Jakarta EE JTA](https://www.baeldung.com/jee-jta)
diff --git a/jta/pom.xml b/jta/pom.xml
deleted file mode 100644
index 906d28a7ea..0000000000
--- a/jta/pom.xml
+++ /dev/null
@@ -1,55 +0,0 @@
-
-
- 4.0.0
- jta
- 1.0-SNAPSHOT
- jta
- jar
- JEE JTA demo
-
-
- com.baeldung
- parent-boot-2
- 0.0.1-SNAPSHOT
- ../parent-boot-2
-
-
-
-
-
- org.apache.logging.log4j
- log4j-bom
- ${log4j2.version}
- import
- pom
-
-
-
-
-
-
- org.springframework.boot
- spring-boot-starter-jta-bitronix
-
-
- org.springframework.boot
- spring-boot-starter-jdbc
-
-
- org.springframework.boot
- spring-boot-starter
-
-
- org.hsqldb
- hsqldb
-
-
-
-
- 2.4.7
- 2.17.1
-
-
-
\ No newline at end of file
diff --git a/jta/src/main/resources/application.properties b/jta/src/main/resources/application.properties
deleted file mode 100644
index e69de29bb2..0000000000
diff --git a/jta/src/main/resources/resources b/jta/src/main/resources/resources
deleted file mode 100644
index 7d900d8ea8..0000000000
--- a/jta/src/main/resources/resources
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
- %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/jta/src/test/resources/logback-test.xml b/jta/src/test/resources/logback-test.xml
deleted file mode 100644
index 8d4771e308..0000000000
--- a/jta/src/test/resources/logback-test.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
- [%d{ISO8601}]-[%thread] %-5level %logger - %msg%n
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/persistence-modules/spring-persistence-simple/.gitignore b/persistence-modules/spring-persistence-simple/.gitignore
index 83c05e60c8..83d8f1a221 100644
--- a/persistence-modules/spring-persistence-simple/.gitignore
+++ b/persistence-modules/spring-persistence-simple/.gitignore
@@ -6,6 +6,7 @@
/data
/src/main/webapp/WEB-INF/classes
*/META-INF/*
+/transaction-logs
# Packaged files #
*.jar
diff --git a/persistence-modules/spring-persistence-simple/README.md b/persistence-modules/spring-persistence-simple/README.md
index f118d12f6f..77af323e31 100644
--- a/persistence-modules/spring-persistence-simple/README.md
+++ b/persistence-modules/spring-persistence-simple/README.md
@@ -8,6 +8,7 @@
- [Transactional Annotations: Spring vs. JTA](https://www.baeldung.com/spring-vs-jta-transactional)
- [Test a Mock JNDI Datasource with Spring](https://www.baeldung.com/spring-mock-jndi-datasource)
- [Detecting If a Spring Transaction Is Active](https://www.baeldung.com/spring-transaction-active)
+- [Guide to Jakarta EE JTA](https://www.baeldung.com/jee-jta)
### Eclipse Config
After importing the project into Eclipse, you may see the following error:
diff --git a/persistence-modules/spring-persistence-simple/pom.xml b/persistence-modules/spring-persistence-simple/pom.xml
index d9b832df2d..c486a95e96 100644
--- a/persistence-modules/spring-persistence-simple/pom.xml
+++ b/persistence-modules/spring-persistence-simple/pom.xml
@@ -51,6 +51,21 @@
spring-boot-starter
${spring-boot-starter.version}
+
+ org.springframework.boot
+ spring-boot-starter-jta-atomikos
+ ${spring-boot-starter.version}
+
+
+ org.springframework.boot
+ spring-boot-starter-jdbc
+ ${spring-boot-starter.version}
+
+
+ org.hsqldb
+ hsqldb
+ ${hsqldb.version}
+
com.h2database
h2
@@ -79,15 +94,13 @@
-
- 5.2.4.RELEASE
- 2.3.3.RELEASE
-
+ 5.3.18
+ 2.6.6
2.2
1.3
2.2.7.RELEASE
-
0.23.0
+ 2.5.2
\ No newline at end of file
diff --git a/jta/src/main/java/com/baeldung/jtademo/JtaDemoApplication.java b/persistence-modules/spring-persistence-simple/src/main/java/com/baeldung/jtademo/JtaDemoApplication.java
similarity index 92%
rename from jta/src/main/java/com/baeldung/jtademo/JtaDemoApplication.java
rename to persistence-modules/spring-persistence-simple/src/main/java/com/baeldung/jtademo/JtaDemoApplication.java
index 4d8779efe5..b2c0b7ff5a 100644
--- a/jta/src/main/java/com/baeldung/jtademo/JtaDemoApplication.java
+++ b/persistence-modules/spring-persistence-simple/src/main/java/com/baeldung/jtademo/JtaDemoApplication.java
@@ -3,7 +3,7 @@ package com.baeldung.jtademo;
import org.hsqldb.jdbc.pool.JDBCXADataSource;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
-import org.springframework.boot.jta.bitronix.BitronixXADataSourceWrapper;
+import org.springframework.boot.jta.atomikos.AtomikosXADataSourceWrapper;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@@ -32,7 +32,7 @@ public class JtaDemoApplication {
JDBCXADataSource dataSource = new JDBCXADataSource();
dataSource.setUrl(connectionUrl);
dataSource.setUser("sa");
- BitronixXADataSourceWrapper wrapper = new BitronixXADataSourceWrapper();
+ AtomikosXADataSourceWrapper wrapper = new AtomikosXADataSourceWrapper();
return wrapper.wrapDataSource(dataSource);
}
diff --git a/jta/src/main/java/com/baeldung/jtademo/dto/TransferLog.java b/persistence-modules/spring-persistence-simple/src/main/java/com/baeldung/jtademo/dto/TransferLog.java
similarity index 100%
rename from jta/src/main/java/com/baeldung/jtademo/dto/TransferLog.java
rename to persistence-modules/spring-persistence-simple/src/main/java/com/baeldung/jtademo/dto/TransferLog.java
diff --git a/jta/src/main/java/com/baeldung/jtademo/services/AuditService.java b/persistence-modules/spring-persistence-simple/src/main/java/com/baeldung/jtademo/services/AuditService.java
similarity index 68%
rename from jta/src/main/java/com/baeldung/jtademo/services/AuditService.java
rename to persistence-modules/spring-persistence-simple/src/main/java/com/baeldung/jtademo/services/AuditService.java
index f6810e15c8..48890e6957 100644
--- a/jta/src/main/java/com/baeldung/jtademo/services/AuditService.java
+++ b/persistence-modules/spring-persistence-simple/src/main/java/com/baeldung/jtademo/services/AuditService.java
@@ -4,7 +4,6 @@ import com.baeldung.jtademo.dto.TransferLog;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.jdbc.core.JdbcTemplate;
-import org.springframework.jdbc.core.ResultSetExtractor;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
@@ -24,10 +23,17 @@ public class AuditService {
}
public TransferLog lastTransferLog() {
- return jdbcTemplate.query("select FROM_ACCOUNT,TO_ACCOUNT,AMOUNT from AUDIT_LOG order by ID desc", (ResultSetExtractor) (rs) -> {
- if (!rs.next())
- return null;
- return new TransferLog(rs.getString(1), rs.getString(2), BigDecimal.valueOf(rs.getDouble(3)));
+ return jdbcTemplate.query(
+ "select FROM_ACCOUNT,TO_ACCOUNT,AMOUNT from AUDIT_LOG order by ID desc",
+ rs -> {
+ if (!rs.next()) {
+ return null;
+ }
+ return new TransferLog(
+ rs.getString(1),
+ rs.getString(2),
+ BigDecimal.valueOf(rs.getDouble(3))
+ );
});
}
}
diff --git a/jta/src/main/java/com/baeldung/jtademo/services/BankAccountService.java b/persistence-modules/spring-persistence-simple/src/main/java/com/baeldung/jtademo/services/BankAccountService.java
similarity index 77%
rename from jta/src/main/java/com/baeldung/jtademo/services/BankAccountService.java
rename to persistence-modules/spring-persistence-simple/src/main/java/com/baeldung/jtademo/services/BankAccountService.java
index 0c881edbaa..7ed06e9529 100644
--- a/jta/src/main/java/com/baeldung/jtademo/services/BankAccountService.java
+++ b/persistence-modules/spring-persistence-simple/src/main/java/com/baeldung/jtademo/services/BankAccountService.java
@@ -3,7 +3,6 @@ package com.baeldung.jtademo.services;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.jdbc.core.JdbcTemplate;
-import org.springframework.jdbc.core.ResultSetExtractor;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
@@ -24,9 +23,12 @@ public class BankAccountService {
}
public BigDecimal balanceOf(String accountId) {
- return jdbcTemplate.query("select BALANCE from ACCOUNT where ID=?", new Object[] { accountId }, (ResultSetExtractor) (rs) -> {
+ return jdbcTemplate.query(
+ "select BALANCE from ACCOUNT where ID=?",
+ new Object[] { accountId },
+ rs -> {
rs.next();
- return new BigDecimal(rs.getDouble(1));
- });
+ return BigDecimal.valueOf(rs.getDouble(1));
+ });
}
}
diff --git a/jta/src/main/java/com/baeldung/jtademo/services/TellerService.java b/persistence-modules/spring-persistence-simple/src/main/java/com/baeldung/jtademo/services/TellerService.java
similarity index 100%
rename from jta/src/main/java/com/baeldung/jtademo/services/TellerService.java
rename to persistence-modules/spring-persistence-simple/src/main/java/com/baeldung/jtademo/services/TellerService.java
diff --git a/jta/src/main/java/com/baeldung/jtademo/services/TestHelper.java b/persistence-modules/spring-persistence-simple/src/main/java/com/baeldung/jtademo/services/TestHelper.java
similarity index 94%
rename from jta/src/main/java/com/baeldung/jtademo/services/TestHelper.java
rename to persistence-modules/spring-persistence-simple/src/main/java/com/baeldung/jtademo/services/TestHelper.java
index c1e8e355ec..60bccd4847 100644
--- a/jta/src/main/java/com/baeldung/jtademo/services/TestHelper.java
+++ b/persistence-modules/spring-persistence-simple/src/main/java/com/baeldung/jtademo/services/TestHelper.java
@@ -32,10 +32,10 @@ public class TestHelper {
runScript("audit.sql", jdbcTemplateAudit.getDataSource());
}
- private void runScript(String scriptName, DataSource dataSouorce) throws SQLException {
+ private void runScript(String scriptName, DataSource dataSource) throws SQLException {
DefaultResourceLoader resourceLoader = new DefaultResourceLoader();
Resource script = resourceLoader.getResource(scriptName);
- try (Connection con = dataSouorce.getConnection()) {
+ try (Connection con = dataSource.getConnection()) {
ScriptUtils.executeSqlScript(con, script);
}
}
diff --git a/jta/src/main/resources/account.sql b/persistence-modules/spring-persistence-simple/src/main/resources/account.sql
similarity index 100%
rename from jta/src/main/resources/account.sql
rename to persistence-modules/spring-persistence-simple/src/main/resources/account.sql
diff --git a/persistence-modules/spring-persistence-simple/src/main/resources/application.properties b/persistence-modules/spring-persistence-simple/src/main/resources/application.properties
new file mode 100644
index 0000000000..f3872aa268
--- /dev/null
+++ b/persistence-modules/spring-persistence-simple/src/main/resources/application.properties
@@ -0,0 +1 @@
+spring.jta.atomikos.properties.log-base-name=atomikos-log
diff --git a/jta/src/main/resources/audit.sql b/persistence-modules/spring-persistence-simple/src/main/resources/audit.sql
similarity index 100%
rename from jta/src/main/resources/audit.sql
rename to persistence-modules/spring-persistence-simple/src/main/resources/audit.sql
diff --git a/jta/src/test/java/com/baeldung/jtademo/JtaDemoUnitTest.java b/persistence-modules/spring-persistence-simple/src/test/java/com/baeldung/jtademo/JtaDemoUnitTest.java
similarity index 79%
rename from jta/src/test/java/com/baeldung/jtademo/JtaDemoUnitTest.java
rename to persistence-modules/spring-persistence-simple/src/test/java/com/baeldung/jtademo/JtaDemoUnitTest.java
index 3f6004262b..c79a42fb4b 100644
--- a/jta/src/test/java/com/baeldung/jtademo/JtaDemoUnitTest.java
+++ b/persistence-modules/spring-persistence-simple/src/test/java/com/baeldung/jtademo/JtaDemoUnitTest.java
@@ -5,19 +5,19 @@ import com.baeldung.jtademo.services.AuditService;
import com.baeldung.jtademo.services.BankAccountService;
import com.baeldung.jtademo.services.TellerService;
import com.baeldung.jtademo.services.TestHelper;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.test.context.junit4.SpringRunner;
+import org.springframework.test.context.junit.jupiter.SpringExtension;
import java.math.BigDecimal;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
-@RunWith(SpringRunner.class)
+@ExtendWith(SpringExtension.class)
@SpringBootTest(classes = JtaDemoApplication.class)
public class JtaDemoUnitTest {
@Autowired
@@ -32,31 +32,31 @@ public class JtaDemoUnitTest {
@Autowired
AuditService auditService;
- @Before
+ @BeforeEach
public void beforeTest() throws Exception {
testHelper.runAuditDbInit();
testHelper.runAccountDbInit();
}
@Test
- public void givenAnnotationTx_whenNoException_thenAllCommitted() throws Exception {
+ public void givenAnnotationTx_whenNoException_thenAllCommitted() {
tellerService.executeTransfer("a0000001", "a0000002", BigDecimal.valueOf(500));
assertThat(accountService.balanceOf("a0000001")).isEqualByComparingTo(BigDecimal.valueOf(500));
assertThat(accountService.balanceOf("a0000002")).isEqualByComparingTo(BigDecimal.valueOf(2500));
TransferLog lastTransferLog = auditService.lastTransferLog();
- assertThat(lastTransferLog).isNotNull();
+
assertThat(lastTransferLog.getFromAccountId()).isEqualTo("a0000001");
assertThat(lastTransferLog.getToAccountId()).isEqualTo("a0000002");
assertThat(lastTransferLog.getAmount()).isEqualByComparingTo(BigDecimal.valueOf(500));
}
@Test
- public void givenAnnotationTx_whenException_thenAllRolledBack() throws Exception {
- assertThatThrownBy(() -> {
- tellerService.executeTransfer("a0000002", "a0000001", BigDecimal.valueOf(100000));
- }).hasMessage("Insufficient fund.");
+ public void givenAnnotationTx_whenException_thenAllRolledBack() {
+ assertThatThrownBy(
+ () -> tellerService.executeTransfer("a0000002", "a0000001", BigDecimal.valueOf(100000))
+ ).hasMessage("Insufficient fund.");
assertThat(accountService.balanceOf("a0000001")).isEqualByComparingTo(BigDecimal.valueOf(1000));
assertThat(accountService.balanceOf("a0000002")).isEqualByComparingTo(BigDecimal.valueOf(2000));
@@ -67,22 +67,21 @@ public class JtaDemoUnitTest {
public void givenProgrammaticTx_whenCommit_thenAllCommitted() throws Exception {
tellerService.executeTransferProgrammaticTx("a0000001", "a0000002", BigDecimal.valueOf(500));
- BigDecimal result = accountService.balanceOf("a0000001");
assertThat(accountService.balanceOf("a0000001")).isEqualByComparingTo(BigDecimal.valueOf(500));
assertThat(accountService.balanceOf("a0000002")).isEqualByComparingTo(BigDecimal.valueOf(2500));
TransferLog lastTransferLog = auditService.lastTransferLog();
- assertThat(lastTransferLog).isNotNull();
+
assertThat(lastTransferLog.getFromAccountId()).isEqualTo("a0000001");
assertThat(lastTransferLog.getToAccountId()).isEqualTo("a0000002");
assertThat(lastTransferLog.getAmount()).isEqualByComparingTo(BigDecimal.valueOf(500));
}
@Test
- public void givenProgrammaticTx_whenRollback_thenAllRolledBack() throws Exception {
- assertThatThrownBy(() -> {
- tellerService.executeTransferProgrammaticTx("a0000002", "a0000001", BigDecimal.valueOf(100000));
- }).hasMessage("Insufficient fund.");
+ public void givenProgrammaticTx_whenRollback_thenAllRolledBack() {
+ assertThatThrownBy(
+ () -> tellerService.executeTransferProgrammaticTx("a0000002", "a0000001", BigDecimal.valueOf(100000))
+ ).hasMessage("Insufficient fund.");
assertThat(accountService.balanceOf("a0000001")).isEqualByComparingTo(BigDecimal.valueOf(1000));
assertThat(accountService.balanceOf("a0000002")).isEqualByComparingTo(BigDecimal.valueOf(2000));
diff --git a/pom.xml b/pom.xml
index 39ffc54211..441cf0e580 100644
--- a/pom.xml
+++ b/pom.xml
@@ -476,7 +476,6 @@
json-2
json-path
jsoup
- jta
kubernetes
ksqldb
@@ -963,7 +962,6 @@
json-2
json-path
jsoup
- jta
ksqldb