Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 捕获意外回滚异常的原因_Java_Rollback_Jta - Fatal编程技术网

Java 捕获意外回滚异常的原因

Java 捕获意外回滚异常的原因,java,rollback,jta,Java,Rollback,Jta,当运行下面的代码(这里的原因是唯一的约束错误)时,如何捕获回滚异常的原因,我正在使用Weblogic,Spring,Hibernate,JTA <tx:annotation-driven transaction-manager="txManager" order="200" /> <bean id="txManager" class="org.springframework.transaction.jta.JtaTransactionManager"> </bean

当运行下面的代码(这里的原因是唯一的约束错误)时,如何捕获
回滚异常的原因,我正在使用
Weblogic
Spring
Hibernate
JTA

<tx:annotation-driven transaction-manager="txManager" order="200" />
<bean id="txManager" class="org.springframework.transaction.jta.JtaTransactionManager">
</bean>


@Service
public class OrderService extend BaseService<Order, Long>   {


@Transactional 
 public Long  save(Order modelEntity)  {
    try{
         super.save(modelEntity);
 }
 catch(Exception exp){
    ....
  }

 }
}
------------------------------
@Controller
@RequestMapping("/test/core/Order")
public class OrderController extends BaseController{

@Autowired(required = true)
private IOrderService iOrderService;



@RequestMapping(value = "/save", method = RequestMethod.POST)
@ResponseBody
public Long save(@RequestBody Order  modelEntity) {

    return iOrderService.save(modelEntity); 
 }
}

@Controller
public class BaseController {
@ExceptionHandler(Exception.class)
@ResponseStatus(value = HttpStatus.INTERNAL_SERVER_ERROR)
@ResponseBody
public ResponseEntity<String> handleUncaughtException(Exception ex,    WebRequest request, HttpServletResponse response) throws IOException {
        String logMessage = ex.toString() + " " + ex.getMessage();

    if (ex.getCause()!= null) {
        logMessage += ex.getCause().toString() + " " +   ex.getCause().getMessage();

    }
 return new ResponseEntity<String>(" ", responseHeaders,    HttpStatus.INTERNAL_SERVER_ERROR);
 }

@服务
公共类OrderService扩展BaseService{
@交易的
公共长保存(订单模型实体){
试一试{
super.save(模型实体);
}
捕获(异常扩展){
....
}
}
}
------------------------------
@控制器
@请求映射(“/test/core/Order”)
公共类OrderController扩展了BaseController{
@自动连线(必需=真)
私人IOrderService IOrderService;
@RequestMapping(value=“/save”,method=RequestMethod.POST)
@应答器
公共长保存(@RequestBody Order modelEntity){
返回iOrderService.save(modelEntity);
}
}
@控制器
公共类基址控制器{
@ExceptionHandler(Exception.class)
@ResponseStatus(值=HttpStatus.INTERNAL\u SERVER\u错误)
@应答器
public ResponseEntity handleUncaughtException(异常ex、WebRequest请求、HttpServletResponse响应)引发IOException{
字符串logMessage=ex.toString()+“”+ex.getMessage();
如果(例如getCause()!=null){
logMessage+=ex.getCause().toString()+“”+ex.getCause().getMessage();
}
返回新的ResponseEntity(“,responseHeaders,HttpStatus.INTERNAL\u SERVER\u ERROR);
}

[错误]org.springframework.transaction.UnexpectedRollbackException:JTA事务意外回滚(可能由于超时);嵌套异常为weblogic.transaction.RollbackException:setRollbackOnly在事务JTA事务意外回滚时调用(可能由于超时);嵌套异常为weblogic.transaction.RollbackException:setRollbackOnly在transactionweblogic.transaction.RollbackException:setRollbackOnly在事务上调用setRollbackOnly在transactionorg.springframework.transaction.UnexpectedRollbackException:JTA事务意外回滚(可能是由于超时);嵌套异常为weblogic.transaction.RollbackException:setRollbackOnly在事务上调用


您是否尝试了
try catch
?是的,但问题是当调用save方法时,hibernate在保存到数据库时返回唯一约束异常,但由于该方法是跨国的,因此发生了意外回滚异常。但我想捕获回滚异常的原因,即这里是唯一约束异常,以便在
tr中捕获它y catch
@Transactional public Long Save(Order modelEntity){try{return super.Save(modelEntity);}和
catch(uniqueconstraint异常)
出现了什么问题?