А не встречал ли кто библиотеку, реализующую коллекции с поддержкой транзакций? Причём не обязательно даже чтобы поддержка concurrency была. Хочется примерно вот такого:
Здравствуйте, andyag, Вы писали:
a> А не встречал ли кто библиотеку, реализующую коллекции с поддержкой транзакций? Причём не обязательно даже чтобы поддержка concurrency была. Хочется примерно вот такого:
Можно взять стек неизменяемых списков
import org.pcollections.PVector;
import org.pcollections.TreePVector;
import java.util.ArrayDeque;
import java.util.Deque;
import java.util.List;
public class TransactionalList<E>
{
final Deque<PVector<E>> data = new ArrayDeque<>();
public TransactionalList()
{
data.addFirst(TreePVector.<E>empty());
}
public void add(E e)
{
data.addFirst(data.removeFirst().plus(e));
}
public void begin()
{
data.addFirst(data.getFirst());
}
public void rollback()
{
data.removeFirst();
}
public void commit()
{
final PVector<E> newHead = data.removeFirst();
data.removeFirst();//old head dropped
data.addFirst(newHead);
}
public int size()
{
return data.getFirst().size();
}
public List<? extends E> data()
{
return data.getFirst();
}
}
С concurrency непонятно что делать. Ведь begin-commit из разных потоков пускать не получится. По-моему можно сделать только саму модификацию списка, через CAS делать замену вершины стека.
Здравствуйте, andyag, Вы писали:
A>А не встречал ли кто библиотеку, реализующую коллекции с поддержкой транзакций? Причём не обязательно даже чтобы поддержка concurrency была. Хочется примерно вот такого:
Здравствуйте, Pavel Dvorkin, Вы писали:
PD>Здравствуйте, andyag, Вы писали:
A>>А не встречал ли кто библиотеку, реализующую коллекции с поддержкой транзакций? Причём не обязательно даже чтобы поддержка concurrency была. Хочется примерно вот такого:
PD>Посмотри вот это
PD>http://tomee.apache.org/examples-trunk/transaction-rollback/README.html
Там какие-то тесты про JPA и транзакции. Что именно предлагалось посмотреть?
Re[2]: Библиотека коллекций с поддержкой commit()/rollback()
Здравствуйте, ., Вы писали:
.>Здравствуйте, andyag, Вы писали:
a>> А не встречал ли кто библиотеку, реализующую коллекции с поддержкой транзакций? Причём не обязательно даже чтобы поддержка concurrency была. Хочется примерно вот такого: .>Можно взять стек неизменяемых списков
... .>С concurrency непонятно что делать. Ведь begin-commit из разных потоков пускать не получится. По-моему можно сделать только саму модификацию списка, через CAS делать замену вершины стека.
Да вот как раз было сильное желание не делать велосипед, т.к. это маленькая часть от задачки, которую хотелось решить "перед завтраком"
Re[3]: Библиотека коллекций с поддержкой commit()/rollback()
Здравствуйте, andyag, Вы писали:
a> .>С concurrency непонятно что делать. Ведь begin-commit из разных потоков пускать не получится. По-моему можно сделать только саму модификацию списка, через CAS делать замену вершины стека.
a> Да вот как раз было сильное желание не делать велосипед, т.к. это маленькая часть от задачки, которую хотелось решить "перед завтраком"
Вряд ли есть что-то сразу готовое, ибо довольно специфическое требование, а универсальное решение будет неэффективным, как мне кажется.
Поэтому попробуй свою задачу через другие абстракции выразить, не через STM, а, скажем, через специальную структуру данных.
Здравствуйте, andyag, Вы писали:
A>А не встречал ли кто библиотеку, реализующую коллекции с поддержкой транзакций? Причём не обязательно даже чтобы поддержка concurrency была. Хочется примерно вот такого:
В MapDb есть коллекции с транзакциями, если база будет InMemory то на диск ничего писаться не будет. https://github.com/jankotek/mapdb
Re: Библиотека коллекций с поддержкой commit()/rollback()
Здравствуйте, andyag, Вы писали:
A>А не встречал ли кто библиотеку, реализующую коллекции с поддержкой транзакций? Причём не обязательно даже чтобы поддержка concurrency была. Хочется примерно вот такого:
Можешь попробовать GridGain (это in-memory cache) в нем есть транзакционный режим кеша.
Но это может сильно "тяжеловесное" решение в вашем случае.
Re[2]: Библиотека коллекций с поддержкой commit()/rollback()
Здравствуйте, kuaw26, Вы писали:
K>Здравствуйте, andyag, Вы писали:
A>>А не встречал ли кто библиотеку, реализующую коллекции с поддержкой транзакций? Причём не обязательно даже чтобы поддержка concurrency была. Хочется примерно вот такого: K>Можешь попробовать GridGain (это in-memory cache) в нем есть транзакционный режим кеша. K>Но это может сильно "тяжеловесное" решение в вашем случае.
Не, это однозначно оверкил Пока сделал в лоб — Mememento через сериализацию + складываю в стек. Хочется что-то примерно такого уровня, лишь бы не писать руками.
Re: Библиотека коллекций с поддержкой commit()/rollback()
Здравствуйте, andyag, Вы писали:
A>А не встречал ли кто библиотеку, реализующую коллекции с поддержкой транзакций? Причём не обязательно даже чтобы поддержка concurrency была. Хочется примерно вот такого: