OpenBSD v6.7 Released

Theo de Raadt has just released OpenBSD v6.7.
http://www.openbsd.org/67.html

The OpenBSD project produces a FREE, multi-platform 4.4BSD-based UNIX-like operating system. Our efforts emphasize portability, standardization, correctness, proactive security and integrated cryptography.

Regards,
Roger Lacroix
Capitalware Inc.

Open Source, Operating Systems Comments Off on OpenBSD v6.7 Released

Capitalware releases World Clocks v1.0.0

Capitalware Inc. would like to announce a new ‘Licensed As Free’ product called: World Clocks.

World Clocks application allows the user to quickly view the time and date from various time zones from around the world. World Clocks can display as many time zones that will fit on the user’s display.

Vertical layout (default)
Normal Mode (default) Dark Mode

Horizontal layout
Normal Mode (default)
Dark Mode

World Clocks is available for Windows, Linux and macOS (Mac OS X).

For more information about World Clocks, please go to:
https://www.capitalware.com/wc_overview.html

Enjoy.

Regards,
Roger Lacroix
Capitalware Inc.

Capitalware, Licensed As Free, Linux, macOS (Mac OS X), Windows Comments Off on Capitalware releases World Clocks v1.0.0

Limited Continuing Support for IBM MQ 8.0

IBM has announced Limited Continuing Support for IBM MQ v8.0:

In order to help customers through the challenges caused by the COVID-19 coronavirus pandemic, IBM has announced Limited Continuing Support (LCS) for IBM MQ 8.0 and other selected offerings through 30 September 2020. Customers with active Software Subscription and Support coverage (S&S) on these offerings will be able to receive support for routine, short duration installation and usage questions and code-related questions. Also included is 7-day, 24-hour support for mission critical emergencies (severity 1 cases) and access to existing available fixes created before the MQ 8.0 End of Support date, but new security fixes and patches will require a service extension.

Regards,
Roger Lacroix
Capitalware Inc.

Fix Packs for MQ, IBM i (OS/400), IBM MQ, IBM MQ Appliance, Linux, Unix, Windows, z/OS 2 Comments

What time is it in a customer’s time zone?

I have customers from various cities around the world. Sometimes when I working on a problem, I like to stay focused on it. So if I get an email from a customer somewhere else in the world, I like to know if I need to answer it ASAP (because it is off hours for them) or can it wait an hour or two while I finish up on what I was working on.

I have my iPhone loaded with a bunch of time zones in the Clocks app. This is fine but I need to unlock the phone, open the Clocks app and then click on the World Clock tab (button). Its annoying.

I used to use FoxClocks in the browser but you can only get a limited number of time zones in the status line plus you still need to bring the browser to the foreground to see it. (and yes, you can click on the FoxClock icon in the browser to see a long list of time zones).

The problem is that I want to quickly glance at the time zones without having to go through a whole procedure. Remember, that I may be fixing a bug or deep in thought about some problem or solution. So, I just want to glance at the various time zones to determine if the customer is mid-day or after hours.

A while ago, I wrote a simple application to display the time in various time zones. I made it a skinny vertical panel that I could place on the far right-side of my second (right) monitor.

This week, as a “time to do something different” (did you catch that pun), I decided to add dark mode to my simple application called: World Clocks.

I haven’t tested in macOS (Mac OS X) or Linux yet. I’ll do that when I have some free time next week.

Once I am happy with it, I’ll package it up for Windows, macOS and Linux and post it to my web site as a free application. i.e. Under the “Licensed As Free” umbrella.

Oh, I almost forgot, it can be configured to be in a horizontal layout rather than vertical. Whether it is in a horizontal or vertical layout, the user can drag the application to any location on the user’s display.

Regards,
Roger Lacroix
Capitalware Inc.

Capitalware, Linux, macOS (Mac OS X), Windows Comments Off on What time is it in a customer’s time zone?

Ubuntu 20.04 Released

Canonical has just released Ubuntu v20.04.
http://releases.ubuntu.com/20.04/

Super-fast, easy to use and free, the Ubuntu operating system powers millions of desktops, netbooks and servers around the world. Ubuntu does everything you need it to. It’ll work with your existing PC files, printers, cameras and MP3 players. And it comes with thousands of free apps.

Regards,
Roger Lacroix
Capitalware Inc.

Linux, Open Source, Operating Systems Comments Off on Ubuntu 20.04 Released

WooHoo! I have a brand new toy today!

Today, I got a brand new z/OS v2.4 image (aka mainframe) from the IBM Z Dallas ISV Center.

They set it up with lots of toys to play with.

  • IBM MQ v9.0.1
  • DB2 V11 and V12
  • IBM V13, V14 and V15
  • CICS V5 R5

In my original request, I asked for a queue manager for IBM MQ V8.0 and IBM MQ V9.1. I have sent an email to IBM ISV support requesting those queue managers be added.

Oh so much work needs to be done to get this new beast ready for prime time. 🙂 Fun, fun, fun!

Regards,
Roger Lacroix
Capitalware Inc.

Capitalware, z/OS Comments Off on WooHoo! I have a brand new toy today!

