worklight适配器,会话变量:多个请求竞争?

时间:2014-04-30 06:09:10

标签: ibm-mobilefirst worklight-adapters

问题是:适配器是线程安全的吗?

我们知道适配器可以有会话变量,因此客户端的一次调用创建的状态可以在后续调用中访问(如果我们使用集群,则假定会话亲缘性)。这里有question/answer示例确认。

鉴于客户端代码正在对适配器进行异步调用,客户端显然可以向适配器发出多个同时请求,因此两个此类请求之间存在争用相同会话变量的竞争条件的可能性

我看到两种可能性(暂时忽略集群成员之间的一致性问题):

Worklight Server可能允许并行请求在不同的线程中运行,在这种情况下,如果会话状态变量可能存在材料不一致同步,则需要使用Java构造或数据库来实现任何线程安全逻辑我们必须实施。

Worklight Server可能会对会话的请求进行排队,因此适配器是线程安全的(在单个进程中),因此我们的代码更简单。

Worklight承诺什么?

1 个答案:

答案 0 :(得分:3)

这是Worklight架构师之一所说的:

  

Worklight在全局的单独线程中运行请求   变量可作为共享Scriptable访问所有这些线程   宾语。从技术上讲,两个并发请求来自同一个   会话更新共享对象的多个字段可能会留下   对象处于不一致状态。

     

然而从应用逻辑的角度来看,这是一种罕见的   应用程序发送并发请求更新的情况   具有不同值的相同数据。通常它是一种不受欢迎的流动   客户端的应用程序阻止(通过忙碌   指标等...)。如有必要,开发人员可以使用简单同步   适配器代码中的构造,如维护“inProgress”   布尔全局变量,如果inProgress ==则拒绝更新请求   真。

     

如果存在需要同步的真实用例,那就是   有趣的是学习它并可能提出一个不同的解决方案。