Java中訪問Domino的問題

 

因爲做的是EAI的項目,要集成原來的Domino應用,有一個修改Domino的需求,因爲以前沒有找到合適的方法,就對names.nsf數據庫遍歷了一遍用戶,找到匹配的用戶再修改,本來連接Domino就很慢,這樣一來就更慢了,1155個用戶光遍歷一遍就用了2分多鐘,後來一個同事找到一個方法,改完之後,竟然只用5秒鐘就一切都搞定了:

int i = view.FTSearch("文件名", 3); //定位文件

就是這個方法,一下子讓性能提升了60倍!

而且釋放Domino的連接快了,出錯的機率小多了,上午可能是因爲修改密碼的人多,造成了Domino的IIOP服務死了2次,希望這麼改後就不再出現問題了。

還有一個問題就是,要修改IBM 的Portal的數據庫的用戶的密碼,也沒有找到定位用戶的方法,目前也是一個個的遍歷,找到匹配的用戶名,再改,不過這個操作倒是很快,如果哪位兄弟知道定位IBM Portal的用戶的數據庫中某一個用戶的方法,請不吝賜教,謝謝!

Domino這個東西我在2003年弄過一階段,後來不再弄就忘的一乾二淨,現在又被它折磨!:o(

最近Portal越來越健壯,高興ing……

    //獲取Domino的Session,這段代碼從網上遍地都是
    public static Session getDominoConnection(String serverHttp,
            String user_name, String password) throws NotesException {
        if (session == null) {
            String ior = NotesFactory.getIOR(serverHttp);
            session = NotesFactory.createSessionWithIOR(ior, user_name,
                    password);
        }
        return session;
    }

    //這個方法從網上就很難找到了
    public static boolean changePWD(String new_pwd, PortalUser user) {

        boolean b = false; //返回值變量
        String file_name = null; //Domino中的用戶文件名
        View view = null;           //Domino的結構
        Document doc = null;    //Domino的結構
       
        String user_name = "rabbit8";
        String pwd ="rabbit8";
        String serverHttp = "172.168.0.1";//Domino的IP

       try {
            session = getDominoConnection(serverHttp, user_name, pwd); //獲得Domino的Session
            if (session != null) {
                Database db = session.getDatabase("", "names.nsf");
                if (db != null) {
                    view = db.getView("People");
                   
                    if (view != null) {
                        int i = view.FTSearch(user_name, 3); //定位文件,具體可以查找Domino的書籍
                       
                        doc = view.getFirstDocument();
                       
                        while (doc != null) {
                            file_name = doc.getItemValueString("shortname");
                            if (file_name != null && file_name.equals(user_name)) {
                                Vector v_pwd = session.evaluate("@Password(" + '"' + new_pwd + '"' + ")");
                               
                                String s_pwd = v_pwd.firstElement().toString();//返回加密的密碼
                               
                                doc.replaceItemValue("HttpPassword", s_pwd); //替換舊密碼
                                doc.save(true);  //保存更改
                               
                                b = true;
                            }
                           
                            doc = view.getNextDocument(doc);
                        }
                       
                        if(doc != null){
                            doc.recycle();
                            doc = null;
                        }
                       
                        if(view != null){
                            view.recycle();
                            view = null;
                        }
                       
                    }
                }
                if(db != null){
                    db.recycle();  //關閉數據庫
                    db = null;
                }
                if(session != null){
                    session.recycle();
                    session = null;
                }
            }           
            return b;
        } catch (Exception e) {
            System.out.println("Domino連接不正常,修改密碼失敗!錯誤====="+ e.getStackTrace());
            e.printStackTrace();
            return b;
        } finally {
            try {
                if (doc != null) {
                    doc.recycle();
                    doc = null;
                }
                if (view != null) {
                    view.recycle();
                    view = null;
                }
               
                if (db != null) {
                    db.recycle();
                    db = null;
                }
                if (session != null) {
                    session.recycle();
                    session = null;
                }
            } catch (Exception e) {
                e.printStackTrace();
                return b;
            }
        }
    }
}

發佈了5 篇原創文章 · 獲贊 2 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章