我正在使用 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;
}
最后,关于使用已经获取的值列表动态修改模板的任何建议,以便条目保留在空间中但返回不同的条目?
我曾考虑将空间中的条目存储在一个列表中,然后在没有新条目时将它们返回到空间,但这会引入各种混乱、丢失数据和松散的多用户兼容性。
编辑1:
好吧,在摆弄我的代码之后,我想出了一种方法。
必须更改模板以使用另一个参数 ID。
public SpaceEntry (int id, String o, String m){
this.ID = id;
this.Owner = o;
this.Message = m;
}
现在,每次用户想要添加一条消息时,代码都必须通过将模板中的 id 值加一直到没有留下任何内容并添加缺少 id 号的新消息来读取空间中的现有条目。可以运行相同的代码来读取空间中的所有条目并通过 ID 号返回它们。
但是,如果删除其中一个条目,这将构成威胁,代码将如何处理丢失的 ID,例如 1,2, ,4, ,_,7 有什么建议吗?
编辑2:
似乎事务管理器可能是要走的路..