问题-我收到以下消息:java.lang.ClassCastException: com.ibm.connector2.cics.ECIConnectionFactory incompatible with com.ibm.connector2.cics.ECIConnectionFactory
我收到它时试图作出以下声明:eisDci = (ECIConnectionFactory)ctx.lookup(eisn);
'eisDci'先前已定义:private static ECIConnectionFactory eisDci = null;
“eis”是具有连接名称的字符串,如“eis/DCIXxxxECI”
这些连接在Server.xml中定义:
<connectionFactory id="DCIXxxxECI" jndiName="eis/DCIXxxxECI">
<properties.cicseci ServerName="XXXX" TPNName="xx" connectionUrl="url" portNumber="2006"/>
</connectionFactory>
我知道这是在警告我不能进行强制转换。我不知道的是我做错了什么。这一定是在比较一个版本的ECIConnectionFactory类和另一个版本的ECIConnectionFactory类。
我正在使用的服务器是一个Liberty,我快疯了,我不明白为什么Eclipse要比较两个不同的版本。
我搜索过的类似问题:
ClassCastException when casting to the same class
Waxwing的回答看起来不错,但我没有权限进行这些更改,此连接是由外部库执行的。
首先感谢您的回答Ben考克斯,在Liberty的server.xml(本地)中,我已经声明了该库:
<fileset caseSensitive="false" dir="C:\CICSECI"/>
在Liberty运行时/Shared/resources中,我有cicseci.rar,我已经在server.xml中将其声明为resourceAdapter:
<resourceAdapter autoStart="true" id="cicseci" location="${shared.resource.dir}/cicseci.rar">
<classloader apiTypeVisibility="spec, ibm-api, api, third-party"/>
</resourceAdapter>
我已经检查了要导入到项目中的其余库,到目前为止,我还没有看到我有重复的库。
2条答案
按热度按时间s4chpxco1#
我认为这里的问题与资源适配器和应用程序之间的类加载有关。这是我们在DataSources中更常见的问题,但结果是相同的。
问题是同一个jar被两个不同的类加载器加载。一个类加载器用于资源适配器,另一个类加载器用于您的应用程序。
在此配置中,
cicseci.rar
将仅加载一次。x6492ojm2#
当两个不同的类加载器加载同一个类时,可能会发生ClassCastException,从而使看似相同的类不兼容。
为避免这种情况,您应该使用的机制包括使用resourceAdapter的classProviderRef配置应用程序的类加载器,这在here中有说明。