我正在进行 Arquillian 测试。主题是一个使用 Hibernate 3 的 EJB,我将其与所有其他 Maven 依赖项一起添加到压缩包中。它将 EJB 作为包装在 EAR 中的 JAR 部署到嵌入了 Hibernate 4 的嵌入式 JBOSS 7。它与以下异常发生冲突:
java.lang.AbstractMethodError: org/hibernate/usertype/UserType.nullSafeSet(
Ljava/sql/PreparedStatement;Ljava/lang/Object;
ILorg/hibernate/engine/spi/SessionImplementor;)V
我坚信我的代码(针对 Hibernate 3 编译)是针对 Hibernate 4 执行的,因此会出现错误。我的理解是 JBOSS 默认先做父母,这可以解释错误。我打印出归档内容作为收缩包装的一部分,所以我相信我知道 Hibernate 3 在 EAR 中。
我试过最后将 JBOSS 更改为父级,但没有成功。其中一些可能很愚蠢,但我还是尝试了它们:
添加了一个
META-INF/jboss-classloading.xml
(到 JAR和EAR)添加了一个
META-INF/jboss-deployment-structure.xml
(到 JAR和EAR)以尝试排除父 Hibernate:从 JBOSS 中删除 Hibernate JAR - 这完全破坏了服务器
以下是我的设置的一些配置方面:
- 依赖项:
org.hibernate:hibernate-annotations:jar:3.4.0.GA:provided
org.hibernate:hibernate-core:jar:3.3.2.GA:provided
org.jboss.arquillian.junit:arquillian-junit-container:jar:1.1.1.Final:test
org.jboss.arquillian.protocol:arquillian-protocol-servlet:jar:1.1.1.Final:test
org.jboss.as:jboss-as-arquillian-container-managed:jar:7.1.1.Final:provided
org.jboss.shrinkwrap.resolver:shrinkwrap-resolver-impl-maven:jar:2.0.0:test
org.jboss.spec:jboss-javaee-web-6.0:pom:3.0.0.Final:provided
- 指向一个解压的
jboss-as-7.1.1.Final
META-INF/arquillian.xml
:<arquillian ...> <defaultProtocol type="Servlet 3.0" /> <container qualifier="jbossas-managed" default="true"> <configuration> ... </configuration> </container> </arquillian>
META-INF/application.xml
:<application ... version="5"> <module><ejb>test.jar</ejb></module> </application>
还要别的吗?:)
非常感谢您的帮助!