0 0

service中的方法可以互相调用吗?5

在spring中service中的每个方法都是一个事务,如果serviceA调用serviceB中的方法,这样是不是会出现事务的嵌套?如果事务A嵌套事务B,事务B执行成功,事务A执行失败,事务B会回滚吗?

这个问题困扰了我好久……

问题补充:http://www.iteye.com/topic/35907

刚看到一篇文章讲了spring的事务传播属性,如果设置为PROPAGATION_REQUIRED 的话,service可以相互调用,并且只会有一个事务,不会出现事务的嵌套,那么我想知道下面的配置,怎么确定spring的事务传播属性呢?

<!-- Jpa 事务配置 -->
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>

<!-- 使用annotation定义事务 -->
<tx:annotation-driven transaction-manager="transactionManager"
proxy-target-class="true" />
2014年9月02日 15:19

4个答案 按时间排序 按投票排序

0 0

采纳的答案

事务传播行为类型
说明

PROPAGATION_REQUIRED
如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。这是最常见的选择。

PROPAGATION_SUPPORTS
支持当前事务,如果当前没有事务,就以非事务方式执行。

PROPAGATION_MANDATORY
使用当前的事务,如果当前没有事务,就抛出异常。

PROPAGATION_REQUIRES_NEW
新建事务,如果当前存在事务,把当前事务挂起。

PROPAGATION_NOT_SUPPORTED
以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。

PROPAGATION_NEVER
以非事务方式执行,如果当前存在事务,则抛出异常。

PROPAGATION_NESTED
如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED类似的操作。

可见事务是可以嵌套执行的,根据事务的一致性,应该A,B都执行成功以后才算完成,一个不成功,就回滚。

2014年9月03日 09:03
0 0

先说我的结论,事务B会回滚。
另外,我觉得写几行代码测一下应该不会很麻烦

2014年9月03日 10:45
0 0

Service层互相调用就证明你的代码结构设计严重不良。

2014年9月02日 23:38
0 0

<property name="transactionAttributes"> 
            <props> 
                <prop key="*">PROPAGATION_REQUIRED</prop>
            </props> 
        </property>

2014年9月02日 16:49

