понедельник, 10 октября 2011 г.

XI/PI: Custom XI/PI adapter - communication channel monitoring

Пользовательский XI/PI адаптер - мониторинг каналов.

Источник - SAP Blogs. Michal_Krawczyk_PIXI


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

1. Alert framework не работает с записями в журнале службы - а, Alert Framework - Это инструмент, который вы хотите использовать для автоматических сообщениях об ошибках

2. Не все разработчики или администраторы имеют доступ к NWA/VA, AL11 или другим инструментам, которые могут отображать файлы трассировки.

Поэтому каждый адаптер может легко отправлять свой статус в монитор каналов используя API подготовленные SAP. Есть два типа статусов, которые можно контролировать с помощью монитора каналов.

а) статус канала - может использовать оба метода - pull метод GetChannelStatus() и push метод - reportChannelStatus(). Тем не менее, оба они взаимно исключают друг друга.

б) статус обработки - используется для распространения информации о статусе обработке только с помощью AAM push метода.

В следующих разделах описывается, как использовать оба способа для мониторинга ошибок.



Channel status monitoring (pull method) часто используется для проверки информации о канале. В метаданных адаптера мы можем только указать какие поля обязательные, какие нет.Если мы хотим реализовать другие проверки (например проверка email, проверка системных путей), то мы можем использовать метод getChannelStatus()

Пример ниже получает значение одного поля из коммуникационного канала (checkValue), сравнивает его с заданной строкой, если они совпадают, то статус канала меняется на ошибочный и сообщение об этом отправляется в монитор каналов.

import com.sap.aii.af.service.administration.api.monitoring.ChannelState;
import com.sap.aii.af.service.administration.api.monitoring.ChannelStatus;
import com.sap.aii.af.service.administration.api.monitoring.ChannelStatusCallback;
import com.sap.aii.af.service.administration.api.monitoring.ChannelStatusFactory;


ChannelStatus cs = null;
ChannelStatusFactory csf = ChannelStatusFactory.getInstance();


String checkValue = channel.getValueAsString("checkValue");
if (checkValue.equals("INCORRECTVALUE")) {
cs =  csf.createChannelStatus(
channel,
ChannelState.ERROR,
"Check Value: " + " is not correct.");
return cs;
}

Статус обработки

Этот механизм даже более популярен, так как с его помощью вы можете осуществлять все виды мониторинга в пользовательском адаптере. Вы можете легко протрассировать всю информацию об ошибках - с начало и до конца. Есть несколько способов, но я опишу только два из них.

a) если вы хотите послать сообщение об ошибке или инфо-сообщение с ID вы можете использовать следующий код:

import com.sap.aii.af.service.administration.api.monitoring.MonitoringManager;
import com.sap.aii.af.service.administration.api.monitoring.MonitoringManagerFactory;
import com.sap.aii.af.service.administration.api.monitoring.ProcessContext;
import com.sap.aii.af.service.administration.api.monitoring.ProcessContextFactory;
import com.sap.aii.af.service.administration.api.monitoring.ChannelDirection;
import com.sap.aii.af.service.administration.api.monitoring.ProcessState;

MonitoringManager moni = MonitoringManagerFactory.getInstance().getMonitoringManager();
ProcessContextFactory.ParamSet paras = ProcessContextFactory.getParamSet().message(messg).channel(channel);
ProcessContext proc = ProcessContextFactory.getInstance().createProcessContext(paras);

moni.reportProcessStatus(
this.adapterNamespace,
this.adapterType,
ChannelDirection.SENDER,
ProcessState.OK,
"Message OK,
procc);

б) Однако, если вы предполагаете, что ошибка в процессе могла помешать созданию сообщения, то вы можете вызвать монитор без указания сообщения:

MonitoringManager moni = MonitoringManagerFactory.getInstance().getMonitoringManager();
ProcessContextFactory.ParamSet paras = ProcessContextFactory.getParamSet().channel(channel);
ProcessContext proc = ProcessContextFactory.getInstance().createProcessContext(paras);
moni.reportProcessStatus(
this.adapterNamespace,
this.adapterType,
ChannelDirection.SENDER,
ProcessState.FATAL,
"Process failed",
proc);


Комментариев нет:

Отправить комментарий