在我的场景中,我尝试使用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;
}
war还包含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 - 我如何正确解决这个问题?
答案 0 :(得分:0)