Транзакция LDAP в Java - PullRequest
       8

Транзакция LDAP в Java

4 голосов
/ 10 января 2011

Мне нужно создать функцию массовой вставки для нашего инструмента администрирования пользователей. Мы создали небольшую внутреннюю библиотеку, используя Spring LDAP, и все отлично работает для однопользовательского управления (CRUD).

Я хотел бы попытаться вставить сотни записей одновременно и выполнить откат, если что-то пойдет не так.

Есть ли способ создавать транзакции в LDAP, как это существует в базах данных?

Спасибо за ваши идеи.

Ответы [ 2 ]

3 голосов
/ 10 января 2011

Это продолжение @ adrianboimvaser.

Просто отметим, что поддержка Spring LDAP-транзакций использует не транзакции XA, а «логические» компенсирующие транзакции, поэтому откат LDAP будетбыть компенсирующим действием против LDAP.Хотя это улучшение по сравнению с отсутствием транзакций, имейте в виду, что это не то же самое, что обычная транзакция, «как в базах данных».т.е. свойства транзакций ACID не поддерживаются.

Обратите внимание, что даже если используется та же логическая транзакция, это не транзакция JTA XA;двухфазная фиксация выполняться не будет, и, таким образом, фиксация и откат могут привести к неожиданным результатам.

Например: если вы добавляете 100 записей в LDAP, каждая запись будет добавляться одна за другой в LDAP.Если при последнем добавлении произойдет сбой, действие отката будет заключаться в удалении ранее созданных 99 записей в транзакции.Однако, если по какой-либо причине (например, сетевое подключение не работает до LDAP, что и послужило причиной сбоя для 100-й записи), первые 99 записей не могут быть фактически удалены, даже если вы попытались откатить транзакцию, у вас будет несоответствие междубаза данных и LDAP.т.е. в LDAP будет 99 записей (потому что они не могут быть удалены), которых нет в базе данных (потому что эти записи никогда не были вставлены или фактически были откачены).

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

3 голосов
/ 10 января 2011

Ознакомьтесь с документацией: http://static.springsource.org/spring-ldap/docs/1.2.0-rc1/reference/#transactions

...