2011-11-22 34 views
0

我有一個資源處理程序需要訪問在對話範圍內工作的較低級別的bean。我們的應用程序允許在同一瀏覽器會話中使用不同瀏覽器標籤上的多個登錄會話,方法是將登錄詳細信息保留在此範圍內 - 因此數據庫訪問(我的資源處理程序)需要登錄引用該會話的會話。JSF中的資源處理程序中的對話範圍?

我試過期待它的工作,即使使用ExternalContext.encodeRedirectUrl()來嘗試使Faces包含任何它需要的東西。

我已經試過明確地把?CID參數到我的請求路徑,所以我訪問

/myapp/javax.faces.resource/thumbnail_3963075518712822225212162218.png.xhtml?ln=com.myapp.attachment&cid=1 

沒有對話出現在資源處理程序。

而且如果我試圖測試這個使用Conversation.isTransient()我得到一個

javax.enterprise.context.ContextNotActiveException: Conversation Context not active when method called on conversation Transient conversation 

(不過我認爲談話總是意味着活躍,併爲上述堆棧跟蹤不包括org.jboss.weld.servlet.ConversationPropagationFilter

我希望這是不是與錯誤https://issues.jboss.org/browse/JBSEAM-3689做 - !「!不要用對話」爲它的解決方法是

有沒有更好的?

感謝 - 理查德

回答

1

看看Seam Faces,看看你是否能按照你想要的方式工作。在JSF 2.0和2.1規範中,JSF與CDI幾乎沒有兼容性。我們正在努力爭取JSF的領先優勢,讓JSF 2.2更好,對於任何不便,我們深表歉意。

+0

我們會嘗試,並發現它減緩我們失望了很多。也許是另一個問題我們有一些相當大的罐子 - 自動生成的服務存根和DTO,用於我們遺留應用服務器的數千個類。他們沒有beans.xml。我們使用CDI擴展來手動註冊服務接口。當我們啓用Seam Faces時,我們仍然發現巨大的減速。 (這在JBoss 7.0.1中) 我現在的想法是編碼解決問題,儘量避免它。我有一個等同於會話級別的用戶和密碼。我可以在請求中編碼分區(登錄的第三部分)。 –

+0

緩慢問題很有意思,您是否介意爲我們創建一個JIRA,並提供儘可能多的信息,以便您提供給我們? – LightGuard

+0

我將不得不看看我能得到什麼 - 建立一個可以重新啓用它的環境。 –

0

瘋狂的想法 - 與手動呈現資源和FacesContext中調用完成()還原查看事件處理程序編寫一個XHTML頁面。啊!但是XHTML頁面確實可以獲得對話。

0

我已經完成了可能在錯誤報告中提出的建議。我找到了一種解決不使用會話範圍的問題的方法。在我的情況下,我有一個ThreadLocal,如果存在的話,爲訪問對話範圍數據的組件提供替代信息。

+0

***警告***服務器現在可以自由使用異步技術和非阻塞IO在多個請求之間共享服務器線程。在這種情況下使用ThreadLocal會有風險。我將調查R​​equestScope,並希望對我有用。 –