我目前正在将一个应用程序从弹簧启动 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贡献2003条经验 获得超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>
添加回答
举报
0/150
提交
取消