私は Websphere MQ (IBM z/OS) テクノロジーを初めて使用します。JMS テクノロジーを使用して MQ サーバー (IBM z/OS 上。これは、アクセスが制限されている別の組織によって維持されています) に接続し、メッセージをキューに入れるスタンドアロン アプリケーションを実装する必要がありました。
以下は私のコードの一部です。
private void sendMessage(String queue, String msg) {
JmsFactoryFactory ff = JmsFactoryFactory.getInstance(WMQConstants.WMQ_PROVIDER);
JmsConnectionFactory cf = ff.createConnectionFactory();
cf.setStringProperty(WMQConstants.WMQ_HOST_NAME, host);
cf.setIntProperty(WMQConstants.WMQ_PORT, port);
cf.setStringProperty(WMQConstants.WMQ_CHANNEL, channel);
cf.setIntProperty(WMQConstants.WMQ_CONNECTION_MODE, WMQConstants.WMQ_CM_CLIENT);
cf.setStringProperty(WMQConstants.WMQ_QUEUE_MANAGER, queueManagerName);
cf.setStringProperty(WMQConstants.USERID, user);
cf.setStringProperty(WMQConstants.PASSWORD, password);
Connection connection = null;
Session session = null;
Destination destination = null;
MessageProducer producer = null;
connection = cf.createConnection(user, password);
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
destination = session.createQueue(queue);
//((MQDestination)destination).setCCSID(37);
producer = session.createProducer(destination);
TextMessage message = session.createTextMessage();
message.setIntProperty(WMQConstants.JMS_IBM_CHARACTER_SET, 37);
//message.setIntProperty(WMQConstants.JMS_IBM_ENCODING, 785);
message.setText(msg);
// Start the connection
connection.start();
// And, send the message
producer.send(message);
}
相手側の MQ サーバーに正常に接続し、メッセージをリモート サーバーに ASCII 形式で送信することができました。AIX サーバーからキューに入れたメッセージを消費することができました。
しかし、MQ は z/OS 上で実行されており、コンシューマーもメインフレーム アプリケーションであるため、私が入力したメッセージは、ゴミのような、または判読できない形式のようです。いくつかの調査の結果、メッセージを z/OS MQ に配置するには、メッセージを EBCDIC に変換する必要があることがわかりました。これは、IBM MQ ライブラリーによって処理されると予想していました。
メッセージを EBCDIC 形式にする方法を教えてください。