我正在编写一个用于测试目的的小应用程序,它接受SOAP调用,为每个调用生成UID,并返回此UID。 UID需要存储在服务器上,所以我想我会使用一个简单的静态地图来存储它们。
我创建了一个新类:
MemoryMap.java
public class MemoryMap {
static Map<String, String> memoryMap = new ConcurrentHashMap<String, String>();
static void printMapContents() {
for (Entry<String, String> pair : memoryMap.entrySet()) {
System.out.println("Key = [" + pair.getKey() + "]");
System.out.println("Value = [" + pair.getValue() + "]");
}
}
}
然后将其与调用一起使用:
MemoryMap.memoryMap.put(UID, "testString");
MemoryMap.printMapContents();
和...
MemoryMap.memoryMap.remove(parameters.getUID());
MemoryMap.printMapContents();
这很好用,但我不能想到这是否是为此目的实现单个Map的推荐方法。
答案 0 :(得分:0)
如果您的应用程序必须模拟后端,例如数据库,我建议在某个数据存储区界面中抽象地图,然后为您的应用程序提供由地图支持的此接口实现的单例范围实例。例如:
interface MyDataStore<V>{
V retrieve(UUID id);
void remove(UUID id);
}
public final class MockDataStore implements MyDataStore<String>{
private final static MockDataStore instance = new MockDataStore();
public static MockDataStore instance(){
return instance;
}
private MockDataStore(){}
private final ConcurrentHashMap<UUID,String> m =
new ConcurrentHashMap<UUID,String>();
@Override
String retrieve(UUID id){
return m.get(id);
}
@Override
void remove(UUID id){
m.remove(id);
}
}
然后明天您可以将实现交换为与实际数据库相关的内容。这是ORM系统的非常粗略的近似值。
更好的是,我会立即开始使用数据库。您可以使用内存数据库(如H2),以便在需要时可以将其替换为实际数据库(可能存在一些轻微的迁移问题)。
最后,如果您的存储需求增长,例如,您需要表格和关系,我建议您查看JPA及其中一个实现,例如Hibernate。
答案 1 :(得分:-2)
您的服务器接受SOAP请求,很可能这是在多个线程中完成的。 ConcurrentHashMap
应该可以正常工作。