Przetwarzanie zdarzeń przychodzących jest operacją asynchroniczną. Adapter
odpytuje serwer FTP, pobiera zdarzenia z serwera FTP, przekształca informacje w obiekty biznesowe
i wysyła obiekty biznesowe do skonfigurowanego punktu końcowego.
Adapter odpytuje pliki znajdujące się w katalogu zdarzeń serwera FTP w regularnych
odstępach czasu, które są zależne od ustawienia właściwości FTPPollFrequency. Gdy plik znajdzie się w katalogu zdarzeń,
adapter odczytuje cały plik i pobiera go do lokalnego katalogu zdarzeń na serwerze adaptera. Po pobraniu
pliku adapter archiwizuje ten plik na serwerze FTP w katalogu archiwum określonym
we właściwości FTPArchiveDirectory lub usuwa go (jest to zależne od konfiguracji użytkownika). Parametrami, które można skonfigurować, są: katalog
zdarzeń, katalog archiwum, okres odpytywania i liczba odpytywań (liczba plików do odpytania w pojedynczym cyklu odpytywania).
Po pomyślnym
wysłaniu obiektów biznesowych do punktu końcowego, zdarzenia są archiwizowane w katalogu archiwum
w lokalnym systemie plików lub są usuwane (jest to zależne od konfiguracji użytkownika). Adapter musi
zarchiwizować lub usunąć zdarzenia, ponieważ w przeciwnym przypadku będą one odpytywane ponownie.
Adapter
wysyła obiekt biznesowy do punktu końcowego za pośrednictwem selektora funkcji. Selektor funkcji wybiera operację, która
ma zostać wywołana względem komponentu, i wiązanie danych.
Operacja przetwarzania zdarzeń
przychodzących składa się z następujących kroków:
- Serwer FTP generuje zdarzenia w postaci plików.
- Adapter FTP odpytuje pliki znajdujące się w katalogu zdarzeń.
- Pliki są w całości pobierane na serwer adaptera.
- Pliki są dzielone na podstawie wartości właściwości SplittingFunctionClassName i SplitCriteria.
- Jeśli konieczne jest wykonanie operacji dzielenia na podstawie separatora, udostępniana jest klasa wykonująca
tę operację i kryteria podziału.
- Jeśli konieczne jest wykonanie operacji dzielenia na podstawie wielkości pliku, udostępniana jest nazwa klasy
wykonującej tę operację.
Użytkownik może zaimplementować niestandardową klasę zawierającą logikę dzielenia plików. Adapter
udostępnia interfejs Java
dla takiej klasy. Szczegóły interfejsu zostały przedstawione poniżej.
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
Ta metoda
zwraca łączną liczbę obiektów biznesowych znajdujących się w pliku zdarzeń określonym przez zmienną filename.
- public void setSplitCriteria(String splitCriteria)
Ta metoda
pobiera właściwość splitCriteria, która jest oparta na liczbie obiektów biznesowych
znajdujących się w pliku zdarzeń. Każdy obiekt biznesowy jest zwracany podczas wywołania
metody next().
- public void setLogUtils(LogUtils logUtils)
Ta metoda
jest używana do ustawiania obiektu LogUtils, którego klasy użytkownik może używać do zapisywania komunikatów śledzenia i
rejestrowania w plikach.
- public void setEncoding(String encoding)
Ta metoda
jest używana do ustawiania kodowania treści pliku zdarzeń. To kodowanie jest używane
podczas odczytywania treści pliku. To kodowanie jest także używane w przypadku właściwości SplitCriteria.
- public void setBODetails(String filename, int currentPosition,
int totalBOs, boolean includeEndBODelimiter) throws SplittingException
Ta metoda
jest używana do ustawiania numeru bieżącego obiektu biznesowego. Dzięki temu przy każdym
wywołaniu metody next() jest zwracany numer obiektu biznesowego ustawiony
we właściwości currentPosition. Jest także pobierany parametr includeEndBODelimiter,
który (jeśli jest ustawiony na wartość true) powoduje dołączenie właściwości SplitCriteria
na końcu treści obiektu biznesowego. Ta metoda musi być wywoływana przed każdym wywołaniem metody next() po to, aby metoda
next() zwracała treść obiektu biznesowego
ustawionego w tej metodzie.
- Iterator ma trzy metody (hasNext(), next i remove()),
które również muszą zostać zaimplementowane. Metoda next() zwraca treść
obiektu biznesowego, którego pozycja jest ustawiona za pomocą metody setBODetails().
Jeśli pozycja obiektu biznesowego nie jest ustawiona, wywołanie metody zakończy się niepowodzeniem. Metoda
hasNext() wskazuje, czy istnieje pozycja obiektu biznesowego ustawiona za pomocą metody
setBODetails(). Przed wywołaniem metody hasNext()
należy wywołać metodę setBODetails(). Metoda remove() jest wywoływana w przypadku każdej pozycji obiektu
biznesowego, która jest usuwana z tabeli EventPersistence. Za pomocą tej metody nie należy usuwać pliku zdarzeń. Służy ona tylko do czyszczenia
zasobów, które są używane.
- public boolean isSplitBySize()
Ta metoda wskazuje,
czy plik zdarzeń jest analizowany na podstawie wielkości, czy na podstawie separatora.
- Adapter wysyła obiekt biznesowy do punktu końcowego za pośrednictwem selektora funkcji,
w którym jest wywoływane skonfigurowane wiązanie danych i rekord tekstowy jest przekształcany w obiekt biznesowy. Obiekt biznesowy
jest wysyłany do punktu końcowego.