2009-08-31 3 views
2

Мы работаем над разработкой приложения на основе Java EE. Наше приложение совместимо с Java 1.5 и будет развернуто в WAS ND 6.1.0.21 с пакетами функций EBJ 3.0 и Web Services. В настоящее время конфигурация представляет собой одну ячейку с двумя кластерами. Каждый кластер будет иметь два узла.WebSphere Application Server EJB Optimization

Наше приложение, или наша система, как я бы сказал, поставляется в двух или трех частях.

Часть 1: Ухо, развернутое в один кластер, содержащий сторонний код поставщика, в сочетании с кодом настройки. Их код совместим с EJB 2.0 и имеет множество интерфейсов удаленного дома.

Часть 2. Ухо, развернутое в том же кластере, что и первое ухо. Это ухо содержит EBJ 3, которые выполняют вызовы в EJB 2, поставляемые поставщиком и пользовательским кодом. Эти EJB 3 используются интерфейсом JSF, также упакованным с EAR, а некоторые из них также отображаются как веб-службы (JAX-WS 2.0 с соблюдением SOAP 1.2) для других клиентов.

Часть 3: могут быть другие услуги, которые не зависят от нашего приложения-разработчика/пользовательского кода. Этими услугами будут EJB 3.0 и веб-сервисы, которые развертываются в другом кластере.

По рекомендации некоторых сотрудников IBM на сайте здесь связь между узлами в кластере может быть EJB RMI. Но если мы переходим через кластеры и/или другие ячейки, то сообщение должно быть веб-службами.

При этом некоторые из нас задаются вопросом о производительности и оптимизации связи для скорости наших приложений, которые будут использовать наши веб-службы и EJB. В настоящее время большинство EJB отображаются как удаленные. (и наш поставщик установил их таким образом, а не подвергал локальные домашние интерфейсы). Нам интересно, поддерживает ли WAS какие-либо оптимизации между приложениями в одном узле узла/узла кластера. Если два приложения установлены в одной области, и они звонят друг другу через удаленный домашний интерфейс, WAS достаточно умны, чтобы сделать его локальным вызовом домашнего интерфейса?

Есть ли их другие методы оптимизации? Должны ли мы их рассматривать? Разве мы не должны? Каковы затраты/выгоды? Вот вопрос от одного из наших членов команды, отправленного по электронной почте:

Вопрос: Предположим, что мы разрабатываем наши EJB как удаленные EJB, где наш код контроллера UI разговаривает с нашими услугами EXT java через EJB3 ... каковы наши варианты оптимизации производительности, когда сервер EJB и клиент работают в одном контейнере?

Как одна точка ссылки, Google предоставил мне некоторую документацию по настройке производительности веб-приложений oooooold с 2000 года, в которой объясняется конфигурация настройки, которую вы можете настроить для включения Call By Reference для обмена EJB, когда они находятся на одном сервере JVM-сервера приложений. В нем указано следующее:

Поскольку EJB по своей сути не зависят от местоположения, они используют дистанционное программирование . Параметры метода и возвращаемые значения сериализуются по RMI-IIOP и возвращаются по значению. Это внутренняя модель RMI «Call By Value».

WebSphere обеспечивает оптимизацию производительности «Нет локальных копий» для запуска EJB и клиентов (как правило, сервлетов) на одном сервере JVM-сервера приложений. Параметр «Нет локальных « Копии »использует« Вызов по ссылке »и не создает локальные прокси для вызываемых объектов , когда и клиент, и удаленный объект находятся в одном процессе. В зависимости от вашей рабочей нагрузки это может привести к значительной экономии накладных расходов.

Настройки «Нет локальных копий», добавив следующие два параметра командной строки для на JVM сервера приложений:

* -Djavax.rmi.CORBA.UtilClass=com.ibm.CORBA.iiop.Util 
* -Dcom.ibm.CORBA.iiop.noLocalCopies=true 

ВНИМАНИЕ: Опция конфигурации «Нет локальных копий» не улучшает производительность по меняется «Call By Value "to" Call By Reference "для клиентов и EJB в одной JVM. Одним из побочных эффектов этого является то, что параметры метода, основанные на Java (не примитивные) , могут быть фактически изменены вызываемым корпоративным компонентом. Рассмотрим диаграмму 16a:

Кроме того, в будущем мы также будем использовать Process Server 6.2 и WESB 6.2. Есть идеи? рекомендации?

Благодаря

+0

Я думаю, что этот параметр (включить вызов ссылки) применим только для EJB удаленных интерфейсов не для EJB локальных интерфейсов. –

ответ

2

только автоматическая оптимизация, которая действительно может быть сделано для удаленного EJBs, если они совместного размещения (доступ из одной и той же JVM). В этом случае ORB будет замыкать часть работы, которая в противном случае потребовалась бы, если запрос должен был пройти через провод. Там все еще будут какие-то необходимые служебные расходы ORB, включая сериализацию объектов (если вы не включите noLocalCopies со всеми предостережениями, которые он приносит).

В противном случае, если вы знаете, что контроллер UI размещен, вызовы метода не зависят от копирования параметров или возвращаемого значения, и ваш интерфейс не полагается на различия в различиях между локальными и удаленными представлениями, тогда вы можете создавать и выставить локальный подинтерфейс, который будет намного быстрее, чем удаленный доступ через ORB.

Смежные вопросы