Technical Blog Post
UpdateDB, Industry Solutions class files, and working with Maximo Development
This is a blog post about a technote I submitted to be published this morning. Blogging about a technote may seem like padding, but there's a story behind it that I (at least) find interesting. And since one of my criteria for writing a blog post is that I must find the topic and details interesting, read on and judge for yourself.
A couple of weeks ago, I was assigned a PMR (Problem Management Record) for one of our oldest Maximo customers. The client has several Industry Solutions installed to their Maximo environment, and an administrator was curious why running updateDB rebuilt some (but not all) Industry Solution class files. I knew that updatedb did many other things than simply updating the database. A quick look through even the smallest updatedb log reveals that it also runs the rmic compiler, which (according to Oracle) generates stub and skeleton class files (JRMP protocol) and stub and tie class files (IIOP protocol) for remote objects.*
Since I am not a programmer, I know enough about Java to be able to support Maximo Systems, and not much more. And especially because I am not a programmer, when the customer asked me why was updatedb modifying files that had been replaced by the IS patch he had just applied, I knew just where to go. I did some of my own testing: yes, indeed, the IS class files were being modified. In fact, they were being modified even if I made NO changes to the Maximo file structure when I ran updatedb (I compared before-and-after versions of the class files in question, and they were identical). What gives? Why is this happening? This calls for an escalation to Development.
I have been working with Maximo software development for over ten years now. My respect for them is inestimable. But their time is limited. So, I must make sure that when I escalate a call, (a) I better have a good reason for it, and (b) I must provide all of the information up front: What's wrong, what did I do trying to fix it, environment information, error logs, and step-by-step replication (when necessary). This PMR seemed so mysterious to me, but at the same time, it was simple and (fortunately) had no affect on Production.
But the answer I received didn't match the questions I had asked. My escalation asked, "Why is updatedb updating files and making no changes to class files?" The answer was, "We modify the file inheritance. So, in the source code, PlusTWO extends WO. PlusNWO extends WO, PlusCWO extends WO. The byte code injection changes it so that PlusTWO extends PlusNWO which extends PlusCWO with extends WO.
Of course. It all makes sense now. Just not to me. First, I would have to understand what this meant, and then I would have to be able to explain it to the client without writing a book about it (like I am now). I won't go into the process of how I learned what it meant, but part of it involved a very popular search engine. A little while later, I replied, "So, in this case, PlusSAsset extends Asset, so the class file delivered in the Spatial Interim Fix has to have updatedb perform a byte-code injection on it to set the correct hierarchy among the Industry Solutions (Transportation, Utilities, Spatial) from the original Asset class. And updatedb affects PlusSAsset every time you run updatedb, even if it hasn't been updated by a Fix and even when there has been no addition to the inheritance/hierarchy."
To which I received the cherished reply: "Bingo!"
Better than "Not that shaggy," which is pretty much where this post is going.
I turned the email exchange into a concise (four paragraph) explanation of how updatedb works with Industry Solutions. After a couple of more questions, customer agreed to close the call.
Hmm, maybe this should be a technote? Why yes, indeed! With more tweaking, I turned the answer into a technote called Maximo updatedb and Industry Solution class files. I'm not sure many other people wonder why updatedb modifies PlusTWO.class but doesn't actually make changes, but it's better to put the information out there, isn't it? That's why I do this job. Learn something of interest, write it up, post it. And here it is.
Until next time,
Addendum 01 Nov 2016 Maximo 184.108.40.206 and later: rmic processing can be time-consuming and can extend downtime when applying a fix or anything else that requires running updatedb. Now you can separate this rmic processing and other tasks that do not affect the database from updating the database itself. See Decrease the amount of production server downtime for upgrades and fix pack installations for complete information on UpdateDB Lite pre-processor. Beginning with Maximo 220.127.116.11, you can select this option on the Configuration Tool (ConfigUI).
* Maximo uses Remote Method Invocation (RMI) to allow external applications to communicate with Maximo. For more information on that, see another one of my technotes, Understanding the Maximo Implementation of Java Remote Method Invocation.