MQ纯Java客户端库

时间:2010-09-13 05:13:12

标签: java

我正在评估Websphere MQ7。我是传统的TibRV人。我不喜欢的一件事是IBM Java客户端库需要C ++库才能运行。无论如何都要运行IBM Java客户端库而不需要C ++库?例如是否有一个用于MQ的纯Java客户端库?

1 个答案:

答案 0 :(得分:0)

我之前已经编写了一个JMS客户端到MQSeries v6(不是您的版本,我知道),而无需安装本机库。我需要的唯一IBM库名为:

  • com.ibm.mq-6.jar
  • com.ibm.mqbind.jar
  • com.ibm.mqjms-6.jar

根据this post,他们提供客户端安装。我假设您可以安装一次,然后重新使用罐子(除了任何许可问题和专家意见)。

编辑:在回复您的评论时,这是我破解的客户端代码。它用于从队列中读取消息并将它们分成文件。它是用Scala编写的。我希望它有所帮助。

import com.ibm.mq._
import java.text._
import java.io._

case class QueueDetails(hostname: String, channel: String, 
  port: Int, queueManager: String, queue: String)

class Reader(details: QueueDetails) {
  def read = {
    MQEnvironment.hostname = details.hostname
    MQEnvironment.channel = details.channel
    MQEnvironment.port = details.port
    val props = new java.util.Hashtable[String, String]
    props.put(MQC.TRANSPORT_PROPERTY, MQC.TRANSPORT_MQSERIES)
    MQEnvironment.properties = props
    val qm = new MQQueueManager(details.queueManager)
    val options = MQC.MQOO_INPUT_AS_Q_DEF | MQC.MQOO_INQUIRE
    val q = qm.accessQueue(details.queue, options, null, null, null)
    val depth = q.getCurrentDepth
    val indexFormat = new DecimalFormat(depth.toString.replaceAll(".", "0"))

    def exportMessage(index: Int): Unit = {
      if (index < depth) {
        val msg = new MQMessage
        q.get(msg, new MQGetMessageOptions)
        val msgLength = msg.getMessageLength
        val text = msg.readStringOfByteLength(msgLength)
        val file = new File("message_%s.txt".format(indexFormat.format(index)))
        val writer = new BufferedWriter(new FileWriter(file))
        writer.write(text)
        writer.close
        println(file.getAbsolutePath)
        exportMessage(index + 1)
      }
    }

    exportMessage(0)
    q.close
    qm.disconnect
  }
}