Я пытаюсь отправить/написать JMS-сообщения из простого безголового EJB. Для этого я использую CDI для создания и ввода ресурсов JMS (ConnectionFactory
, Connection
и Session
). Точно как описано в Weld doc - JavaEE integration, JMS enpoints.Конечные точки JMS конца CDI: @Produces transacted Session issue
Дело в том, что я создаю сеанс JMS как trasacted
, сообщение не отправляется (или не совершается) моим EJB. Ошибка не возникает.
производитель CDI Ресурс:
@Produces
@ItemQualifier
public Session createJMSSession(@ItemQualifier Connection connection) throws JMSException {
return connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
}
EJB метод производитель JMS:
public void pushItem(Item newItem) throws Exception {
log.info("Sending " + newItem.getDescricao());
log.info("Session Transacted? " + mineracaoSession.getTransacted());
ObjectMessage message = session.createObjectMessage();
message.setObject(newItem);
producer.send(message);
log.info("Message sent!");
}
Если изменить метод Producer для создания не-транзакционной JMS Session сообщения посылается (поручен) нормально.
Я хотел бы понять, почему мой EJB не отправляет/фиксирует сообщения, когда сеанс JMS равен transacted
. Все методы EJB по умолчанию транслируются, не так ли?
Просто любопытно, какую версию вы используете? Если вы используете EE 7, вы можете использовать новые упрощенные интерфейсы JMS. –
Я использую JavaEE 6 на JBossAS 7 – Tuelho