IBM Support

Maximo Business Object Development - Best Practices

Technical Blog Post


Maximo Business Object Development - Best Practices


If you are an IBM client, business partner, consultant, or even a IBM Maximo developer you should be following the Maximo Development Best Practices when customizing Maximo Business Objects (MBO's).  As a Maximo developer and Lab Advocate, I have dealt with many clients who have extended Maximo business objects and have made their own customizations. When extending the MBO's you should be aware that if done incorrectly, it could lead your end users to experience poor performance, out of memory errors and/or system crashes amongst other things, which leads to user frustration and potential downtime. 


You must keep in mind that constructing MBO's is expensive (system resources).  If you have a MBO available to use, do not refetch the MBO, just reuse it.  If you use the same relationship from the same MBO, it will get you the same MboSet already created.  While using object oriented programming you can pass the MBO as a parameter, in order to be used within a method.  Use the information that already resides in memory whenever possible, and avoid getting new MBO's from the database.  Do not implement a cache that holds on to MBO's because this could prevent the system from releasing the MBOs and can cause out of memory problems.


Another common problem that has been seen in custom code are open MboSets.  When a MboSet is fetched from the database and is then set in memory; you need to make sure that you close the set when you are done using it, otherwise  locking or even dead locking can occur in some databases.  If a MboSet is used for traversing forward only and not to be saved, then you can mark the MboSet as a "DISCARDABLE" set.  Using the discardable flag enables the release of MBO's quicker.  Garbage collection usually cleans up the left over MBO's and MboSet's, but it could be slower that what you need, therefore discardable MboSets are recommended.


If two MboSets contain MBO's pointing to the same record in the database and you modify both you will get  "Record has been updated by another user".  This is why you should use the same relationship to obtain the record.


The Best Practices mentioned above and more can be found on the Maximo Wiki.

[{"Business Unit":{"code":"BU005","label":"IoT"}, "Product":{"code":"SSLKT6","label":"Maximo Asset Management"},"Component":"","Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"","Edition":""}]