<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Sealyu

    --- 博客已遷移至: http://www.sealyu.com/blog

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      618 隨筆 :: 87 文章 :: 225 評論 :: 0 Trackbacks

    Conversation timeout seems to be a commonly misunderstood Seam concept. I often see postings on the Seam forums claiming that the conversation-timeout doesn’t work! Well, actually it does, you simply have to understand the semantics.

    Configuring the conversation-timeout period can be accomplished through the following in your components.xml:

    <core:manager conversation-timeout="900000" />

    At first glance most developers relate conversation-timeout to session timeout, where any conversation will simply timeout after the configured conversation timeout period. As you will quickly notice during testing, this is not the case. To execute a quick experiment, try the following configuration in the components.xml of the seam-booking example:

    <core:manager conversation-timeout="60000" />

    Because the conversation-timeout is set in milliseconds, the above configuration sets the conversation-timeout to 1 minute. Now in the web.xml set the session timeout to 5 minutes:

    <session-config>
    <session-timeout>5</session-timeout>
    </session-config>

    Now in the destroy method of the HotelBookingAction add the following line:

    ...
    @Destroy @Remove
    public void destroy() {
    log.info("Destroying HotelBookingAction...");
    }
    ...

    This will log our message when the conversation ends and the HotelBookingAction is destroyed. Now deploy the seam-booking example to your local JBoss instance and start up a conversation. This can be accomplished by logging in, navigating to the hotels listing, and selecting a hotel for booking. At this point, wait for the 1 minute period… nothing happens. Now wait for another 4 minutes, the message is displayed. The conversation timed out along with the session.

    Foreground vs. Background Conversations

    So why didn’t our conversation timeout as configured? This is because the conversation-timeout only affects background conversations. The foreground conversation will only timeout when the session times out. Foreground, background, what? The foreground conversation is the conversation that the user last interacted with. A background conversation is any other conversation in the user’s session. Thus, in our previous scenario the foreground conversation timed out with the session as expected.

    Now lets try another approach. Perform the same steps as before to proceed to the booking screen. Now open a new window and perform the same steps. We now have a foreground conversation and a background conversation in progress. Again, wait 1 minute. Nothing happened. If you wait an additional 4 minutes, both conversations will timeout. So what is going on here, I thought we had a background conversation? We did, Seam simply checks the conversation timeout on each request. Thus, if I interact with the foreground conversation after 1 minute, the background conversation times out. Try it, perform the same steps, wait 1 minute and then click on the window of the foreground conversation and you will see the log message.

    This is very desirable behavior. Essentially when a user leaves his or her desk for a period of time and comes back, if the session is still active it would be desirable to maintain the state the user was previously in. This is the foreground conversation state. All other background conversation state is left to timeout after the configured conversation-timeout period which reduces overall memory consumption. This enables a developer to think less about memory usage and cleaning up state and more about developing business logic. That’s why we’re here right?

    Letting the user choose

    So you may be asking at this point why the conversation-timeout doesn’t use polling. As we said, you must interact with the foreground conversation to cause the background conversations to timeout after the conversation-timeout period. Imagine that the user had many windows open and leaves his or her desk. Based on which window the user clicks on when they return, that becomes the foreground conversation timing out any other background conversations. This gives the user a chance to resume whichever conversation he or she chooses, not the one the developer chooses.

    posted on 2010-04-20 00:36 seal 閱讀(461) 評論(0)  編輯  收藏 所屬分類: Seam
    主站蜘蛛池模板: 亚洲av成人中文无码专区| 国产亚洲Av综合人人澡精品| 无人在线观看免费高清视频| 亚洲乱色熟女一区二区三区蜜臀| 国产精品嫩草影院免费| 中文字幕手机在线免费看电影| 97se亚洲综合在线| 好吊妞视频免费视频| 久久国产福利免费| 亚洲av一本岛在线播放| 亚洲AV成人潮喷综合网| 久久久久久久久久国产精品免费| 亚洲国产精品精华液| 亚洲av无码一区二区三区乱子伦| 美女视频黄的全免费视频| 黄色视屏在线免费播放| 国产成人精品日本亚洲专| 亚洲色成人中文字幕网站| 性xxxx视频播放免费| 中文字幕无码日韩专区免费| 亚洲中文精品久久久久久不卡| 久久精品夜色噜噜亚洲A∨| 欧美a级成人网站免费| 在线观看免费视频网站色| 亚洲第一第二第三第四第五第六 | 国产成人A人亚洲精品无码| 免费中文熟妇在线影片| 黄网站免费在线观看| 国产亚洲欧美在线观看| 91亚洲精品麻豆| 久久亚洲国产欧洲精品一| 四虎国产精品免费视| 久久久久久99av无码免费网站| 国产无遮挡裸体免费视频在线观看 | 久久99亚洲网美利坚合众国| 亚洲AV蜜桃永久无码精品| 成人黄动漫画免费网站视频 | 在线看片v免费观看视频777| 国产一二三四区乱码免费| 国产精品亚洲一区二区无码| 亚洲人妖女同在线播放|