将IBM MQ迁移到javax.jms。*实现 - MQOPEN如何转换为JMS API?

时间:2013-07-02 22:02:46

标签: java jms ibm-mq

在将MQ与JMS API一起使用时,如何获得与ibm专有的mq api的openOptions相同的效果?

JMS API中是否存在openOptions的概念?如果是这样,那么API类/方法的等价是什么?

Related stackoverflow question - migrating-from-ibm-mq-to-javax-jms-weblogic

2 个答案:

答案 0 :(得分:1)

这个简单的例子展示了如何发送Message(使用JBoss MQ):

    final Properties initialContextProperties = new Properties();
    initialContextProperties.put("java.naming.factory.initial",
            "org.jnp.interfaces.NamingContextFactory");
    initialContextProperties.put("java.naming.provider.url",
            "jnp://localhost:1099");

    //

    final InitialContext ic = new InitialContext(initialContextProperties);

    final QueueConnectionFactory qcf = (QueueConnectionFactory) ic
            .lookup("XAConnectionFactory");

    final Queue queue = (Queue) ic.lookup("queue/A");

    //

    final QueueConnection queueConnection = qcf.createQueueConnection();

    final boolean transacted = false;
    final QueueSession queueSession = queueConnection.createQueueSession(
            transacted, Session.AUTO_ACKNOWLEDGE);

    final QueueSender queueSender = queueSession.createSender(queue);

    final TextMessage textMessage = queueSession.createTextMessage("Hello");
    queueSender.send(textMessage);

所以不同的阶段/级别有不同的选择:

  • 您通常需要为JNDI查找提供一些属性(以获取InitialContext)。
  • 您必须使用JNDI按名称查找工厂和队列。
  • 创建QueueSession时有一些设置:交易,确认。
  • 当您在createSender个实例上致电createReceivercreateBrowserQueueSession时,会指定用法。

答案 1 :(得分:1)

您正在比较苹果和橘子。是的,两者都是水果,但它们是完全不同的水果。 2之间没有直接的比较。

1)具有“transacted”和“createSender”的JMS会话基本上是带有syncpoint的开放输出。 即。

// Open Options
int oo = MQC.MQOO_OUTPUT + MQC.MQOO_INQUIRE + MQC.MQOO_FAIL_IF_QUIESCING;
// Put Msg Options
MQPutMessageOptions pmo = new MQPutMessageOptions();
pmo.options = MQC.MQPMO_SYNCPOINT + MQC.MQPMO_FAIL_IF_QUIESCING;

2)带有“createReceiver”(非事务处理)的JMS会话基本上是一个开放输入。 即。

int oo = MQC.MQOO_INPUT_AS_Q_DEF + MQC.MQOO_INQUIRE + MQC.MQOO_FAIL_IF_QUIESCING;
// Get Msg Options
MQGetMessageOptions gmo = new MQGetMessageOptions();
gmo.options = MQC.MQGMO_FAIL_IF_QUIESCING;