当前位置: 首页 > 面试题库 >

使用Wicket + Spring + Hibernate的三层应用程序。您将如何处理交易?

诸腾
2023-03-14
问题内容

我正在考虑使用Spring附带的 Open View In View(OSIV)
过滤器或拦截器,因为这对我作为开发人员来说似乎是一种方便的方法。如果这是您的建议,则建议使用过滤器或拦截器,为什么?

我还想知道它将如何与 HibernateTemplate 混合使用,是否会失去将方法标记为 @Transactional(readOnly =
true)
等的功能,从而失去获得更多细粒度事务控制的能力?

对于如何使用Hibernate和Spring将这种解决方案与三层体系结构进行集成,是否存在某种最佳实践(因为我认为我决定使用Wicket进行演示应该没有太大关系)?

如果我使用OSIV,至少我永远不会遇到延迟加载异常,另一方面,在视图中也可以通过取消提交来使我的事务提交更长的时间。


问题答案:

这实际上是个人喜好问题。

就个人而言,我喜欢在服务层设置事务边界。如果您开始考虑SOA,则对服务的每个调用都应该是独立的。如果您的视图层必须调用2个不同的服务(我们可以说这已经是代码味道了),那么这2个服务应该彼此独立运行,可以具有不同的事务配置,等等。服务还有助于确保在服务之外不会进行任何修改。

OTOH,您将不得不对服务中的工作进行更多思考(延迟加载,如果需要共同的事务性,则在同一服务方法中对功能进行分组等)。

一种可以帮助减少延迟加载错误的模式是在服务层之外使用Value
Object。服务应始终加载所需的所有数据并将其复制到VO。您失去了持久对象与视图层之间的直接映射(这意味着您必须编写更多代码),但是您可能会发现自己变得清晰起来…

编辑:
该决定将基于权衡取舍,因此我仍然认为,至少部分原因取决于个人喜好。服务层的事务对我来说更干净(更像SOA,逻辑明确地限制在服务层,不同的调用明显分开,…)。该方法的问题是LazyLoadingExceptions,可以使用VO来解决。如果VO只是持久性对象的副本,那么可以,这显然是对DRY原理的突破。如果像使用数据库视图一样使用VO,那么VO就是持久对象的简化。仍然需要编写更多代码,但可以使您的设计更加清晰。如果您需要插入某些授权方案,该功能将特别有用:如果某些字段仅对某些角色可见,



 类似资料:
  • 在每个请求之后没有关闭我的实体管理器并在每个方法中创建一个实体管理器的事实是否与我在执行大量请求时的内存不足错误有关? 提前致谢

  • 我需要使用Spring batch创建批处理作业。 作业将访问oracle DB,然后获取记录,在tasklet中处理它们并提交结果。 我打算用hibernate和Spring一起处理数据。作业将通过AutoSys执行。我使用的命令行JobRunner作为切入点。 (额外信息-我使用的DynamicWebProject已转换为Gradle、STS、Spring 4.0、Hibernate 5.0,

  • 我想使用maven创建一个多层java项目,如下所示: presentationlayer-guiModule(JSP/JSF页面的最顶层) PresentationLayer-GatewayModule(web服务的最顶层) BusinessLayer-ServiceModule(中间层) DataAccessLayer(最下层) 通用层(可从所有层访问的垂直层) 根pom 耳POM Guimo

  • 问题内容: 如何在Spring 应用程序上下文中配置org.springframework.orm.hibernate3.LocalSessionFactoryBean类的Hibernate类映射?我想将会话工厂类映射从以下内容移至相应的Spring会话工厂bean,以便消除。 档案: 档案: 问题答案: 如果您使用的是带有JPA注释的类,则可以使用代替,并将这些类直接注入到Spring bean

  • 我想在前端构建一个干净的Spring Boot应用程序。我的要求是: 应用程序基于浏览器 这些都是非常基本的要求,但我对保护web应用程序的可能性一无所知。有没有标准的推荐方法?我真的试着从一开始就学习教程https://spring.io/guides/tutorials/spring-security-and-angular-js/但由于混合了几个可能的解决方案,而不是描述一个,所以它非常令人

  • 大家好,我正在做一个整合struts2、spring和hibernate的项目,所以当我运行这个项目时,我得到了以下信息: Grave:Erreur lors de la configuration de la classe d'coute de l'application(应用程序侦听器)com。太阳面孔。配置。ConfigureListener java。lang.ClassNotFoundE