php cdi_配置CDI对话的超时
php cdi
在開(kāi)發(fā)JSF應(yīng)用程序時(shí),CDI對(duì)話范圍是一個(gè)很好的功能。 想象一下,您有大型數(shù)據(jù)表,需要很長(zhǎng)時(shí)間才能加載。 由于高內(nèi)存消耗,您通常不希望將加載的數(shù)據(jù)放置在會(huì)話作用域的Bean中。 而且,您不能將加載的數(shù)據(jù)放在視圖范圍的Bean中,因?yàn)槿绻脩綦x開(kāi)并進(jìn)入同一視圖,您將不希望總是再次重新加載數(shù)據(jù)。 如果用戶在特定時(shí)間間隔內(nèi)進(jìn)入同一頁(yè)面,則僅保留數(shù)據(jù);如果在此時(shí)間間隔內(nèi)未訪問(wèn)Bean,則再次重新加載它們將是很好的選擇。這可以通過(guò)會(huì)話作用域的bean超時(shí)來(lái)實(shí)現(xiàn)。 我們將處理MyFaces CODI (CDI擴(kuò)展),并了解如何為使用@ConversationScoped注釋的bean設(shè)置自定義超時(shí)。 默認(rèn)超時(shí)是30分鐘。 對(duì)于我們的示例來(lái)說(shuō)太長(zhǎng)了。 我們將其配置1分鐘。 第一步是擴(kuò)展CODI的ConversationConfig并覆蓋方法getConversationTimeoutInMinutes() 。 讓我們編寫(xiě)一個(gè)類AlternativeConversationConfig 。
package controller.cdi;import javax.enterprise.context.ApplicationScoped; import javax.enterprise.inject.Alternative; import javax.enterprise.inject.Specializes; import org.apache.myfaces.extensions.cdi.core.api.config.ConfigEntry; import org.apache.myfaces.extensions.cdi.core.api.scope.conversation.config.ConversationConfig;@ApplicationScoped @Alternative @Specializes public class AlternativeConversationConfig extends ConversationConfig {@ConfigEntrypublic int getConversationTimeoutInMinutes() {return 1;} }重要的是注釋@Specializes ,該注釋允許在每個(gè)現(xiàn)有位置注入AlternativeConversationConfig而不是ConversationConfig 。 第二步是在beans.xml正確輸入,以在所有ConversationConfig注入點(diǎn)上使用(激活)我們的類。
<alternatives><class>controller.cdi.AlternativeConversationConfig</class> </alternatives>服務(wù)器在啟動(dòng)過(guò)程中的日志輸出現(xiàn)在包含這些行
config implementation: controller.cdi.AlternativeConversationConfig$Proxy$_$$_WeldClientProxy config implementation: controller.cdi.AlternativeConversationConfigmethod: getConversationTimeoutInMinutesvalue: 1為了檢查一切正常,我們可以編寫(xiě)一個(gè)對(duì)話范圍的bean并在facelets中使用它。
import java.io.Serializable; import javax.faces.event.ActionEvent; import javax.inject.Named; import org.apache.myfaces.extensions.cdi.core.api.scope.conversation.ConversationScoped;@Named @ConversationScoped public class CdiBeanConversationScoped implements Serializable {private int counter;public int getCounter() {return counter;}public void increment(ActionEvent e) {counter++;} }<h:outputText id='counter' value='Conversation scoped counter: #{cdiBeanConversationScoped.counter}'/><p:commandButton value='Increment counter' process='@this' update='counter'actionListener='#{cdiBeanConversationScoped.increment}'/>計(jì)數(shù)器將在1分鐘后過(guò)期。 如果在此時(shí)間間隔內(nèi)沒(méi)有訪問(wèn)Bean。 只需按一下按鈕即可增加計(jì)數(shù)器,等待時(shí)間超過(guò)1分鐘。 并再次增加它。 您將看到該計(jì)數(shù)器已重置。
參考: 在軟件開(kāi)發(fā)思想上,從我們的JCG合作伙伴 Oleg Varaksin 配置CDI對(duì)話的超時(shí) 。
翻譯自: https://www.javacodegeeks.com/2012/09/configure-timeout-for-cdi-conversations.html
php cdi
總結(jié)
以上是生活随笔為你收集整理的php cdi_配置CDI对话的超时的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: epi是什么 epi释义
- 下一篇: php cdi_涉及CDI和JSF的过期