`

service层方法相互调用及事务处理的思路及解决

阅读更多

service层多个方法中包含相同的业务逻辑是一种很常见的现场,通常会遇到如下几个问题:

1.怎样合理的抽象出公共的业务逻辑?

2.怎样处理service层中方法之间的调用?

3.怎样处理这些方法的事务?

 

下面是我个人的处理方式,仅供参考。由于实现比较简单,所以相关说明较少。

 

代码示例:

public void serviceMehtod1(){
 dao.insert();
 ....
 dao.update();
}

public void serviceMethod2(){
 dao.insert();
}

 

 

serviceMehtod1中的事务范围是insert()+update(),serviceMehtod2的事务范围是insert(),
添加了事务处理后的代码很简单,相信不用我解释大家都能看明白。

 

public void serviceMehtod1(){
 //开始事务
 Session session = HibernateUtil.currentSession();
 Transaction tx = session.beginTransaction();

 insertService()
 ....
 updateService()

 tx.commit();
 //事务终止
}

public void serviceMethod2(){
 //开始事务
 Session session = HibernateUtil.currentSession();
 Transaction tx = session.beginTransaction();

 insertService();

 tx.commit();
 //事务终止
}

//公共业务逻辑
//不添加事务处理
public void insertService(){
 dao.insert();
}

//公共业务逻辑
//不添加事务处理
public void updateService(){
 dao.update();
}

 

当然,对于公共的业务逻辑,比较好的方式是:封装他们到一个基类。

具体的领域对象或者service层对象继承调用这个基类就可以了。

2
2
分享到:
评论
3 楼 mytudousi 2010-09-02  
public void serviceMehtod1(){  
//开始事务  
Session session = HibernateUtil.currentSession();  
Transaction tx = session.beginTransaction();  
 
insertService()  
....  
updateService()  
 
tx.commit();  
//事务终止  
}  
 

这段代码,在函数中创建了一个Session,里面调用的两个函数确没有接受这个Session参数。估计楼主的是在这两个函数里面调用了得到当前Session的方法。
所以楼主获取Session的方法应该是使用类似单例模式的方案。那么如果遇到多线程怎么办?得到的还是一个Session,而辅线程和主线程在同时用这个Session的时候,肯定会出现问题。

楼主怎么解决?

我现在也在考虑是用这中方式来管理系统中的事务,之前我们是放到数据库访问层中了。但我有想到了是在每个操作DAL的方法中传入Session还是这个操作数据库的方法直接从系统中获得默认的唯一session,肯定第二种比较简洁,但同时又会遇到多线程的问题。
2 楼 charles751 2009-01-12  
Spring的@Transactional本质上也是对业务逻辑添加事务控制,
只是代码中没有出现事务处理的代码而已。

这里只是介绍事务的方法之间相互调用时,应该怎样处理,
以及事务范围的划分。
1 楼 yeminping 2009-01-12  
用Spring的@Transactional不是更简单?

相关推荐

    新闻发布系统设计思路(Dao与service)

    Service层通常调用Dao层的方法来完成对数据的增删改查,并进行必要的业务验证和异常处理。在设计Service时,我们需要考虑到服务的可重用性和松耦合性,确保各个Service之间相互独立,便于维护和扩展。 在实际开发中...

    六层架构抽象工厂简单应用

    在描述中提到的"抽象工厂"设计模式,是工厂方法模式的进一步抽象,它提供了一个创建一系列相关或相互依赖对象的接口,而无需指定它们的具体类。在六层架构中,特别是在数据访问层,抽象工厂可以用来创建针对不同...

    struts2 sping3 mybatis框架样例DEMO

    6. **Action类**:Struts2中的控制器,接收用户请求,调用Service层的方法,然后将结果转发给相应的视图。 7. **视图(View)**:可能是JSP页面或其他类型的视图技术,展示给用户。 通过分析这个DEMO,你可以学习...

    SSM集成应用

    配置SpringMVC,使其能够调用service层提供的服务,并将结果返回给客户端。 **4.7 SSM实例** 一个完整的SSM框架整合示例项目,涵盖从数据库连接到页面展示的整个流程。 #### Spring框架详解 **5.1 Spring的特点*...

    微服务设计与解决方案.docx

    8. 分布式事务处理 9. 数据一致性解决方案 10. 安全性管理 11. 日志收集与分析 12. 持续集成/持续部署(CI/CD) 13. 服务测试框架 14. 微服务治理工具 15. 系统健康检查 16. 服务性能优化 17. 容错机制 18. 配置中心...

    SOA与ESB的形象概念SOA与ESB的形象概念

    - **事务管理与安全性:** ESB还承担着处理事务和安全性的职责,确保服务调用的完整性和安全性。 - **性能优化:** ESB通过缓存、负载均衡等机制提高系统的整体性能。 综上所述,SOA提供了一种设计思路,而ESB则为...

    软件平台项目主要技术路线

    实时数据中间层技术结合了实时系统和数据库技术的优点,专门处理快速变化的数据和具有时间限制的事务。它不仅解决了实时系统中的数据管理问题,还为实时数据提供了时间驱动的调度和资源分配算法。针对不同的应用需求...

    PHP面试大全-基础篇

    - **反射**:一种可以在运行时分析类、方法和属性的机制,用于获取类的信息或动态调用方法。 **3.3 网站安全问题** - **常见问题**:SQL注入、XSS攻击、CSRF攻击等。 - **防护措施**:使用预处理语句、过滤用户...

    技术开发人员招聘笔试题

    各层之间通过接口通信,Web Service可用于实现远程服务调用。 #### 数据结构或算法观点分享 例如,链表是一种线性数据结构,适用于频繁插入和删除的场景,但查找效率低于数组。 #### 特殊数据结构设计 如设计...

    初学者如何开发出一个高质量的J2EE系统

    EJB作为JavaBeans的高级版本,针对企业级应用提出了更高的要求,尤其是在性能、事务处理和安全性方面。它确保了企业系统随着业务规模的增长而平稳演进,避免了因系统重构带来的资源浪费。同时,JavaBeans的演化并未...

    软件架构设计的三个维度

    面向方面的编程(Aspect-Oriented Programming,AOP)是一种编程范式,它以横切关注点(Crosscutting Concerns)为出发点,比如日志、安全和事务处理等,这些关注点通常散布在系统的各个模块中,不易于管理。...

    二十三种设计模式【PDF版】

    整体结构和一些主要职责(如数据库操作 事务跟踪 安全等),剩余的就是变化的东西,针对这个领域中具体应用产生的具体不同 的变化需求,而这些变化东西就是 J2EE 程序员所要做的。 由此可见,设计模式和 J2EE 在思想...

Global site tag (gtag.js) - Google Analytics