当前位置: 首页 > 知识库问答 >
问题:

JBoss消息驱动Bean,未调用onMessage

严修谨
2023-03-14
<configuration xmlns="urn:hornetq"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="urn:hornetq /schema/hornetq-jms.xsd">
     <queue name="searchtabQueue">
     <entry name="/queue/searchtabQueue"/>
   </queue>
</configuration>

在一个无状态bean中,我正在查找队列,这是正确的,并且发送没有抛出异常:

Context ctx = new InitialContext(p); // Create the initial context
ConnectionFactory factory = (ConnectionFactory) ctx.lookup("ConnectionFactory");
Queue queue = (Queue) ctx.lookup("queue/searchtabQueue");
Connection connect = factory.createConnection();
javax.jms.Session session = connect.createSession(false, 0);
MessageProducer sender = session.createProducer(queue);
TextMessage msg = session.createTextMessage();
msg.setText("abc");
sender.send(msg);
connect.close();

但不调用消息驱动bean的onMessage方法。

我错过了什么?

我的消息驱动bean有以下代码:

@MessageDriven(activationConfig =  {
        @ActivationConfigProperty(propertyName = "destinationType",
                                  propertyValue = "javax.jms.Queue"),
        @ActivationConfigProperty(propertyName = "destination",
                                  propertyValue = "queue/searchtabQueue"),
        @ActivationConfigProperty(propertyName = "acknowledgeMode",
                                  propertyValue = "Auto-acknowledge")
    })
public class SearchTableBean implements MessageListener {

   public void onMessage (Message message) {
  }
}

共有1个答案

卢出野
2023-03-14

现在它正在工作,我改变了一个看法的东西。

查找代码:

Context ctx = new InitialContext(p); // Create the initial context
Queue queue = (Queue) ctx.lookup("java:jboss/exported/jms/queue/searchtab");
QueueConnectionFactory factory = (QueueConnectionFactory)
  ctx.lookup("ConnectionFactory");
QueueConnection connect = factory.createQueueConnection();
javax.jms.QueueSession session = connect.createQueueSession(false,
  QueueSession.AUTO_ACKNOWLEDGE);
TextMessage msg = session.createTextMessage("Hello World");
QueueSender sender = session.createSender(queue);
sender.send(msg);  
connect.close();

队列创建xml文件:

<configuration xmlns="urn:hornetq"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="urn:hornetq /schema/hornetq-jms.xsd">
   <queue name="searchtabQueue">
      <entry name="queue/searchtab"/>   
      <entry name="java:jboss/exported/jms/queue/searchtab"/>
   </queue>
</configuration>      
@MessageDriven(activationConfig =  {
        @ActivationConfigProperty(propertyName = "destinationType",
                                  propertyValue = "javax.jms.Queue"),
        @ActivationConfigProperty(propertyName = "destination",
                                  propertyValue = "queue/searchtab"),       
        @ActivationConfigProperty(propertyName = "acknowledgeMode",
                                  propertyValue = "Auto-acknowledge")
    })
public class SearchTableBean implements MessageListener {
  public void onMessage (Message message) {
    System.out.println("abc");
 }  
 类似资料:
  • 我对JMS编码是新手。我试图从独立的java客户端创建消息,该客户端创建并将消息发送到队列,消息驱动bean用于进一步处理消息。 我使用的是Glassfish应用服务器(3.1)。并设置从独立java客户机创建消息的所有内容。 下面是我的代码:客户端 消息驱动bean: 问题是:没有被调用。我错过什么了吗?请帮帮我.

  • 是否可以在MDB(消息驱动Bean)中为“目的地”动态分配运行时值? 我还尝试了ejb-jar.xml方法,但是“activation-config-property-name”=“destination”的值被理解为队列的文字物理名称。因此我无法对资源进行JNDI查找。 从属性读取和分配目标或使用-d参数传递值的正确方法是什么?

  • 在企业应用程序中,我试图使用netBeans 8.1将MessageDriven beans注入Web应用程序(到REST服务)。我在IDE中没有得到任何警告,但是,在部署时,我得到以下错误: 严重:加载应用程序时出现异常:CDI部署失败:Weld-001408:未满足类型StatisticsBean的依赖关系,其限定符@Default在注入点[BackedAnnotatedField]@Inje

  • 消息驱动Bean是一种企业bean,当EJB容器从队列或主题接收消息时由EJB容器调用。 消息驱动的bean是一个无状态bean,用于异步执行任务。 为了演示消息驱动bean的使用,我们将使用EJB-persistence章节,我们需要执行以下任务 - Step 1 - 在数据库中创建表(请参阅EJB-Persistence章节)。 Step 2 - 创建与表对应的实体类(请参阅EJB-Persi

  • 早上好在我的时区。 事先表示感谢并致以最良好的问候

  • 同事, 你能帮我解决以下问题吗? 我有JavaEE应用程序。它包含一些具有业务逻辑的消息驱动Bean和一些负责整个应用程序配置的不同方面的管理Bean。我想设置bean启动和初始化的顺序。这意味着在管理Bean完成应用程序的初始化之前,容器不应该调用消息驱动Bean。应用程序的初始化包括读取和解析一些配置文件,这需要一些时间。 有WebSphere配置选项吗? 或者它应该只以编程方式完成技巧?