Я занимаюсь разработкой многоуровневого приложения финансовой обработки на Java с использованием EJB3 (Hibernate + Glassfish для уровня приложений и веб-сервисов, Lift on Glassfish для веб-интерфейса), и я борюсь с вопросом о том, где поставил мою бизнес-логику.
Когда этот проект стартовал, нашей первой идеей было поместить большую часть нашей бизнес-логики в сессионные компоненты без сохранения состояния. Однако со временем мы обнаружили, что внедрение зависимостей, предоставляемое фреймворком EJB, слишком ограничивает, поэтому большая часть нашей бизнес-логики оказалась в POJO, которые собираются Guice в методе @PostConstruct сеансовых компонентов без сохранения состояния. . Этот прогресс привел к фрагментации нашей бизнес-логики между сессионными компонентами и объектами POJO, и я пытаюсь найти способ исправить это.
Первоначально мы пытались использовать наш веб-уровень с помощью удаленных интерфейсов сеансовых компонентов для выполнения некоторых функций, доступных как из пользовательского интерфейса, так и из уровня веб-службы, который предоставляется аннотированными @ WebService сеансовыми компонентами без сохранения состояния. Это оказалось кошмаром с точки зрения постоянства и производительности, потому что наш граф сущностей может вырасти довольно большими, и повторное присоединение графа отсоединенных сущностей к контексту постоянства оказалось очень подверженным ошибкам, поэтому наше решение заключалось в том, чтобы начать просто передачу объекта. идентификаторы вокруг и поиск сущностей из базы данных, где бы они ни были.
Мой основной вопрос таков: какие принципы и рекомендации вы можете предложить для принятия решения о том, следует ли использовать бизнес-логику в сессионном компоненте или в POJO? Когда имеет смысл передавать объектные компоненты, учитывая сложный граф объектов?