我正在使用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;
}
最后有关使用已获取的值列表动态修改模板的任何建议,以便条目保留在空格中但返回不同的条目?
我考虑过将Space中的条目存储在列表中,然后在没有剩下新条目的情况下将它们返回到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:
似乎可以采用事务管理器的方式......
答案 0 :(得分:0)
在做了一些额外的研究后,我发现了这个问题的答案。为了读取多个条目,您必须实现一个事务管理器,它基本上将与模板匹配的所有条目读入事务,排序列表,并且管理器仅添加尚未在事务中的条目。提交事务后,空间条目保持不变,但您有完整的列表。