事务不会在ejb中回滚

时间:2014-03-17 04:21:30

标签: java transactions ejb-3.0

我不是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 transaction mamangement是否仅为数据库事务设计?

1 个答案:

答案 0 :(得分:4)

不建议在EJB中与文件系统进行交互。以下是解释它的EJB Restrictions的摘录。

  

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

     

不允许企业bean访问文件主要是因为   文件不是事务资源。允许EJB访问文件   或文件系统中的目录,或使用文件描述符   妥协组件可分发性,并且存在安全隐患。

由于文件不是事务性资源,因此回滚对它没有影响。