public class BankAccount {
private int accountNumber;
private double balance;
// Getter and Setter methods
public void deposit(double amount) {
balance += amount;
}
public void withdraw(double amount) {
if (balance >= amount) {
balance -= amount;
}
}
public void transfer(BankAccount destination, double amount) {
try {
this.withdraw(amount);
destination.deposit(amount);
System.out.println("Transfer successful!");
} catch (Exception e) {
System.out.println("Transfer failed!");
throw e;
}
}
}
<transaction name="tx" nontransactional-read="false" nontransactional-write="false" isolation="read-committed"/>
import javax.jdo.JDOHelper;
import javax.jdo.PersistenceManager;
import javax.jdo.Transaction;
public class Main {
public static void main(String[] args) {
PersistenceManager pm = JDOHelper.getPersistenceManagerFactory("jdoconfig.xml").getPersistenceManager();
try {
Transaction tx = pm.currentTransaction();
tx.begin();
BankAccount source = pm.getObjectById(BankAccount.class, 1);
BankAccount destination = pm.getObjectById(BankAccount.class, 2);
source.transfer(destination, 100.0);
tx.commit();
System.out.println("Transaction committed successfully!");
} catch (Exception e) {
System.out.println("Transaction failed!");
} finally {
if (tx.isActive()) {
tx.rollback();
}
pm.close();
}
}
}