我现在有如下需求:
A用户访问JavaAgent类的NotesMain方法,希望这个时候判断下服务器内存中是否有一个哈希表,如果没有,则创建,有责找到哈希表,向哈希表里put值。
因为涉及到B用户 C用户都可能访问这个类的这个方法,所以不知道怎么创建一个唯一的哈希表供其他用户向操作,也就是不知道怎么去保证只有一个哈希表。
希望能在我下面的代码上简单的给个提示。import lotus.domino.*;public class JavaAgent extends AgentBase {

static private HashMap userMap = new HashMap();

public void NotesMain() { try {
//这里是我的业务,主要在这里向哈希表里面put值
} catch(Exception e) {
e.printStackTrace();
}
}

}

解决方案 »

  1.   

    哇,你在写domino的代码?
      

  2.   

    用一个单例模式,就行了啊
    public Class HashMapSingleton{
        private static HashMapSingleton hashmapsingleton = null;
        private static HashMap hashmap = new HashMap();
        public static HashMapSingleton getInstance {
            if(null == hashmapsingleton) {
                hashmapsingleton = new HashMapSingleton();
            }
            return hashmapsingleton;
        }
    }public class JavaAgent extends AgentBase {
        
        private HashMap userMap = HashMapSingleton.getInstance.hashmap;
        
        public void NotesMain() {        try {
                //这里是我的业务,主要在这里向哈希表里面put值        
            } catch(Exception e) {
                e.printStackTrace();
            }
        }
        
    }大概就这样,可以简化,没在IDE里边写
      

  3.   

    呵呵,我哪里是什么IBM的,不过这个的确是在Domino里面运行的Java代理。我先试下楼上这位的方法。
      

  4.   

    呵呵,楼上的高手们,我的代码现在还是出问题。现在return那句出问题啊。
      

  5.   

    全部代码贴出,望高手解答。import lotus.domino.*;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.Map.Entry;public class JavaAgent extends AgentBase {

    private static JavaAgent instance = null;
    static private HashMap userMap = new HashMap();

    private JavaAgent(){

    } public static JavaAgent getInstance(){

    if(instance == null){

    instance = new JavaAgent();

    }

    return instance;

    }

    public void NotesMain() { try {

    Session session = getSession();
    AgentContext agentContext = session.getAgentContext(); Document doc = agentContext.getDocumentContext();
    Item item = doc.getFirstItem("Query_String_decoded");
    String queryString = item.getText();
    String userName = queryString.substring(queryString.indexOf("userName=") + "userName=".length(), queryString.length());

    Long currentTime = new Long(System.currentTimeMillis());

    userMap.put(userName,currentTime);
    Iterator it = userMap.entrySet().iterator();

    while (it.hasNext()) {
    Entry entry = (java.util.Map.Entry) it.next();
    String userLogonName = (String) entry.getKey();
    Long userLogonTime = (Long) entry.getValue();
    System.out.println(userLogonName + "=" + userLogonTime);
    }

    } catch(Exception e) {
    e.printStackTrace();
    }
    }

    }
      

  6.   

    楼主代码没问题啊。
    有问题的可能是你import少了domino的东西吧?
    我把domino的去掉,执行了可以的。
      

  7.   


    import java.util.HashMap;public class Singleton {

    private static Singleton instance = null;
    public static HashMap userMap = new HashMap();

    public Singleton(){

    }

    public static synchronized Singleton getInstance() {

    if(instance == null) {

    instance = new Singleton();
    }

    return instance;

    }
    } import java.util.HashMap;
    import org.junit.Test;public class ATest  {
    @Test
    public void aTest()throws Exception{

    Singleton s = new Singleton();
    HashMap userMap = s.getInstance().userMap;

    }
    }我看资料说,单例模式必须要求单例类里面构造方法是私有的,但是我把构造方法已变成私有的,调试类里就报错。高手们帮我看看吧,解决问题者我再看一个帖子送100分。
      

  8.   


    晕死,这两个都要private,否则不是单例了,构造方法都没有私有,咋单例啊。
        public static HashMap userMap = new HashMap();
        
        public Singleton(){
            
        }
       
    再晕,这里不能new,你原来那段是对的,利用getInstance来获取唯一实例。
     public void aTest()throws Exception{
            
            Singleton s = new Singleton();
            HashMap userMap = s.getInstance().userMap;
            
        }
    即(下面这个红色的方法要在你的单例中提供)。
    HashMap userMap = Singleton.getInstance().getUserMap();另外,你测试发现又new了一个是吗?可能是你的测试类有问题。试试下面的(跟你原来的基本没区别):package test;import java.util.HashMap;public class JavaAgent { private static JavaAgent instance = null; private HashMap<String, Long> userMap = new HashMap<String, Long>(); private JavaAgent() { } public static JavaAgent getInstance() { if (instance == null) { instance = new JavaAgent(); } return instance; } public HashMap getUserMap() {
    return userMap;
    } public void NotesMain(String name, Long value) {
    try {
    userMap.put(name, value);
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    }
    package test;import java.util.Iterator;
    import java.util.Map.Entry;public class TS {
    public static void main(String[] a) { String queryString = "aaaaaaaaaaaaaaaaaaaaaaaaa";
    String userName = queryString.substring(queryString
    .indexOf("userName=")
    + "userName=".length(), queryString.length()); Long currentTime = new Long(System.currentTimeMillis());
    JavaAgent.getInstance().NotesMain(userName, currentTime);
    Iterator it = JavaAgent.getInstance().getUserMap().entrySet()
    .iterator(); while (it.hasNext()) {
    Entry entry = (java.util.Map.Entry) it.next();
    String userLogonName = (String) entry.getKey();
    Long userLogonTime = (Long) entry.getValue();
    System.out.println(userLogonName + "=" + userLogonTime);
    }
    System.out.println("One Done!");
    queryString = "bbbbbbbbbbbbbbbb";
    userName = queryString.substring(queryString.indexOf("userName=")
    + "userName=".length(), queryString.length()); currentTime = new Long(System.currentTimeMillis());
    JavaAgent.getInstance().NotesMain(userName, currentTime);
    it = JavaAgent.getInstance().getUserMap().entrySet().iterator(); while (it.hasNext()) {
    Entry entry = (java.util.Map.Entry) it.next();
    String userLogonName = (String) entry.getKey();
    Long userLogonTime = (Long) entry.getValue();
    System.out.println(userLogonName + "=" + userLogonTime);
    }
    System.out.println("Two Done!"); }
    }