/*
*
* Licensed Materials - Property of IBM
*
* 5724-H72,5655-R36,5655-L82,5724-L26
*
* (C) Copyright IBM Corp. 2002, 2016 All Rights Reserved.
*
* US Government Users Restricted Rights - Use, duplication or
* disclosure restricted by GSA ADP Schedule Contract with
* IBM Corp.
*
*/
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Hashtable;
import java.util.Locale;
import com.ibm.mq.MQEnvironment;
import com.ibm.mq.MQException;
import com.ibm.mq.MQGetMessageOptions;
import com.ibm.mq.MQMessage;
import com.ibm.mq.MQPutMessageOptions;
import com.ibm.mq.MQQueue;
import com.ibm.mq.MQQueueManager;
import com.ibm.mq.constants.MQConstants;
/**
* IBM MQ for Java Installation Verification Program
*
* Runs "standalone"
*
* @author IBM Corporation
*
*/
public class MQIVP {
static final String sccsid = "@(#) MQMBID sn=p914-L191127.DE su=_dBIvnBExEeqHDpXwQtASAw pn=MQJavaSamples/wmqjava/MQIVP.java";
private MQSampleMessageManager messageMgr;
private String hostname;
private String channel = null;
private String user = null;
private String password = null;
private String queueMgr;
private MQQueueManager queueManager;
private String port = "-1";
private Hashtable properties = null;
// An output stream writer to convert the characters to
// bytes using a suitable converter.
private OutputStreamWriter os = null;
private BufferedReader stdin = null;
/**
* Entry point - runs the basic test
*
* @param args optionally "-trace" to turn tracing on
*/
public static void main(String args[]) {
// Turn tracing on?
if ((args.length >= 1) && (args[0] != null)) {
if (args[0].toLowerCase().equals("-trace")) {
MQEnvironment.enableTracing(1);
}
}
MQIVP ivp = new MQIVP();
try {
ivp.getParameters();
ivp.simpleTest();
ivp.finish();
}
catch (IOException e) {
System.out.println(ivp.messageMgr.getMessage(49)); // a little inelegant, I'm afraid
System.out.flush();
System.exit(-1);
}
System.exit(0);
return;
}
/**
* Constructor - takes no arguments.
*/
MQIVP() {
messageMgr = new MQSampleMessageManager("mqjcivp");
if (!messageMgr.loadedOK()) {
System.exit(-1);
}
properties = new Hashtable();
stdin = new BufferedReader(new InputStreamReader(System.in));
String encodingName = System.getProperty("file.encoding");
if (System.getProperty("os.name").substring(0, 3).equalsIgnoreCase("win")) {
// Need to see if locale is set to a single-byte
// language. If it is we cannot use the default
// char-to-byte converter but have to use "850"
Locale locale = Locale.getDefault();
String[] lang = new String[]{"de", "en", "es", "fr", "it", "pt"};
String langUsing = locale.getLanguage();
for (int i = 0; i < lang.length; i++) {
if (langUsing.equals(lang[i])) {
encodingName = "850";
break;
}
}
}
try {
os = new OutputStreamWriter(System.out, encodingName);
}
catch (Exception e) {
// Use default instead
os = new OutputStreamWriter(System.out);
}
return;
}
/**
* get a parameter value from the user, using a numbered prompt from our resource bundle
*
* @param prompt a prompt number
* @param defaultValue optional default if user enters nothing
*
* @return String containing the value
*/
private String getParameter(int prompt, String defaultValue) {
try {
write(messageMgr.getMessage(prompt));
String result = stdin.readLine();
if (result.equals("") && (defaultValue != null)) {
result = defaultValue;
}
return result;
}
catch (IOException ioe) {
return null;
}
}
/**
* Get the parameters (host, port, queue manager name, etc) from the user
*
* @throws IOException If there is a problem
*/
private void getParameters() throws IOException {
writeln(messageMgr.getMessage(44));
hostname = getParameter(45, null);
properties.put("hostname", hostname);
if (!hostname.equals("")) {
port = getParameter(46, "-1");
try {
properties.put("port", new Integer(Integer.parseInt(port)));
}
catch (NumberFormatException e) {
writeln(messageMgr.getMessage(33));
properties.put("port", new Integer(-1));
}
channel = getParameter(47, null);
if (channel != null) {
properties.put("channel", channel);
}
}
user = getParameter(64, null);
if (user != null) {
properties.put(MQConstants.USER_ID_PROPERTY, user);
Properties.put(MQConstants.USE_MQCSP_AUTHENTICATION_PROPERTY, true);
password = getParameter(65, null);
properties.put(MQConstants.PASSWORD_PROPERTY, password);
}
queueMgr = getParameter(48, null);
// If this is a DBCS queue manager, then we might need to adjust our
// CCSID
try {
String strCCSID = messageMgr.getMessage(57);
int iCCSID = Integer.parseInt(strCCSID);
properties.put("CCSID", new Integer(iCCSID));
}
catch (Exception ex) {
// Never mind, leave the CCSID as it was...
}
properties.put(MQConstants.APPNAME_PROPERTY, "MQIVP (Java)");
return;
}
/**
* Performs a simple test of the MQ functionality
*
* @throws IOException
*/
private void simpleTest() throws IOException {
// Connect to MQ!!
try {
queueManager = new MQQueueManager(queueMgr, properties);
}
catch (java.lang.NoClassDefFoundError e) {
writeln(messageMgr.getMessage(62));
writeln(e.toString());
return;
}
catch (MQException ex) {
writeln(messageMgr.getMessage(9));
switch (ex.reasonCode) {
case 2009 :
writeln(messageMgr.getMessage(10));
break;
case 2059 :
writeln(messageMgr.getMessage(11));
break;
case 2058 :
writeln(messageMgr.getMessage(50));
break;
case 2063 :
writeln(messageMgr.getMessage(13));
break;
default :
writeln(messageMgr.getMessage(14, new Object[]{new Integer(ex.reasonCode)}));
}
return;
}
writeln(messageMgr.getMessage(15));
// Open a queue...
MQQueue system_default_local_queue;
try {
system_default_local_queue = queueManager.accessQueue("SYSTEM.DEFAULT.LOCAL.QUEUE",
MQConstants.MQOO_INPUT_AS_Q_DEF | MQConstants.MQOO_OUTPUT, // input, output, inq, set
null, null, null);
}
catch (MQException ex) {
writeln(messageMgr.getMessage(16));
switch (ex.reasonCode) {
case 2009 :
writeln(messageMgr.getMessage(10));
break;
case 2085 :
writeln(messageMgr.getMessage(17));
break;
default :
writeln(messageMgr.getMessage(14, new Object[]{new Integer(ex.reasonCode)}));
}
try {
queueManager.disconnect();
}
catch (MQException e) {
// We'll silently ignore it
}
return;
}
writeln(messageMgr.getMessage(18));
// Put a message!!!
MQMessage hello_world = new MQMessage();
hello_world.characterSet = 1208;
try {
hello_world.writeUTF("Hello World!");
}
catch (Exception ex) {
writeln(messageMgr.getMessage(19));
}
try {
system_default_local_queue.put(hello_world, new MQPutMessageOptions());
}
catch (MQException ex) {
writeln(messageMgr.getMessage(20));
switch (ex.reasonCode) {
case 2009 :
writeln(messageMgr.getMessage(10));
break;
case 2030 :
writeln(messageMgr.getMessage(21));
break;
case 2053 :
writeln(messageMgr.getMessage(22));
break;
default :
writeln(messageMgr.getMessage(14, new Object[]{new Integer(ex.reasonCode)}));
}
try {
system_default_local_queue.close();
}
catch (MQException e) {
// We'll silently ignore it
}
try {
queueManager.disconnect();
}
catch (MQException e) {
// We'll silently ignore it
}
return;
}
writeln(messageMgr.getMessage(23));
// Get a message!!!
MQMessage hello_world_msg;
try {
hello_world_msg = new MQMessage();
hello_world_msg.messageId = hello_world.messageId;
hello_world_msg.characterSet = 1208;
system_default_local_queue.get(hello_world_msg, new MQGetMessageOptions(), 30);
}
catch (MQException ex) {
writeln(messageMgr.getMessage(24));
switch (ex.reasonCode) {
case 2009 :
writeln(messageMgr.getMessage(10));
break;
case 2033 :
writeln(messageMgr.getMessage(25));
break;
default :
writeln(messageMgr.getMessage(14, new Object[]{new Integer(ex.reasonCode)}));
}
try {
system_default_local_queue.close();
}
catch (MQException e) {
// We'll silently ignore it
}
try {
queueManager.disconnect();
}
catch (MQException e) {
// We'll silently ignore it
}
return;
}
String msgReceived;
try {
msgReceived = hello_world_msg.readUTF();
}
catch (Exception io_ex) {
writeln(messageMgr.getMessage(26));
try {
system_default_local_queue.close();
}
catch (MQException e) {
// We'll silently ignore it
}
try {
queueManager.disconnect();
}
catch (MQException e) {
// We'll silently ignore it
}
return;
}
if (!msgReceived.equals("Hello World!")) {
writeln(messageMgr.getMessage(26));
try {
system_default_local_queue.close();
}
catch (MQException e) {
// We'll silently ignore it
}
try {
queueManager.disconnect();
}
catch (MQException e) {
// We'll silently ignore it
}
return;
}
writeln(messageMgr.getMessage(27));
// Close it again...
try {
system_default_local_queue.close();
}
catch (MQException ex) {
writeln(messageMgr.getMessage(28));
switch (ex.reasonCode) {
case 2009 :
writeln(messageMgr.getMessage(10));
break;
default :
writeln(messageMgr.getMessage(14, new Object[]{new Integer(ex.reasonCode)}));
}
try {
queueManager.disconnect();
}
catch (MQException e) {
// We'll silently ignore it
}
return;
}
writeln(messageMgr.getMessage(29));
// Disconnect from MQ!!
try {
queueManager.disconnect();
}
catch (MQException ex) {
writeln(messageMgr.getMessage(30));
switch (ex.reasonCode) {
case 2009 :
writeln(messageMgr.getMessage(10));
break;
default :
writeln(messageMgr.getMessage(14, new Object[]{new Integer(ex.reasonCode)}));
}
return;
}
writeln(messageMgr.getMessage(31));
writeln(messageMgr.getMessage(32));
// Press Enter to continue ...
writeln(messageMgr.getMessage(63));
System.in.read();
return;
}
/**
* Clean up - close down output stream
*/
private void finish() {
try {
if (os != null) {
os.close();
os = null;
}
}
catch (Exception e) {
// cannot really do anything
}
return;
}
/**
* Display a message, ending in a new line
*
* @param message String to be output
* @throws IOException
*/
private void writeln(String message) throws IOException {
os.write(message + "\n"); /* {AppScan:FalsePositive:CrossSiteScripting} */
os.flush();
return;
}
/**
* Display a message, not ending in a new line
*
* @param message String to be output
* @throws IOException
*/
private void write(String message) throws IOException {
os.write(message);
os.flush();
return;
}
}