繁体   English   中英

事务未在ejb中回滚

[英]Transaction is not rolled back in ejb

我不是ejb专家。 我有一个如下的服务班。 我将文件保存在服务类中的某个位置,并在dao中调用一个方法来保存文件哈希码。 由于某些原因,我有时在dao层中遇到异常。 最近,我发现从服务层保存的文件在被排除时不会被删除。

@Stateless
@Local
@TransactionManagement
public class ImportUpgradeServiceImpl implements ImportUpgradeService {

    @Inject
    private UpgradePackageDao upgradePackageDao;

    @Override
    public boolean savePackage() {
        //For the sake of simplicity I simplified the code here
        File file = new File("d:\\ejbtest.log");

        try {
            file.createNewFile();
        } catch (IOException e) {
            e.printStackTrace();
        }

        upgradePackageDao.savePackageHash(null);

        return false;
    }

}

在我的DAO下面

public class UpgradePackageDaoImpl implements UpgradePackageDao {

    @Override
    public void savePackageHash(String hash) {

        throw new RuntimeException("cannot save");
    }

}

然后,我用@TransactionManagement注释了我的服务类。 我想念什么? 还是我误解了ejb交易管理? ejb事务管理仅用于数据库事务吗?

EJB中不建议与文件系统进行交互。 下面是EJB Restrictions的摘录,其中对此进行了解释。

EJB为什么不能在文件系统中读写文件和目录? 他们为什么不能访问文件描述符?

不允许Enterprise Bean访问文件主要是因为文件不是事务性资源。 允许EJB访问文件系统中的文件或目录,或使用文件描述符,将损害组件的可分发性,并且会带来安全隐患。

由于文件不是事务性资源,因此回滚不会对其产生影响。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM