【问题标题】:Usage of an Interface in onMessage Method (Java EE + JMS)onMessage 方法中接口的使用(Java EE + JMS)
【发布时间】:2015-04-13 07:22:15
【问题描述】:

我有问题。我有一个带有接口的消费者类,它被声明为@EJB:

/**
 * A downloader
 */
@EJB
private IDownloader downloader;

我还有一个onMessage-Method,看起来和那个差不多:

@Override public void onMessage(Message message) {
try {
    ObjectMessage messageObject = (ObjectMessage) message;
    CSVMessage csvMessage = (CSVMessage) messageObject.getObject();
    downloader.download(csvMessage.getUrl());
} catch (JMSException e) {
    throw new RuntimeException(e.getMessage(), e);
}
}

执行时,我收到以下消息:

ERROR [org.jboss.as.ejb3] (Thread-3 (HornetQ-client-global-threads-9332852)) javax.ejb.EJBTransactionRolledbackException: Not Found
ERROR [org.jboss.as.ejb3.invocation] (Thread-3 (HornetQ-client-global-threads-9332852)) JBAS014134: EJB Invocation failed on component Downloader for method public abstract java.lang.String com.packagename(java.lang.String): javax.ejb.EJBTransactionRolledbackException: Not Found

任何提示如何在 onMessage 方法中处理接口?

【问题讨论】:

  • 您需要提供有关您的代码 sn-ps 的更多详细信息,但看起来 MDB (onMessage) 无法找到 EJB(下载器)。此错误是在部署时显示还是在执行时显示?

标签: java jakarta-ee jboss ejb jms


【解决方案1】:

我认为您在

处得到了 NullPointerException
downloader.download(csvMessage.getUrl());

尝试像这样注入 EJB(例如:在 Consumer-Class 构造函数上)

try {
    Context ctx = new InitialContex();
    this.downloader = ctx.lookup("replace_with_ejb_jndi");
} catch (NamingException e) {
  //do something
}

【讨论】:

    猜你喜欢
    • 2021-01-18
    • 1970-01-01
    • 2011-06-09
    • 2014-07-03
    • 2017-01-30
    • 2011-10-27
    • 1970-01-01
    • 2011-06-08
    • 2017-12-21
    相关资源
    最近更新 更多