1. RoR + Java
Прежде всего, система разделена нами
на два уровня:
Нижний уровень: работа с БД, бизнес -
объекты, операции над ними,
обеспечение целостности. Этот уровень
не содержит ни пользовательского
интерфейса, ни пользовательской
прикладной логики. По сути - это
расширенный уровень модели
(<расширенный> большим набором
операций, порою нетривиальных, над
бизнес - объектами). <Сверху> этот
уровень выставляет web-сервисы и
полностью управляется через них.
Данный уровень реализован на Java (hibernate +
xfire).
Верхний уровень: <сервер отображения>.
То есть он отвечает за
пользовательский интерфейс и
пользовательскую прикладную логику.
Этот уровень реализован на RoR (для
работы с web-сервисами использован soap4r).
Эти RoR приложения не имеют <хранимых>
объектов и соответственно нет никаких
проблем запускать сколько угодно их
копий (масштабируемость решена).
Фактически мы подменили у RoR уровень
модели на вызов web-сервисов.
2. Множество специализированных
рабочих мест.
Поскольку <сервера отображения>
работают с одними и теми же модулями
поддержки бизнес - объектов, нет
никакой сложности сделать несколько
специализированных пользовательских
интерфейсов (рабочих мест) как
отдельные небольшие приложения RoR.
Общую целостность при этом легко
обеспечивает нижний уровень.
3. BPEL
Для описания больших бизнес процессов
нынче стало модно использовать BPEL. И на
мой взгляд это действительно
оправдано, если процесс включает более
нескольких десятков шагов. Однако,
такие процессы часто связывают
несколько организаций и могут
оказаться в ведении <чужого IT отдела>,
который может поменять интерфейс
запуска процесса (а это тоже web-сервис).
И здесь динамическая природа Ruby может
очень помочь. Обнаружив изменение
версии сервера отличающееся только
младшим разрядом (добавление новых
полей или методов), RoR может в фоне
запустить перегенерацию интерфейсных
классов. И соответственно
перенастраивается на новый процесс
без участия администратора (и
программистов)...