Skip to content

Latest commit

 

History

History
92 lines (76 loc) · 2.94 KB

streaming.adoc

File metadata and controls

92 lines (76 loc) · 2.94 KB

Streaming API

Der Nachteil des normalen Imports ist, dass erst das kompletten Datenpaket eingelesen werden muss, ehe es weiterverarbeitet werden kann. Das kann gerade bei größeren Imports mit mehreren tausend Datensätzen zum Problem werden. Deswegen gibt es ab 1.0 den DatenpaketStreamer, mit dem die Datensätze direkt weiterverarbeitet werden können, sobald sie eingelesen wurden.

Dazu muss man das ImportListener-Interface implementieren und sich am DatenpaketStreamer, registrieren:

Beispiel ImportStatistic

ImportStatistic statistic = new ImportStatistic();
DatenpaketStreamer streamer = new DatenpaketStreamer(istream);
streamer.register(statistic);
streamer.readDatenpaket();
LOG.info("Statistik: " + statistic);

Als Beispiel dient hier die ImportStatistic, die das ImportListener-Interface implementiert und nach der Registrierung eine Benachrichtigung über jeden importierten Satz erhält.

Statistik: 128 Saetze, 165 Teildatensaetze

Dies ist die Ausgabe, die die ImportStatistic-Klasse ausgibt. Das Beispiel selbst findet sich als Unit-Test im DatenpaketStreamerTest (Methode "readDatenpaket").

Beispiel Datenpaket

Auch das Datenpaket implementiert das ImportListener-Interface und kann darüber ein (oder mehrere) Datenpaket importieren:

link:../../lib/src/test/java/gdv/xport/DatenpaketStreamerTest.java[role=include]

Du verspielst damit den Speichervorteil (Datenpaket wird wieder komplett eingelesen), aber du hast die Möglichkeit, weitere Listener zu registrieren. So kannst du ihn mit dem SatzValidator kombinieren, der schon während des Imports validiert und das Ergebnis ins Log rausschreibt.

Tip

Wenn du die Valierungsfehler in einem eigener LOG-Datei protokollieren willst, trage folgende Konfiguration in dein log4j.xml ein:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
  <Appenders>
    ...
    <File name="ValidatorFile" fileName="logs/validator.log" append="false">
      <PatternLayout>
      <Pattern>%d{yyyy/MM/dd-HH:mm:ss}\t%m%n</Pattern>
      </PatternLayout>
    </File>
    ...
  </Appenders>
  <Loggers>
    ...
    <logger name="gdv.xport.event.SatzValidator" level="INFO">
      <AppenderRef ref="ValidatorFile" />
    </logger>
    ...
  </Loggers>
</Configuration>