java 连接 websphere_java-使用Tomcat的WebSphere MQ连接池

Tomcat具有内置的JDBC连接池,但是不幸的是,没有内置的JMS连接池.

我们正在将遗留的Tomcat Web应用程序从WebSphere MQ版本6迁移到7.

不幸的是,连接池已在WebSphere MQ 7中删除,如下所述:http://www-01.ibm.com/support/docview.wss?uid=swg21665128

现在我们担心,如果仅使用以下代码在Tomcat中配置MQ,就会遇到麻烦:

type="com.ibm.mq.jms.MQQueueConnectionFactory" factory="com.ibm.mq.jms.MQQueueConnectionFactoryFactory"

description="JMS Queue Connection Factory"

HOST="xxx.com" PORT="1429" CHAN="XXX" TRAN="1"

QMGR="XXX" />

我们看到的替代解决方案是:

1)使用Atomikos

Atomikos有一个com.atomikos.jms.AtomikosConnectionFactoryBean可以代替MQQueueConnectionFactory使用

但是,当我们不需要XA时,使用XA事务管理器会产生巨大的开销

2)使用Spring的CachingConnectionFactory

看起来是一个很好的解决方案,但不幸的是,我们的旧版应用程序未使用Spring.

因此,我们假设使用CachingConnectionFactory会花费很多精力.

3)使用Apache Commons Pool

看起来也很有希望,但是正确地为JMS实施它将需要一些JMS知识

我们的问题:

>是否有一个JMS提供程序可用于包装MQQueueConnectionFactory并将合并连接,会话,生产者和使用者?

>是否有人成功实现了我们上面概述的替代解决方案之一?

解决方法:

正如Umapathy在选项3中所建议的那样,我们现在选择了使用Spring的CachingConnectionFactory的方法,即使对于非Spring应用程序,它也能很好地工作.您需要做的就是将Spring Jars添加到类路径中,并用CachingConnectionFactory包装MQQueueConnectionFactory.

我们选择创建自己的Tomcat QueueConnectionFactoryFactory,使我们能够完全保持原始应用程序代码不变,您只需要使用以下XML定义替换Tomcat配置文件(问题中所示)中的原始MQ连接工厂:

type="org.springframework.jms.connection.CachingConnectionFactory"

factory="at.rsf4j.core.utilities.RSFCachingMQQueueConnectionFactoryFactory"

description="JMS Queue Connection Factory"

HOST="xxx.com" PORT="1429" CHAN="XXX" TRAN="1"

QMGR="XXX" />

这是RSFCachingMQQueueConnectionFactoryFactory的(简化)代码(无错误检查):

public class RSFCachingMQQueueConnectionFactoryFactory implements ObjectFactory{

public Object getObjectInstance (Object obj, Name name, Context nameCtx, Hashtable,?> environment)

throws NamingException {

Reference ref = (Reference) obj;

String beanClassName = ref.getClassName();

Class> beanClass = Class.forName(beanClassName);

if (CachingConnectionFactory.class.isAssignableFrom(beanClass)){

MQQueueConnectionFactoryFactory cff = new MQQueueConnectionFactoryFactory();

Reference mqReference = new Reference(

MQQueueConnectionFactory.class.getName());

Enumeration allAddrs = ref.getAll();

while (allAddrs.hasMoreElements()){

mqReference.add(allAddrs.nextElement());

}

MQQueueConnectionFactory cf = (MQQueueConnectionFactory)cff.getObjectInstance(mqReference, name, nameCtx, environment);

CachingConnectionFactory ccf = (CachingConnectionFactory)beanClass.newInstance();

ccf.setTargetConnectionFactory(cf);

return ccf;

}

}

标签:tomcat,ibm-mq,java

来源: https://codeday.me/bug/20191120/2041998.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值