-
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个答案 按时间排序 按投票排序
-
采纳的答案
事务传播行为类型
说明
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
-
<property name="transactionAttributes">
<props>
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>2014年9月02日 16:49
相关推荐
【VC++ 和 C# 互相调用 DLL 的全部可行方法】 在软件开发中,有时候我们需要在VC++项目中调用C#编写的DLL,或者反之。以下是一些常见的、全面的解决方案: 1. **COM互操作** - **优点**:通过将C#类注册为COM组件...
BroadcastReceiver接收到广播后,可以启动或绑定Service,或者直接在onReceive()方法中处理逻辑,然后再通过启动Service来执行更复杂的操作。 最后,Activity与BroadcastReceiver的通信: 1. **Activity发送...
在Android开发中,AIDL(Android Interface Definition Language)是一种用于实现进程间通信(IPC, Inter-Process Communication)的工具,允许不同进程之间的应用程序组件互相调用方法。本示例"一个及其简单的AIDL...
- 调用方法:通过代理对象调用Web Service提供的方法。 5. **Apache CXF**: Apache CXF是一个流行的开源框架,用于构建和部署Web Service。它提供了JAX-WS和JAX-RS(RESTful Web Services)的支持,让开发者可以...
// 调用Web Service方法,例如查询天气 String city = "北京"; String response = stub.getWeatherByCity(city); System.out.println("查询城市:" + city + " 天气:" + response); } } ``` **步骤四:运行...
3. **调用Web Service方法**:通过代理对象,你可以调用Web Service提供的方法。例如,如果你的Web Service有一个名为`GetExchangeRate`的方法,你可以这样调用: ```delphi var WebServiceProxy: IWebService; /...
C# Remoting是.NET Framework提供的一种跨进程通信技术,它允许不同进程间的对象互相调用方法,实现分布式系统中的组件交互。在这个场景中,我们关注的是如何利用C# Remoting来实现在不同进程之间传递消息并进行互...
当Android编译系统处理AIDL文件时,会生成对应的Java接口和Binder代理类,使得服务端和客户端可以互相调用对方的方法。 **二、服务端实现** 1. **创建AIDL文件**:首先,我们需要在服务端创建一个AIDL文件,例如`...
Web服务(Web Service)是一种基于网络的、分布式的模块化组件,它提供了标准的方法来使得不同系统间的软件能够互相交互。在本示例中,我们将深入探讨如何使用Java的URLConnection和JAXB库来调用Web服务的公共方法,...
在Android开发中,AIDL(Android Interface Definition Language)是一种用于实现跨进程通信(IPC, Inter-Process Communication)的工具,允许应用程序组件在不同进程中互相调用方法,即使这些组件运行在不同的应用...
在这个接口中,我们可以定义一些方法,以便供其他服务调用。例如: ```java @FeignClient(name = "service-provider") public interface ServiceProvider { @GetMapping("/hello") String hello(); } ``` 在上面的...
Binder是Android独有的IPC机制,它允许不同进程间的对象互相调用方法,实现了进程间的数据传递和方法调用。Binder机制的核心包括三部分:Binder驱动、Binder对象和Binder代理。当一个进程调用另一个进程中对象的方法...
Binder是Android系统中的一种特殊对象,它可以跨进程传递,使得不同进程间的对象可以互相调用方法。在Service中,如果使用bindService()启动,通常会实现IBinder接口,创建自定义的 Binder 类,这样客户端就可以通过...
在本示例中,我们将探讨如何使用Thrift在Java和Python之间实现RPC(Remote Procedure Call)的互相调用。 首先,我们需要了解Thrift IDL。在Thrift IDL文件中,我们可以定义服务接口、数据结构(如struct)和常量。...
在IT行业中,Web Service是一种基于网络的、松散耦合的软件模块,它可以通过标准的协议(如HTTP)提供服务,使得不同的系统之间能够互相通信和交换数据。gSOAP是广泛使用的开源工具,用于开发C/C++应用程序,尤其是...
3. **导入生成的Java代码**:将生成的代码导入到你的Java项目中,这样你就可以使用服务代理类来调用.NET Web服务的方法。 4. **实例化服务代理**:在你的Java代码中,创建服务接口的实例,通常是通过构造函数完成。...
2. RPC(Remote Procedure Call):如gRPC、Dubbo等,提供了一种更高效的远程调用方式,直接调用远程服务的方法,如同调用本地方法一样。RPC框架通常提供自动序列化和反序列化、负载均衡、超时和重试等高级特性。 3...
- **双向通信**:`bindService()`支持双向通信,客户端和服务可以互相调用方法,而`startService()`只支持单向调用。 6. **示例代码** 在`DemoBindService`中,服务端会创建一个实现了`Binder`接口的类,并在`on...
而RMI(Remote Method Invocation,远程方法调用)是Java中用于分布式计算的技术,使得运行在不同JVM上的对象可以互相调用方法。本篇文章将深入探讨如何在Spring框架中配置和调用RMI的多个接口。 首先,我们需要...