2012-04-20 38 views
4

我試圖從外部Java應用程序連接到Lotus數據庫 - 我的代碼完全針對位於我的測試(本地)服務器,但在針對生產數據庫運行時失敗(沒有數據返回)。試圖通過Java應用程序訪問Lotus數據庫 - 獲取錯誤消息「XXX.nsf尚未打開」

Diiop正在生產服務器上運行,並且我有生產數據庫的編輯器訪問權限。

我可以通過Java代碼創建與Domino服務器的會話,但無法打開Lotus DB。

Session session = NotesFactory.createSession("<Server>","UserID","password"); 
System.out.println("connected"); 
Database db = session.getDatabase("Server","<DB Path>"); 
System.out.println("Access level: "+ db.getCurrentAccessLevel()); 
View vw = db.getView("Viewname"); 

與Domino服務器創建一個會話後,我嘗試打開數據庫,在這一點上,我得到的錯誤XXX.nsf has not been opened yet

我也嘗試過使用IsOpenopen方法,沒有運氣。

+0

你可以打開任何數據庫的服務器上(對於例如'names.nsf')?你能展示你的代碼的相關部分嗎? – 2012-04-20 07:10:59

+0

不,我試着用names.nsf以及我的代碼,但同樣的錯誤 這裏是我的代碼... ......... Session session = NotesFactory.createSession(「」,「UserID 「,「密碼」); System.out.println(「connected」); Database db = session.getDatabase(「Server」,「」); System.out.println(「Access level:」+ db.getCurrentAccessLevel()); 查看vw = db.getView(「Viewname」); ........ – Mythli 2012-04-20 08:07:50

+0

在運行代碼的那一刻,Domino服務器的控制檯和其日誌中是否顯示了消息(如果有的話)? – 2012-04-20 15:11:39

回答

1

首先嚐試通過瀏覽器使用代碼中的名稱/密碼訪問數據庫。如果這不起作用,HTTP不會運行,或者有另一個問題與您的代碼分開。

像這樣的問題,我從Infocenter中的示例代碼開始。

http://publib.boulder.ibm.com/infocenter/domhelp/v8r0/topic/com.ibm.designer.domino.main.doc/H_EXAMPLES_GETDATABASE_METHOD_JAVA.html

例如,

Database db = session.getDatabase("<SERVER>", "<DBNAME>"); 

if (!db.isOpen()) 

    System.out.println("DB does not exist."); 

    else 

    System.out.println("Title of database: \"" + db.getTitle()+ "\"") ; 

看看是否打印出任何東西。

錯誤消息通常表示數據庫被服務器鎖定或損壞。所以試試你知道你必須有權訪問的另一個數據庫(例如names.nsf)。

+0

我能夠訪問數據庫瀏覽器使用相同的密碼,如果它是錯誤的,我不知道得到錯誤作爲無效的用戶名密碼...但米不會出現任何這樣的錯誤。 我嘗試了西蒙建議的代碼,但得到「數據庫不存在」... 嘗試不同的數據庫,問題是相同的。 – Mythli 2012-04-20 09:45:24

+0

我試過「getCurrentAccessLevel()」..雖然我編輯訪問它的顯示訪問級別是:0 – Mythli 2012-04-20 09:51:21

+0

我可以知道你的意思是數據庫鎖定服務器? – Mythli 2012-04-20 09:53:02

2

如果您的數據庫的ACL禁止Internet訪問(表示http任務),您的數據庫將不會以Java代碼打開。檢查ACL的高級選項卡,屬性「最大Internet名稱和密碼」。它應該至少是存放者打開它,或者讀取器從它讀取數據。

+0

檢查過它的「編輯」 – Mythli 2012-04-20 09:48:16

1

只是出於好奇,什麼是印刷:

session.getUserName(); 

..just前getCurrentAccessLevel()說明了什麼?有沒有一個不明確的用戶名,你最終被認證爲你不期望的人?

+0

Thanx我檢查了我的代碼 – Mythli 2012-04-20 10:42:17

2

對於diiop工作,服務器必須讓允許HTTP客戶端瀏覽數據庫設置啓用。此設置位於Server document->Internet Protocols->HTTP->R5 Basics。值得注意的是,即使在現代Domino服務器實例中,該設置也會生效。我的猜測是,此設置的當前值(設置爲「否」)是您的問題來自何處。

您還應該確保diiop配置正確。第一個測試是訪問http://hostname.domain.com/diiop_ior.txt。訪問這個URL應該會顯示一個頁面,其中包含一個簡單的文本字符串,其中包含32個(看似)隨機字符。

當我需要diiop工作時,我通常會參考此page

+0

是我的代碼是啊,它是「否」。正如你所說,我給出我的用戶名和密碼後,用一個很長的隨機字符打開了diiop_ior.txt文件。 仍然收到相同的錯誤數據庫尚未打開 – Mythli 2012-04-24 13:24:16

+0

在將No從No更改爲Yes後,您確實重新啓動了HTTP嗎? – Jbruntt 2012-04-24 15:55:19

+0

是的,我也是。 – Mythli 2012-05-02 10:17:00

0

我遇到了同樣的錯誤

Database xxx.nsf has not been opened yet 

我的問題是由於使用前斜槓,而不是反斜槓。該修正它:

var db = session.getDatabase(session.getServerName(), "path/dbname.nsf"); 

我注意到,無處在上面的問題是確定的數據庫路徑,因此,或許正在使用錯誤的斜線。

惱人的是,而不是返回一個錯誤信息「文件未找到」的NotesException消息pathdbname.nsf has not been opened yet時候,其實它不能被發現......

相關問題