线程本地数据在我在 XAResource class 的 start() 中设置的 commit() 中为 null

Thread local data coming as null in commit() which I set in start() of XAResource class

SomeClass 在此处扩展 XAResource class。 在 SomeClass.start() 中,我使用

设置 threadlocaldata
private static ThreadLocal<Xid> tlData = new ThreadLocal<Xid>();
tldata.set(Xid)

SomeClass.commit()我正在尝试获取数据

Xid xid = tldata.get()

但我得到 null。 我不明白为什么。

我在代码中发现了一个小错误。他们使用相同的 Xid 对象在 commit() 和 start() 中创建一个新的 Wrapper class。很明显,Wrapper 对象在 commit() 和 start() 中是不同的。

XidWrapper XID = new XidWrapper(Xid);
ThreadLocal<XidWrapper> tlocal = new ThreadLocal<XidWrapper>()
commit(){
  tlocal.get(XID);
}

start() {
  tlocal.set(XID);
}

注意:XID 是 XidWrapper 类型,与 Xid(原始)不同。