Java 消息驱动bean没有响应来自有状态会话bean

Java 消息驱动bean没有响应来自有状态会话bean,java,jakarta-ee,jms,Java,Jakarta Ee,Jms,我试图使工作成为一个消息驱动的bean,但没有任何成功。也许你能帮助我 这是我的MDB的代码,非常简单 @MessageDriven(mappedName = "jms/bookingProcessorQueueReceiver", activationConfig = {@ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge"),

我试图使工作成为一个消息驱动的bean,但没有任何成功。也许你能帮助我

这是我的MDB的代码,非常简单

@MessageDriven(mappedName = "jms/bookingProcessorQueueReceiver", 
               activationConfig = {@ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge"),
                                   @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue")
})
public class BookingProcessorBean implements MessageListener
{    
    @PersistenceContext
    private EntityManager em;

    public BookingProcessorBean()
    {  
    }

    @Override
    public void onMessage(Message message)
    {
        Reservation reserv = null;

        if(message instanceof Reservation)
        {       
            try
            {

                    System.out.println("Order processing...");

                    reserv = (Reservation) message; // riceve l'utente

                    UserCredential user = reserv.getUsername(); //estrae l'utente

                    user.getReservationsList().add(reserv);

                    storeInDb(reserv, user);

            }
            catch(Exception e)
            {
                System.err.println("An error occured during the processing of the order" + e.toString());
            } 
         }
    }

    private void storeInDb(Reservation r, UserCredential u)
    {        
        em.persist(r);
        em.merge(u);
    }
}
这是调用它的有状态会话bean

@Stateful
public class BookingBean implements BookingBeanInterface
{
    @Resource(mappedName = "jms/bookingProcessorQueueReceiver")
    private Queue bookingProcessorQueueReceiver;
    @Resource(mappedName = "jms/reservationProcessorQueueFactory")
    private ConnectionFactory reservationProcessorQueueFactory;

    private Connection connection = null;
    private Session session = null;

    private MessageProducer messageProducer;

    private boolean SUCCESS;

    @Override
    public boolean purchase(Route r, UserCredential u, int passengers, int  luggages, double price)
    {                         
        Reservation reserv = setReservation(r, u, passengers, luggages, (float) price);

        try
        {
            sendMessageToBookingProcessorBean(reserv); // invia il messaggio contenente la prenotazione

            SUCCESS = true;

        }
        catch(JMSException jmse)
        {
            System.err.println("An error occured " + jmse.toString());
            return SUCCESS = false;
        }
        finally
        {
            try
            {    
                if (session != null)
                {
                    session.close();         
                }

                if (connection != null)
                {
                    connection.close();
                }       
            }
            catch(JMSException jmse)
            {
                Logger.getLogger(this.getClass().getName()).log(Level.WARNING, "Cannot close session", jmse);
            }
        } 

        return SUCCESS;
    }

    private void sendMessageToBookingProcessorBean(Object messageData) throws JMSException
    {                      
        connection = reservationProcessorQueueFactory.createConnection();
        session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

        messageProducer = session.createProducer(bookingProcessorQueueReceiver);

        messageProducer.send(createMessageForBookingProcessorBean(session, messageData));
    }

    private Message createMessageForBookingProcessorBean(Session session, Object messageData) throws JMSException
    {

        connection.start();

        ObjectMessage msg = session.createObjectMessage((Serializable) messageData);


        return msg;
    }    
}
我不知道我是不是忘了什么。请检查代码并告诉我是否一切正常…奇怪的是,当我发送消息时,我没有收到来自MDB的任何响应。我放在里面的任何代码都不会被执行。例如,我的意思是没有执行simple system.out.println。

if (message instanceof Reservation)
您的消息可能属于技术类型(如
TextMessage
,或者在您的情况下是
ObjectMessage

你需要像这样的东西

if (message instanceof ObjectMessage) {
  Object content = message.getObject();
  if (content instanceof Reservation) {
    // Cast and proceed

我理解了为什么这个例子不起作用。如果在执行时,它不会进入子句…因此保留的消息实例它不起作用。