使用 wso2bps 3.6.0
我在我们的流程步骤中有这样的代码:
import org.wso2.carbon.context.CarbonContext;
CarbonContext cctx = CarbonContext.getThreadLocalCarbonContext();
String domain = cctx.getTenantDomain();
如果标记Exclusive
为此代码的步骤返回正确的值。
如果步骤标记为,Asynchronous
那么我得到了domain=null
。
最后,此行为无法访问其他碳属性和注册表。
这个 ThreadLocal 数据持有者的问题似乎没有为我的异步线程返回已初始化的持有者org.wso2.carbon.context.internal.CarbonContextDataHolder
:
private static ThreadLocal<CarbonContextDataHolder> currentContextHolder = new ThreadLocal(){
protected CarbonContextDataHolder initialValue(){
return new CarbonContextDataHolder(null);
}
};
问题
异步时如何在我的流程步骤中获取碳域和注册表?
也许有一种方法可以初始化我的线程以允许使用碳注册表?
PS:作为解决方法,我在流程中长时间运行 Anync 步骤之前使用 Exclusive 步骤来评估所需的碳相关属性。