导致CGLIC错误的原因:自WildFly v15起,无法为@Transactional注释生成类[ClassPath]的子类

时间:2019-05-27 22:37:47

标签: transactions wildfly autowired cglib spring-framework-beans

我正在使用Wildfly V16在Openshift Online(v3)环境中运行Java(1.8)+ Spring(4.1.3)应用程序。

应用程序有一个带有@Service批注的类(GiftcardWebService.java),其方法主要是通过@Transactional批注进行的:

控制器类:

@Controller
@RequestMapping(value = "/BusinessController/")
public BusinessController {
   ...
   @Autowired
   private GiftcardWebService service;

   ...
}

GiftcardWebService.java

@Service
public GiftcardWebService {
  ....

@Transactional 
public Map<String, String> getGiftcardForm (....) {
   ....
  }
 ...
}

在部署到Wildfly v15或v16期间,发生错误:

 Could not generate CGLIB subclass of class [class com.liquibil.controllers.GiftcardWebService]: Common causes of this problem include using a final class or a non-visible class.

有趣的是,此相同的代码适用于Wildfly 10至14。只有将其部署到Wildfly v15或v16时,它才会失败(带有上述错误)。

我用Google搜索了这个问题,找到了一些讨论,但主要是针对CGLIB需要默认类构造函数的Springframework Version 3。我的Spring版本是4.1.3。

我还删除了唯一的“最终”变量(在记录器上),但没有帮助。我不知道在这种情况下什么才算是不可见的课程。

我还删除了GiftcardWebService.java中的所有@Transactional批注,然后错误消失了(它确认该错误是由于@Transactional引起的)

0 个答案:

没有答案