TransactionSynchronizationRegistry与TransactionSynchronizationManager

时间:2018-01-25 14:31:32

标签: spring transactions spring-transactions

我的应用程序没有运行带有ejb的weblogic,而WLS提供了JTA。现在我尝试使用spring而不是ejb来调整所有应用程序在tomcat中工作。也将使用spring提供的JPATransactionManager,而不是JTA。

我曾经使用TransactionSynchronizationRegistry.getTransactionKey()来获取tx对象并将其用于缓存目的。现在我正在适应春天,我有TransactionSynchronizationManager的春天,在那里我无法找到这样的API。

我的问题是 - 你知道春天有TransactionSynchronizationRegistry.getTransactionKey()的模拟吗?

或者我可以在哪里获得一些有关交易信息的独特对象?

1 个答案:

答案 0 :(得分:0)

问题通过使用一些生成的逻辑事务ID解决。通过调用 export default class MovieList extends Component { componentDidMount(){ this.hello = new Sound('whoosh.mp3', Sound.MAIN_BUNDLE, (error) => { if (error) { console.log('failed to load the sound', error); return; } }); } handlePress() { this.hello.play((success) => { if (!success) { console.log('Sound did not play') } }) } render() { const { movie } = this.props return ( <TouchableOpacity onPress={this.handlePress.bind(this)}> <View> <Text>Start</Text> </View> </TouchableOpacity> ) } }存储此事务ID,并由TransactionSynchronizationManager.bindResource(key, value)检索。

但是,如果发生事务交错,它将无法正常工作。

假定上游事务A挂起而下游事务B正在运行时,您具有事务交织的流程。

如果在两次交易中您尝试使用如上所述的某些密钥存储交易ID,则可能会出现资源混合的问题。

在这种情况下,建议使用 ResourceHolderSupport ,它负责侦听各种事务状态并绑定或取消绑定资源。

在我们的例子中,假设tx1是存储 resource =“ txID”,“ 123456”,并且由于开始运行tx2而暂停了tx1,资源持有者将取消绑定资源当tx1恢复时,它将再次绑定它。