Ошибка загрузки DTD при парсинге документа XHTML в XOM

Как я объяснил в этой статье , картинка стоит 1000 слов.

enter image description here

Первый оператор SELECT считывает значение 50, а второй оператор SELECT читает значение 10, поскольку между двумя операциями чтения выполняется операция записи. был казнен.

Линеаризуемость означает, что изменения происходят мгновенно, и как только значение реестра записывается, любая последующая операция чтения найдет то же значение, если реестр не будет подвергаться каким-либо изменениям.

Что произойдет, если у вас нет возможности линеаризации?

enter image description here

На этот раз у нас нет ни одного реестра или Единственный источник правды. Наша система использует асинхронную репликацию базы данных, и у нас есть основной узел, который принимает и чтение, и запись, и узел подписчика, используемый только для операций чтения.

Поскольку репликация происходит асинхронно, существует задержка между модификацией строки первичного узла и временем, когда подписчик применяет такое же изменение.

Одно соединение с базой данных изменяет баланс счета с 50 на 10 и фиксирует транзакцию. Сразу после этого вторая транзакция считывает данные с узла Follower, но поскольку репликация не применяла модификацию баланса, читается значение 50.

Следовательно, эта система не является линеаризуемой, так как изменения, по-видимому, не происходят мгновенно. Для того чтобы сделать эту систему линеаризуемой, нам нужно использовать синхронную репликацию, и операция ОБНОВЛЕНИЕ основного узла не будет завершена, пока узел подписчика также не применяет ту же модификацию.

6
задан Bala 15 June 2009 в 20:43
поделиться

2 ответа

Взглянув на javadoc для Builder , я думаю, вы могли бы предоставить EntityResolver через конструктор, который принимает XMLReader . Я бы по возможности не позволял парсеру загружать файлы из Интернета.

3
ответ дан 10 December 2019 в 00:43
поделиться

Это решает проблему:

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            factory.setValidating(false);
            factory.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
            Document document = factory.newDocumentBuilder().parse(is);
7
ответ дан 10 December 2019 в 00:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: