Я занимаюсь разработкой многоуровневого приложения для обработки финансовых ресурсов в Java с использованием EJB3 (Hibernate + Glassfish для слоя приложений и веб-сервисов, Lift on Glassfish для веб-интерфейса), и я «Я борюсь с вопросом о том, где поставить свою бизнес-логику.EJB3 Business Logic Patterns & Practices
Когда этот проект начался, наше первое представление состояло в том, чтобы положить основную часть нашей бизнес-логики в сессионные компоненты без состояния. Однако со временем мы обнаружили, что инъекция зависимостей, предоставляемая инфраструктурой EJB, слишком ограничена, поэтому большая часть нашей бизнес-логики оказалась в POJO, которые собраны Guice в методе @PostConstruct сессионных компонентов без состояния , Этот прогресс привел к фрагментации нашей бизнес-логики между сессионными компонентами и POJO, и я пытаюсь найти подход для исправления этого.
Первоначально мы попытались использовать наш веб-уровень с помощью удаленных интерфейсов сессионных компонентов для выполнения некоторых функций, которые доступны как из пользовательского интерфейса, так и из уровня веб-сервиса, который предоставляется @ WebService-аннотированными сессионными компонентами без состояния , Это оказалось ночным кошмаром с точки зрения персистентности и производительности, потому что граф нашего существа может расти довольно широко, а привязка графа отдельного объекта к контексту персистенции оказалась очень подверженной ошибкам, поэтому наше решение заключалось в том, чтобы начать просто передавать объект идентификаторы и поиск сущностей из базы данных, где бы они ни были необходимы.
Мой основной вопрос: какие принципы и рекомендации вы можете предложить для определения того, должна ли бизнес-логика идти в сеансовом компоненте или POJO? Когда имеет смысл передавать сущности бобы вокруг, учитывая сложный граф объектов?
«Системные» услуги, вы имеете в виду такие вещи, как контекст сохранения, транзакции и т. Д.? Я спрашиваю, потому что мое приложение использует ряд внешних служб, которым требуются вложенные зависимости (конфигурация подключения и прочее), которые я обрабатываю с помощью Guice. – 2008-10-30 20:55:56