【现象】
在BaseModule、WebPlatform、AppFramework中,根据以下条件进行Client.set、Client.get时的运行会有所不同。
・根据AP服务器的种类或设置进行HttpSession的持久化或恢复时。
・分布式环境下的负载均衡器(Load Balancer)设置中未设置StickySession时。
根据这些条件,Client API的运行会有所不同。
以下是示例。
----
例1:
Client.set之后,更改了传递给Client.set的值的属性等时
var key = 'key'
var value = {
foo: 'FOO'
};
Client.set(key, value);
// 调用Client.set之后,更改value值的属性
value.foo = 'foo'
Client.get(key); // (1)
----
此时,在(1)时获取的值根据AP服务器的种类、设置可能会有所不同。
不保证在(1)时获取的值与Client.set时传递的值的实例相同。因此,通过(1)获取的Object的foo属性值有可能为'FOO'或'foo'。
调用了Client.set时,推荐将传递的值作为之后不变的Object,并且编写不进行属性更改等的处理。
----
例2:
Client.get之后,更改了Client.get获取的值的属性等时
var key = 'key'
var value = {
foo: 'FOO'
};
Client.set(key, value);
var value2 = Client.get(key); // (1)
value2.foo = 'foo'
Client.get(key); // (2)
----
与例1一样,不保证在(1)时获取的值与Client.set时传递的值的实例相同。因此,通过(2)获取的Object的foo属性的值有可能为'FOO'或'foo'。调用了Client.set时,推荐将获取的值作为之后不变的Object,并且编写不进行属性更改等的处理。
与上述示例相比,在intra-mart Accel Platform中,Client.get、Client.set的运行不同。
在intra-mart Accel Platform中,通过Client.get获取的值与Client.set时设置的值的实例不同。因此,Client.get后即使更改已获取的值的属性,也对保存在Client API中的原来的值没有影响。另外,Client.set也一样,Client.set后即使更改已传递的值的属性,也对保存在Client API中的值没有影响。
【适用版本】
BaseModule Ver.4.0.x ~ Ver.5.1.x
WebPlatform Ver.6.0.x ~ Ver.7.2.x
AppFramework Ver.6.0.x ~ Ver.7.2.x
intra-mart Accel Platform 2012 Autumn(Alba) ~
※从""2013 Autumn""开始,提供以下API。
提供在Web Platform ver4.0至ver7.2的设计(式样)中,可以运行的不同于ClientObject的Client72Object。
API列表(http://www.intra-mart.jp/apilist/iap/apilist-ssjs-compatible/doc/compatible/Client72/index.html)
相关需求:需求 [3867] 支持ClientObject的运行兼容。
https://issue.intra-mart.jp/issues/3867
-- 适用対象 ----------------------------------------------------------------
iAP/Accel Platform/所有更新版本
--------------------------------------------------------------------------------
FAQID:11
在BaseModule、WebPlatform、AppFramework的(Ver.7.2.x)及之前版本和intra-mart Accel Platform中,脚本开发模式的Client API的运行会有所不同。