我需要一些帮助来配置JBoss以使用MQ。我使用IBM MQ Explorer在MQ中创建了初始上下文,并为所有绑定提供了本地目录,例如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绑定在一个目录中。我尝试了大多数组合。可能是我没有把这个概念说得对。有什么指针吗?
当我尝试从我编写的测试servlet访问此MQ.CONNECTIONFACTORY.NAME时,我得到了javax.naming.NameNotFoundException。如果我在Java SE环境中遵循相同的步骤,我就能成功建立连接。我是应用程序服务器的新手,问题可能是天真的
此致
答案 0 :(得分:0)
通过MQExplorer创建的资源的描述表明这些资源已被放入由文件系统上下文支持的JNDI中。这非常好,但理论上现在需要做的是让JBOSS从JNDI上下文中读取对象而不是JBOSS提供的常用JNDI提供程序。连接定义提取中的设置使用标准JBOSS JNDI上下文。
作为将JBOSS与WebSphere MQ Resoruce Adapter一起使用的示例,请查看http://pic.dhe.ibm.com/infocenter/wmqv7/v7r5/topic/com.ibm.mq.dev.doc/q031810_.htm
这链接到一组示例,用于在JBOSS JNDI上下文中存储WMQ JMS管理对象。
答案 1 :(得分: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>