Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将数据附加到JTA事务?(或唯一标识它)_Java_Transactions_Jta - Fatal编程技术网

Java 如何将数据附加到JTA事务?(或唯一标识它)

Java 如何将数据附加到JTA事务?(或唯一标识它),java,transactions,jta,Java,Transactions,Jta,我有一个getStockQuote()函数,该函数将从股票市场获取符号的当前股票报价 我的目标是,在JTA事务中,对getStockQuote()的第一次调用将获取股票报价,但同一事务中的所有后续调用将重用同一股票报价(例如,它不会尝试获取新报价)。如果另一个事务启动,或者另一个事务同时运行,我希望另一个事务在第一次调用时获取自己的股票报价 这是为了确保交易中的一致性,以便交易中的所有计算都基于相同的股票价格 这类似于您如何配置JPA提供程序,使其仅从数据库中获取一次数据库行,并使用缓存值对事务

我有一个getStockQuote()函数,该函数将从股票市场获取符号的当前股票报价

我的目标是,在JTA事务中,对getStockQuote()的第一次调用将获取股票报价,但同一事务中的所有后续调用将重用同一股票报价(例如,它不会尝试获取新报价)。如果另一个事务启动,或者另一个事务同时运行,我希望另一个事务在第一次调用时获取自己的股票报价

这是为了确保交易中的一致性,以便交易中的所有计算都基于相同的股票价格

这类似于您如何配置JPA提供程序,使其仅从数据库中获取一次数据库行,并使用缓存值对事务中的同一数据库行进行后续访问


有人知道如何实现这一点吗?

这需要一些测试,但我认为您可以将报价绑定到,并使bean在提交事务后实现从
ThreadLocal
解除报价绑定(从而实现一种事务范围的上下文).

考虑使用spring进行事务管理,它提供了这种开箱即用的功能:


我的理解是,一个线程可以用于两个事务-例如:事务a启动,我获取股票报价,我使用缓存的股票报价,事务a结束。事务B然后在同一个线程中启动,我如何知道我需要获取一个新的报价?这就是会话同步的作用。在afterBegin()方法中初始化对象,在afterCompletion()中终止它(实际上,只有初始化它才足够,除非您需要关闭任何资源),SessionSynchronization接口正是我想要的,谢谢。@seanizer同意,在
afterBegin
中初始化内容在这里应该足够了。我可能稍后会取消删除我的答案,但您的评论是正确的,根据当前的详细程度,我无法详细说明。你使用EJB吗?如何管理事务?基本上,所有这些代码都在EJB3无状态会话bean中运行,并且事务通过容器管理的事务进行管理。我看不到任何关于在该文档中存储自定义数据的参考。让我重新表述一下:它提供了创建此类功能所需的工具。自定义事务管理器、事务回调、助手实用程序来查找当前事务,有很多方法。对不起,回答不充分