В прошлом я создавал нечто удивительно похожее, за исключением того, что мы не использовали шаблон команды, как вы делаете в настоящее время. В вашем случае ваши команды, похоже, ничего не делают, кроме как на самом деле искать и запускать метод службы, так почему бы просто не представить этот метод службы как API, а не использовать шаблон команды вообще. Затем вы можете подключить сервисные вызовы к EJB с помощью Spring Remoting, и все особенности Spring могут оставаться на уровне протокола (Servlet, EJB, MDB ...), и ваш код остается удивительно неосведомленным о том, что происходит вокруг него. .
Наша инфраструктура выглядит следующим образом. (Для тех, кто собирается жаловаться на существование EJB, это не вся инфраструктура, и по соображениям безопасности и производительности мы используем вызовы EJB к EJB для взаимодействия между сервисами).
Eclipse Rich Client -> (Spring Remoting - HTTP) -> Сервлет -> (Локальный интерфейс) -> EJB -> Реализация службы
Сервлет
- Использование контекста Spring для поиска локального интерфейса EJB и вызова общего метода вызова универсального интерфейса EJB с объектом RemoteInvocation (созданным и отправленным HttpProxyFactoryBean из Spring Remoting) и именем интерфейса службы.
EJB
- Поиск службы на основе ее имени интерфейса (также является именем компонента) и использование RemoteInvocationExecutor для вызова метода реализации службы с объектом RemoteInvocation.
Теперь EJB может быть привязан к нескольким сервисам (хотя мы используем модель развертывания один к одному). Вы можете использовать Spring Remoting для вызовов службы на основе Http, EJB или JMS из разных приложений. Тестирование без развертывания сервера тривиально, поскольку вы просто подключаете тесты непосредственно к реализациям.
Примечание. Я постараюсь добавить фрагменты кода, если получу такую возможность.