Java 事务未在ejb中回滚

Java 事务未在ejb中回滚,java,transactions,ejb-3.0,Java,Transactions,Ejb 3.0,我不是ejb专家。我有一个如下的服务类。我正在服务类的某个位置保存一个文件,并在dao中调用一个方法来保存文件哈希代码。由于某些原因,有一段时间我的dao层出现异常。最近,我观察到,当我得到exxeptions时,从我的服务层保存的文件没有被删除 @Stateless @Local @TransactionManagement public class ImportUpgradeServiceImpl implements ImportUpgradeService { @Inject

我不是ejb专家。我有一个如下的服务类。我正在服务类的某个位置保存一个文件,并在dao中调用一个方法来保存文件哈希代码。由于某些原因,有一段时间我的dao层出现异常。最近,我观察到,当我得到exxeptions时,从我的服务层保存的文件没有被删除

@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;
    }

}
下面是我的刀

public class UpgradePackageDaoImpl implements UpgradePackageDao {

    @Override
    public void savePackageHash(String hash) {

        throw new RuntimeException("cannot save");
    }

}

然后我用@TransactionManagement注释了我的服务类。我错过了什么?还是我误解了ejb事务管理?ejb事务管理是否仅为数据库事务设计?

不建议在ejb中与文件系统交互。下面是文章的摘录,解释了这一点

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

不允许企业bean访问文件,主要原因是 文件不是事务性资源。允许EJB访问文件 或者文件系统中的目录,或者使用文件描述符 损害组件的可分发性,这将是一种安全隐患


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

不建议在EJB中与文件系统交互。下面是文章的摘录,解释了这一点

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

不允许企业bean访问文件,主要原因是 文件不是事务性资源。允许EJB访问文件 或者文件系统中的目录,或者使用文件描述符 损害组件的可分发性,这将是一种安全隐患


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

有人能解释一下吗?有人能回答我的问题吗?看前两个答案有人能解释一下吗?有人能回答我的问题吗?看前两个答案,如果我错了,请纠正我。如果您编写自己的FileSystemDataSource,它将起作用,因为它隐藏/处理事务。@Markus是的,使用FileSystemDataSource可以执行回滚/提交操作,但这将是一个完全不同的事务&不能将它们与EJB事务相关联。如果我错了,请纠正我。如果您编写自己的FileSystemDataSource,它将起作用,因为它隐藏/处理事务。@Markus是的,使用FileSystemDataSource可以执行回滚/提交操作,但这将是一个完全不同的事务&不能将它们与EJB事务相关联。