Обработка входящих событий выполняется асинхронно.
Адаптер опрашивает сервер FTP, извлекает события с сервера FTP, выполняет
преобразование информации в бизнес-объекты и отправляет бизнес-объекты
настроенной конечной точке.
Адаптер опрашивает файлы из каталога событий сервера FTP с
частотой, указанной в свойстве FTPPollFrequency. При поступлении файла в
каталог событий адаптер считывает его содержимое файла и загружает файл в
локальный каталог событий сервера адаптера.
После загрузки файла адаптер в зависимости от конфигурации
добавляет файл в архив на сервере FTP, либо удаляет его. В число настраиваемых
параметров входят каталог событий, каталог архива, интервал опроса и число
файлов, опрашиваемых в одном цикле опроса.
После отправки бизнес-объектов в конечную точку
события в зависимости от конфигурации добавляются в архивный каталог локальной файловой системы или удаляются. Во
избежание повторного опроса событий адаптер должен добавить их в архив или
удалить.
Адаптер отправляет бизнес-объект в конечную точку с помощью
селектора функций, который отвечает за выбор вызываемой операции и связывания
данных.
Процесс обработки входящих событий состоит из следующих
этапов:
- Сервер FTP создает события в виде файлов.
- Адаптер FTP опрашивает файлы из каталога событий.
- Файлы событий загружаются на сервер адаптера.
- Файлы разбиваются в соответствии со значениями свойств SplittingFunctionClassName и
SplitCriteria.
- Если разбиение необходимо произвести на основе ограничителя, предоставляются класс, который выполняет данную функцию, и критерии разбиения.
- Если разбиение необходимо произвести на основе размера файла, предоставляется имя класса, который выполняет данную функцию.
Вы
можете реализовать собственный класс, содержащий логику разбиения. Адаптер
предоставляет интерфейс
Java
для класса. Ниже приведено описание этого интерфейса.
public interface SplittingFunctionalityInterface extends Iterator{
public int getTotalBOs(String filename) throws SplittingException;
public void setBODetails(String filename, int currentPosition, int totalBOs,
boolean includeEndBODelimiter) throws SplittingException;
public void setSplitCriteria(String splitCriteria);
public void setEncoding(String encoding);
public void setLogUtils(LogUtils logUtils);
public boolean isSplitBySize()
}
- public int getTotalBOs(String filename) throws SplittingException
Этот
метод возвращает общее число бизнес-объектов, входящих в состав файла событий
с именем filename.
- public void setSplitCriteria(String splitCriteria)
Этот
метод задает splitCriteria на основе числа
бизнес-объектов в файле событий. В ходе вызовов next()
последовательно возвращаются все бизнес-объекты.
- public void setLogUtils(LogUtils logUtils)
С помощью
этого метода задается объект LogUtils, который представляет
собой класс, позволяющий записывать данные трассировки и сообщения протоколов в
файлы.
- public void setEncoding(String encoding)
Этот метод
позволяет задать кодировку, применяемую при чтении содержимого файла событий. Кроме
того, кодировка применяется для SplitCriteria.
- public void setBODetails(String filename, int currentPosition,
int totalBOs, boolean includeEndBODelimiter) throws SplittingException
С
помощью этого метода задается номер текущего бизнес-объекта; каждый раз при
вызове next() возвращается номер бизнес-объекта, указанный в
параметре currentPosition. Кроме того, он принимает параметр
includeEndBODelimiter; если этот параметр задан, то в конец
содержимого бизнес-объекта добавляется SplitCriteria. Данный
метод следует вызывать каждый раз перед вызовом метода next(),
чтобы метод next() возвращал содержимое
указанного в нем бизнес-объекта.
- Итератор состоит из следующих требующих реализации методов:
hasNext(),
next и remove(). Метод
next() возвращает содержимое бизнес-объекта, положение
которого указано в методе setBODetails().
Если положение бизнес-объекта не задано, он не выполняется. Метод
hasNext() проверяет существование положения
бизнес-объекта, указанного в методе setBODetails(). Перед
вызовом метода hasNext() следует вызвать
setBODetails(). Метод remove()
вызывается для всех записей бизнес-объектов, удаляемых из таблицы
EventPersistence.
В этом методе не следует удалять файл событий; выполняется только очистка
ресурсов.
- public boolean isSplitBySize()
Этот метод указывает,
следует ли выполнять анализ файла событий в соответствии с размером или
ограничителем.
- Адаптер отправляет бизнес-объект в конечную точку с помощью селектора
функций, который отвечает за вызов настроенного связывания данных и преобразование
текста записи в бизнес-объект. Бизнес-объект отправляется в конечную точку.