2013-09-08 4 views
1

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

<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, я успешно смогу установить соединение. Я новичок в серверах приложений, и вопрос может быть наивным

С уважением

ответ

0

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

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

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

+0

связь у вас есть для старой версии JBOSS и не объясните, как использовать JNDI-контекст, хранящийся как файл, поэтому я сомневаюсь, что это помогает. – eis

0

Это важный вопрос. Я использовал 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>