近半年的项目实践让我们注意到了seam2.0.2的conversation的性能问题。测试人员抱怨系统速度慢的时候,我们一开始以为是由于数据库查询导致的性能问题。但是经过各方面排查,我们发现一个不做数据库操作的简单页面,就算是按照前文《优化richfaces,给seam提速》操作后,同样会很慢。于是我们开始怀疑起 seam本身了。一个无意中的试验发现,我把一个以前放在conversation scope内的组件换成 page scope后,速度一下子提高了五六倍。今天通过对日志的分细,证实了我的感觉。
我写了一个timefilter,记下服务器从接到http request到生成后http response后总共花掉了多少时间。被测试的action是一个普通的java bean,共有二十多个property, 里面有一个业务方法。在不改变其它代码,只改变这个java类前的annotation, 把 scope 从conversation改成page后,测试十次,page scope时要比conversation时快5到10倍!这个测试结果确实是非常地让我惊讶!conversation scope的组件到底有什么特殊的呢?
为了能够观查到seam内部的运作情况,我把org.jboss的log设成debug级别的,现在点一下页面,一个post->redirect->get,在使用page scope时会产生 1 万多行日志,而conversation scope时居然会产生 近 3 万条日志!光从这个日志的数目就可以看到 conversation 在背后不只是做了一点点工作呀!再仔细对比两者的日志,会发现,conversation scope里会多出许多处理事件的日志:instantiating Seam component: org.jboss.seam.core.events 。这句日志在conversation时出现了 3630次,而 page scope时只出现了 1464次。conversation的日志里多出了大量如下日志:
2008-06-24 14:23:32,592 DEBUG [org.jboss.seam.core.Events] Processing event:org.jboss.seam.preRemoveVariable.supplierSearchAction.supplierName
2008-06-24 14:23:32,592 DEBUG [org.jboss.seam.Component] instantiating Seam component: org.jboss.seam.core.events
2008-06-24 14:23:32,592 DEBUG [org.jboss.seam.Component] initializing new instance of: org.jboss.seam.core.events
2008-06-24 14:23:32,592 DEBUG [...]
分享到:
相关推荐
性能测试是确保Seam应用能够高效运行的关键环节。以下是一些提高Seam系统性能测试点的详细说明: 1. **性能指标监控**: - **响应时间**:应用的响应速度直接影响用户体验。通过监控请求处理时间和页面加载时间,...
每个开发者都可以在本地环境中使用相同的构建流程,而不会因为库版本不一致或缺失而导致问题。 总的来说,通过Maven管理Seam项目,可以有效地组织和自动化项目构建,减少手动配置的工作,提高开发效率。结合Seam的...
在过去的两周里,我深入学习了SeamTest,这是一个用于Java EE应用测试的强大...在实际使用过程中,遇到的问题和错误是学习过程的一部分,通过解决这些问题,我们可以更深入地理解SeamTest和Seam框架的内部工作原理。
8. **Seam组件**:了解如Conversation、Transactions、邮件服务等Seam内置组件的使用方法。 9. **实时性与Ajax**:探索Seam如何实现实时更新和Ajax功能,提升用户体验。 ### Seam官方参考手册 Seam官方参考手册...
6. **使用Seam工作空间管理的完整范例:IssueTracker**:介绍了一个问题追踪系统的实现过程,强调了Seam在多用户协作方面的优势。 7. **结合Seam和Hibernate的范例:Hibernate系统**:展示了一个利用Seam和Hibernate...
Seam将Java EE 5.0组件与JSF托管bean紧密集成,即使不使用Java EE 5.0,也可以选择POJO作为Seam组件,这种灵活性使得Seam适用于更多场景。 #### 3. AJAX支持 Seam支持多个开源JSF AJAX库,如JBoss RichFaces和JBoss...
- **工作原理**:酒店预订示例深入探讨了Seam对话机制的高级用法,如嵌套对话(Nested Conversation),并介绍了如何使用Seam调试页面来诊断和解决应用问题。 #### 三、Seam集成与开发环境搭建 除了以上示例外,...
- Seam引入了会话模型,支持对话(Conversation)的生命周期管理。 - Seam集成了一系列Java EE技术,包括EJB3、JSF、JPA等,实现了一个统一的应用栈。 2. JBoss Seam3特性: - Seam3的构建工具主要使用Maven。 ...
7. **社区支持**:在不使用EJB的环境中运行Seam2可能会遇到一些特定的问题,这时,社区的支持变得至关重要。你可以查阅Seam官方文档,参与论坛讨论,或者参考其他开发者的经验分享,以解决遇到的难题。 总之,虽然...
通过对`Conversation`的巧妙利用,可以避免在JSF中常见的数据丢失问题,特别是在处理复杂表单和导航时。同时,Seam与其他Java EE技术的集成也使得整个应用的架构更加灵活和强大。然而,由于Seam不断更新,开发者需要...
这涉及到在web.xml文件中配置Seam Filter和Seam Listener,以便处理JSF请求生命周期中的事件,并确保Seam组件与JSF页面正确交互。 #### 1.1.2. 使用Facelets Facelets是JSF推荐的视图表示技术,提供了更简洁、可...
Seam鼓励使用Java 5的注解特性来配置应用,这种方式可以减少XML配置文件的数量,提高开发效率。 ##### 7. 增强的表达式语言 Seam提供了对标准EL(Expression Language)的扩展,称为JBoss EL。这种扩展允许在...
- **工作原理**:此示例展示了如何使用 SEAM 的工作空间管理功能来实现问题跟踪系统。 ##### 1.9 结合Seam和Hibernate的示例:Hibernate预订系统 - **代码分析**:利用 SEAM 和 Hibernate 实现宾馆预订系统。 - *...
《Seam in Action》这本书系统地介绍了 Seam 框架的基础知识和高级特性,适合想要深入了解 Seam 框架的开发者阅读。通过对本书的学习,开发者可以掌握如何利用 Seam 快速构建高性能的企业级 Web 应用程序。此外,...
4. **EJB集成**:Seam与EJB 3.0无缝集成,允许开发者在不牺牲可维护性和性能的前提下,利用EJB来实现业务逻辑。这使得Seam成为开发企业级应用的理想选择。 5. **持久性管理**:Seam通过JPA提供了简单且强大的数据...
Seam与EJB3.0的轻量级版本集成良好,理解EJB的角色和使用场景对Seam的使用有帮助。 5. **Seam框架结构**:Seam框架包含了多个模块,如Seam Core、Seam Faces、Seam Security等,了解这些模块的功能和它们之间的关系...
**Seam Carving 技术详解** Seam Carving,又称图像拉链,是一种基于能量最小化的图像调整方法,主要用于图像大小的动态调整,而不仅仅是简单的等比例缩放。它能够在保持图像主要结构不变的情况下,根据需要增加或...
Seam Carving是一种图像内容感知的尺寸调整方法,它能够在保持图像主要结构不变的情况下,智能地减少或增加图像的宽度和高度。这种方法是由Amit Agarwal和Matthieu Salzmann于2007年提出的,其核心思想是通过找到...
Seam允许开发者使用相同的POJOs在不同的应用组件中,提高了代码复用性和开发效率。 此外,Seam还扩展了EJB 3.0的状态管理,使得从Web层到业务层都能拥有状态上下文,这对于处理有状态的应用和业务流程驱动的应用...