我们正在将我们的应用程序从JBoss 5迁移到JBoss 6,我无法解决一件事。
我们正在使用Apache CXF-JCA资源适配器(CXF-JCA home page)。他们说这是JCA 1.5规范的实现,这似乎是一个问题。由于JBoss正在实施JCA规范1.6版,因此CXF的部署因以下原因而失败:
Caused by: org.jboss.jca.validator.ValidatorException: Severity: ERROR
Section: 19.4.2
Description: A ResourceAdapter must implement a "public boolean equals(Object)" method.
Code: org.apache.cxf.jca.cxf.ResourceAdapterImpl
Severity: ERROR
Section: 19.4.2
Description: A ResourceAdapter must implement a "public int hashCode()" method.
Code: org.apache.cxf.jca.cxf.ResourceAdapterImpl
我们正在使用最新版本的CXF-JCA(目前为3.0.0)。最好的解决方法是什么?
更新:
我发现JBoss实际上是在支持JCA 1.5,所以问题在于CXF的实现违反了某些规范,JBoss 6的验证更加严格。因此,有一个解决方法:在Jboss配置中的JCA子系统中禁用验证,如下所示:
<subsystem xmlns="urn:jboss:domain:jca:1.1">
<archive-validation enabled="false" />
</subsystem>
最佳答案
因此,我发现有一个解决方案,正如我在编辑问题时提到的那样,该解决方案使用以下设置禁用(或只是设置为在出错时不会失败)归档验证:
<subsystem xmlns="urn:jboss:domain:jca:1.1">
<archive-validation enabled="false" />
</subsystem>
根据我的发现,这是由于CXF网站上缺少实施JCA规范引起的。并在较新的JBoss版本中进行更严格的验证会导致这种麻烦。
有关更多信息,请参见下面的注释this JBoss bug report。