赏金4天后到期。回答此问题可获得+100声望奖励。sát想引起更多的注意**这个问题:
这是虫子吗?如果是,有解决办法吗?
我注意到,当我使用gae提供的请求线程工厂创建新线程时,新线程与父线程具有相同的环境(当前环境的identityhashcode在两个线程中是相同的。)
一方面,这很好,因为新创建的线程与父线程的上下文相同。问题是环境不是一成不变的。它包含在名称空间处理中使用的“.currentnamespace”属性。如果其中一个线程更改了当前名称空间,那么它将应用于所有线程,这显然不是我想要的。
我解决这个问题的想法是,我创建了一个自己的环境实现,当创建一个新线程时,我将当前环境的内容复制到这个新环境中,并将这个环境设置为新线程上的当前环境。因此,新线程从相同的上下文开始,但稍后可以独立更改。
这个解决方案在最初的测试中起了作用,但后来我遇到了一个问题
Caused by: java.lang.ClassCastException: MyEnvironmentImplementation cannot be cast to com.google.apphosting.runtime.ApiProxyImpl$EnvironmentImpl
at com.google.apphosting.runtime.ApiProxyImpl.log(ApiProxyImpl.java:67)
我没有进入密码 com.google.apphosting.runtime.ApiProxyImpl
但是很明显,这个方法试图将它接收到的接口转换成它自己的实现类,而不检查类型。
我觉得这很奇怪,因为 void setEnvironmentFactory(ApiProxy.EnvironmentFactory factory)
在apiproxy中,因此预期有人可能会使用 Environment
接口,而不是默认接口。
在不同的请求线程中使用不同的名称空间还有其他方法吗?
这被认为是一个bug还是使用我自己的环境实现根本上是错误的?
我在javasdk的1.9.84中使用appengine标准。
暂无答案!
目前还没有任何答案,快来回答吧!