因爲做的是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;
}
}
}
}