IBM MQ v9.0 End of Service Date

The end of service date for IBM MQ v9.0 on distributed platforms (Linux, Unix, Windows and IBM i) is September 30, 2021. The IBM MQ Software lifecycle page is at:
https://www.ibm.com/support/pages/announcement-end-support-ibm-mq-90

Regards,
Roger Lacroix
Capitalware Inc.

IBM i (OS/400), IBM MQ, Linux, Unix, Windows Comments Off on IBM MQ v9.0 End of Service Date

IBM MQ, Java and MQ MI and/or MQ HA

Sometimes you come across things that make you just scratch your head and say who the hell wrote this @#$% code. I’m not trying to say that I’m the world’s greatest programmer but some of the shit that the MQ/Java team writes just makes my head spin. They need to share what they’re smoking!

IBM’s line is that if you want MQ MI (Multi-Instance) or MQ HA (High Availability) support for Java applications then use JMS or use a CCDT file with your Java application (non-JMS).

Years ago, I heard about simply separating the IP addresses and/or hostnames with a comma (‘,’) in the HOST_NAME_PROPERTY property for a Hashtable or hostname field of MQEnvironment class. I thought I had tested it and it worked but clearly not.

So, this blog posting is on IBM MQ classes for Java (aka WebSphere MQ classes for Java) and the use of the non-default queue manager port of 1414 and MQ MI or MQ HA.

If your queue manager’s listener is on port 1414 and you have Java applications (non-JMS) using MQ MI or MQ HA then life for you is super easy and NOT complicated. Here’s a coding example:

Hashtable<String,Object> mqht = new Hashtable<String,Object>();
mqht.put(CMQC.CHANNEL_PROPERTY, "TEST.CHL");
mqht.put(CMQC.HOST_NAME_PROPERTY, "cw-serv01,cw-serv02");
mqht.put(CMQC.PORT_PROPERTY, new Integer(1414));
MQQueueManager qMgr = new MQQueueManager("MQA1", mqht);

Or you can simplify it to:

Hashtable<String,Object> mqht = new Hashtable<String,Object>();
mqht.put(CMQC.CHANNEL_PROPERTY, "TEST.CHL");
mqht.put(CMQC.HOST_NAME_PROPERTY, "cw-serv01,cw-serv02");
MQQueueManager qMgr = new MQQueueManager("MQA1", mqht);

So, what if your queue manager’s listener is NOT on port 1414 and you have Java applications (non-JMS) using MQ MI or MQ HA then life is really tricky but can be done if you are careful.

Note: IBM MQ classes for Java (non-JMS) does NOT support the Hashtable property of WMQ_CONNECTION_NAME_LIST (aka “connectionNameList”) like JMS, XMS or C#.

I’ll run through some examples. Here’s my setup:

– Queue Manager name: MQA1 Active/Passive setup
– Queue Manager listener port #: 5555
– HA servers: cw-serv01 and cw-serv02

MQA1 is currently running on cw-serv01.

In my Java program, if I do:

Hashtable<String,Object> mqht = new Hashtable<String,Object>();
mqht.put(CMQC.CHANNEL_PROPERTY, "TEST.CHL");
mqht.put(CMQC.HOST_NAME_PROPERTY, "cw-serv01,cw-serv02");
mqht.put(CMQC.PORT_PROPERTY, new Integer(5555));
MQQueueManager qMgr = new MQQueueManager("MQA1", mqht);

I get error:
com.ibm.mq.jmqi.JmqiException: CC=2;RC=2538;AMQ9204: Connection to host ‘cw-serv02(5555)’ rejected. [1=com.ibm.mq.jmqi.JmqiException[CC=2;RC=2538;AMQ9205: The host name supplied is not valid. [3=cw-serv02,4=TCP]],3=cw-serv02(5555),5=RemoteTCPConnection.resolveHostname]

Its like MQ client library skipped over the first hostname (cw-serv01). But no. It attempted the connection on port number 1414. Seriously. Even though, the PORT_PROPERTY property is correctly set to 5555.

If I do (reverse the order of the hostnames):

Hashtable<String,Object> mqht = new Hashtable<String,Object>();
mqht.put(CMQC.CHANNEL_PROPERTY, "TEST.CHL");
mqht.put(CMQC.HOST_NAME_PROPERTY, "cw-serv02,cw-serv01");
mqht.put(CMQC.PORT_PROPERTY, new Integer(5555));
MQQueueManager qMgr = new MQQueueManager("MQA1", mqht);

Then it works, but it takes about 3 seconds for the connection. Which makes sense since MQA1 is not running on cw-serv02. But note: it would have been trying port number 1414 rather than 5555, so it would have failed anyway.

Of course, IBM is deleting pretty much all useful information at developer works web site. Pretty damn sad! Anyway, Josh found a cached google page here from 2014 where someone was having an issue with MQ MI and a Java application using a CCDT file. With a little bit of deduction and testing, I discovered what the hell was going on under the covers. And it is really stupid.

So, what test did I do that started to shed light onto the situation. I removed the PORT_PROPERTY from the first test and I flipped the order of hostnames and I explicitly set port number in the HOST_NAME_PROPERTY field.

