我有一个复杂的过程,设计为事务性的,并且被编码为使用Spring注释进行事务处理。当我针对具有XA感知驱动程序的数据库运行它时,它运行良好(除了设置每个RDBMS以支持XA的头痛)。
然而,我正试图将它与HAWQ挂钩。 HAWQ是XA意识到的,它本质上说,“哇哇哇哇,我还没做过XA。”由于我可能遇到具有类似限制的其他后备存储,因此确切的异常并不重要,只有我需要在某些非常粗略的限制内支持非XA数据存储的概念,通常是XA上下文。
流程的结构使XA成为一种宝贵的奢侈品,但XA范围内未捕获的事务性故障并不重要。
对于与HAWQ(或触及其他未来非XA系统的类)对话的类,有没有办法注释方法说“我知道调用者是事务性的,但我不是。”?
我已经审核了How to exclude a method to be @Transactional?,但它正在解决另一个问题。
class CallingClass
{
@Transactional
callingMethod ()
{
doSomeSetup ();
methodFromWorkerClass();
}
}
class NormalWorkerClass() implements Worker
{
methodFromWorkerClass ()
{
doSomeStuff();
}
}
class NonXAClass() implements Worker
{
@INeedToBeNonXA
methodFromWorkerClass ()
{
doSomeStuff();
}
}