相关推荐

    VC++ 和 C# 互相调用 DLL 的 全部可行方法

    【VC++ 和 C# 互相调用 DLL 的全部可行方法】 在软件开发中,有时候我们需要在VC++项目中调用C#编写的DLL,或者反之。以下是一些常见的、全面的解决方案: 1. **COM互操作** - **优点**:通过将C#类注册为COM组件...

    Android实现Activity、Service与Broadcaster三大组件之间互相调用的方法详解

    BroadcastReceiver接收到广播后,可以启动或绑定Service,或者直接在onReceive()方法中处理逻辑,然后再通过启动Service来执行更复杂的操作。 最后,Activity与BroadcastReceiver的通信: 1. **Activity发送...

    一个及其简单的AIDL远程Service调用

    在Android开发中,AIDL(Android Interface Definition Language)是一种用于实现进程间通信(IPC, Inter-Process Communication)的工具,允许不同进程之间的应用程序组件互相调用方法。本示例"一个及其简单的AIDL...

    JAVA 调用Web Service的方法

    - 调用方法:通过代理对象调用Web Service提供的方法。 5. **Apache CXF**: Apache CXF是一个流行的开源框架,用于构建和部署Web Service。它提供了JAX-WS和JAX-RS(RESTful Web Services)的支持,让开发者可以...

    基于Axis的Web Service客户端调用

    // 调用Web Service方法,例如查询天气 String city = "北京"; String response = stub.getWeatherByCity(city); System.out.println("查询城市:" + city + " 天气:" + response); } } ``` **步骤四:运行...

    Delphi调用webservice例子

    3. **调用Web Service方法**:通过代理对象,你可以调用Web Service提供的方法。例如,如果你的Web Service有一个名为`GetExchangeRate`的方法,你可以这样调用: ```delphi var WebServiceProxy: IWebService; /...

    c# Remoting 实现进程间互相调用 并传递消息

    C# Remoting是.NET Framework提供的一种跨进程通信技术,它允许不同进程间的对象互相调用方法,实现分布式系统中的组件交互。在这个场景中,我们关注的是如何利用C# Remoting来实现在不同进程之间传递消息并进行互...

    AIDLService,远程调用例子

    当Android编译系统处理AIDL文件时,会生成对应的Java接口和Binder代理类,使得服务端和客户端可以互相调用对方的方法。 **二、服务端实现** 1. **创建AIDL文件**:首先,我们需要在服务端创建一个AIDL文件,例如`...

    webservice 客户端调用公共方法

    Web服务(Web Service)是一种基于网络的、分布式的模块化组件,它提供了标准的方法来使得不同系统间的软件能够互相交互。在本示例中,我们将深入探讨如何使用Java的URLConnection和JAXB库来调用Web服务的公共方法,...

    AIDLService,远程调用例子。包括服务端与客户端两个工程文件

    在Android开发中,AIDL(Android Interface Definition Language)是一种用于实现跨进程通信(IPC, Inter-Process Communication)的工具,允许应用程序组件在不同进程中互相调用方法,即使这些组件运行在不同的应用...

    springcloud feign服务间的相互调用.doc

    在这个接口中,我们可以定义一些方法,以便供其他服务调用。例如: ```java @FeignClient(name = "service-provider") public interface ServiceProvider { @GetMapping("/hello") String hello(); } ``` 在上面的...

    binderservice demo

    Binder是Android独有的IPC机制,它允许不同进程间的对象互相调用方法,实现了进程间的数据传递和方法调用。Binder机制的核心包括三部分:Binder驱动、Binder对象和Binder代理。当一个进程调用另一个进程中对象的方法...

    service demo 亲测可用 binder 机制,好用的很

    Binder是Android系统中的一种特殊对象,它可以跨进程传递,使得不同进程间的对象可以互相调用方法。在Service中,如果使用bindService()启动,通常会实现IBinder接口,创建自定义的 Binder 类,这样客户端就可以通过...

    Thrift中实现Java与Python的RPC互相调用示例代码.rar

    在本示例中,我们将探讨如何使用Thrift在Java和Python之间实现RPC(Remote Procedure Call)的互相调用。 首先,我们需要了解Thrift IDL。在Thrift IDL文件中,我们可以定义服务接口、数据结构(如struct)和常量。...

    gsoap 调用 web service 的接口工具

    在IT行业中,Web Service是一种基于网络的、松散耦合的软件模块,它可以通过标准的协议(如HTTP)提供服务,使得不同的系统之间能够互相通信和交换数据。gSOAP是广泛使用的开源工具,用于开发C/C++应用程序,尤其是...

    实现java访问Net的web服务,调用Net方法

    3. **导入生成的Java代码**:将生成的代码导入到你的Java项目中,这样你就可以使用服务代理类来调用.NET Web服务的方法。 4. **实例化服务代理**:在你的Java代码中,创建服务接口的实例,通常是通过构造函数完成。...

    cloud 分布式微服务 服务互相注册调用 服务调用方式

    2. RPC(Remote Procedure Call):如gRPC、Dubbo等,提供了一种更高效的远程调用方式,直接调用远程服务的方法,如同调用本地方法一样。RPC框架通常提供自动序列化和反序列化、负载均衡、超时和重试等高级特性。 3...

    Android 利用Service进行进程间通信

    - **双向通信**:`bindService()`支持双向通信,客户端和服务可以互相调用方法,而`startService()`只支持单向调用。 6. **示例代码** 在`DemoBindService`中,服务端会创建一个实现了`Binder`接口的类,并在`on...

    spring rmi 多接口配置 调用

    而RMI(Remote Method Invocation,远程方法调用)是Java中用于分布式计算的技术,使得运行在不同JVM上的对象可以互相调用方法。本篇文章将深入探讨如何在Spring框架中配置和调用RMI的多个接口。 首先,我们需要...

Global site tag (gtag.js) - Google Analytics