Во-первых, вот моя конфигурация ресурса (glassfish-resources.xml, но ее можно перевести в другие дескрипторы развертывания). Это применимо к Glassfish (
Код: Выделить всё
asadmin add-resources glassfish-resources.xmlКод: Выделить всё
MyApp JMS Queue
MyApp Connection Factory
Код: Выделить всё
@Stateless
@LocalBean
public class ServicesHandlerBean {
@Resource(mappedName = "jms/queue/myApp")
private Queue queue;
@Resource(mappedName = "jms/factory/myApp")
private ConnectionFactory factory;
public void sendJMSMessage(MessageConfig messageData) throws JMSException {
Connection connection = null;
Session session = null;
try {
connection = factory.createConnection();
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
MessageProducer messageProducer = session.createProducer(queue);
messageProducer.send(createJMSMessage(session, messageData));
} finally {
if (session != null) {
try {
session.close();
} catch (JMSException e) {
Logger.getLogger(this.getClass().getName()).log(Level.WARNING, "Cannot close session", e);
}
}
if (connection != null) {
connection.close();
}
}
}
}
Код: Выделить всё
@MessageDriven(mappedName = "jms/queue/myApp")
public class MessageBean implements MessageListener
Предупреждение: RAR8000: метод setName отсутствует в классе:
org.apache.activemq.command.ActiveMQQueue Предупреждение : RAR7097: Для свойства Name в классе
отсутствует метод установки
org.apache.activemq.command.ActiveMQQueue Информация: посещение непосещенных
ссылок Информация: посещение непосещенных ссылок Предупреждение: RAR8501:
Исключение во время активации конечной точки для ra [ activemq-rar ],
активацииSpecClass [ org .apache.activemq.ra.ActiveMQActivationSpec ]
: javax.resource.ResourceException: Неизвестный тип назначения: null
Серьезный: MDB00017: [InvoiceProductionMessageBean]: Исключение при
создании контейнера компонентов, управляемых сообщениями: [java.lang.Exception] Серьезный:
java .lang.Exception
Я вынужден определить свою MDB как такие:
Код: Выделить всё
@MessageDriven(
activationConfig = {
@ActivationConfigProperty(propertyName = "connectionFactoryLookup", propertyValue = "jms/factory/myApp"),
@ActivationConfigProperty(propertyName = "destination", propertyValue = "myAppAMQ"),
@ActivationConfigProperty(propertyName = "messageSelector", propertyValue = " JMSType = 'TypeA' "),
@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue")
}
)
public class MessageBean implements MessageListener
Предупреждение: RAR8501: Исключение во время активации конечной точки для ra [
jmsra ], activeSpecClass [ com.sun.messaging.jms.ra.ActivationSpec
] : java.lang.ClassCastException:
org.apache.activemq.ra.ActiveMQConnectionFactory не может быть преобразовано в
com.sun.messaging. jms.ra.DirectConnectionFactory Severe: MDB00017:
[MessageBean]: исключение при создании управляемый сообщениями
контейнер bean-компонентов: [java.lang.Exception] Серьезный: java.lang.Exception
glassfish-ejb-jar.xml
Код: Выделить всё
MessageBean
activemq-rar
ActiveMQ перечисляет следующие свойства спецификации активации:
acknowledgeMode (используемый режим подтверждения JMS. Допустимые значения
являются: автоматическое подтверждение или Dups-ok-acknowledge)
clientId (используемый идентификатор клиента JMS (действительно требуется только для долговечных
темы))
destinationType (Тип места назначения: очередь или тема)
пункт назначения ( имя назначения (имя очереди или темы))
enableBatch (используется для включения пакетной обработки транзакций для повышения
производительности)
maxMessagesPerBatch (количество сообщений на пакет транзакций)
maxMessagesPerSessions (На самом деле это предварительная выборка размер для
подписки. (Да, неудачное название).
maxSessions (Максимальное количество одновременных сеансов)
messageSelector (селектор сообщений JMS, используемый в подписке
для выполнения маршрутизации на основе содержимого и фильтрации сообщений)
noLocal (Требуется только для подписок на темы; указывает, следует ли включать в подписку локально
опубликованные сообщения)
пароль ( пароль для соединения JMS)
subscriptionDurability (Независимо от того, требуется ли постоянная (тематическая) подписка
. Допустимые значения: Долговечный или недолговечный)
subscriptionName (имя постоянного подписчика. Используется только для
постоянных тем и в сочетании с clientID для уникальной идентификации
подписки на постоянные темы. )
userName (пользователь для соединения JMS)
useRAManagedTransaction (обычно адаптер ресурсов доставляет
сообщения в конечную точку, управляемую контейнером. Обычно
этот контейнер хочет управлять транзакцией
, по которой доставляется входящее сообщение. Но
иногда требуется выполнить доставку в более простую контейнерную систему, которая
не будет контролировать входящие транзакции. В этих случаях, если вы установите
useRAManagedTransaction в значение true, адаптер ресурса зафиксирует транзакцию
, если исключение не было сгенерировано из MessageListener, и
откатит, если исключение создано.)
initialRedeliveryDelay (задержка перед началом повторной доставки. Также
настраивается в ResourceAdapter)
maximumRedeliveries (Максимальное количество повторных доставок или -1 при отсутствии
максимума. Также можно настроить в ResourceAdapter)
redeliveryBackOffMultiplier (Множитель, который будет использоваться, если экспоненциальное обратное
выключение включено. Также можно настроить на ResourceAdapter)
redeliveryUseExponentialBackOff (Чтобы включить экспоненциальную отсрочку. Также
можно настроить на ResourceAdapter, используйте Jndi no false, если true, используйте
место назначения в качестве имени jndi)
Спецификация Java EE7 перечисляет следующую спецификацию активации Свойства:
acknowledgeMode (это свойство используется для указания режима подтверждения JMS
для сообщения). доставка при использовании разграничения транзакций, управляемых компонентом
. Его значения — Auto_acknowledge или
Dups_ok_acknowledge. Если это свойство не указано, предполагается семантика JMS
AUTO_ACKNOWLEDGE.
messageSelector (Это свойство используется для указания сообщения JMS Селектор
, который будет использоваться при определении того, какие сообщения должен получать компонент JMS, управляемый сообщениями
)
destinationType (Этот имущество используется чтобы указать, будет ли объект, управляемый сообщением,
использоваться с очередью или темой. Значение
должно быть либо javax.jms.Queue, либо javax.jms.Topic.)
destinationLookup (Это свойство используется для указания очереди JMS или
темы, из которой JMS-компонент, управляемый сообщениями, должен получать сообщения.) р>
connectionFactoryLookup (Это свойство используется для указания фабрики соединений JMS
, которая будет использоваться для подключения к поставщику JMS
, от которого отправляется сообщение JMS. управляемый компонент должен получать сообщения.)
subscriptionDurability (Если компонент, управляемый сообщениями, предназначен для
использования с темой, это свойство может использоваться для указания следует ли использовать
постоянную или непостоянную подписку. Значение этого
свойства должно быть либо Durable, либо NonDurable)
subscriptionName (это свойство используется для указания имени
долгосрочная подписка, если объект, управляемый сообщениями, предназначен для использования
с темой, и поставщик компонента указал, что следует использовать долгосрочную
подписку.)
clientId (Это свойство используется для указания идентификатора клиента JMS
, который будет использоваться при подключении к провайдеру JMS, от которого должен быть отправлен компонент JMS
, управляемый сообщениями. получать сообщения. Если это свойство
не указано, идентификатор клиента останется неустановленным.)
Какое правильное значение. способ использования ресурса ActiveMQ как у производителя, так и у потребителя с только точки @Inject и поиск jndi? Я бы хотел избежать использования glassfish-ejb-jar.xml и определения имени очереди с помощью @ActivationConfigProperty.
Подробнее здесь: https://stackoverflow.com/questions/322 ... figuration
Мобильная версия