JavaEE Transaction回滚

时间:2014-08-26 13:13:29

标签: java mysql hibernate

我遇到了事务回滚问题。

我需要先将用户插入数据库,然后在另一个表中插入一些插入用户的日志。 如果插入此日志消息时发生异常,则应回滚整个事务(即需要再次删除用户)。

.ear部署在Wildfly 8.1上,通过Hibernate与MySQL实现持久化。

我的班级看起来像这样

@Stateless
@Remote(AdministratorBiznesowyService.class)
@Transactional(rollbackOn = Exception.class)
public class AdministratorBiznesowyServiceBean implements AdministratorBiznesowyService {

该方法如下所示

@Override
@Transactional(rollbackOn = Exception.class)
public void insertUser(String userSessionId, User user) throws AdministratorBiznesowyException {

  checkPermission(userSessionId);
  try {
    userBusiness.insertUser(user);
    log.insertLog(
        authenticationObjectBusiness.getUserIdForSessionId(userSessionId),
        LogEnum.CREATE, user);
  } catch (AuthenticationException e) {
    ServerLogModule.logActionError(Messages
      .getErrorMessage("server.authorization.noPermission"));
    throw new AdministratorBiznesowyException();
  } catch (Exception e1) {
    ServerLogModule.logActionError(Messages
      .getErrorMessage("server.exception"));
    throw new AdministratorBiznesowyException();
  }*/

}

userBusiness中的insertUser实现:

@Override
public void insertUser(User user) throws   AdministratorBiznesowyException {
try {
  UserEntity userEntity = adminConvertUtils.convertUserToEntity(user);
  userEntityFacade.create(userEntity);
 } catch (Exception e) {
  throw new AdministratorBiznesowyException();
 }
}

我的log.insertLog目前用于测试目的只会引发异常。

throw new LogException();

它的实现是这样的:

@ApplicationException(rollback=true)
public class LogException extends RuntimeException {

AdministratorBiznesowyException:

@ApplicationException(rollback = true)
public class AdministratorBiznesowyException extends CommunicationException {

的CommunicationException:

public class CommunicationException extends Exception {

所以现在,当我成功调用insertUser并在之后直接获得异常时,新用户仍然会被添加到数据库中(我通过My​​SQL Workbench查看)。

我还能做些什么才能让它回滚? 如果需要任何其他代码,请提前评论,谢谢。

0 个答案:

没有答案