我在 Websphere 中遇到了 MDB 拦截器的问题。 我使用 ActivationSpec 为 MDB 配置了 defaultInterceptor,而不是 WAS 7.0.0.23 中的监听器端口。我收到 ClassCastException。相同的配置适用于 SessionBean。
<assembly-descriptor><interceptor-binding>
<ejb-name>*</ejb-name>
<interceptor-class>com.LoggingInterceptor</interceptor-class>
</interceptor-binding></assembly-descriptor>
异常:LocalExceptio E CNTR0019E:EJB 在调用方法“onMessage”期间引发意外(未声明)异常。异常数据:javax.ejb.EJBException:注入(inject)失败;嵌套异常是:java.lang.IllegalArgumentException:java.lang.ClassCastException
http://www-01.ibm.com/support/docview.wss?uid=swg1PM53989 此链接表示,仅当我们使用监听器端口时才会出现此问题 - 但我们使用的是激活规范。
感谢您的帮助。
最佳答案
此错误消息很糟糕,但这意味着您有方法注入(inject),但(查找的)目标类型与代码中的类型不匹配。例如,如果您有:
@Resource
public void setQueue(QueueConnectionFactory qcf) { ... }
...但是您已经为此资源指定了指向数据源的绑定(bind),那么您将收到 ClassCastException。我建议删除所有注入(inject)(可能是从拦截器或其父类(super class)中删除,因为只有在添加它时才会出现错误),然后慢慢地重新添加它们,直到发现问题为止。
关于java - WAS 7.0.0.23 - MDB 中带有激活规范的默认拦截器会抛出 classcastException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16485659/