Альтернатива RefFSContextFactory для IBM MQ + EJB отправке сообщения в очередь - PullRequest
0 голосов
/ 04 июля 2019

У меня есть задача написать код для получения слушателя + получателя, используя JavaEE EJB 3.x + JBoss (используя Wildcat 14) + IBM MQ 9.x (MQ на моем док-контейнере).Приемник записи был прост со всей конфигурацией для IBM MQ, используя Message Driven Bean.И это прекрасно работает.Я могу отправить сообщение от моего обозревателя MQ в браузере на мой приемник, развернутый в JBoss.Но у меня проблема с отправителем.Я хотел использовать com.ibm.mq.jms.context.WMQInitialContextFactory для JNDI Factory, но в настоящее время это устаревший контекст (небезопасный и т. Д.).Люди рекомендуют использовать com.sun.jndi.fscontext.RefFSContextFactory, но это контекст файла.Он хочет URL для локальной папки для привязок.Но моя программа будет развернута на другом компьютере в будущем, поэтому я не хочу использовать локальный файловый контекст.Или я плохо понимаю положительное в этом смысле ??

PS Раньше у меня была задача для той же программы, но с использованием весенней загрузки, и было очень легко использовать контекст весенней загрузки по умолчанию и JMSTemplate.convertandsend

1 Ответ

0 голосов
/ 08 июля 2019

Полагаю, я немного озадачен вашим вопросом.Если вы хотите отправить сообщение через IBM MQ, у вас сначала должна быть такая конфигурация:

        <subsystem xmlns="urn:jboss:domain:resource-adapters:5.0">
        <resource-adapters>
            <resource-adapter id="wmq.jmsra.rar" statistics-enabled="true">
                <archive>
                    wmq.jmsra.rar
                </archive>
                <transaction-support>XATransaction</transaction-support>
                <connection-definitions>
                    <connection-definition class-name="com.ibm.mq.connector.outbound.ManagedConnectionFactoryImpl" jndi-name="java:jboss/jms/MQConnectionFactory" enabled="true" pool-name="MQConnectionFactory">
                        <config-property name="transportType">
                            CLIENT
                        </config-property>
                        <config-property name="password">
                            redhat
                        </config-property>
                        <config-property name="queueManager">
                            ${wmq.queue.manager}
                        </config-property>
                        <config-property name="userName">
                            redhat
                        </config-property>
                        <config-property name="connectionNameList">
                            ${wmq.connectionlist}
                        </config-property>
                    </connection-definition>
                </connection-definitions>
                <admin-objects>
                    <admin-object class-name="com.ibm.mq.connector.outbound.MQQueueProxy" jndi-name="java:jboss/mqQueue" enabled="true" pool-name="mqQueue">
                        <config-property name="baseQueueName">
                            REDHAT.QUEUE
                        </config-property>
                        <config-property name="baseQueueManagerName">
                            REDHAT.QUEUE.MANAGER
                        </config-property>
                    </admin-object>
                </admin-objects>
            </resource-adapter>
        </resource-adapters>

Затем вам нужно будет выполнить поиск JNDI на фабрике соединений и в месте назначения, а затем отправить сообщение.В качестве альтернативы вы могли бы сделать внедрение ресурсов и позволить контейнеру JBoss заполнить вашу фабрику соединений и пункт назначения.

Что-то вроде:

    @Resource(mappedName = "java:jboss/jms/MQConnectionFactory")
    private ConnectionFactory connectionFactory;

Вы можете использовать фабрику соединений и пункт назначения из JNDI для заполненияШаблон JMS, если хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...