1 Reply Latest reply on Feb 12, 2010 12:46 PM by mireksz

    Send message from stateless

    mireksz

      Hello, I have simple service which should send message to queue

       

      @Stateless
      public class PracownikServiceImpl implements PracownikService {
      
           @Resource(mappedName = "queue/TotalOrderQueue")
           private Queue queue;
      
           @Resource(mappedName = "ConnectionFactory")
           private ConnectionFactory jmsConnectionFactory;
      
           @Override
           @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
           public void akcja() {
                Connection connection = null;
                Destination dest = (Destination) queue;
                Session session = null;
                try {
                     connection = jmsConnectionFactory.createConnection();
                     session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
      
                     MessageProducer producer = session.createProducer(dest);
                     TextMessage message = session.createTextMessage();
                     message.setText("Hello");
                     System.out.println("Sending message: " + message.getText());
                     producer.send(message);
                     session.close();
                     connection.close();
                } catch (JMSException e) {
                     e.printStackTrace();
                }
                System.out.println("koniec");
           }
      
      }
      
      But it didn't. When I change
      connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
      to
      connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
      this works fine but I want send message trasactionaly. 
      I don't know why it dosen't work, it looks like the session don't integrate with container transaction
      
      How to resolve this problem
      
      Best regards
      
      
        • 1. Re: Send message from stateless
          mireksz

          I found answer,

          if you want to sending message to queue integrates with container transaction you should inject

           

          @Resource(mappedName="java:/JmsXA")
          private ConnectionFactory jmsConnectionFactory;