0

我正在使用 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:

似乎事务管理器可能是要走的路..

4

1 回答 1

0

在做一些额外的研究后,我发现了这个问题的答案。为了读取多个条目,您必须实现一个事务管理器,它基本上将与模板匹配的所有条目读取到一个事务中,一个排序列表,并且管理器只添加尚未在事务中的条目。提交事务后,空间条目保持不变,但您拥有它们的完整列表。

于 2013-12-02T10:57:02.520 回答