精华内容
下载资源
问答
  • 原项目使用的是weblogic通过这种方式获取UserTransaction, <p>public static UserTransaction getUserTransaction() throws NamingException, SystemException {<!-- -->  Context ctx = new ...
  • 不抛出异常进行回滚

    不抛出异常进行回滚

    用于关闭资源时候

    展开全文
  • UserTransaction tx = getUserTransaction(); tx.begin(); ds = (DataSource) ctx.lookup("XAMySqlDS"); conn = ds.getConnection(); //conn.setAutoCommit(false); stmt = ...
  • JPA学习--JPA中的UserTransaction的理解

    千次阅读 2017-05-10 14:04:04
    一、前言今天中午一小伙伴在进行JPA的相关配置时遇到一些疑惑点,...二、UserTransaction简析2.1 代码展示请看下面一段代码:1.注意看javax.transaction.UserTransaction import javax.transaction.UserTransaction;

    一、前言

    今天中午一小伙伴在进行JPA的相关配置时遇到一些疑惑点,自己思考了一下也没有搞明白,就查了一些资料,翻看了之前的一些代码,逐渐搞明白了几点。写一博客分享之。

    二、UserTransaction简析

    2.1 代码展示

    请看下面一段代码:

    1.注意看javax.transaction.UserTransaction

     import javax.transaction.UserTransaction;
    
        @Inject
        private UserTransaction utx;

    2.注意看UserTransaction的实例化方式

     private UserTransaction utx = entityManager.getTransaction();

    2.2 官方文档解析

    UserTransaction的Java EE6官方文档是这样定义的:

    The UserTransaction interface defines the methods that allow an
    application to explicitly manage transaction boundaries.
    UserTransaction
    接口定义的方法允许应用程序显式地管理事务边界。

    换言之,UserTransaction是Java EE中用来进行事务管理的一个接口。
    其主要实现方法有如下几个:

    begin()
    getStatus()
    rollback()
    setRollbackOnly()
    setTransactionTimeout(int seconds)

    三、JPA中的事务管理

    3.1 事务管理相关概念理解

    事务的概念:
    事务是应用程序中一系列严密的操作的集合,也就是两个及两个以上操作的集合。事务的特点是,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消。也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一个都不做。
    同时也就意味着事务的结束有两种,当事务中的所以步骤全部成功执行时,事务提交。如果其中一个步骤失败,将发生回滚操作,撤消撤消之前到事务开始时的所以操作。
    事务机制的优势:
    使用事务机制的好处非常明显,例如银行转账之类的交易操作中,事务有着重要的作用。事务的成功取决于事务单元帐户相互依赖的操作行为是否能全部执行成功,只要有一个操作行为失败,整个事务将失败。例如:客户A和客户B的银行账户金额都是10000元人民币,客户A需要把自己帐户中的5000元人民币转到客户B的账户上。这个过程看似简单,实际上涉及了一系列的数据库操作,可以简单地视为两步基本操作,即从客户A帐户的金额中扣除5000元人民币,以及将客户B帐户中金额添加5000元人民币。假设第1步数据库操作成功,而第二步失败的话,将导致整个操作失败,并且客户A帐户金额将被扣除5000元人民币。事务机制可以避免此类情况,以保证整个操作的完成,如果某步操作出错,之前所作的数据库操作将全部失效。

    3.2 JPA中的事务管理

    在JPA中,JPA本身没有提供任何类型的声明式事务管理,所以,为了更好的进行一系列的事务操作和管理,常用的事务管理有容器管理和人为管理。人为管理需要代码实现。
    在JPA中一种实现方式就是调用entityManager的UserTransaction。即:

      UserTransaction utx = entityManager.getTransaction(); 

    3.3 JPA中UserTransaction与entityManager的关系

    上述UserTransaction接口由entityManager对象实现,例如:

                // 实例化对象
                UserTransaction utx = entityManager.getTransaction();
                // 开启事务
                utx.begin();
                // 提交事务
                utx.commit();

    四、实例代码展示

    4.1 个人代码

    package cn.edu.sdut.softlab.controller;
    
    import javax.enterprise.context.RequestScoped;
    import javax.inject.Named;
    import javax.persistence.EntityManager;
    import javax.persistence.EntityManagerFactory;
    import javax.persistence.Persistence;
    import javax.transaction.HeuristicMixedException;
    import javax.transaction.HeuristicRollbackException;
    import javax.transaction.RollbackException;
    import javax.transaction.SystemException;
    import javax.transaction.UserTransaction;
    
    import cn.edu.sdut.softlab.model.Person;
    
    @Named("controller")
    @RequestScoped
    public class PersonController {
        //定义全局变量
        EntityManagerFactory emf = null;
        EntityManager em = null;
    
        //引入UserTransaction
        private UserTransaction utx;
        private Person newPerson = new Person();
    
        // newPerson的getter和setter方法
        public Person getNewPerson() {
            return newPerson;
        }
    
        public void setNewPerson(Person newPerson) {
            this.newPerson = newPerson;
        }
    
        // login方法
        public void addPerson() throws IllegalStateException, SecurityException, HeuristicMixedException,
                HeuristicRollbackException, RollbackException, SystemException {
            try {
                //utx.begin();
                 //该参数必须与persistence-unit的name相一致
                emf = Persistence.createEntityManagerFactory("PersonUnit");
    
                em = emf.createEntityManager();
                // 断点测试
                System.out.println("打印输出newPerson:   " + newPerson.toString());
                System.out.println("打印输出em:  " + em.toString());// 测试结果,EntityManager注入失败
                em.getTransaction().begin();// 至关重要的一步:开启事务
                em.persist(newPerson);
                em.getTransaction().commit();
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                em.close();
    
                emf.close();
                //utx.commit();
                System.out.println("存入成功!");
            }
    
        }
    }

    4.2 详细完整代码
    请移步:https://github.com/GaoZiqiang/HelloWorldJPADemo

    五、待解决问题

        @Inject
        private UserTransaction utx;

    这段代码中的utx对象是如何实例化的?

    展开全文
  • 发现错误配置了JPA的事务管理方式为JTA 改为resource_local即可

    在这里插入图片描述
    发现错误配置了JPA的事务管理方式为JTA

    在这里插入图片描述
    改为resource_local即可
    在这里插入图片描述

    展开全文
  • usertransaction-in-java-se 要测试这个问题 我看到这个链接: : 我正在阅读另一个 ,然后我进行此测试以查看结果。
  • JTA的事务管理由UserTransaction管理.

    千次阅读 2017-09-15 10:25:01
    // 回滚处理开始 InitialContext context = new InitialContext(); // JTA的事务管理由... UserTransaction utx = (UserTransaction) context.lookup("UserTransaction"); try { // 开启事物 utx.begin
    // 回滚处理开始
    		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("委托出借驳回无驳回失败");
    		}

    展开全文
  • 关于UserTransaction

    2013-11-02 08:29:05
    ...public class UserTransaction { private static Map threadDbconnectionMap = new HashMap(); public void begin() { dataSource.getConnection().setAutoCommit(false); thr...
  • 在运行定时任务的时候报错: Java.lang.NoClassDefFoundError: javax/transaction/UserTransaction 原因:缺少jta的jar包 解决方法:下载并添加jta.jar
  • * UserTransaction与Transaction的区别: * Transaction:容器管理事务 * UserTransaction:人工管理事务 * @author TCM * @create 2017年10月31日上午9:22:38 */ public interface UserTransaction { /** ...
  • UserTransaction

    2008-02-20 10:14:19
    [code="...public class UserTransaction { private static Map threadDbconnectionMap = new HashMap(); public void begin() { dataSource.getConnection().setAutoCommit(false); ...
  • javax.transaction.UserTransaction与XA JtaTransactionManager WebLogicJtaTransactionManager TransactionProxyFactoryBean TransactionInterceptor 转载于:...
  • 今天运行AbstractTransactionalJUnit4SpringContextTests的测试...Could not find UserTransaction in JNDI [java:comp/UserTransaction]; 我的测试代码 @ContextConfiguration(locations = {"classpath:applica
  • A UserTransaction object reference may also be declared in a deployment descriptor in the same way as a resource environment reference." <p>Common Annotation spec also says UserTransaction mapped ...
  • Quartz javax/transaction/UserTransaction

    千次阅读 2012-07-06 12:36:20
    java.lang.ClassNotFoundException: javax.transaction.UserTransaction 解决办法: 到 http://java.sun.com/products/jta/ 下载 Java Transaction API classes 的zip包,解压然后用命令将jta-1_1-classes...
  • org.apache.jasper.JasperException: javax.servlet.ServletException: java.lang.NoClassDefFoundError: javax/transaction/UserTransaction org.apache.jasper.servlet.JspServletWrapper.handleJspException...
  • spring+quartz报错:Caused by: java.lang.NoClassDefFoundError: javax/transaction/UserTransaction 解决方法:缺少jta.jar点击打开链接
  • : No JTA UserTransaction available - specify either 'userTransaction' or 'userTransactionName' or 'transactionManager' or 'transactionManagerName'  at org.springframework.beans.factory.support....
  • javax/transaction/UserTransaction

    千次阅读 2009-09-18 01:46:00
    javax/transaction/UserTransaction ejb
  • 其中获得UserTransaction资源的方式有三种,除了用EJB资源的方式注入以外,还有以下两种方式: (1) JNDI查找 Context context = new InitialContext(); UserTransaction userTransaction =
  • 今天在进行quartz应用时,出现了:java.lang.NoClassDefFoundError: javax/transaction/UserTransaction, 错误,上网一查原来是没有导入:jta.jar包。 解决办法: 把jta.jar 包放在开发工程的lib下就可以了,...
  • 提示缺少:javax.transaction.UserTransaction。 原因是在工程中没有加入jta.jar这个包!
  • The UserTransaction interface defines the methods that allow an application to explicitly manage transaction boundaries. UserTransaction接口定义了一些方法,以允许应用明确管理事务的界线。 <!-- =...
  • 使用 quartz 1.6.0 的时候遇到这个错误:java.lang.NoClassDefFoundError: javax/transaction/UserTransaction. 解决办法:到 http://java.sun.com/products/jta/ 下载 Java Transaction API classes 的zip包,...
  • : No JTA UserTransaction available - specify either 'userTransaction' or 'userTransactionName' or 'transactionManager' or 'transactionManagerName' at org.springframework.beans.factory.support....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,093
精华内容 2,837
关键字:

usertransaction