0

我刚刚将我的 Web 应用程序从 JSF 托管 bean 迁移到 CDI 托管 bean,我特别希望 Tomcat 或 TomEE Plus 成为首选容器,因为我听说过有关“OpenWebBeans”的好消息。在部署、配置和测试 TomEE 1.5+ / CDI-managed-beans Web 应用程序后,整页刷新比 Glassfish 3.1.2.2 / MyFaces 2.1.9 / JSF 托管 bean 慢得多。

使用 Glassfish 3.1.2.2 / MyFaces 2.1.9 / JSF 托管 bean,整页刷新只需 2 到 3 秒。

使用 TomEE 1.5+ / CDI-managed-beans,整页刷新需要 5 到 10 秒,有时甚至更长。:(

你能告诉我这是为什么吗?

昨天,在将 TomEE 1.5+ / CDI 托管 bean web 应用程序部署到生产服务器(Windows 2003 32 位 4GB RAM 和 1TB 磁盘空间)之前,我阅读了以下内容,这真的没有回答我/这个问题:

glassfish v3 vs tomcat 7

我读到 PPR 在性能上比 FPR 更好,但是我的会话超时/管理实现涉及以下内容:

  1. LoginFilter(servlet 过滤器)

  2. h:head 中的以下内容

meta http-equiv="refresh" content="#{session.maxInactiveInterval};url=pf_viewExpired.jsf"

CDI 是否比 JSF 管理的 bean 更(时间)昂贵,还是 TomEE 是 CDI 的首选容器?我知道 JBoss(或 Weld)是或有 CDI 的参考实现,所以最好考虑 JBoss/Weld。

在完成从 JSF 管理的 bean 迁移到 CDI 管理的 bean(以及从 Glassfish 迁移到 TomEE)的任务之前,我在 Glassfish/Weld 上启动 CDI 管理的 bean Web 应用程序时遇到了问题。

请回答上述问题,和/或提出建议。谢谢。

4

1 回答 1

0

如上面的评论所示,我正在与 OpenEJB (TomEE) 提交者合作解决这个问题。就个人而言,我觉得这个问题可能是由于以下原因:

  1. 在应用程序中定义和引用的 CDI 托管 bean
  2. 可能的 CDI 循环引用(可能会在 CDI 1.1 中解决)
  3. 一个非常大的 CDI @SessionScoped bean,它引用/注入许多其他 CDI bean 以在应用程序中完成业务逻辑(或任务)
  4. TomEE/OpenWebBeans(仍在开发中)

所以,答案还有待确定。我为此问题打开了以下 OpenEJB JIRA(以下 URL)。如果有兴趣,请随意观看此 JIRA。

TomEE 1.5.1 SNAPSHOT(和 CDI bean)在我的生产服务器上运行缓慢

更新:

现在,TomEE/CDI-managed-beans 在生产服务器上的表现与 Glassfish/JSF-managed-beans 一样好,因为我最近做了以下事情:

  1. 用 @entity 命名查询替换常用的动态 SQL
  2. 向 JPA createQuery() 和 createNamedQuery() 添加了查询提示
  3. 用新的 facelets 和 ui:include src="#{EL expression}" 替换了常用的 render="#{EL expression}",因为 TomEE 提交者建议 render="#{EL expression}" 被调用了 6 次。

所以,我的 TomEE/CDI 托管 bean 现在正在生产服务器上运行,我正在监视性能和最终用户报告/体验。

于 2012-11-27T04:26:32.427 回答