UpdateDB, Industry Solutions class files, and working with Maximo Development
Richard Lesses 2700011KU1 Visits (7231)
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 inhe
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 Maxi
Until next time,
Addendum 01 Nov 2016 Maximo 18.104.22.168 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. Se
* 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, Unde