1. import java.util.HashMap;
  2. import java.util.Map;
  3. import java.util.concurrent.ConcurrentHashMap;
  4. import java.util.concurrent.ConcurrentMap;
  1. public interface DataStore {
  2.  
  3. /**
  4. * return a snapshot value of componentName
  5. */
  6. Map<String,Object> get(String componentName);
  7.  
  8. Object get(String componentName, String key);
  9.  
  10. void put(String componentName, String key, Object value);
  11.  
  12. void remove(String componentName, String key);
  13.  
  14. }
  1. public class SimpleDataStore implements DataStore {
  2.  
  3. // <组件类名或标识, <数据名, 数据值>>
  4. private ConcurrentMap<String, ConcurrentMap<String, Object>> data =
  5. new ConcurrentHashMap<String, ConcurrentMap<String,Object>>();
  6.  
  7. public Map<String, Object> get(String componentName) {
  8. ConcurrentMap<String, Object> value = data.get(componentName);
  9. if(value == null) return new HashMap<String, Object>();
  10.  
  11. return new HashMap<String, Object>(value);
  12. }
  13.  
  14. public Object get(String componentName, String key) {
  15. if (!data.containsKey(componentName)) {
  16. return null;
  17. }
  18. return data.get(componentName).get(key);
  19. }
  20.  
  21. public void put(String componentName, String key, Object value) {
  22. Map<String, Object> componentData = data.get(componentName);
  23. if(null == componentData) {
  24. data.putIfAbsent(componentName, new ConcurrentHashMap<String, Object>());
  25. componentData = data.get(componentName);
  26. }
  27. componentData.put(key, value);
  28. }
  29.  
  30. public void remove(String componentName, String key) {
  31. if (!data.containsKey(componentName)) {
  32. return;
  33. }
  34. data.get(componentName).remove(key);
  35. }
  36.  
  37. }

A SimpleDataStore的更多相关文章

  1. 7.4 服务远程暴露 - 创建Exporter与启动netty服务端

    为了安全:服务启动的ip全部使用10.10.10.10 远程服务的暴露总体步骤: 将ref封装为invoker 将invoker转换为exporter 启动netty 注册服务到zookeeper 订 ...

  2. consumer的DubboClientHandler线程池

    1. 创建线程池 创建线程池的调用栈如下: SimpleDataStore把线程池存放在map中. public class NettyClient extends AbstractClient { ...

随机推荐

  1. DOM树示意图

  2. struts2使用拦截器完成登陆显示用户信息操作和Struts2的国际化

    其实学习框架,就是为了可以很好的很快的完成我们的需求,而学习struts2只是为了替代之前用的servlet这一层,框架使开发更加简单,所以作为一个小菜鸟,特别感谢那些超级无敌变态开发的框架供我们使用 ...

  3. Codeforces 160D Edges in MST tarjan找桥

    Edges in MST 在用克鲁斯卡尔求MST的时候, 每个权值的边分为一类, 然后将每类的图建出来, 那些桥就是必须有的, 不是桥就不是必须有. #include<bits/stdc++.h ...

  4. HDU4686 Arc of Dream 矩阵

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - HDU4686 题意概括 a0 = A0 ai = ai-1*AX+AY b0 = B0 bi = bi-1* ...

  5. 桌面版centos安装vncserver并在windows下使用VNC Viewer远程连接

    首先关闭防火墙 在Centos中安装vncserver yum install tigervnc-server 拷贝一份  /lib/systemd/system/vncserver@.service ...

  6. python tkinter-消息框、对话框、文件对话框

    python tkinter-消息框.对话框.文件对话框   消息框 导入 import tkinter import tkinter.messagebox #这个是消息框,对话框的关键 提示消息框 ...

  7. 针对SSL/TLS的拒绝服务攻击以及使用ettercap进行DNS欺骗

    一. thc-ssl-dos 1.简介 (1).SSL 协商加密对性能开销增加,大量握手请求会导致 DOS (2).利用 SSL secure Renegotiation 特性,在单一 TCP 连接中 ...

  8. Wamp修改端口

    WAMP装好之后默认的端口是80,但是这个80端口呢,可以热门端口啊,迅雷,IIS都挺喜欢,在WIN7下本来还有1个进程也点80,让人伤脑筋啊,所以把它改掉,方法如下: 一.修改APACHE的监听端口 ...

  9. Javascript实现对象的继承

    在Java和C#中,你可以简单的理解class是一个模子,对象就是被这个模子压出来的一批一批月饼.压个啥样,就得是个啥样,不能随便动,动一动就坏了.而在Javascript中,没有模子,月饼被换成了面 ...

  10. 什么是mime类型

    本文转自:什么是mime类型 - 方法数码 http://www.fangfa.net/webnews/390.html MIME 类型在网站开发中经常碰到,特别是处理非文本数据的请求时(如:文件上传 ...