如何在Java EE环境中管理数据库和文件系统的事务?

卢声远*_* Lu 13 java transactions jta file java-ee

我将文件的属性(大小,更新时间......)存储在数据库中.所以问题是如何管理数据库和文件的事务.

在Java EE环境中,JTA只能管理数据库事务.如果更新数据库成功但文件操作失败,我应该为此编写文件回滚方法吗?此外,EJB容器中的文件操作违反了EJB规范.

你怎么看?

ewe*_*nli 5

理想情况下,访问外部资源(如文件系统)应通过JCA连接器.虽然有几个帖子围绕讨论这个,我从来没有找到一个现成的JCA连接器用于事务访问文件系统,所以我开始写一个:

关于其他项目:

请注意,只要您有多个交易参与者,该应用即可.服务器确实需要使用分布式事务,事情变得更复杂.您不能低估这种复杂性(例如,数据库具有另一种分布式事务的超时机制).

另一种需要考虑的轻量级方法是使用在文件系统上写入的SFSB.如果实现SessionSynchronization的接口,你beforeCompletionafterCompletion回调.后者指示事务是已提交还是已回滚,并在必要时进行清理.然后,您可以实现事务性行为.