[英]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.