Hashtable<String,Object> mqht = new Hashtable<String,Object>();
mqht.put(CMQC.CHANNEL_PROPERTY, "TEST.CHL");
mqht.put(CMQC.HOST_NAME_PROPERTY, "cw-serv02(5555),cw-serv01(5555)");
MQQueueManager qMgr = new MQQueueManager("MQA1", mqht);

And I got the following error:
com.ibm.mq.jmqi.JmqiException: CC=2;RC=2538;AMQ9204: Connection to host ‘cw-serv01(5555)(1414)’ rejected. [1=com.ibm.mq.jmqi.JmqiException[CC=2;RC=2538;AMQ9205: The host name supplied is not valid. [3=cw-serv01(5555),4=TCP]],3=cw-serv01(5555)(1414),5=RemoteTCPConnection.parseConnectionName]

Notice how it says: cw-serv01(5555)(1414).

So, I did a whole bunch of testing changing:
– first value in the HOST_NAME_PROPERTY setting i.e. with & without port number
– second value in the HOST_NAME_PROPERTY setting i.e. with & without port number
– setting & not setting the PORT_PROPERTY value

So, what did I discover? Well, MQ MI and/or MQ HA is supported for Java applications (non-JMS) under the following very exact rules:

(1) The first hostname or IP address MUST have the port number explicitly set.
(2) The second hostname or IP address must NOT have the port number explicitly set.
(3) The PORT_PROPERTY property MUST be set to the correct value for the 2nd hostname or IP address.

Here is the correct way to set the information in the Hashtable for use with MQ MI and/or MQ HA:

Hashtable<String,Object> mqht = new Hashtable<String,Object>();
mqht.put(CMQC.CHANNEL_PROPERTY, "TEST.CHL");
mqht.put(CMQC.HOST_NAME_PROPERTY, "cw-serv01(5555),cw-serv02");
mqht.put(CMQC.PORT_PROPERTY, new Integer(5555));
MQQueueManager qMgr = new MQQueueManager("MQA1", mqht);

Ok, just to bake your noodle a little more, if you take the above working example and decide to remove the 2nd hostname, you would expect it to work, right?

Hashtable<String,Object> mqht = new Hashtable<String,Object>();
mqht.put(CMQC.CHANNEL_PROPERTY, "TEST.CHL");
mqht.put(CMQC.HOST_NAME_PROPERTY, "cw-serv01(5555)");
mqht.put(CMQC.PORT_PROPERTY, new Integer(5555));
MQQueueManager qMgr = new MQQueueManager("MQA1", mqht);

But no. You get the following error:
com.ibm.mq.jmqi.JmqiException: CC=2;RC=2538;AMQ9204: Connection to host ‘cw-serv01(5555)(5555)’ rejected. [1=com.ibm.mq.jmqi.JmqiException[CC=2;RC=2538;AMQ9205: The host name supplied is not valid. [3=cw-serv01(5555),4=TCP]],3=cw-serv01(5555)(5555),5=RemoteTCPConnection.parseConnectionName]

If you have only 1 hostname or IP address then you CANNOT explicitly set the port number in the HOST_NAME_PROPERTY property. You need to do the following:

Hashtable<String,Object> mqht = new Hashtable<String,Object>();
mqht.put(CMQC.CHANNEL_PROPERTY, "TEST.CHL");
mqht.put(CMQC.HOST_NAME_PROPERTY, "cw-serv01");
mqht.put(CMQC.PORT_PROPERTY, new Integer(5555));
MQQueueManager qMgr = new MQQueueManager("MQA1", mqht);

So, does your head hurt too? Who the #$@#% comes up with this shit?

Regards,
Roger Lacroix
Capitalware Inc.

HPE NonStop, IBM i (OS/400), IBM MQ, IBM MQ Appliance, Java, Linux, macOS (Mac OS X), Programming, Raspberry Pi, Unix, Windows, z/OS Comments Off on IBM MQ, Java and MQ MI and/or MQ HA

IBM MQ Fix Pack 9.1.0.5 Released

IBM has just released Fix Pack 9.1.0.5 for IBM MQ V9.1 LTS:
https://www.ibm.com/support/pages/node/6090700

Regards,
Roger Lacroix
Capitalware Inc.

Fix Packs for MQ, IBM i (OS/400), IBM MQ, Linux, Unix, Windows Comments Off on IBM MQ Fix Pack 9.1.0.5 Released

End of Service Date: IBM MQ v8.0 & IBM MQ Appliance M2000

The end of service date for IBM MQ v8.0 on AIX, HP-UX, IBM i, Linux, Solaris, Windows, z/OS and IBM MQ Appliance M2000 is April 30, 2020. Here is the IBM MQ announcement page:
https://www.ibm.com/support/pages/announcement-end-support-ibm-mq-80-and-ibm-mq-appliance-m2000

Regards,
Roger Lacroix
Capitalware Inc.

IBM i (OS/400), IBM MQ, IBM MQ Appliance, Linux, Unix, Windows, z/OS Comments Off on End of Service Date: IBM MQ v8.0 & IBM MQ Appliance M2000