`
wateriness
  • 浏览: 17442 次
  • 来自: ...
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

SEAM框架之我见--关于Conversation

阅读更多
以前,web application中用到的Context主要有request context、session context、application context。seam中主要新增的两个Context 是conversation context和business process context。
Business process context主要用于工作流方面,让我最感兴趣的是conversation context,可以说seam的核心是conversation context。下面谈谈我对conversation context的理解。
一、概念
Seam官方文档对conversation context的解释包含三个方面:workspace、application transaction with optimistic semantics、workflow task。Workspace的功能在我经历的项目中尚未用到,我认为conversation context是完成一项工作经过的一系列步骤:可以包括一个或多个界面的多次用户交互、多次用户请求、多个数据库事务。在整个过程中涉及的状态及变化保存在conversation context。这也是seam强调自己与其他无状态框架不同,是有状态框架的原因所在。
以一个用户注册的例子为例:假设整个注册过程包含三个页面,第一个页面包括用户名、口令、口令验证,第二个页面包括用户的基本信息如真实姓名、地址、Email、电话等,第三个页面包括用户信用方面的信息。Seam建议的做法是建立二个类:一个是用户类,这是一个实体对象,一个用户注册类、这是一个stateful session bean,其中包含一个用户
属性,及一个口令验证码。第一个页面开始时,conversation context建立;第一个页面提交后,保存用户名、口令信息于会话bean并验证口令,会话bean保存在conversation context; 第二个页面提交后用户基本信息也保存到会话bean;第三个页面提交后用户信息收集完成,会话bean保存用户信息到数据库,然后销毁会话bean, conversation context结束。
 
二、Conversation 模型
Conversation 模型遵循如下规则:
1.       conversation context分二种:long-running conversation context和temporary conversation context。 JSF生命周期的每个阶段都有一个活动的conversation,conversation;
2.       在JSF生命周期的第一个阶段—restore view阶段,seam恢复先前的long-running conversation context,如果没有,seam创建一个temporary conversation context。
3.       当遇到有状态会话bean中方法带@Begin标注时,temporary conversation context提升为long-running conversation context,conversation开始;
4.       当遇到有状态会话bean中方法带@End标注时,long-running conversation context降级为temporary conversation context,conversation结束;
5.       在JSF生命周期的最后一个阶段—响应视图呈现后,seam保存long-running conversation context中的有状态对象或销毁temporary conversation context中的对象;
6.       一般情况下,页面请求(JSF Post)传递conversation context到下一阶段,非页面请求(如Get 请求)不传递conversation context到下一阶段;
7.       如果JSF生命周期被重定向截断,seam仍存储并恢复当前conversation context,除非当前conversation context被@End(beforeRedirect=true)标注方法终止。
 
三、用法
1.       调用有状态会话bean中带@Begin标注方法时开始conversation ,带@End标注方法时结束conversation。
2.       用Get request开始conversation。因为普通JSF页面通过get方式请求时不能触发任何事件侦听方法,而有时用户又希望页面被访问即开始conversation,访问其中的状态。为此,seam提供了一个内置的方法来解决这个问题,开发人员只需在pages.xml定义访问页面时希望触发的事件即可。例如:
 <pages><page view-id="/dvd.xhtml" action="#{search.selectFromRequest}"/> </pages>
       <pages></pages>      <pages></pages>   <page action="#{search.selectFromRequest}" view-id="/dvd.xhtml"></page>      
  
分享到:
评论
3 楼 zm5481@ 2009-01-14  
实现原理是什么呢?
2 楼 xiaoxin_1 2008-01-29  
再说一下session context吧
1 楼 yangzhihuan 2007-04-18  
英文水平不怎么样,看Jboss Seam的英文手册看得眼冒金星,看到wateriness兄这篇文章,有久旱逢甘露之感...

相关推荐

    Seam in Action - MEAP - 2008

    6. **对话:Seam 的工作单元 (The Conversation: Seam's Unit of Work)** - **对话概念**:Seam 通过对话的概念来管理应用程序的状态,确保每个对话都是一个独立的工作单元。 - **应用场景**:例如,在电子商务...

    seam-gen命令解析文档

    #### 一、Seam框架简介及seam-gen命令的作用 Seam框架是一款基于Java EE标准的轻量级企业级应用框架,它极大地简化了Java EE应用的开发流程,使得开发者能够更加高效地构建复杂的业务逻辑。Seam框架支持多种Java EE...

    Jboss seam3 实战

    标题中的“Jboss seam3 实战”表明,本文将重点介绍JBoss Seam框架的第三个版本的实际应用。JBoss Seam是一个开源的Java EE框架,它通过依赖注入和会话模型,简化了基于Java EE的企业级应用开发。Seam框架为开发者...

    seam_reference.pdf

    ### 关于Seam框架的关键知识点 #### 一、Seam框架概述 - **定义与功能**:Seam定义了一个统一的组件模型,适用于应用程序中的所有业务逻辑。它允许开发人员创建状态化的组件,并将这些组件的状态与不同的上下文...

    JBoss Seam 工作原理、seam和hibernate的范例、RESTFul的seam、seam-gen起步、seam组件、配置组件、jsf,jboss、标签、PDF、注解等等

    1.6.3. 理解Seam 业务对话(Conversation)................................................................................................................. 48 1.6.4. Seam 的UI 控制库.........................

    jboss seam 学习资料,seam in action和官方手册

    本资料集合包括《Seam in Action》和Seam官方参考手册,是深入学习Seam框架的理想资源。 ### 《Seam in Action》 这是一本由Dan Allen和Davin Bunk编写的专业书籍,详细介绍了Seam框架的各个方面。这本书适合已经...

    jboss-seam 注解

    在JBoss Seam框架中,`@Name`注解主要用于定义一个Seam组件。为了确保组件能够被正确识别与使用,每个Seam组件都必须拥有一个唯一的名称标识,即通过`@Name`来指定。例如: ```java @Name("componentName") public ...

    core seam technique

    ### 关于 Core Seam 技术的关键知识点 #### 核心概念概述 Seam 是一个下一代 Web 框架,它将标准 Java EE 技术与各种非标准技术整合到一致且统一的编程模型中。Seam 推动了 WebBeans 规范(JSR-299)的发展,并...

    Seam_Reference_Guide.pdf

    - **新建Seam Action**:Seam Actions是Seam框架的核心组成部分之一。这部分内容详细介绍了如何通过向导来创建一个新的Seam Action。 - **新建Seam Form**:Seam Forms允许开发者轻松地创建表单,并处理用户的输入...

    seam的使用说明文档

    在Seam框架提供的示例中,包含了多个具体应用场景下的实践案例,这些例子不仅帮助开发者快速上手Seam,还能深入理解框架的设计思想和技术细节。 ##### 1. 注册示例 (Registration Example) - **理解代码**:此示例...

    Geronimo服务器下部署Seam程序

    2. **Seam框架准备**: - 获取JBoss Seam的对应版本,确保与Geronimo服务器兼容。 - 解压Seam的发行版,包含所需的库和示例应用。 3. **Seam应用构建**: - 使用Eclipse、NetBeans等集成开发环境(IDE),创建一...

    Seam_开发工具配置手册.pdf

    - **创建CRUD数据库应用程序**:使用Seam框架可以快速搭建具有增删改查功能的应用程序,包括数据库设计、实体类生成、页面开发等步骤。 #### 九、CRUD应用程序实战演示 - **使用CRUD应用程序**:介绍如何使用已经...

    seam2.0 中文文档

    ### 关于Seam 2.0中文文档的关键知识点解析 #### 一、Seam简介及入门 ...通过对上述关键知识点的学习,开发者能够更好地理解和掌握Seam框架的核心技术和应用场景,从而更加高效地开发出高质量的Java Web应用。

    Seam Framework 2.0 Reference中文版

    JBoss Seam 是一款基于 Java 的企业级应用开发框架,它简化了应用程序的开发过程,特别是那些涉及复杂的用户交互、业务逻辑以及数据处理的应用。Seam 结合了 JavaServer Faces (JSF)、Java Persistence API (JPA)、...

    JSF项目中seam的配置

    这个监听器会在容器加载应用程序时初始化Seam框架。 完成上述基础配置后,开发者就能在任何支持JSF的容器中使用Seam了。不过,Seam还提供了对Ajax和EJB 3的支持,需要根据项目需求进行额外的配置。 接下来,我们来...

    Seam_Reference_Guide

    描述:本书是关于Seam框架的参考指南,旨在为Java EE 5开发者提供深入理解与应用Seam的知识点。 ### Seam框架概览 Seam框架是为Java EE 5环境设计的一个企业级应用程序框架,它极大地简化了开发过程,提供了更为...

    JBoss Seam入门介绍

    描述:本文将详细介绍JBoss Seam框架的核心概念、关键特性以及如何构建基于Seam的应用程序。Seam作为一个企业级Java Web应用框架,它将Java EE和JSF无缝集成,旨在填补Java EE 5.0中缺失的框架角色,并为JSR299: Web...

    Jboss Seam中文版

    ### JBoss Seam中文版知识点详解 #### JBoss Seam简介 JBoss Seam是一个强大的企业级应用开发...通过对这些内容的学习,开发者可以更加深入地理解和掌握Seam框架的核心技术和应用场景,从而提高开发效率和应用质量。

    jboss seam 中文文档

    - **理解 Seam 业务对话(Conversation)**:解释了业务对话在 Seam 中的作用和意义,以及如何设计有效的对话来提高用户体验。 - **Seam 的 UI 控制库**:介绍了 Seam 提供的一系列 UI 控件,这些控件可以帮助开发者...

    Practical_JBoss_Seam书的源代码

    《Practical JBoss Seam》是一本深入探讨JBoss Seam框架技术的书籍,其源代码包含在提供的压缩包中。Seam是一种开源的企业级Java框架,它整合了多种技术和概念,如JavaServer Faces (JSF)、Java Persistence API ...

Global site tag (gtag.js) - Google Analytics