有一个这样的场景:DB里面存着一个普通文件的信息,譬如说size, path, lastModifyDate....,当然这对应一个真的文件在操作系统上。如果我要通过一个j2ee的application去写这个文件,同时修改DB里面对应的纪录的时候,transaction问题就来了。万一file操作和DB操作有一个失败如何rollback?OK.我们知道DB操作可以有transaction控制,但是file操作呢?EJB的种种令人头痛的限制里面就有不得直接操作I/O(file)...
如果不在EJB容器,就应该直接可以使用JTA?但是JTA能直接控制I/O来做2阶段提交?或者最后一招,自己写file的rollback()函数,自己控制2个操作的事务。。better solution?
如果不在EJB容器,就应该直接可以使用JTA?但是JTA能直接控制I/O来做2阶段提交?或者最后一招,自己写file的rollback()函数,自己控制2个操作的事务。。better solution?
事务的存在是为了保证一系列原子操作都能正确成功完成或全部回滚,java只要操纵内存之外的任何数据(网络、数据库、本地文件)都有出错和操作不成功的可能,为何数据库存在事务而本地文件不存在事务这个概念??
一时想不通,呵呵,还望指出。
事务的存在是为了保证一系列原子操作都能正确成功完成或全部回滚,java只要操纵内存之外的任何数据(网络、数据库、本地文件)都有出错和操作不成功的可能,为何数据库存在事务而本地文件不存在事务这个概念??
因为文件系统不支持事务操作,至少我们新建、修改、删除一个文件并不需要点一下“提交”按钮才能成功的。事务文件系统目前应该还处于初级阶段。参考:http://www.infoq.com/cn/news/2008/01/file-systems-transactions