我得到了这个Java web应用程序,它使用Struts 2和Hibernate。最上层由Struts 2 action类组成。然后是我的业务逻辑类,它们负责应用程序的逻辑。最后还有一个DAO层(称为数据库桥),负责与数据库通信。
目前,我在DAO层打开会话并执行如下事务:
public static void saveObject(Object object) throws Exception {
Session session = null;
try {
session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
session.save(object);
session.getTransaction().commit();
} catch (Exception e) {
session.getTransaction().rollback();
e.printStackTrace();
throw e;
} finally {
if (session != null)
if (session.isOpen())
session.getTransaction().rollback();
}
}
这种方法似乎有一些问题:
>
逻辑上,我的事务是我的Struts 2操作(控制器),应该提交或回滚。Struts 2操作可能导致多个DAO调用,因此逻辑事务的某些部分可能被提交,其余部分可能被回滚,从而损害数据完整性。
一些对象包含一些懒惰集合。如果我们在DAO层执行事务,我们需要在那里初始化这些集合,这不是一个有效的方法。因为我们不需要在每个操作中加载集合。因此,每当一个操作需要一个惰性集合时,我们需要在该操作中打开一个会话,并在其中加载惰性集合,这是一个肮脏的解决方案。
我认为最好避免在DAO层中执行事务。如果我们将事务放在Struts 2操作中,它们将被视为原子事务,数据一致性将得到维护。另一方面,每当我们需要一个惰性集合时,我们都可以在动作中初始化它。
为了保持html" target="_blank">代码干净,我将保持DAO层与以前相同,但是DAO中的方法将从上层获取会话作为参数,并且它们不会处理事务和会话的提交。
这个策略听起来怎么样?这种方法是否存在重大缺陷?您认为哪里是启动事务和管理会话的最佳地点?
似乎您的思路是正确的,但您应该记住,Hibernate中的会话独立于事务。查看可以应用于应用程序的事务策略配置。
然后您应该阅读这篇文章会话和事务是如何一起工作的。最近,你可能会遵循通用DAO方法,不知道为什么,但这种技术非常受欢迎。
最后,上述所有功能都已经由Struts2 jQuery网格实现。看看这个答案。
似乎所有这些都是独立于Spring的,如果你喜欢Spring来管理事务,那么你应该去这里。
问题内容: 所以最近我一直在研究Clojure,我喜欢这种语言。我想看看是否可以在其中制作一个小型Web应用程序,以挑战自己。但是,我绝对没有建立任何与Java相关的Web应用程序的经验。实际上,我实际上对Java没有太多的经验。我从哪说起呢?我在Apache和LAMP堆栈方面拥有丰富的经验,并且我知道在Apache上大多数情况下我只会使用Fast- CGI,但我不知道Java世界中的等效功能(如
问题内容: 我们有一个大型Angularjs 1.6应用程序,该应用程序的$ rootscope分散在整个应用程序的过滤器,服务,路由等200多个位置中。因此需要对其进行重构,但是我不确定如何知道何时将其删除。什么时候在应用程序中使用$ rootscope是最佳实践? 我已经阅读了所有内容,从没读过,到用它来存储变量,我都以为是在控制器之间共享数据。从那以后,我读到最好在这种用例中使用工厂/服务,
问题内容: 我正在使用Flask / Gunicorn运行Web应用程序,并且对生命周期管理有疑问。我在Java世界中拥有关于servlet的更多经验。 我正在为服务创建一个宁静的接口。该服务始终在服务器上运行,并与一组子服务器进行通信和控制。在Java中,将通过侦听器和servlet初始化方法来创建和初始化我的服务(例如,传统上在中找到的设置)。 Flask中的等效设置和配置在哪里?我正在考虑诸
问题内容: 哪个是Java的最佳框架?我在寻找类似于Symfony的php和Ruby-Rails的Ruby吗?我什至不知道Java是否存在这样的东西。 问题答案: 有许多很棒的Java Web框架,但是如果您要寻找与Rails类似的东西,请查看Grails。它使用动态语言Groovy,但是使用Java VM。 查看他们的快速入门,确定它是否是您想要的。
大家好,我正在做一个整合struts2、spring和hibernate的项目,所以当我运行这个项目时,我得到了以下信息: Grave:Erreur lors de la configuration de la classe d'coute de l'application(应用程序侦听器)com。太阳面孔。配置。ConfigureListener java。lang.ClassNotFoundE
我想在成功发送关于Kafka主题的所有消息后执行一些代码。我读了很多文章。要知道我们可以使用事务发送消息。 我尝试了这么短的代码,但不确定如何在这个事务成功执行后执行一些代码。我也尝试过Kafka普勒,开始交易,但这对我的案子也不起作用。如果有什么想法的话会很有帮助。