假设在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
相关推荐
经过实践归纳的,参考了tomcat6.0关于配置JNDI的官方文档。经过测试可以配置成功和使用。
tomcat6.0中配置JNDI的DBCP连接
NULL 博文链接:https://shijian4810.iteye.com/blog/1165175
tomcat6.0JNDI连接数据库 中配置代码
Tomcat6.0 JNDI数据源经典实例,里面JAR包,配置文件,数据源都配置好了,sql语句已经打包好了,直接可以建表的。
was6.0的lib,文件列表为: CL3Export.jar CL3Nonexport.jar com.ibm.mq.fta.jar com.ibm.mq.jar com.ibm.mq.jms.Nojndi.jar com.ibm.mq.soap.jar com.ibm.mqetclient.jar com.ibm.mqjms.jar commonservices.jar ...
NULL 博文链接:https://zhaoshijie.iteye.com/blog/903265
连接数据库有JDBC和JNDI等多种方式,该文件详细的描述了如何在tomcat6下配置JNDI的方法,本人测试多次很有效,绝对正确。
帆软报表FineReport中数据连接中的Tomcat配置JNDI连接,要通过JNDI方式定义数据连接,首先在Tomcat服务器配置好JNDI,然后在设计器中直接调用JNDI的名字,即可成功使用JNDI连接,本文进行详细演示。
在Tomcat下配置JNDI.doc 在Tomcat下配置JNDI.doc 在Tomcat下配置JNDI.doc 在Tomcat下配置JNDI.doc 在Tomcat下配置JNDI.doc
在tomcat 中使用jndi技术来配数据源, 用户可以远程通jndi名来查找数据源,来操作数据库
NULL 博文链接:https://sailinglee.iteye.com/blog/480715
hibernate 3.1+tomcat 5.5.x(配置jndi)hibernate 3.1+tomcat 5.5.x(配置jndi)hibernate 3.1+tomcat 5.5.x(配置jndi)hibernate 3.1+tomcat 5.5.x(配置jndi)hibernate 3.1+tomcat 5.5.x(配置jndi)hibernate 3.1+...
简单我tomcat5.0中的JNDI应用
Tomcat通过JNDI方式连接SqlServer数据库 开发JSP详解
TOMCAT8 JNDI对用户名和密码加密
在Tomcat配置JNDI数据源的三种方式
tomcat配置jndi几个方式
tomcat配置jndi、数据库连接jndi、jndi实例、非常简单,可以快速学习入门。有连接数据库的例子,和具体的配置。