【问题标题】:WAS 7.0.0.23 - default interceptors in MDB with activation spec throws classcastexceptionWAS 7.0.0.23 - 带有激活规范的 MDB 中的默认拦截器抛出 classcastexception
【发布时间】:2013-05-10 15:25:43
【问题描述】:

我在使用 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 这个链接说只有当我们使用侦听器端口时才会出现这个问题 - 但我们正在使用激活规范。

感谢您的帮助。

【问题讨论】:

标签: java ejb websphere interceptor


【解决方案1】:

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

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

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

【讨论】:

  • 谢谢 bkail... 你成功了。我将 SessionContext 作为 @Resource 注入到从未使用过的拦截器中,我没有注意到它。现在我已经删除了 SessionContext,以后如果我需要上下文中的数据,我想我会注入 EJBContext 并基于 Bean 向下转换它(SessionContext 用于 SessionBean 和 MessageDrivenContext 用于 MDB)。
  • 啊,这是一个有趣的用例。感谢您的回复。
猜你喜欢
  • 2011-09-04
  • 1970-01-01
  • 2012-07-05
  • 1970-01-01
  • 2015-09-03
  • 1970-01-01
  • 2022-09-23
  • 2023-03-06
  • 1970-01-01
相关资源
最近更新 更多