JCA连接器类加载

时间:2017-02-03 13:20:19

标签: java jboss jca

在我的场景中,我尝试使用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;
}

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 - 我如何正确解决这个问题?

1 个答案:

答案 0 :(得分:0)