Java JAXB - Написание файлов XML с логикой перезапуска

Я создаю очень большой XML-файл (700 Мб +), который обрабатывает большие объемы данных в пакетном режиме. Программа служит интерфейсом между чрезвычайно большой базой данных Sybase и приложением. В настоящее время у меня есть схема xsd, связанная с классами. Мне нужен способ написать XML с учетом логики перезапуска.

То есть возможность узнать, где я остановился. Или, другими словами, в случае сбоя программы мне нужно иметь возможность увидеть, что в последний раз было записано в файл XML, чтобы он мог определить, где я остановился. Вот пример.

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

Скажем, программа не работает после записи узла записи "работа" или "рабочий набор". Есть ли способ узнать, где я остановился? Я пытаюсь избежать чтения XML-файла обратно в память из-за размера сдвига XML-файла (скажем, он заканчивает 500 МБ XML и терпит неудачу).

Спасибо за помощь.

2 ответа

Решение

Если вы можете разделить ваши данные на независимые элементы WorkSet, вы можете записывать их по одному за раз в режиме фрагментирования JAXB (когда JAXB не записывает заголовки). Позже просто объедините файлы и добавьте отсутствующее объявление XML, открывая закрывающие закрывающие теги.

Вполне возможно, что вы должны изменить сгенерированные классы для этого. Я имею в виду добавление @XmlRootElement в Java-класс WorkSet. Если один WorkSet по-прежнему велик для одного шага, вы можете сделать это и с помощью Work, но вам нужно как-то сгенерировать недостающие теги.

Я не думаю, что JAXB - подходящий инструмент для этой работы, но...

Вы можете написать собственную реализацию Marshaller, которая отслеживает, какие объекты были упорядочены, и использовать режим фрагмента для записи отдельных объектов.

Другие вопросы по тегам