在运行ColdBox 4.2时,我们在重新初始化后看到此错误,但仅在一个特定的处理程序cfc上看到了。如果我们重新初始化几次,它最终会消失,这听起来像是在竞争。

我们想到了直接做extends="coldbox.system.EventHandler"而不是让框架混入处理程序方法,但是然后我们开始看到另一个错误:

生成错误:myApp.handlers.admin.report-> CONTROLLER
初始化函数的参数是必需的,但未传递给
构造函数参数:{}

同样,如果我们重新初始化几次,直到在请求中途到达请求之前,事情已经完成烘烤,那么该错误就会消失。

我们可能无法在非产品系统上重现此错误,这可能是由于负载大大降低了。

是否有人遇到类似的情况并想出一种方法来优雅地重新加载框架?

最佳答案

我实际上设法合理地可靠地重现了reinit期间的竞争条件错误,并将其发布为问题COLDBOX-307,几乎响应是在生产中从未使用fwreinit,这是正确的,我们切换到在application.cfc中使用自己的方法调用applicationStop并修复了使用fwreinit时遇到的问题。

使用applicationStop时要注意的一件事不是线程安全的(也许不是正确的术语),这意味着当前正在运行的所有请求的应用程序范围在被调用时都会再见,因此通过这种方式重新初始化可能会出现一些奇怪的错误。

10-04 15:49