设为首页 收藏本站
查看: 706|回复: 0

[经验分享] 在Tomcat 6.0下用JNDI连接IBM MQ 6.0的配置方法

[复制链接]

尚未签到

发表于 2017-2-9 10:51:50 | 显示全部楼层 |阅读模式
  假设在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、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-339670-1-1.html 上篇帖子: tomcat实现自定义classloader加载第三方类的问题 下篇帖子: tomcat启动时检测到循环继承而栈溢出的问题
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表