A bejövő eseményfeldolgozás egy aszinkron művelet. Az adapter
lekérdezi az FTP kiszolgálót, lekéri onnan az eseményeket, üzleti
objektumokká alakítja az információkat, és elküldi az üzleti objektumokat
a konfigurált végponthoz.
Az adapter az FTPPollFrequency tulajdonságban megadott
szabályos időközönként lekérdezi a fájlokat az FTP kiszolgáló eseménykönyvtárából. Amikor egy fájl érkezik az eseménykönyvtárba, az adapter az
egész fájlt beolvassa és letölti a fájlt az adapterkiszolgálón lévő helyi
eseménykönyvtárba. A fájl letöltése után az adapter a konfiguráció
alapján vagy archiválja a fájlt az FTPArchiveDirectory tulajdonságban
megadott archívum könyvtárban az FTP kiszolgálón, vagy törli azt. Az
eseménykönyvtár, archív könyvtár, a lekérdezési időköz és a lekérdezési
mennyiség (a lekérdezendő fájlok száma egy lekérdezési ciklusban) mind
beállítható paraméterek.
Miután az üzleti objektumok sikeresen el
lettek küldve a végpontnak, a beállítástól függően az események
archiválásra kerülnek a beállított archív könyvtárban a helyi
fájlrendszeren, vagy törlésre kerülnek. Az adapternek törölni vagy
archiválni kell az eseményeket, különben azok újra le lesznek kérdezve.
Az adapter az üzleti objektumot a funkcióválasztó segítségével küldi a
végponthoz; a funkcióválasztó kiválasztja, hogy a komponensen milyen
műveletet és adatkötést kell meghívni.
A bejövő eseményfeldolgozás
a következő lépésekből áll:
- Az FTP kiszolgáló fájlok formájában eseményeket állít elő.
- Az FTP adapter lekéri a fájlokat az eseménykönyvtárból.
- A fájlok teljesen letöltésre kerülnek az adapterkiszolgálóra.
- A fájlok a SplittingFunctionClassName és SplitCriteria tulajdonságok
alapján kerülnek felosztásra.
- Ha a felosztásnak egy határoló alapján kell megtörténnie, akkor a
rendszer biztosítja azt az osztályt, ami végrehajtja ezt a funkcionalitást
és a felosztásai feltételeket.
- Ha a felosztásnak fájlméret alapján kell megtörténnie, akkor a
rendszer biztosítja azt az osztálynevet, ami végrehajtja ezt a
funkcionalitást.
Megvalósíthat egy felosztási logikát
tartalmazó egyéni osztályt. Az adapter egy
Java
felületet biztosít az osztályhoz. A felület részletei a következők:
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
Ez a metódus visszaadja az filename által megadott
eseményfájlban lévő üzleti objektumok teljes számát.
- public void setSplitCriteria(String splitCriteria)
A metódus a splitCriteria paramétert veszi, amely az
eseményfájlban üzleti objektumok számán alapul. Az egyes üzleti objektumok
visszatérnek a next() hívás során.
- public void setLogUtils(LogUtils logUtils)
Ezzel a
metódussal a LogUtils objektumot lehet beállítani. Ennek
az osztálynak a segítségével a felhasználó fájlokba írhatja a nyomkövetési
napló üzeneteket.
- public void setEncoding(String encoding)
Ezzel a
metódussal állítható be az eseményfájl tartalmának kódolása. Ez a kódolás a
fájl tartalmának beolvasásakor kerül felhasználásra. A kódolást a
SplitCriteria is használja.
- public void setBODetails(String filename, int currentPosition,
int totalBOs, boolean includeEndBODelimiter) throws SplittingException
Ennek a metódusnak a segítségével beállítható az aktuális üzleti objektum
szám, így a next() metódus hívásakor a
currentPosition paraméterben megadott helyen lévő üzleti
objektum tér vissza. Ha az includeEndBODelimiter
paraméter értéke igaz, akkor az üzleti objektum tartalma után tartalmazza
a SplitCriteria értéket is. A metódust meg kell hívni
minden next() hívás előtt, így a next()
metódus az itt beállított üzleti objektum tartalmát adja majd vissza.
- Az iterátornak 3 metódusa van: hasNext(),
next és remove(), amelyeket szintén meg
kell valósítani. A next() metódus a
setBODetails() metódus segítségével beállított pozícióban
lévő üzleti objektum tartalmát adja vissza.
Ha nincs megadva az üzleti objektum pozíciója, akkor a hívás meghiúsul. A
hasNext() metódus azt jelzi, hogy a
setBODetails() metódusban megadott pozícióban lévő üzleti
objektum létezik-e. A hasNext() hívás előtt meg kell
hívni a setBODetails() metódust. A
remove() metódus segítségével törölni lehet az üzleti
objektum bejegyzést az EventPersistence táblából.
Ne törölje az eseményfájlt ebben a metódusban. Csak a használatban lévő
erőforrásokat takarítsa el.
- public boolean isSplitBySize()
Ez a metódus jelzi,
hogy az eseményfájlt méret vagy határoló alapján kell értelmezni.
- Az adapter az üzleti objektumot a funkcióválasztón keresztül küldi el
a végponthoz. Ebben meghívódik a beállított adatkötés, és a szöveges
rekord üzleti objektummá alakul. Az üzleti objektum elküldésre kerül a
végpontra.