Header Ads

ad

Spring AspectJAOP Distributed Transaction Management Program using Annotations | Atomikos API

 Distributed Transaction Management Program using Annotations  | Atomikos API




Deposite.java:
  1. package com.nt.dao;
  2. public interface Deposite {
  3. public int deposite(int acno,int amount);
  4. }


DepositeImpl.java:
  1. package com.nt.dao;

  2. import org.springframework.beans.factory.annotation.Autowired;
  3. import org.springframework.beans.factory.annotation.Qualifier;
  4. import org.springframework.jdbc.core.JdbcTemplate;
  5. import org.springframework.stereotype.Repository;

  6. @Repository("depositeDAO")
  7. public class DepositeImpl implements Deposite {
  8. private static final String DEPOSITE_QUERY="UPDATE DTX_ACCOUNT SET BALANCE=BALANCE+? WHERE ACNO=?";
  9. @Autowired
  10. @Qualifier(value="mysqlJt")
  11. private JdbcTemplate jt;
  12. @Override
  13. public int deposite(int acno, int amount) {
  14. int count=0;
  15. count=jt.update(DEPOSITE_QUERY, amount,acno);
  16. return count;
  17. }
  18. }
Withdraw.java:
  1. package com.nt.dao;
  2. public class Withdraw {
  3.     public int withdraw(int acno,int amount);
  4. }

WithdrawImpl.java:
  1. package com.nt.dao;

  2. import org.springframework.beans.factory.annotation.Autowired;
  3. import org.springframework.beans.factory.annotation.Qualifier;
  4. import org.springframework.jdbc.core.JdbcTemplate;
  5. import org.springframework.stereotype.Repository;

  6. @Repository("withdrawDAO")
  7. public class WithdrawImpl implements Withdraw {
  8. private static final String WITHDRAW_QUERY="UPDATE  DTX_ACCOUNT SET BALANCE=BALANCE-? WHERE ACNO=?";
  9. @Autowired
  10. @Qualifier(value="oracleJt")
  11. private JdbcTemplate jt;
  12. @Override
  13. public int withdraw(int acno, int amount) {
  14. int count=0;
  15. count=jt.update(WITHDRAW_QUERY, amount,acno);
  16. return count;
  17. }
  18. }

BankService.java:
  1. package com.nt.service;
  2. public interface BankService {
  3.      public boolean transferMoney(int srcAcno, int destAcno, int amt)throws Exception;
  4. }

BankServiceImpl.java:
  1. package com.nt.service;

  2. import org.springframework.beans.factory.annotation.Autowired;
  3. import org.springframework.stereotype.Service;
  4. import org.springframework.transaction.annotation.Propagation;
  5. import org.springframework.transaction.annotation.Transactional;
  6. import com.nt.dao.Deposite;
  7. import com.nt.dao.Withdraw;

  8. @Service("bankService")
  9. public class BankServiceImpl implements BankService {
  10. @Autowired
  11. private Withdraw withDAO;
  12. @Autowired
  13. private Deposite depoDAO;
  14. @Transactional(propagation=Propagation.REQUIRED,rollbackFor=Throwable.class)
  15. public boolean transferMoney(int srcAcno, int destAcno, int amt)throws Exception {
  16. int wFlag=0,dFlag=0;
  17. boolean status=false;
  18. wFlag=withDAO.withdraw(srcAcno, amt);
  19. dFlag=depoDAO.deposite(destAcno, amt);
  20. if(wFlag==0 || dFlag==0) {
  21. status=false;
  22. throw new Exception("Transaction Failed....");
  23. }
  24. else {
  25. status=true;
  26. }
  27. return status;
  28. }
  29. }

