gpt4 book ai didi

java - 我们真的需要在ThreadLocal中设置Transaction吗?

转载 作者:行者123 更新时间:2023-12-02 07:17:42 25 4
gpt4 key购买 nike

我在下面粘贴了我的代码。在我们的应用程序中,他们在本地线程中设置事务。
实际上我的疑问是为什么我们需要这个?
如果我们没有在 threadlocal 中设置事务会发生什么?

public void beginTransaction() {

final String METHOD_NAME = "beginTransaction";
log.entering(CLASS_NAME, METHOD_NAME);

PcUtilLogging.logTransactionLifecycle("Begin Transaction",
this.persistenceConfigurationKey);

// Initialize.
final PcRequestContext context = PcRequestContext.getInstance();
final PersistenceManager pm =
context.getPersistenceManager(this.persistenceConfigurationKey);

try {
// Begin a new transaction.
final Transaction transaction = pm.newTransaction();

// Set the Transaction in ThreadLocal.
context.setTransaction(this.persistenceConfigurationKey,
transaction);

} catch (final Exception e) {

// Throw.
throw new PcTransactionException(
new ApplicationExceptionAttributes.Builder(CLASS_NAME, METHOD_NAME).build(),
"Error encountered while attempting to begin a ["
+ this.getPersistenceConfigurationKey()
+ "] transaction.", e);
}

log.exiting(CLASS_NAME, METHOD_NAME);
return;
}

最佳答案

问题是,人们想要从应用程序的不同部分(例如不同的 DAO)访问事务,因此通常以这种方式完成,以避免必须在应用程序周围传递事务对象(并将持久性逻辑泄漏到您的应用程序)。

此外,事务通常与接受请求(或 jms 消息)的线程相关,因此 ThreadLocal 是放置事务的方便位置。大多数框架都会这样做(以 Spring 为例)。

如果不在本地线程上设置事务,可能会发生两种情况

  • 每次数据库访问都需要使用不同的事务。
  • 所有事务都混合在一起,因为对一个请求的提交会影响不同线程上的更改。

您认为有更好的方法来实现 Adala 吗?

关于java - 我们真的需要在ThreadLocal中设置Transaction吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14729645/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com