Java 使用JTA不会回滚Jackrabbit中数据存储中的数据

Java 使用JTA不会回滚Jackrabbit中数据存储中的数据,java,spring,jakarta-ee,jackrabbit,jcr,Java,Spring,Jakarta Ee,Jackrabbit,Jcr,抛出异常时,不会回滚添加到数据存储的数据。由于它使用文件系统,这种行为正确吗?或者它也应该回滚数据存储中的数据。我正在使用Spring3.2。我已经将Jackrabbit部署到JBoss7.1.1。我正在使用JtaTransactionManager,因为我也在使用数据库。 编辑: 在阅读了JTA和Spring之后,我只在Spring配置文件中添加了这一行。 似乎它记录了必要的东西。在我设置的“测试”中,我将一个文件存储在Jackrabbit中,然后抛出一个runtimeexception(之后

抛出异常时,不会回滚添加到数据存储的数据。由于它使用文件系统,这种行为正确吗?或者它也应该回滚数据存储中的数据。我正在使用Spring3.2。我已经将Jackrabbit部署到JBoss7.1.1。我正在使用JtaTransactionManager,因为我也在使用数据库。 编辑:

在阅读了JTA和Spring之后,我只在Spring配置文件中添加了这一行。 似乎它记录了必要的东西。在我设置的“测试”中,我将一个文件存储在Jackrabbit中,然后抛出一个runtimeexception(之后,我通常会持久化到数据库,但由于异常中止,它永远不会运行那么远,不过这是正常情况)。所有这些都发生在服务层中的一个方法中,并用
@Transactional
注释。但是在抛出异常后,我仍然在数据存储中看到该文件,我尝试使用一个空数据存储,我希望在抛出异常后该文件会消失,但它仍然存在。这是正确的吗?是否只有元数据(我不知道存储在哪里)被回滚

<tx:jta-transaction-manager/>

据我所知(如果我错了,请纠正我),将Jackrabbit与JTA一起使用的唯一方法是通过JCA连接使用。你看过吗?

据我所知(如果我错了,请纠正我),将Jackrabbit与JTA一起使用的唯一方法是使用JCA连接。您看过吗?

当文件添加到数据存储时 二进制文件很早就存储在数据存储中,通常是在将二进制属性设置为节点之后(即使节点未保存,并且更改仍在所谓的“临时空间”中)。这意味着即使在提交事务之前,文件也会添加到数据存储中

在运行垃圾收集之前,数据存储中的文件将一直保留在那里。这意味着,即使事务回滚,文件也将保留

要清除未引用的文件,您需要运行

如何运行垃圾收集 如中所述,“垃圾收集用于清除未使用的对象”。这是一项需要添加到应用程序中的管理任务。一般来说,建议在晚上或周末系统不忙时运行垃圾收集

垃圾收集基本上会遍历存储库并标记所有仍在使用的文件,最后会删除那些未标记的文件(标记和清除)。

当文件添加到数据存储时 二进制文件很早就存储在数据存储中,通常是在将二进制属性设置为节点之后(即使节点未保存,并且更改仍在所谓的“临时空间”中)。这意味着即使在提交事务之前,文件也会添加到数据存储中

在运行垃圾收集之前,数据存储中的文件将一直保留在那里。这意味着,即使事务回滚,文件也将保留

要清除未引用的文件,您需要运行

如何运行垃圾收集 如中所述,“垃圾收集用于清除未使用的对象”。这是一项需要添加到应用程序中的管理任务。一般来说,建议在晚上或周末系统不忙时运行垃圾收集


垃圾收集基本上会遍历存储库并标记所有仍在使用的文件,最后会删除那些未标记的文件(标记和清除)。

您能提供一些详细信息吗?例如,以..开头的Spring配置文件,您能提供一些详细信息吗?例如,以..开头的Spring配置文件,我还没有看到它。我来看看。但是,我下载了Jackrabbit JCA版本,并将其部署到JBoss 7.1.1服务器上。所以我想不需要Jencks,因为IJBoss已经是JCA容器了。。?然而,我对JCA和JTA没有太多的了解,所以我可能错了,我还没有看到它。我来看看。但是,我下载了Jackrabbit JCA版本,并将其部署到JBoss 7.1.1服务器上。所以我想不需要Jencks,因为IJBoss已经是JCA容器了。。?然而,我对JCA和JTA没有太多的了解,所以我可能是错的。