1. SMO 介绍 Shared Object,并不是一个新的技术,相反在SAP 中已经应用了非常多的地方(可以通过SHMM 中去查看,会得到很多你意想不到的东西);它作为SAP 共享与传递数据的一个point,同ABAP/SAP Memory 一样,但是目前它仅用于instance of class,并不能存任何的data. Shared object(或者说instance 更合适)存在于shared memory 中,而该memory 的大小是由abap/shared_objects_size_MB profile paramete 所决定的。我们可以很容易地使用SHMM 来管理并控制它,例如 display/change/delete 等。 其中shared object 与shared memory 又是通过shared area 联系起来的,它可以通过SHMA来管理。Area 在SHM/SMO 中是非常重要的概念,它是建立在其上的vesion instance 的template,如果设置允许,它可以有多个instance 并可以具有不同的状态 state,它在design时需要设置一个root class 也就是shared object. 一个class 要被设置成为shared object in shared memory,那么其必须在其 attribute 上勾选上 shared memory enabled. 当在SHMA 中定义了一个area,那么一个global and final class 将作为cl_shm_area(它是cl_abap_memory_area 的子类)的子类被自动创建.外部的abap 程序通过Area handle 来该问 area instance version 从而也就访问了shared object 的数据. 同时每一次 access 到area instance v ersion,都会产生一个对应的lock; 对于锁,SMO 中具有以下特点: Read Lock(读锁) 读锁在一个Internal session 中最多只能有一个read lock,而对于multi session可以有多个read lock;它的解锁使用detacch; Read Lock 一般是设在active area instance version. Write Lock(写锁) 在一个application server 上最大只能有一个write lock for an area instance,同时其他锁不可再加; 同时每一次 access 到area instance v ersion,都会有一个相关的state of area instance v ersion; 对于state 有以下的几种状态: (1) Build 一个 area instance version 有 write lock 时,它自动就是 build; (2) Active 当遇到 detach_commit 后,这个 area instance version 就是 active 了.注意:上面也说到了,所有的 read lock 都是设置在该上面的. (3) Obsolete 当另一个 new version 完成并 active 了(注意:此时要么无锁,要么只...