Привязка JNDI в JBOss для MQ

Мне нужна небольшая помощь в настройке JBoss для работы с MQ. Я создал исходный контекст в MQ с помощью IBM MQ Explorer и указал локальный каталог для всех привязок, таких как file:/C:/jndi. Я создал фабрику соединений для этого начального контекста. Теперь документация JBoss говорит, что нужно привязать вот так

    <connection-definition class-name="com.ibm.mq.connector.outbound.ManagedConnectionFactoryImpl" 
                    jndi-name="java:jboss/MQ.CONNECTIONFACTORY.NAME" 
                    pool-name="MQ.CONNECTIONFACTORY.NAME">

Мне кажется, я упускаю здесь какой-то момент. Как сообщить Jboss, что мои привязки InitialContext находятся в каталоге. Я пробовал большинство комбинаций. Может быть, я не правильно понимаю концепцию. Любые указатели?

Когда я пытаюсь получить доступ к этому MQ.CONNECTIONFACTORY.NAME из написанного мной тестового сервлета, я получаю javax.naming.NameNotFoundException . Если я выполняю те же шаги в среде Java SE, я успешно могу установить соединение. Я новичок в серверах приложений, и вопрос может быть наивным.

С уважением


person Mohit Dhuper    schedule 08.09.2013    source источник


Ответы (2)


Описание ресурсов, созданных с помощью MQExplorer, предполагает, что они были помещены в JNDI, поддерживаемые контекстом файловой системы. Это совершенно нормально, но теперь теоретически необходимо заставить JBOSS считывать объекты из контекста JNDI, а не из обычного провайдера JNDI, предоставляемого JBOSS. Параметры, содержащиеся в извлечении определения соединения, используют стандартный контекст JBOSS JNDI.

В качестве примера использования JBOSS с адаптером ресурсов WebSphere MQ см. здесь http://pic.dhe.ibm.com/infocenter/wmqv7/v7r5/topic/com.ibm.mq.dev.doc/q031810_.htm

Это ссылка на пример набора определений, в котором администрируемые объекты WMQ JMS хранятся в контексте JBOSS JNDI.

person Calanais    schedule 09.09.2013
comment
ссылка, которая у вас есть, предназначена для более старой версии JBOSS и не объясняет, как использовать контекст JNDI, хранящийся в виде файла, поэтому я сомневаюсь, что это поможет. - person eis; 13.01.2014

Это важный вопрос. Я использовал Spring для этого, например:

<util:properties id="remoteEnv">
    <prop key="java.naming.provider.url">file:${my.config.path}/bindings</prop>
    <prop key="java.naming.factory.url.pkgs">org.jboss.naming:org.jboss.naming.remote.client</prop>
    <prop key="java.naming.factory.initial">com.sun.jndi.fscontext.RefFSContextFactory</prop>
    <prop key="java.naming.security.principal">${mdb.user.name}</prop>
    <prop key="java.naming.security.credentials">${mdb.user.pass}</prop>
</util:properties>
<bean id="remoteJNDITemplate" class="org.springframework.jndi.JndiTemplate">
    <property name="environment" ref="remoteEnv" />
</bean>
<bean id="remoteJmsDestinationResolver" class="org.springframework.jms.support.destination.JndiDestinationResolver">
    <property name="jndiTemplate" ref="remoteJNDITemplate" />
    <property name="cache" value="true" />
</bean>
<jee:jndi-lookup id="senderQueue" jndi-name="MY_QUEUE_NAME" environment-ref="remoteEnv" />
<bean id="xamqconnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiTemplate">
        <ref bean="remoteJNDITemplate"/>
    </property>
    <property name="jndiName" value="MYCONNECTIONFACTORYJNDINAME"/>
    <property name="lookupOnStartup" value="false" />
    <property name="proxyInterface" value="javax.jms.XAQueueConnectionFactory" />
</bean>
<bean id="xaMQSenderJMSTemplate" class="org.springframework.jms.core.JmsTemplate">
    <property name="connectionFactory">
        <ref bean="xamqconnectionFactory" />
    </property>
    <property name="pubSubDomain">
        <value>false</value>
    </property>
    <property name="defaultDestination">
        <ref bean="senderQueue" />
    </property>
    <property name="destinationResolver" ref="remoteJmsDestinationResolver" />
</bean>

однако, используя приведенную выше конфигурацию, мы обходим адаптер ресурсов. В противном случае это не проблема, но это предотвращает присоединение транзакций к транзакции JBoss, поэтому сообщения JMS отправляются немедленно, а не с фиксацией транзакции. Я еще не нашел исправления для этого.

com.sun.jndi.fscontext.RefFSContextFactory, который используется для чтения файла .bindings, можно найти в этой зависимости:

<dependency>
    <groupId>com.sun.messaging.mq</groupId>
    <artifactId>fscontext</artifactId>
    <version>4.6-b01</version>
</dependency>
person eis    schedule 13.01.2014