Совместно используемые объекты ABAP Shared Object

В ABAP существует инструмент, позволяющий создавать объекты в Общей памяти.

Общая память – это область памяти на сервере приложений, к которой обращаются все программы написанные на ABAP данного сервера. Существует возможность создавать экземпляры объектов в общей памяти и обращаться к ним из разных программ.

Помните, что объекты общей памяти существуют до тех пор, пока существует экземпляр SAP. Любые действия по перезапуску сервера, обновлению системы и т.д. могут удалить экземпляр. Кроме того, любое изменение корневого класса требует удаления и обновления существующих объектов памяти.

Транзакция SHMA – работа с областями Общей памяти.

Области и Экземпляры Области:

Область – это шаблон для экземпляров области в общей памяти. Несколько экземпляров области могут быть созданы из одного экземпляра области, отличаясь друг от друга по имени. Кроме того, может быть несколько версий экземпляра области (версии экземпляра области), которые отличаются друг от друга идентификатором версии. Все версии экземпляров области с тем же именем экземпляра области составляют экземпляр области. В простейшем случае (без управления версиями) экземпляр области состоит из одной версии экземпляра области.

Применение:
1) Использование в качестве общего буфера.

Общий буфер – это хранилище данных, которое редко изменяется (один раз в день, максимум максимум один раз в час), обычно только одним пользователем. Количество данных может быть очень большим. Как правило, многие пользователи имеют доступ на чтение к совместно используемому буферу одновременно. Типичное использование общего буфера для хранения каталога.

2) Использование в качестве эксклюзивного буфера.
Эксклюзивный буфер – это хранилище данных, доступ к которому можно прочитать или записать только одному пользователю или – реже – одному пользователю с правами записи, а другому – с правом чтения. Данные, хранящиеся в эксклюзивном буфере, должны быть доступны в течение более длительного периода времени, то есть дольше, чем время жизни программы.

Другое использование не подразумевается. Текущая логика блокировки не позволяет устанавливать конкретные блокировки для следующих требований:

  1. Много параллельного доступа для чтения и записи
  2. Частые записи доступа
  3. Разделение на изменяемые и неизменяемые области

Хотя логика блокировки делает первые два способа применения технически возможными, они не практичны, поскольку большинство обращений к объекту будет отклонено.

Пример:

Проще говоря, мы создаем класс, который имеет методы для работы с Shared Memory и класс хранящий данные. Как обычно существует много подводных камней при использовании, которые лучше искать в стандартной документации. Либо на форумах.

Заходим в SE24 и создаем конечный класс:

Указываем, что он предназначен для работы с
Shared Memory

Создаем атрибут gv_pernr для хранения данных и методы SET_* GET_ для записи\получения.

Сохраняем класс и активируем.

Далее необходимо зайти в транзакцию SHMA и создать область

Прописываем в корневой класс, ранее созданный нами класс. Также можно указать множество настроек, про которые лучше прочитать в справке, информация там будет более полной чем мой краткий пересказ.

Сохраняем область, при этом она будет произведена генерация области, а также будет создан класс для работы с ней.


Класс имеет методы для работы с областью. Теперь можем применять созданные объекты.

 

Из транзакции SHMA можно смотреть на области:

 

Более подробно

Документация

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *