2016-08-04 3 views
1

JMS 프로젝트를 사용하여 JMS를 사용하여 MDB에 지속성 개체 개체를 보내도록 프로젝트를 설정했습니다. 메시징 제공 업체로 Apache ActiveMQ를 사용하는 JBoss EAP 7을 사용하고 있습니다.JMS 메시지 생성자가 큐에 메시지를 보내지 않습니다.

:

AccountAccessQueue

ConnectionFactory

이것은 매개 변수로 '계정'엔티티 객체를 수신하고 대기열로 전송 내 메시지 프로듀서 : 그래서 같은 ConnectionFactory에 및 대기열을 설정 EntityEnqueueBean.java

@Stateless 
@LocalBean 
public class EntityEnqueueBean { 

    Context context = null; 

    public void enqueueEntity(Account accountEntity) {  
     try { 
      context = new InitialContext(); 
      ConnectionFactory connectionFactory = (ConnectionFactory) context.lookup("java:/ConnectionFactory"); 
      Destination queue = (Destination) context.lookup("java:/jms/queue/AccountAccessQueue"); 
      Connection connection = connectionFactory.createConnection(); 
      Session session = connection.createSession(true, Session.SESSION_TRANSACTED); 
      MessageProducer messageProducer = session.createProducer(queue); 
      ObjectMessage objectMessage = session.createObjectMessage(accountEntity); 
      messageProducer.send(objectMessage); 

      messageProducer.close(); 
      session.close(); 
      connection.close(); 
     } catch (JMSException | NamingException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

MDB는 큐에서 메시지를 수신하고 처리합니다

AccountPersistenceMDB.java

@MessageDriven(
    activationConfig = { @ActivationConfigProperty(
      propertyName = "destinationType", propertyValue = "javax.jms.Queue"), 
      @ActivationConfigProperty(propertyName = "destination", 
      propertyValue ="java:/jms/queue/AccountAccessQueue") 
    }) 
public class AccountPersitenceMDB implements MessageListener { 

    public void onMessage(Message message) { 
     ObjectMessage objectMessage = null; 
     objectMessage = (ObjectMessage) message; 
     try { 
      Account accountEntity = (Account) objectMessage.getObject(); 
      System.out.println("MDB accessCount: " + accountEntity.getAccessCount()); 
     } catch (JMSException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

내가 잘못지고있어 무엇 확실하지. 아마도 ConnectionFactory와 큐를 잘못 설정하는 코드가있을 것입니다. 그러나 Java EE를 처음 접했을 때 확신 할 수 없습니다. 어떤 도움을 주셔서 감사합니다.

+0

서버 로그에있는 모든 스택 추적? 예외가 있습니까? –

+0

@RamachandranGA 아니요, 모든 것이 작동하지만 MDB가 결과를 표시해야하는 부분이 작동하지 않습니다. 또한 JBoss 관리 패널의 대기열을 모니터링하면 대기열에서 메시지가 전송되지 않았 음을 알 수 있습니다. 나는 내가 뭘 잘못하고 있는지 정확히 지적 할 수 없다. –

+2

트랜잭션에 문제가있어 메시지가 커밋되지 않았습니다. 세션을 다음과 같이 변경해보십시오 .. Session session = connection.createSession (false, Session.AUTO_ACKNOWLEDGE); – mendieta

답변

1

@mendieta 덕분에 문제가 해결되었습니다. 나는 JMS 세션을 읽었으며 완벽하게 이해했다. EntityEnqueueBean.java에 트릭이 줄을 않았다 변경 :

Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); 
+0

나는 그 반대를함으로써 문제를 해결했다. Session.AUTO_ACKNOWLEDGE -> Session.SESSION_TRANSACTED. – Edza

관련 문제