目前我有一个 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>