Почему мой Glassfish3.1.2.2/MyFaces2.1.9/JSF работает лучше, чем TomEE1.5+/CDI?

Я только что перенес свое веб-приложение с управляемых компонентов JSF на управляемые компоненты CDI, и я специально хотел, чтобы Tomcat или TomEE Plus были предпочтительным контейнером из-за замечательных вещей, которые я слышал об «OpenWebBeans». После развертывания, настройки и тестирования веб-приложения, управляемого компонентами TomEE 1.5+ / CDI, полное обновление страницы выполняется намного медленнее, чем управляемые компоненты Glassfish 3.1.2.2 / MyFaces 2.1.9 / JSF.

При использовании управляемых компонентов Glassfish 3.1.2.2 / MyFaces 2.1.9 / JSF полное обновление страницы занимает всего 2–3 секунды.

При использовании управляемых компонентов TomEE 1.5+ / CDI полное обновление страницы занимает от 5 до 10 секунд, а иногда даже больше. :(

Не могли бы вы сказать мне, почему это так?

Вчера, перед развертыванием веб-приложения управляемых компонентов TomEE 1.5+/CDI на производственном сервере (32-разрядная версия Windows 2003, 4 ГБ ОЗУ и 1 ТБ дискового пространства), я прочитал следующее, что на самом деле не ответило на мой/этот вопрос вообще:

glassfish v3 против tomcat 7

Я читал, что PPR лучше по производительности, чем FPR, но моя реализация тайм-аута/управления сеансом включала следующее:

  1. LoginFilter (фильтр сервлетов)

  2. следующее в h:head

мета http-equiv="обновить" content="#{session.maxInactiveInterval};url=pf_viewExpired.jsf"

Является ли CDI более дорогим (по времени), чем управляемые компоненты JSF, или TomEE является предпочтительным контейнером для CDI? Я знаю, что JBoss (или Weld) является или имеет эталонную реализацию CDI, поэтому лучше рассмотреть JBoss/Weld.

Перед выполнением задачи миграции с компонента, управляемого JSF, на компонент, управляемый CDI (а также миграции с Glassfish на TomEE), у меня возникли проблемы с запуском веб-приложения, управляемого компонентом CDI, на Glassfish/Weld.

Пожалуйста, ответьте на следующие вопросы выше и/или дайте совет. Спасибо.


person Howard    schedule 24.11.2012    source источник
comment
Это не конкретный вопрос JSF.   -  person Luiggi Mendoza    schedule 24.11.2012
comment
Действительно? Итак, Glassfish, Tomcat, JSF-managed-beans и CDI-managed-beans не являются конкретным вопросом JSF? Мне очень нравится производительность Glassfish-MyFaces-JSF-managed-beans, но я хочу перейти на CDI, так как многие ответственные за написание спецификации JSF рекомендуют всем перейти на CDI в рамках подготовки к JSF 2.2+, но перейти на CDI делает мое веб-приложение JSF намного хуже. Кроме того, насколько я понимаю, Glassfish/Weld-for-CDI - не лучший опыт.   -  person Howard    schedule 24.11.2012
comment
CDI является проксируемым bean-компонентом, а управляемый JSF bean-компонентом является простой ссылкой, ожидается, что bean-компоненты CDI будут немного медленнее, но не настолько экстремальными в долгосрочной перспективе. Разве вы не можете выполнить профилирование (VisualVM, JProfiler и т. д.), чтобы увидеть, на что тратится больше всего времени в течение этих 10 секунд?   -  person Arjan Tijms    schedule 24.11.2012
comment
@ArjanTijms, спасибо за этот ответ. Я узнаю, что определенно существует разница в производительности между управляемыми компонентами CDI и JSF. Мне нужно сделать кое-какое профилирование, вы второй человек, который это порекомендовал; никогда не делал этого раньше, так что, очевидно, сейчас самое время научиться делать именно это. Я нахожусь в контакте с несколькими коммиттерами OpenEJB, и они консультируют меня по электронной почте по некоторым вопросам, таким как «JSF» rendered=..., отсутствие доступа к базе данных в bean-компонентах (чего я все равно «не делаю») и т. д. .. Я собираюсь отказаться от использования JSF rendered=... в меру своих возможностей.   -  person Howard    schedule 25.11.2012
comment
Я уже использовал jvisualvm на рабочем сервере (поскольку проблема существует и может быть продублирована), и я обсуждал это с коммиттерами OpenEJB. Недавнее обсуждение включало упоминание о внедрении BeanA в BeanB и внедрении BeanB в BeanA; это должно быть решено в CDI 1.1 - JSR 346; Итак, я использую MyFaces CODI BeanManagerProvider, чтобы получить ссылку на компоненты CDI, чтобы избежать вложенных инъекций CDI. Надеюсь, это решит мою проблему.   -  person Howard    schedule 26.11.2012


Ответы (1)


Как указано в комментариях выше, я работаю с коммиттерами OpenEJB (TomEE) над решением этой проблемы. Лично я считаю, что проблема может быть связана со следующим:

  1. Управляемые компоненты CDI определены и указаны в приложении.
  2. Возможные циклические ссылки CDI (которые, возможно, будут разрешены в CDI 1.1)
  3. Действительно большой bean-компонент CDI @SessionScoped, который ссылается/вводит многие другие bean-компоненты CDI для выполнения бизнес-логики (или задач) в приложении.
  4. TomEE/OpenWebBeans (все еще находится в разработке)

Итак, ответ еще предстоит определить. Я открыл следующую OpenEJB JIRA для этой проблемы (URL ниже). Не стесняйтесь смотреть эту JIRA, если интересно.

TomEE 1.5.1 SNAPSHOT (и компоненты CDI) медленно работают на моем рабочем сервере

ОБНОВИТЬ:

Теперь управляемые-компоненты TomEE/CDI работают так же хорошо, как и Glassfish/JSF-управляемые-компоненты на рабочем сервере, потому что я недавно сделал следующее:

  1. заменить часто используемый динамический SQL запросами с именами @entity
  2. добавлены подсказки запросов к JPA createQuery() и createNamedQuery()
  3. заменено часто используемое rendered="#{EL expression}" новыми фейслетами и ui:include src="#{EL expression}", поскольку коммиттеры TomEE сообщили, что rendered="#{EL expression}" вызывается 6 раз.

Итак, мои компоненты, управляемые TomEE/CDI, теперь работают на рабочем сервере, и я отслеживаю производительность и отчеты/опыт конечных пользователей.

person Howard    schedule 27.11.2012
comment
в большинстве случаев это проблема с прицелами. Вы действительно использовали CDI Scpes на этом bean-компоненте? Или вы просто удалили javax.faces.bean.ManagedBean, заставив их эффективно обрабатываться как @Dependent для CDI, и поэтому они создаются снова и снова для каждого доступа EL? Чтобы дать вам некоторые идеи: я обслуживаю до 5 миллионов посещений страниц в день с помощью этого стека и имею время отклика от 5 до 25 мс для средних страниц... - person struberg; 25.01.2013