1)seam的并发概述
Servlet和EJB规范都没有定义任何关于如何管理来自同一个客户端的并发请求的条款。 Servlet容器简单地让所有的线程并发运行,把线程隔离的任务交给应用程序代码。 EJB容器允许无状态组件并发访问,但如果并发访问一个有状态Session Bean,就会抛出一个异常。
旧式的Web应用程序是围绕细粒度的同步请求编写的,因此这种行为可能还OK。 但是对现代的程序而言,由于大量使用了很多细粒度的异步(AJAX)请求,并发是实际存在的,并且必须被程序模型支持。 Seam在其上下文模型中加入了并发管理层。
Seam Session 和应用上下文是多线程的。Seam允许在一个上下文中并发请求,并发处理。事件(Event)和页面(Page)上下文自然是单线程的。 业务流程(business process)上下文严格而言是多线程的,但实际情况中并发很少见,因此大多数情况不会出现并发。 最后,Seam为Conversation Context提供了 每对话每进程单线程 模型,这是通过把同一个长时间运行的对话上下文中的并发请求序列化实现的。
因为Session上下文是多线程的,并且经常包含冲突的状态,所以Session范围内的组件总是被Seam保护以防止并发操作。 Seam默认把针对Session范围的Session Bean和JavaBean的请求序列化(并且检测、解决任何发生的死锁)。 对Application Scoped的组件来说,这却不是默认行为,因为Application Scoped的组件通常不会包含冲突的状态,并且在全局级别进行同步代价 极为 高昂。但是,你可以强制对任何Session Bean或JavaBean组件采用序列化的线程模型,要做的就是加上 @Synchronized 注解。
并发模型意味着AJAX客户端可以安全的使用冲突的Session和Conversational状态,并且不需要开发者做任何特别的工作。
2)经验总结
数据字典是Application Scoped级别的,给类增加 @Synchronized
分享到:
相关推荐
- **并发模型**:处理多线程和并发访问的问题。 - **Seam组件**: - **无状态SessionBean**:执行短暂的任务。 - **有状态SessionBean**:保持状态,适用于长时间的操作。 - **实体Bean**:代表数据库中的实体...
**3.1.10 并发模型** Seam提供了强大的并发管理机制,确保了应用在高并发环境下的稳定性和性能。 **3.2 Seam组件** Seam支持多种类型的组件,包括无状态SessionBean、有状态SessionBean、实体Bean、JavaBeans、...
- **并发模型**: - 解释了Seam如何处理多线程环境下的上下文管理。 ##### 3.2 Seam组件 - **无状态SessionBean**: - 一种轻量级的组件,用于提供业务逻辑,不会保留客户端的状态信息。 - **有状态SessionBean**:...
例如,如何利用Seam进行状态管理,如何使用Seam的事件模型实现组件间的通信,以及如何利用Seam的安全框架保护应用免受攻击等。 压缩包内的“深入浅出JBoss+Seam.doc”可能是本书的电子版,包含了完整的章节内容和...
1.3. Seam 中的可点击列表:消息示例............................................................................................................................. 27 1.3.1. 理解代码.........................
首先,Seam 3.1.0在组件模型上进行了优化。它增强了依赖注入(DI)和事件传播机制,使得组件之间的通信更为便捷。通过使用CDI(Contexts and Dependency Injection for the Java EE Platform),开发者可以更加灵活...
- **并发对话**:探讨如何在同一个会话中同时处理多个对话,以实现更复杂的用户交互。 - **案例研究**:通过具体的案例来展示工作空间在实际项目中的应用。 #### 四、URL与事务管理 - **第六章:可书签化网页...
1. **Context(上下文)管理**:Seam 提供了一个灵活的上下文模型,允许开发者在不同层面上管理和访问对象。这包括请求上下文、会话上下文和应用上下文。请求上下文存储与HTTP请求相关的数据,会话上下文则跨多个...
通过实际案例,书中还展示了如何利用Seam解决复杂的企业级问题,如事务管理、并发控制等。此外,书中还会介绍如何使用Seam与其他技术如Spring、Hibernate等协同工作,提升整体应用的性能和可扩展性。 总之,《Seam ...
书中通过多个具体项目案例深入浅出地讲解了如何使用Seam 2.x进行实际开发。例如,通过一个简单的在线购物系统来展示如何实现用户注册、商品浏览、订单处理等功能;再比如通过一个论坛应用来演示如何管理帖子和评论...
1.1.3 在Java中使用SQL 1.1.4 面向对象应用程序中的持久化 1.2 范式不匹配 1.2.1 粒度问题 1.2.2 子类型问题 1.2.3 同一性问题 1.2.4 与关联相关的问题 1.2.5 数据导航的问题 ...
- **应用请求值**: 将表单中的值绑定到组件模型。 - **处理验证**: 检查用户输入是否符合要求。 - **更新模型值**: 更新后端模型。 - **调用应用程序**: 执行业务逻辑。 - **渲染响应**: 生成HTML页面返回给客户端。...
- **组件模型**:基于JSF组件模型,扩展了标准组件功能。 - **Ajax引擎**:提供了强大的Ajax支持,简化了异步通信。 - **皮肤机制**:允许开发者轻松定制界面外观。 #### 限制与规则 - 在使用某些组件时需要注意...
4.4.2exit(3) 在C++ 中不是线程安全的.. . . . . . . . . . . . . . . . 94 4.5善用__thread 关键字.. . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 4.6多线程与IO . . . . . . . . . . . . . . . . ....