0

我正在将 EJB 项目迁移到 Spring Boot 项目。我已成功将其他注释替换为 spring 注释,但 SessionContext 对象存在问题。我的遗留代码如下

@Resource
SessionContext sessionContext;
.....
if (some condition) {
    sessionContext.setRollbackOnly();
    return false;
}

对于此代码,我收到以下错误

A component required a bean of type 'javax.ejb.SessionContext' that could not be found.


Action:

Consider defining a bean of type 'javax.ejb.SessionContext' in your configuration.

4

1 回答 1

2

我认为您将不得不使用一些不同的功能。

setRollbackOnly()

我经常看到用于回滚的会话上下文。在 Spring 中,您可以将其替换为:

TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();

或用注释类

@Transactional(rollbackFor = MyException.class) 

所以你可以从类中抛出你的异常以导致回滚。

获取业务对象()

第二个最常用的特性是加载业务对象的方法,例如,我可以在同一个 bean 中创建一个新事务。在这种情况下,您可以使用自注入:

@Lazy private final AccountService self;

并使用@Transactional 注释方法。当然,这解决了您需要使用代理对象功能的任何其他情况。

Spring 中的其他类提供了其他功能,但我认为这两个是 Java EE 世界中最常用的,并且在迁移时,人们会寻找在 Spring 中替换它们。

于 2021-10-22T12:59:31.073 回答