在Tomcat 6.0下用JNDI连接IBM MQ 6.0的配置方法

 

 

假设在IBM MQ中定义的队列管理器的名为QueueManager, 端口1414,CCSID 437 ,创建名为LQ1,LQ2的队列分别用于发送和接收消息, 服务器连接通道名为SVRCONN。

 

1.项目包依赖

确保在项目的Classpath中导入了以下的jar包:

com.ibm.mq.jar ( %WebSphere MQ Root% /Java/lib/ )

com.ibm.mqjms.jar ( %WebSphere MQ Root% /Java/lib/ )

connector.jar ( %WebSphere MQ Root% /Java/lib/ )

dhbcore.jar ( %WebSphere MQ Root% /Java/lib/ )

geronimo-j2ee-management_1.0_spec-1.0.jar

geronimo-jms_1.1_spec-1.0.jar

jta.jar

如果需使用spring的JmsTemplate方式来读写MQ,还需要导入

spring.jar和commons-logging.jar

 

2.Tomcat的配置

在Tomcat的安装目录下,找到conf子目录下的context.xml, 默认情况下该文件的内容为:

<!-- The contents of this file will be loaded for each web application -->

<Context>

<!-- Default set of monitored resources -->

<WatchedResource>WEB-INF/web.xml</WatchedResource>

<!-- Uncomment this to disable session persistence across Tomcat restarts -->

<!--

<Manager pathname="" />

-->

</Context>

将其修改为:

<!-- The contents of this file will be loaded for each web application -->

<Context>

<!-- Default set of monitored resources -->

<WatchedResource>WEB-INF/web.xml</WatchedResource>

<!-- Uncomment this to disable session persistence across Tomcat restarts -->

<!--

<Manager pathname="" />

-->

<!—连接工厂定义-->

<Resource

name="jms/queueConnectionFactory"

auth="Container"

type="com.ibm.mq.jms.MQConnectionFactory"

factory="com.ibm.mq.jms.MQConnectionFactoryFactory"

description="JMS Queue Connection Factory for sending messages"

HOST="127.0.0.1"

PORT="1414"

CHAN="SVRCONN"

TRAN="1"

CCSID="437"

QMGR="QueueManager"

/>

<!—队列定义-->

<Resource

name="jms/sendMsgQueue"

auth="Container"

type="com.ibm.mq.jms.MQQueue"

factory="com.ibm.mq.jms.MQQueueFactory"

description="JMS Queue for sending messages to app"

QU="LQ1"

CCSID="437"

/>

<Resource

name="jms/recvMsgQueue"

auth="Container"

type="com.ibm.mq.jms.MQQueue"

factory="com.ibm.mq.jms.MQQueueFactory"

description="JMS Queue for receiving messages from app"

QU="LQ2"

CCSID="437"

/>

</Context>

 

也就是在Context元素下新增Resource子元素。

 

在Resource元素中,根据具体环境不同需要修改的属性有:

Name : JNDI的名称

HOST: 主机名

PORT: 队列管理器的端口号

CHAN:服务器通道名

CCSID:编码字符集标识

QMGR:队列管理器名

QU: 队列名

 

3.应用程序的配置

在web.xml中加入以下内容:

<!—连接工厂的JNDI引用-->

<resource-env-ref>

<resource-env-ref-name> jms/queueConnectionFactory</resource-env-ref-name>

<resource-env-ref-type> javax.jms.QueueConnectionFactory</resource-env-ref-type>

</resource-env-ref>

<!—队列的JNDI引用-->

<resource-env-ref>

<resource-env-ref-name>jms/sendMsgQueue</resource-env-ref-name>

<resource-env-ref-type>javax.jms.Queue</resource-env-ref-type>

</resource-env-ref>

<resource-env-ref>

<resource-env-ref-name>jms/recvMsgQueue</resource-env-ref-name>

<resource-env-ref-type>javax.jms.Queue</resource-env-ref-type>

</resource-env-ref>

 

测试程序如使用spring JmsTemplate方式操作MQ,在spring配置文件中JMS资源定义部分为:

<!-- 连接工厂定义 -->

<bean id="jmsConnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">

<property name="jndiName">

<value>java:comp/env/jms/queueConnectionFactory</value>

</property>

</bean>

<!-- 队列定义 -->

<bean id="sendQueue" class="org.springframework.jndi.JndiObjectFactoryBean">

<property name="jndiName" value="java:comp/env/jms/sendMsgQueue" />

</bean>

<bean id="recvQueue" class="org.springframework.jndi.JndiObjectFactoryBean">

<property name="jndiName" value="java:comp/env/jms/recvMsgQueue" />

</bean>

 

4. MQ编码字符集的修改

在中文系统下IBM MQ默认的编码字符集标识(CCSID)为1381,也就是简体中文编码。但是如果CCSID用1381的话,在Tomcat连接队列管理器时会出现错误,错误的Reason Code 为CCSID不能识别(至于为什么1381不能识别还不清楚),所以要修改CCSID。经过验证,CCSID=437 (西欧字符编码)可以连上队列管理器(貌似只要不是1381都能连,faint)。当然,IBM MQ里队列管理器的CCSID应修改为对应CCSID,方法如下:

假如队列管理器名为QueueManager,

(1) 启动QueueManager

(2) 在Dos命令行窗口下:

/> runmqsc QueueManager (回车)

ALTER QMGR FORCE CCSID(437)

End (退出)

(3) 重启QueueManager

如果一切正常,QueueManager的CCSID会修改为437

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
IBM MQ 配置 JNDI 的步骤如下: 1. 首先,需要创建一个 JNDI 上下文,可以使用 `InitialContext` 类来创建。例如: ```java Hashtable<String, String> env = new Hashtable<>(); env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.fscontext.RefFSContextFactory"); env.put(Context.PROVIDER_URL, "file:///C:/jndi"); Context context = new InitialContext(env); ``` 上面的代码创建了一个文件系统上下文,路径为 `C:/jndi`。 2. 在 JNDI 上下文中绑定 MQ 连接工厂和队列。 ```java // 创建 MQ 连接工厂 MQConnectionFactory cf = new MQConnectionFactory(); cf.setHostName("localhost"); cf.setPort(1414); cf.setQueueManager("QMGR"); cf.setChannel("SYSTEM.DEF.SVRCONN"); // 将 MQ 连接工厂绑定到 JNDI 上下文 context.bind("jms/CF", cf); // 创建队列,将队列绑定到 JNDI 上下文 MQQueue queue = new MQQueue("queue:///TEST.QUEUE"); context.bind("jms/QUEUE", queue); ``` 上面的代码创建了一个 MQ 连接工厂,然后将其绑定到 JNDI 上下文中的 `jms/CF` 名称下。同时,还创建了一个队列,并将其绑定到 `jms/QUEUE` 名称下。 3. 在应用程序中通过 JNDI 获取 MQ 连接工厂和队列。 ```java // 从 JNDI 上下文中获取 MQ 连接工厂 MQConnectionFactory cf = (MQConnectionFactory) context.lookup("jms/CF"); // 从 JNDI 上下文中获取队列 MQQueue queue = (MQQueue) context.lookup("jms/QUEUE"); ``` 上面的代码从 JNDI 上下文中获取了 MQ 连接工厂和队列。 以上就是 IBM MQ 配置 JNDI 的基本步骤。具体的细节还需要根据实际情况进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值