1

我在 Websphere 中遇到了 MDB 拦截器的问题。我在 WAS 7.0.0.23 中为具有 ActivationSpec 而不是侦听器端口的 MDB 配置了 defaultInterceptor。我收到 ClassCastException。相同的配置适用于 SessionBean。

<assembly-descriptor><interceptor-binding>
<ejb-name>*</ejb-name>
    <interceptor-class>com.LoggingInterceptor</interceptor-class>
</interceptor-binding></assembly-descriptor>

例外:LocalExceptio E CNTR0019E: EJB threw an unexpected (non-declared) exception during invocation of method "onMessage". Exception data: javax.ejb.EJBException: Injection failure; nested exception is: java.lang.IllegalArgumentException: java.lang.ClassCastException

http://www-01.ibm.com/support/docview.wss?uid=swg1PM53989 这个链接说这个问题只有在我们使用监听端口时才会发生——但我们使用的是激活规范。

感谢您的帮助。

4

1 回答 1

0

此错误消息很糟糕,但这意味着您有方法注入,但(查找的)目标类型与您代码中的类型不匹配。例如,如果您有:

@Resource
public void setQueue(QueueConnectionFactory qcf) { ... }

...但是您已经为此资源指定了一个指向数据源的绑定,那么您将获得 ClassCastException。我建议删除所有注入(可能来自您的拦截器或其超类,因为错误仅在您添加它时发生),然后慢慢重新添加它们,直到您发现问题。

于 2013-05-11T14:39:04.467 回答