някой може би има примерен код как да замени java списък (LinkedList или ArrayList) с нещо подобно в BerkeleyDB? Проблемът ми е, че трябва да заменя Lists, за да надхвърля ограниченията на основната памет. Някакъв прост примерен код би бил наистина добър.
Сега използвах просто TupleBinding за Integers (ключове) и SerialBinding за Diff-class (стойности на данни).
Сега получавам грешката:
14:03:29.287 [pool-5-thread-1] ERROR o.t.g.view.model.TraverseCompareTree - org.treetank.diff.Diff; local class incompatible: stream classdesc serialVersionUID = 8484615870884317488, local class serialVersionUID = -8805161170968505227
java.io.InvalidClassException: org.treetank.diff.Diff; локален клас несъвместим: поток classdesc serialVersionUID = 8484615870884317488, локален клас serialVersionUID = -8805161170968505227
Класовете слушател и TransactionRunner, които използвам, са:
/** {@inheritDoc} */
@Override
public void diffListener(final EDiff paramDiff, final IStructuralItem paramNewNode,
final IStructuralItem paramOldNode, final DiffDepth paramDepth) {
try {
mRunner.run(new PopulateDatabase(mDiffDatabase, mKey++, new Diff(paramDiff, paramNewNode.getNodeKey(), paramOldNode.getNodeKey(), paramDepth)));
} catch (final Exception e) {
LOGWRAPPER.error(e.getMessage(), e);
}
}
private static class PopulateDatabase implements TransactionWorker {
private StoredMap<Integer, Diff> mMap;
private int mKey;
private Diff mValue;
public PopulateDatabase(final DiffDatabase paramDatabase, final int paramKey, final Diff paramValue) {
Objects.requireNonNull(paramDatabase);
Objects.requireNonNull(paramValue);
mMap = paramDatabase.getMap();
mKey = paramKey;
mValue = paramValue;
}
@Override
public void doWork() throws DatabaseException {
mMap.put(mKey, mValue);
}
}
Не знам защо не става :-/
Редактиране: Съжалявам, просто трябваше да изтрия генерираната среда/база данни и да създам нова.