我正在将EJB项目迁移到Spring启动项目。我已经成功地将其他注释替换为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.
我想你将不得不使用一些不同的功能。
<<p>setRollbackOnly ()/strong>我经常看到会话上下文用于回滚。在Spring中,您可以将其替换为:
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
或用
注释类@Transactional(rollbackFor = MyException.class)
所以你可以抛出你的异常从类导致回滚。
getBusinessObject ()
第二个最常用的特性是加载业务对象的方法,例如,我可以在同一个bean中创建一个新事务。在这种情况下,你可以使用Self-inject:@Lazy private final AccountService self;
和一个带有@Transactional的注释方法。当然,这解决了任何其他需要使用代理对象功能的情况。
其他功能是由Spring中的其他类提供的,但我认为这两个是Java EE世界中最常用的,当迁移时,人们会寻求在Spring中替换它们。