Чтение нескольких записей
Я работаю с проектом Apache River javaspaces и пытаюсь найти способ написать шаблон, который читает несколько записей в пространстве и возвращает те, которые я еще не где-то сохранил, например:
Пользователь записывает три записи в пространство "entry1", "entry2", "entry3". Позже тот же самый пользователь пытается прочитать Записи из пространства, каждый раз, когда пространство возвращает "entry1", потому что это не удаляется из пространства, оно всегда будет соответствовать данному шаблону.
Запись в космос:
SpaceEntry string = new SpaceEntry("User","entry1");
space.write(string, null, Lease.FOREVER);
Чтение из космоса:
SpaceEntry template = new SpaceEntry();
SpaceEntry read = (SpaceEntry)space.readIfExists(template,null,Long.MAX_VALUE);
$ read сохраняется в списке, и процесс чтения повторяется.
Шаблон:
public SpaceEntry (String o, String m){
this.Owner = o;
this.Message = m;
}
Наконец, какие-либо предложения по динамическому изменению шаблона со списком уже полученных значений, чтобы записи оставались в пространстве, а возвращались разные?
Я думал о том, чтобы взять Записи из Пространства, сохранить их в списке, а затем вернуть их в Пространство, когда не осталось новых записей, но это привело бы к разным путаницам, потерям данных и потере совместимости с несколькими пользователями.
Edit1:
Хорошо, так что, поигравшись с моим кодом, я нашел способ сделать это.
Шаблон должен быть изменен, чтобы использовать другой идентификатор параметра.
public SpaceEntry (int id, String o, String m){
this.ID = id;
this.Owner = o;
this.Message = m;
}
Теперь каждый раз, когда пользователь хочет добавить сообщение, код должен прочитать существующие записи в пространстве, увеличивая значение идентификатора в шаблоне на единицу, пока не останется ни одного, и добавьте новое сообщение с отсутствующим номером идентификатора. Один и тот же код можно запустить, чтобы прочитать все записи в пространстве и вернуть их по номеру идентификатора.
Однако это представляет угрозу, если одна из записей будет удалена, как в Кодексе будут обрабатываться отсутствующие идентификаторы, например, 1,2, 4,, _, 7, какие-либо предложения?
Edit2:
Похоже, что Менеджер транзакций может быть способом пойти..
1 ответ
Проведя дополнительное исследование, я наткнулся на ответ на этот вопрос. Чтобы прочитать несколько записей, вы должны реализовать менеджер транзакций, который в основном считывает все записи, которые соответствуют шаблону, в транзакцию, список сортировок, и менеджер добавляет только записи, которые еще не находятся в транзакции. После того, как транзакция зафиксирована, записи в пространстве остаются неизменными, но у вас есть их полный список.