JTA的事务管理由UserTransaction管理.

// 回滚处理开始
		InitialContext context = new InitialContext();
		// JTA的事务管理由UserTransaction管理.
		UserTransaction utx = (UserTransaction) context.lookup("UserTransaction");
		try {
			// 开启事物
			utx.begin();
			if (null != ids && idList.size() > 0) {
				for (String id : idList) {
					// 根据出借产品 id查询 委托出借信息
					underLineApprove = underLineApproveLocalBean.getListById(appBean.getClientCode(), id);
					// 根据出借产品 loan_id查询【募集成功结束时间】
					if (StringUtils.isBlank(underLineApprove.getTimesettled())) {
						updIds.add(id);
						tenderList.add(underLineApprove);
					}
				}
				// 更新委托出借表里的审批状态
				boolean up = underLineApproveLocalBean
						.markApprovalStatus(CreditManagerConstant.APPROVAL_STATUS_REFUSE, updIds);
				if (!up) {
					utx.rollback();
					return apiresult.addError("委托出借审批驳回失败!");
				}
				// 插入投资信息表
				if (null != tenderList && tenderList.size() > 0) {

					for (UnderLineApprove ua : tenderList) {					
						boolean f = userFundService.release(appBean.getClientCode(), ua.getUnderLineUserId(),
								new BigDecimal(ua.getLoanAmount()));
						if (!f) {
							utx.rollback();
							return apiresult.addError("委托出借审批驳回更新用户资金失败!");
						}
						/*						
						String mchnt_txn_ssn = getNumber(); // 流水号
						String cust_no = null;// 付款账户(出借人手机号)
						String amt = null;// 金额
						String rem = null;
						// 通过userid获取用户信息
						User u = userBridge.getUserById(ua.getUnderLineUserId());
						if (null != u) {
							cust_no = u.getMobile();// 付款账户(出借人手机号)
						} else {
							apiresult.addError("委托出借审批驳回转账:付款账户不存在");
						}
						if (StringUtils.isNotBlank(ua.getLoanAmount())) {
							amt = ua.getLoanAmount();// 金额
						} else {
							apiresult.addError("委托出借审批驳回转账:金额不存在");
						}
						try {
							logger.info("委托出借审批批驳回账户解冻: 流水号《" + mchnt_txn_ssn + "》");
							// 驳回的时候调解冻接口。
							UnFreezeRspData uf = fuiouService.unFreeze(mchnt_txn_ssn, cust_no, amt, rem);
							if (uf != null) {
								if (!uf.getResp_code().equals("0000")) {
									utx.rollback();
									return apiresult.addError(uf.getResp_desc());
								} 
							}
							logger.info("委托出借审批驳回账户解冻: 解冻账户 《" + cust_no + " 》 响应消息: " + uf.getResp_desc());

						} catch (Exception e) {
							logger.error("委托出借审批驳回账户解冻失败: " + e.getMessage());
							return apiresult.addError("委托出借审批驳回账户解冻失败,请和银行联系。");
						}*/
					}
				}
			} else {
				return apiresult.addError("委托出借驳回无驳回记录");
			}
			utx.commit();
		} catch (Exception e) {
			utx.rollback();
			return apiresult.addError("委托出借驳回无驳回失败");
		}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring+iBatis+JOTM实现JTA事务: 如何处理跨库事物:spring + jtom 的jta事务是个很好的选择. 这个源码示例非常不错,包括所有的源码和jar包,下载后eclipse 或 myeclipse 导入就能用。 里面有详细的说明和注释,欢迎下载传播。有问题请在评价中留言,我会及时回复的。 <bean id="jotm" class="org.springframework.transaction.jta.JotmFactoryBean"/> <!-- JTA事务管理器 --> <bean id="myJtaManager" class="org.springframework.transaction.jta.JtaTransactionManager"> <property name="userTransaction"> <ref local="jotm"/> </property> </bean> <!-- 数据源A --> <bean id="dataSourceA" class="org.enhydra.jdbc.pool.StandardXAPoolDataSource" destroy-method="shutdown"> <property name="dataSource"> <bean class="org.enhydra.jdbc.standard.StandardXADataSource" destroy-method="shutdown"> <property name="transactionManager" ref="jotm"/> <property name="driverName" value="${jdbc.driver}"/> <property name="url" value="${jdbc.url}"/> </bean> </property> <property name="user" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </bean> <!-- 数据源B --> <bean id="dataSourceB" class="org.enhydra.jdbc.pool.StandardXAPoolDataSource" destroy-method="shutdown"> <property name="dataSource"> <bean class="org.enhydra.jdbc.standard.StandardXADataSource" destroy-method="shutdown"> <property name="transactionManager" ref="jotm"/> <property name="driverName" value="${jdbc2.driver}"/> <property name="url" value="${jdbc2.url}"/> </bean> </property> <property name="user" value="${jdbc2.username}"/> <property name="password" value="${jdbc.password}"/> </bean> <!-- 事务切面配置 --> <aop:config> <aop:pointcut id="serviceOperation" expression="execution(* *..servi1ce*..*(..))"/> <aop:advisor pointcut-ref="serviceOperation" advice-ref="txAdvice"/> </aop:config> <!-- 通知配置 --> <tx:advice id="txAdvice" transaction-manager="myJtaManager"> <tx:attributes> <tx:method name="delete*" rollback-for="Exception"/> <tx:method name="save*" rollback-for="Exception"/> <tx:method name="update*" rollback-for="Exception"/> <tx:method name="*" read-only="true" rollback-for="Exception"/> </tx:attributes> </tx:advice ...... ...... ......

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值