JMS 프로젝트를 사용하여 JMS를 사용하여 MDB에 지속성 개체 개체를 보내도록 프로젝트를 설정했습니다. 메시징 제공 업체로 Apache ActiveMQ를 사용하는 JBoss EAP 7을 사용하고 있습니다.JMS 메시지 생성자가 큐에 메시지를 보내지 않습니다.
:
이것은 매개 변수로 '계정'엔티티 객체를 수신하고 대기열로 전송 내 메시지 프로듀서 : 그래서 같은 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를 처음 접했을 때 확신 할 수 없습니다. 어떤 도움을 주셔서 감사합니다.
서버 로그에있는 모든 스택 추적? 예외가 있습니까? –
@RamachandranGA 아니요, 모든 것이 작동하지만 MDB가 결과를 표시해야하는 부분이 작동하지 않습니다. 또한 JBoss 관리 패널의 대기열을 모니터링하면 대기열에서 메시지가 전송되지 않았 음을 알 수 있습니다. 나는 내가 뭘 잘못하고 있는지 정확히 지적 할 수 없다. –
트랜잭션에 문제가있어 메시지가 커밋되지 않았습니다. 세션을 다음과 같이 변경해보십시오 .. Session session = connection.createSession (false, Session.AUTO_ACKNOWLEDGE); – mendieta