5 Stimmen

Java JAXB - Schreiben von XML-Dateien mit Neustartlogik

Ich erstelle eine sehr große XML-Datei (700mb +), die große Datenmengen über Batch verarbeiten. Das Programm dient als Schnittstelle zwischen einer extrem großen Sybase-Datenbank und einer Anwendung. Ich habe derzeit das xsd-Schema an Klassen gebunden. Ich brauche eine Möglichkeit, die XML-Datei mit einer Neustart-Logik zu schreiben.

D.h. ich muss wissen, wo ich aufgehört habe. Oder anders ausgedrückt: Wenn das Programm fehlschlägt, muss ich wissen, was zuletzt in die XML-Datei geschrieben wurde, damit ich dort weitermachen kann, wo ich aufgehört habe. Hier ist ein Beispiel.

<root>
  <WorkSet>
    <Work>
      <Customer>
    <Work>
      <Customer>
  <WorkSet>
    <Work>
      .....
<root>

Angenommen, das Programm schlägt nach dem Schreiben eines 'work'- oder 'workset'-Knotens fehl. Gibt es eine Möglichkeit, die Verarbeitung dort fortzusetzen, wo ich aufgehört habe? Ich versuche zu vermeiden, lesen die XML-Datei zurück in den Speicher aufgrund der schieren Größe der XML-Datei (Sagen Sie es beendet 500mb von XML und schlägt fehl).

Vielen Dank für die Hilfe.

3voto

palacsint Punkte 27290

Wenn Sie Ihre Daten in unabhängige WorkSet-Elemente aufteilen können, können Sie sie mit dem Fragment-Modus von JAXB einzeln ausgeben (wenn JAXB die Header nicht schreibt). Später fügen Sie die Dateien einfach zusammen und fügen die fehlenden XML-Deklarationen, öffnenden und schließenden Tags hinzu.

Es ist möglich, dass Sie Ihre generierten Klassen dafür ändern müssen. Ich meine das Hinzufügen von @XmlRootElement zur WorkSet-Java-Klasse. Wenn ein WorkSet noch groß genug für einen Schritt ist, kann man das auch mit Work machen, aber man muss die fehlenden Tags irgendwie generieren.

2voto

Ich glaube nicht, dass JAXB das geeignete Werkzeug für diese Aufgabe ist, aber ...

Sie könnten eine benutzerdefinierte Marshaller-Implementierung schreiben, die verfolgt, welche Objekte gemarshallt wurden, und den Fragment-Modus verwenden, um einzelne Objekte auszuschreiben.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X