我正在使用Apache River javaspace项目,我正在设法编写一个模板,该模板可以读取空间中的多个条目,并返回那些我还没有存储在某个地方的条目,例如:
用户向空格"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;
}最后,对于使用已经获取的值列表动态修改模板有什么建议,以便条目保留在空间中,但返回不同的条目?
我想把空间中的条目存储在一个列表中,然后在没有新条目的情况下返回到Space,但是这会带来各种各样的混乱、丢失的数据和松散的多用户兼容性。
Edit1:
好的,在修改了我的代码之后,我想出了一种方法。
必须更改模板以使用另一个参数ID。
public SpaceEntry (int id, String o, String m){
this.ID = id;
this.Owner = o;
this.Message = m;}
现在,每当用户想要添加一条消息时,代码必须读取空间中的现有条目,方法是将模板中的id值递增1,直到没有留下任何消息,并添加缺少的id号的新消息。可以运行相同的代码来读取空间中的所有条目并按id号返回它们。
但是,如果删除其中一个条目,代码将如何处理缺少的ID (例如,1,2,4,_,7 )?
Edit2:
似乎事务管理器是该走的路。
发布于 2013-12-02 10:57:02
经过一些额外的研究,我找到了这个问题的答案。为了读取多个条目,您必须实现一个事务管理器,它基本上将与模板匹配的所有条目读入事务、排序列表,并且管理器只添加尚未在事务中的条目。事务提交后,空间条目保持不变,但是您有一个完整的列表。
https://stackoverflow.com/questions/20324608
复制相似问题