persistence-beans.xml:
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:context="http://www.springframework.org/schema/context"
  5. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
  6. http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">

  7. <!-- DataSource properties for Oracle -->
  8. <bean id="oracleXADS" class="com.atomikos.jdbc.AtomikosDataSourceBean">
  9. <property name="uniqueResourceName" value="oracleXA"/>
  10. <property name="xaDataSourceClassName" value="oracle.jdbc.xa.client.OracleXADataSource"/>
  11. <property name="xaProperties">
  12. <props>
  13. <prop key="databaseName">xe</prop>
  14. <prop key="user">system</prop>
  15. <prop key="password">manager</prop>
  16. <prop key="URL">jdbc:oracle:thin:@localhost:1521:xe</prop>
  17. </props>
  18. </property>
  19. <property name="poolSize" value="10"/>
  20. </bean>
  21. <!-- DataSource properties for MySQL -->
  22. <bean id="mysqlXADS" class="com.atomikos.jdbc.AtomikosDataSourceBean">
  23. <property name="uniqueResourceName" value="mysqlXA"/>
  24. <property name="xaDataSourceClassName" value="com.mysql.cj.jdbc.MysqlXADataSource"/>
  25. <property name="xaProperties">
  26. <props>
  27. <prop key="databaseName">skydatabase</prop>
  28. <prop key="user">root</prop>
  29. <prop key="password">root</prop>
  30. <prop key="URL">jdbc:mysql:///skydatabase</prop> 
  31. </props>
  32. </property>
  33. <property name="poolSize" value="10"/>
  34. </bean>
  35. <!-- JdbcTemplate cfg -->
  36. <bean id="oracleJt" class="org.springframework.jdbc.core.JdbcTemplate">
  37. <constructor-arg ref="oracleXADS"/>
  38. </bean>
  39. <bean id="mysqlJt" class="org.springframework.jdbc.core.JdbcTemplate">
  40. <constructor-arg ref="mysqlXADS"/>
  41. </bean>
  42. <!-- combine class with cfg -->
  43. <context:component-scan base-package="com.nt.dao"/>
  44. </beans>


service-beans.xml
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:context="http://www.springframework.org/schema/context"
  5. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
  6. http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">

  7. <context:component-scan base-package="com.nt.service"/>
  8. </beans>


aop-beans.xml:
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:tx="http://www.springframework.org/schema/tx"
  5. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
  6. http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">
  7. <!-- Cfg Tx Service -->
  8. <bean id="txService" class="com.atomikos.icatch.jta.UserTransactionImp"/>
  9. <!-- Cfg Tx Mgmr -->
  10. <bean id="txMgmr" class="com.atomikos.icatch.jta.UserTransactionManager"/>
  11. <!-- Cfg JtaTransactionManager -->
  12. <bean id="jtaTxMgmr" class="org.springframework.transaction.jta.JtaTransactionManager">
  13. <property name="userTransaction" ref="txService"/>
  14. <property name="transactionManager" ref="txMgmr"/>
  15. </bean>
  16. <!-- Activate TxMgmr -->
  17. <tx:annotation-driven transaction-manager="jtaTxMgmr"/>
  18. </beans>

applicationContext.xml:
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

  5. <import resource="persistence-beans.xml"/>
  6. <import resource="service-beans.xml"/>
  7. <import resource="aop-beans.xml"/>
  8. </beans>

DTxTest.java:
  1. package com.nt.test;

  2. import org.springframework.context.ApplicationContext;
  3. import org.springframework.context.support.AbstractApplicationContext;
  4. import org.springframework.context.support.ClassPathXmlApplicationContext;
  5. import com.nt.service.BankService;

  6. public class DTxTest {
  7. public static void main(String[] args) {
  8. ApplicationContext ctx=null;
  9. BankService service=null;
  10. ctx=new ClassPathXmlApplicationContext("com/nt/cfgs/applicationContext.xml");
  11. service=ctx.getBean("bankService",BankService.class);
  12. try {
  13.     System.out.println(service.transferMoney(101, 102, 2000));
  14. }
  15. catch(Exception e) {
  16. System.out.println("Transaction failed....Internal Problems.....");
  17. e.printStackTrace();
  18. }
  19. ((AbstractApplicationContext) ctx).close();
  20. }
  21. }

No comments