在我的方案中,我尝试使用JCA适配器连接到外部存储-只是尝试使用J2EE的此功能。
我使用JBoss EAP 7及其打包的实现Ironjacamar。
我部署了一个adapter.rar
,其中包含一个adapter.jar
(其中包含Connection
和ConnectionFactory
接口以及所有实现)和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/