2014-07-04 72 views
2

在一個Java Bean我需要訪問NotesSession,這樣我可以創造一個NotesDirectory和REPID(打開數據庫做到在SSJS所有的時間。我的代碼containes這了createSession與NotesFactory

import lotus.domino.Base; 
import lotus.domino.Session; 
import lotus.domino.Database; 
import lotus.domino.View; 
import lotus.domino.Document; 
import lotus.domino.NotesException; 
import lotus.domino.View; 
import lotus.domino.ViewEntry; 
import lotus.domino.ViewEntryCollection; 
import lotus.domino.NotesException; 
import lotus.domino.Directory; 
import lotus.domino.NotesFactory; 
..... 

Session s = NotesFactory.createSession(); 
db = s.getCurrentDatabase(); 

它在db = s.CurrentDatabase()上失敗我已經添加了一些代碼並檢查了對象「s」,並且它基於我的搜索爲空,NotesFactory創建了一個新的NotesSession,我假設它不應該爲null。參考「s」我可以讓代碼正常運行,但不能做我想做的事 我知道我可以通過做得到當前分貝

Database db = ExtLibUtil.getCurrentDatabase(); 

但這並不能解決通過複製ID打開目標數據庫的問題,我必須稍後在代碼中執行此操作。

+0

你得到的錯誤是什麼?如果它是'NullPointerException',這是因爲'NotesFacotry.createsSession()'返回'null' –

+0

它調用db = s.getCurrentDatabase()時會引發NullPointerException異常。 「s」爲空,但不應該是。問題是爲什麼它不創建會話?這應該是非常簡單的,我想,並且我已經找到了很多使用Session s = NotesFactory.createSession()的代碼的例子。 –

+0

NotesFactory在它工作之前需要一個initThread(),它是爲獨立的Java而非XPage設計的 – stwissel

回答

3

您希望會話位於當前用戶的上下文中。所以只需使用:

ExtlibUtil.getCurrentSession(); 

查看一些articles from Declan瞭解更多關於XPages中的Java。

閱讀ExlibUtil的來源也很有啓發。它只是變量解析器的一個包裝。

+0

Declan選中的系列,希望我早些時候閱讀過它。在一個方面,幾乎有很多文件,但還不夠。希望有一本像Mastering XPages這樣的書,但掌握XPages和Java。 NotesFactory.createSession看起來像打開一個會話的自然方式 - 顯然不是 - 互聯網上提供的許多東西都假設了一種超越許多新手的理解水平(就像我自己一樣 - 近20年來一直在開發N/D應用程序,但XPage大約一年,而JAVA沒那麼多)。但我到了那裏,並感謝指針。 –

+0

您可能想要尋找一個經典:Bob Balaban用Java開發Notes。對於那些來自Notes的人來說,這是一個很好的Java入門。 Afaik他在網上發佈了它。然後閱讀O'Reilly的Head First Java。此後用Java思考。第三版是免費的PDF。不要從它開始,它會嚇到你 – stwissel