Как отобразить очередь Websphere MQ 7 в EJB 3 destinationName - PullRequest
1 голос
/ 09 июня 2011

Мне нужно сопоставить очередь WebSphere MQ7 (скажем, queA в QMA) с EJB3 MDB.

Я создал MQ Queue Manager и очередь, используя
crtmqm QMA и запустите, используя strmqm MQA
Затем я написал имя файла QMA.conf и включил
DEFINE QLOCAL ('queA')
выровняйте его и выполните команду
runmqsc QMA < QMA.conf
тогда я бегу
strmqcsv MQA &
runmqlsr -m QMA -t TCP &
Все эти шаги сделаны как зарегистрированный пользователь mqm.

Тогда я следую http://community.jboss.org/wiki/JBossEAP5IntegrationwithWebSphereMQ связать и настроить RAR для jboss 5.1. Когда я запустил тестовое соединение, которое также удалось.

Там я включаю

* channel - SYSTEM.DEF.SVRCONN
* hostName - localhost
* port - 1414
* queueManager - ExampleQM
* transportType - CLIENT

и в моем MDB я включаю

@MessageDriven( name="WMQMDBTest",
        activationConfig = 
        { 
            @ActivationConfigProperty(propertyName="messagingType",propertyValue="javax.jms.MessageListener"),
            @ActivationConfigProperty(propertyName = "destinationType",propertyValue = "javax.jms.Queue"),
            @ActivationConfigProperty(propertyName = "destination", propertyValue = "queA"),
            @ActivationConfigProperty(propertyName = "useJNDI", propertyValue = "true"),
            @ActivationConfigProperty(propertyName = "channel", propertyValue = "SYSTEM.DEF.SVRCONN"),
            @ActivationConfigProperty(propertyName = "hostName", propertyValue = "localhost"),
            @ActivationConfigProperty(propertyName = "queueManager", propertyValue = "QMA"),
            @ActivationConfigProperty(propertyName = "port", propertyValue = "1414"),
            @ActivationConfigProperty(propertyName = "transportType", propertyValue = "CLIENT"),
            @ActivationConfigProperty(propertyName = "username", propertyValue = "mqm"),
            @ActivationConfigProperty(propertyName = "password", propertyValue = "password")
        }) 
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
@ResourceAdapter(value = "wmq.jmsra.rar")

Когда я пытаюсь развернуть бин, он говорит

DEPLOYMENTS IN ERROR:
  Deployment "jboss.j2ee:ear=integration-1.0-SNAPSHOT.ear,jar=business-logic-1.0-SNAPSHOT.jar,  
  name=WMQMDBTest,service=EJB3" is in error due to the following reason(s): 
javax.naming.NameNotFoundException: queA not bound

1 Ответ

2 голосов
/ 15 августа 2011

Вы написали

        @ActivationConfigProperty(propertyName = "destination", propertyValue = "queA"),
        @ActivationConfigProperty(propertyName = "useJNDI", propertyValue = "true"),

со свойством useJNDI , подразумевающим, что 'queA' - это имя, под которым очередь JMS связана с JNDIПространство имен - это не соответствует напрямую определенной вами очереди

DEFINE QLOCAL ('queA')

Если вы хотите, чтобы она ссылалась на физическую очередь WMQв вашем администраторе очередей необходимо, чтобы для свойства useJNDI было установлено значение false, и в этом случае пункт назначения указывает имя очереди в администраторе очередей, а не имя JNDI.С другой стороны, если вы хотите использовать JNDI-поиск адресатов, вам необходимо убедиться, что указанное имя адресата соответствует определению очереди в файле -ds.xml, например,

        @ActivationConfigProperty(propertyName = "destination", propertyValue = "jms/request")

будет соответствовать

<mbean code="org.jboss.resource.deployment.AdminObject" name="jca.wmq:name=request_queue">
    <attribute name="JNDIName">jms/request</attribute>
    <depends optional-attribute-name="RARName">jboss.jca:service=RARDeployment,name='wmq.jmsra.rar'</depends>
    <attribute name="Type">javax.jms.Queue</attribute>
    <attribute name="Properties">
        baseQueueManagerName=QMA            
        baseQueueName=queA
    </attribute>
</mbean>

, обратите внимание, что атрибут JNDIName mbean соответствует имени назначения

...