我正在使用 EJB3(Hibernate + Glassfish 用于应用程序和 Web 服务层,Lift on Glassfish 用于 Web UI)在 Java 中开发多层金融处理应用程序,我正在努力解决在哪里的问题把我的业务逻辑。
当这个项目开始时,我们的第一个想法是将大部分业务逻辑放入无状态会话 bean。然而,随着时间的推移,我们发现 EJB 框架提供的依赖注入过于局限,所以我们的很多业务逻辑最终都在由 Guice 在无状态会话 bean 的 @PostConstruct 方法中组装的 POJO 中. 这一进展导致我们在会话 bean 和 POJO 之间的业务逻辑碎片化,我正在尝试找出一种方法来纠正这个问题。
最初,我们尝试让 Web 层使用会话 bean 的远程接口来执行一些可以从 UI 和 Web 服务层访问的功能,这些功能由 @WebService 注释的无状态会话 bean 提供。从持久性和性能的角度来看,这被证明是一场噩梦,因为我们的实体图可能会变得非常大,并且将分离的实体图重新附加到持久性上下文中非常容易出错,所以我们的解决方案是从传递对象开始周围的标识符并在需要时从数据库中查找实体。
我的基本问题是:您可以建议哪些原则和指导方针来决定业务逻辑应该放在会话 bean 中还是 POJO 中?给定一个复杂的对象图,什么时候传递实体 bean 才有意义?