Java 事务未在ejb中回滚
我不是ejb专家。我有一个如下的服务类。我正在服务类的某个位置保存一个文件,并在dao中调用一个方法来保存文件哈希代码。由于某些原因,有一段时间我的dao层出现异常。最近,我观察到,当我得到exxeptions时,从我的服务层保存的文件没有被删除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
@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事务相关联。