有没有觉得线程安全上下文对第三方库很不友好!😂

第三方库使用的线程的话怎么处理?报错No security context bound to the current thread,本地代码还好说,第三方库就尴尬了。

举个例子详细说一下? :no_mouth:

如果我将第三方库里的某些依赖注册为SpringBean,通过cuba UI控制器执行,它就要绑定cuba线程上下文,但我只是使用那一层在上下文中,在库内的其他操作就不一定在同一上下文了(新开线程)。

目前第三方库我现在只能用静态方法执行,这样就不会要求要在同一个上下文。

默认的这种强制检测安全的行为确定让人困扰,有时候写纯服务的时候也要去处理这个问题。如果能允许手动设置不检测,让开发人员自己做主会更好点。个人认为不应该对所有托管到spring中的bean做这种AOP操作。

CUBA 的安全上下文检测说明见这里:
https://doc.cuba-platform.cn/manual-7.2-chs/securityContext.html

并不是对所有 Bean 方法的调用都检测安全上下文,也无法去干预自己开启的线程中的代码执行。能不能描述一下具体案例?我们分析一下问题在哪。

使用Spring托管服务类

image

image

执行方法

image

第三方库内报错

image

把完整的异常日志上传一下,主要是看一下异常堆栈

还原之前的代码有点麻烦 :sweat_smile:,场景是netty下发命令,返回消息后用线程通知订阅。

netty写完数据后环境应该就结束了,数据返回时不在同一个环境内。

错误信息是一样的
image

看地不是很明白,结合你之前的帖子 event异步处理 ,我猜是要在界面控制器上启动一个后台线程去做某些操作。在后台线程中调用了 CUBA 的 Service,现在报的异常是正常情况。 确保在后台线程中调用 CUBA Service 前绑定一下 SecurityContext 应该就可以了。
另外在界面控制器执行异步任务可以参考 https://doc.cuba-platform.cn/manual-7.2-chs/background_tasks.html