在我的方案中,我尝试使用JCA适配器连接到外部存储-只是尝试使用J2EE的此功能。

我使用JBoss EAP 7及其打包的实现Ironjacamar。

我部署了一个adapter.rar,其中包含一个adapter.jar(其中包含ConnectionConnectionFactory接口以及所有实现)和META-INF/ironjacamar.xml

然后,我部署一个app.war文件,其中包含带有带注释字段的Bean:

@RequestScoped
public class Bean {
...
     @Resource(lookup = "java:/eis/StorageConnectionFactory")
        private StorageConnectionFactory connectionFactory;
}


战争还包含了adapter.jar作为库-因为它需要在运行时知道所有类(NoClassDefFound等)。

令我惊讶的是,连接器本身似乎可以正常工作-出现异常:

java.lang.IllegalArgumentException:无法将conn.StorageConnectionFactoryImpl字段Bean.connectionFactory设置为conn.HsmConnectionFactoryImp

甚至省略接口:

 @Resource(lookup = "java:/eis/StorageConnectionFactory")
    private StorageConnectionFactoryImpl connectionFactory;


仍然

java.lang.IllegalArgumentException: Can not set conn.StorageConnectionFactoryImpl field Bean.connectionFactory to conn.HsmConnectionFactoryImp


我看到的问题是,adapter.rar确实不共享与app.war相同的类加载器,并且都包含相应的类,导致出现ClassCastException-我该如何正确解决此问题?

最佳答案

似乎您没有正确配置资源适配器。

请参阅以下指南,它将帮助您进行配置:

https://access.redhat.com/documentation/en/red-hat-jboss-enterprise-application-platform/version-7.0/configuration-guide/#configuring_jca_subsystem

关于java - JCA连接器类加载,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42025299/

10-10 16:48