为了账号安全,请及时绑定邮箱和手机立即绑定

如何在春季引导中测试 EJB - 由于模块信息,openejb 无法处理多版本 JAR

如何在春季引导中测试 EJB - 由于模块信息,openejb 无法处理多版本 JAR

ABOUTYOU 2022-09-21 16:57:28

我目前正在将一个应用程序从弹簧启动 1.X 升级到 2.X。应用程序中的测试之一是在@SpringBootTest下使用 OpenEJB 测试无状态远程 EJB。由于对 SpringBean 自动布线感知器的支持在春季 5 中已被删除,我现在面临着重写逻辑并对其进行测试的任务,问题来了:我们在 JDK 1.8 上运行,openejb(4.7.4,在测试中用于初始化 jndiContext)无法处理多版本 JAR,这是升级到弹簧靴 2.X 的依赖项(例如字节伙伴等)。OpenEJB 尝试加载元 INF/版本/9/模块信息,但在非法参数异常上失败。我也在尝试从OpenEJB切换到EJB容器,以及玻璃鱼作为加载器,但我面临着不同的问题(无状态豆未在jndContext中设置 - 在DEBUG中检查),我目前正在尝试解决。

我的问题是:有没有可能以某种方式强制类加载器或openejb忽略模块信息,以便能够在JDK 1.8下运行它,并在类路径上使用多版本jar?或者有没有办法将 EJB 容器与嵌入所有网格的玻璃鱼一起使用,它目前不会加载 EJB,但至少不会错误地加载上下文?我需要避免这个错误,或者使用另一种方法来测试春季引导测试中的无状态豆。

注意:我不想使用阿奎利安

版本摘要:

  • 京东 1.8

  • 弹簧启动启动器父级:2.1.3.发布

  • openejb-core: 4.7.4

  • 全嵌玻璃鱼:5.1.0

使用开放 EJB 时出错(模块信息,多版本 JAR 问题):

ERROR OpenEJB [] []- FATAL ERROR: Unknown error in Assembler.  Please send the following stack trace and this message to users@tomee.apache.org :
 java.lang.IllegalArgumentException
    at org.apache.xbean.asm5.ClassReader.<init>(Unknown Source)
    at org.apache.xbean.asm5.ClassReader.<init>(Unknown Source)
    at org.apache.xbean.asm5.ClassReader.<init>(Unknown Source)
    at org.apache.openejb.util.AnnotationFinder.readClassDef(AnnotationFinder.java:299)
    at org.apache.openejb.util.AnnotationFinder.find(AnnotationFinder.java:164)
    at org.apache.openejb.config.DeploymentLoader.checkAnnotations(DeploymentLoader.java:2008)
    at org.apache.openejb.config.DeploymentLoader.discoverModuleType(DeploymentLoader.java:1891)
    at org.apache.openejb.config.DeploymentsResolver.processUrls(DeploymentsResolver.java:389)
    at org.apache.openejb.config.DeploymentsResolver.loadFromClasspath(DeploymentsResolver.java:302)
    at org.apache.openejb.config.ConfigurationFactory.getModulesFromClassPath(ConfigurationFactory.java:664)

使用玻璃鱼时出错(可能指定的模块错误?):

ERROR embedded [] []- EJB6005:No EJB modules found


查看完整描述

1 回答

?
湖上湖

TA贡献1669条经验 获得超2个赞

使用较新版本的openEJB->Apache Tomee解决了问题,它使用asm6并支持JDK 1.9,即使我使用的是JDK 1.8,但由于多版本JARS作为春季启动2的依赖项,因此需要这种支持。使用的工件:

    <dependency>
        <groupId>org.apache.tomee</groupId>
        <artifactId>apache-tomee</artifactId>
        <version>8.0.0-M2</version>
        <scope>test</scope>
    </dependency>


查看完整回答
反对 回复 2022-09-21

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信