0

目前我有一个 Weblogic 10R3 的 Java EE App 主机,我有兴趣测试 1 个消息驱动 Bean。问题是我无法访问 Bean 正在侦听的外部 JMS 服务器,这里是 MDB 代码:

import static com.citi.primefinance.utils.jms.ForeignJMSConstants.Queue.INCOMING_QUEUE_SWIFT_FX;
@MessageDriven(name = "IncomingSwiftFxProcessorMDB", mappedName = INCOMING_QUEUE_SWIFT_FX)
public class IncomingSwiftFxProcessorMDB extends AbstractMessageDrivenBean {
@Override
protected void processMessage(Serializable obj) throws Exception{

    debug(this.getClass().getName() + ".processMessage()");

    if (obj instanceof String) {
        info(this.getClass().getName() + ": received on Message object");
        processSwiftFxTradeMessage((String)obj);
    } else {
        error(this.getClass().getName() + ": received an object " + obj + " which is not a TextMessage");
    }
 }

我的计划是因为 Bean 将通过 JNDI 查找队列,并且我确实可以访问 Weblogic 托管服务器。所以我可以删除外部 JMS 服务器,然后添加一个本地 jms 队列和 connectionFactory 保存确切的 JNDI 名称。因此隔离外部依赖。

人们认为这是合理的吗?或者有人有其他想法吗?我也在考虑使用 Mocking 来隔离对 JMS 的依赖。

非常感谢任何帮助,谢谢

这是一些 Weblogic 日志,表明 Message Bean 无法处理“热”交换?

incomingSwiftFxProcessorMDB 无法连接到 JMS 目标:IncomingSwiftFxQueue。错误是:消息驱动的 EJB 尝试使用 JNDI 名称连接到 JMS 连接工厂:SwiftConnectionFactory。但是,具有 JNDI 名称的对象:SwiftConnectionFactory 不是 JMS 连接工厂。NestedException 消息是:weblogic.jms.client.JMSConnectionFactory>

4

1 回答 1

0

最终,您应该在 JMS 接口的上下文之外测试您的业务逻辑。否则,是的——这是可行的。WebLogic 中的外部 JMS 服务器只是远程 JMS 目标的本地 JNDI 表示。

但是,您不必删除外部配置 - 只需将其从服务器/集群中取消定位即可。然后,使用当前用于访问外部资源的相同 JNDI 名称创建包含 JMS 队列(和 ConnectionFactory,如果适用)的 JMS 模块,然后您可以测试 MDB。完成后,您可以取消用于测试的 JMS 模块的目标,并将外部 JMS 服务器重新定位到适当的资源。

保留“测试”JMS 模块可能会很好,这样您将来可以轻松地再次测试:)

尝试将其更新为如下所示,并实现 MessageListener 接口:

@MessageDriven(
messageListenerInterface = javax.jms.MessageListener.class,
name = "MyListener",
mappedName = "jms/my/notification",
activationConfig = {
    @ActivationConfigProperty(
        propertyName = "connectionFactoryJndiName",
        propertyValue = "weblogic.jms.XAConnectionFactory"),
    @ActivationConfigProperty(
        propertyName = "destinationType",
        propertyValue = "javax.jms.Queue")
})
于 2012-06-20T16:40:59.313 回答