共享内存区域-SHMM和应用程序服务器上的数据

2020-08-15 08:20发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


大家好,

我创建了共享内存区域和ROOT类,并将数据存储在其中一台应用程序服务器上。

1)在我们的环境中,我注意到有两个应用程序服务器。

2)在SHMM事务中,我可以看到创建的实例。

3)我能够通过ABAP程序访问这些实例(通过attach_for_read()创建句柄)

到目前为止,一切都很好。

问题:

从UI调用了同一程序,但是我无法获取存储在应用程序服务器上共享内存中的实例(数据)。

我了解共享内存特定于应用程序服务器。

我认为abap后端正在不存在共享内存数据的另一台应用服务器上执行。

1)是否有任何配置,因此可以在所有应用服务器之间共享共享内存?

我该如何克服这个问题?

谢谢。

此致

Ravi。

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


大家好,

我创建了共享内存区域和ROOT类,并将数据存储在其中一台应用程序服务器上。

1)在我们的环境中,我注意到有两个应用程序服务器。

2)在SHMM事务中,我可以看到创建的实例。

3)我能够通过ABAP程序访问这些实例(通过attach_for_read()创建句柄)

到目前为止,一切都很好。

问题:

从UI调用了同一程序,但是我无法获取存储在应用程序服务器上共享内存中的实例(数据)。

我了解共享内存特定于应用程序服务器。

我认为abap后端正在不存在共享内存数据的另一台应用服务器上执行。

1)是否有任何配置,因此可以在所有应用服务器之间共享共享内存?

我该如何克服这个问题?

谢谢。

此致

Ravi。

付费偷看设置
发送
3条回答
半个程序猿
1楼-- · 2020-08-15 09:16

您的主要问题是,如果您的程序的两个实例同时运行,但是都在不同的应用程序服务器上运行,则它们将无法访问"共享内存"中的其他数据,因为共享内存为

请仅查看有关此问题的讨论:

基本上,您有三种选择来重写程序:

  1. 使用ABAP频道
    ABAP频道是基于事件的通信 在应用程序服务器之间(以及Internet)使用消息。 AMC部分是您需要实现的部分:
    ABAP消息传递渠道(AMC )是ABAP程序之间使用消息进行通信的一种方法。 使用发布和订阅机制,可以在任何AS ABAP程序之间交换消息,包括不同用户会话和应用程序服务之间的通信
  2. 使用共享对象
    共享对象是共享内存区域中的对象。共享对象特定于Application Server。 a)创建一个共享 在一个特定的应用服务器A上的对象
    b)为应用服务器A创建一个目标
    c)创建一个"暴露"共享对象的FM
    如果程序在应用服务器A上运行,则可以访问 共享对象
    如果您的程序在其他Application Server上运行,则可以通过RFC将其访问Application Server A。
  3. 重写编码
    您将需要进行一些设置工作 1.和2.,还有脑力去弄清楚如何处理对共享对象的并发读写访问(与DB相同)
    Rewriti 如果可行,您的编码可能是最好的选择。
何必丶何苦呢
2楼-- · 2020-08-15 09:08

在哪种情况下,您希望出于什么目的使用共享内存并克服拥有两个实例的问题 ?

三十六小时_GS
3楼-- · 2020-08-15 09:19

显然,您无法在AS之间共享内存:

  • 区域绑定
为此属性指定的上下文定义实例的区域实例版本的可见性和生存期。 可能的上下文是:
  • 应用程序服务器

    在关闭应用程序服务器之前,存在区域实例版本。
  • 用户会话

    区域实例存在,直到当前用户会话的最后一个ABAP会话结束。 对于区域绑定,每个登录到AS ABAP的用户都将多带带计数。 当用户使用外部接口(例如RFC或ICF)登录时,这也特别适用。
  • 顶级事务

    顶级事务是调用序列中的第一个程序。 这些区域实例的存在只要加载分配给调用序列的ABAP内存,即加载顶层事务的内部会话的时间就存在。

一周热门 更多>