我在下面粘贴了我的代码。在我们的应用程序中,他们在本地线程中设置事务 实际上我怀疑为什么我们需要这个呢? 如果我们没有在threadlocal中设置tranaction会发生什么?
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;
}
答案 0 :(得分:1)
问题在于,人们想要从应用程序的不同部分(例如,不同的DAO)访问事务,因此通常以这种方式完成以避免必须在应用程序周围传递事务对象(并将持久性逻辑泄漏到你的应用程序)。
此外,事务通常与接收请求(或jms消息)的线程相关,因此ThreadLocal是一个方便的放置它的地方。大多数框架都这样做(以Spring为例)。
如果你没有在线程本地设置事务,可能会发生两件事
你有没有看到更好的方法来做这个阿达拉?