Category Archives: Latest Maximo

Maximo to AWS S3 Document Attachment

Lot of Lift and Shifts from on-prem to Cloud are happening these days as organizations catch up to the benefits of moving from limited on-prem resources to “un-limited” cloud potential and pay as you go and only pay for what makes you go.

Maximo on cloud for any organization which relies on their EAM systems to run their business needs to be fault tolerant, highly available and scalable.

We design architectures like Horizontal/Vertical or even Hybrid Application clusters but document attachments still are files on disk.

That disk now needs to be available to Multiple Nodes/Servers, Availability Zones (AWS terminology) and regions (if you have global presense).

Ok enough, read below how to get Maximo Document Attachments stored in AWS S3 bucket and served from there when user wants to view.

S3 buckets are cheap storage (glacier is cheaper but thats for less frequently accessed data, so more like archive), can be cross replicated across Regions, versioned, encrypted and has 99.9% availability SLA from AWS.

In picture the steps are below:



The thing that makes it most easy is the abstract class in Maximo specifically designed to aid in custom/bespoke Document Storage solutions:


I have extended this class and implemented the required abstract methods and one of the most important one is “createAttachment”. This is the method that will be called when any attachment is added to a record in Maximo.

There is a system property (if not there ADD it), “mxe.attachmentstorage”, this property holds the fully qualified class name of our custom implementation of AttachmentStorage Abstract class.

That’s how our custom class will be called when any attachment is added to maximo records.

Methods implemented if you just want to add attachments:


public abstract String getAttachmentQualifiedName(MboRemote paramMboRemote, String paramString)
throws RemoteException, MXException

public abstract void createAttachment(String paramString1, byte[] paramArrayOfByte, String paramString2)
throws RemoteException, MXException


We need to add a few system properties if we want to make our implementation configurable, below:

mxe.s3.accesskey – Access Key for AWS IAM user, with S3 bucket access

mxe.s3.secretkey – Shhhh…its the secret key, like a password

mxe.s3.bucket – like a folder where files will be stored

mxe.s3.region – Region, bucket resides,cross replication can put it anywhere

I am putting this working solution in a GITHUB repo (below), if interested just let me know.

There are a few prerequisites:

  1. Need all the library jars which AWS Java SDK needs
  2. IAM User and Bucket creation

Next Steps (wishlist):

  • Use TransferManager in AWS SDK so large files are transfered more efficiently and fast
  • Implement Aspera FASP file uploads ( to S3 – Did it for a bespoke application where-in large (GB) files were transferred 10x faster from local to S3 buckets
  • SharePoint Integration with Maximo attached documents
  • Implement for IBM CLoud and Google Cloud
  • Implement streaming (there is a method streamAttachment for that or maybe not) using Amazon Managed Streaming for Kafka for large files like video streams from Drones gone out for some inspections
  • Anything else???


Maximo Anywhere 7.5 beta – Exciting new mobility product from IBM


I had the pleasure of being allowed to participate for the Beta program for the upcoming Maximo Anywhere 7.5 product from IBM and just wanted to share some first impressions.

Maximo Anywhere 7.5 should be first available for Android devices and then followed by IOS.

For me any mobility tool must meet basic checklist to be a truly mobile solution.

My checklist goes like this:

1) Barcode Scanner

2) Offline Mode

3) Maps Integration

4) Cross Platform


Maximo Anywhere 7.5, which I will call Anywhere, has all these features.

It has a barcode scanner which is very useful and like fields have lookups, similarly fields will have a barcode lookup kind of control. Data scanned can be used to enter values in fields or search records based on scanned data.

Offline mode is my favorite as most of the big customers operate in remote regions whether it can be oil drilling, gas exploration, power plants, logistics etc and they rate that as a must have feature.

The ability to continue doing your job irrespective of connectivity would be rated very highly by the end users as well. Once back to civilization this data can be pushed to the server and job done.

Maps integration, needless to say is very important and Anywhere seamlessly integrates that as well.

Anywhere is based on IBM WorkLight platform. This will allow any developer without the knowledge of Android or IOS app development to customize this mobility solution.

Have a look at worklight if you have not already:

Worklight is based on Cordova (PhoneGap), so this legacy provides cross platform app delivery, whether its IOS or ANDROID (Even windows).

This cross platform allows the BYOD feature in Anywhere. By allowing the employee to bring their own devices it reduces cost of ownership burden to the company as well as I hate when maximo mobility tool does not allow me to play Angry Birds.

And, using Endpoint Manager for Mobile Devices can be used to make sure the BYOD device complies with security policies blah..blah 🙂

Endpoint Manager for Mobile Devices helps you address the issues of security, complexity and bring your own device (BYOD) policies that challenge support for an increasingly mobile workforce.

I am very excited about Anywhere and hopefully I will get my hands on the full release version soon, can’t wait to see how it has been implemented in WorkLight, I am hoping it has been implemented as a worklight  adapter so that integrating other  external systems can be based on the similar template.





Site Specific MBO creation


I had the requirement from a Custom Cron task and I came across this so thought of sharing.

I wanted to add Workorders from my Cron based on the SiteID I was passing as a parameter. So, for each site I have a Cron instance.

What I did was use the setInsertSite, setInsertOrg method on the MboSet class.

So, before calling add I set the relevant SITE and ORG and then called add so it makes sure that only the appropriate sequence or autokey (based on site and org passed on MboSet) is updated.

Can be very useful in some scenarios so thought of sharing.


Parameters to improve Maximo performance using WebSphere

IBM WebSphere changed parameters in the JDK in IBM JDK1.4.2 SR3. Any WebSphere version using IBM JDK 1.4.2 SR3 or greater is affected.

The change may cause WebSphere to hold onto unused objects for up to ten minutes after they are no longer needed. In high usage environments, this may act as a memory leak so that the application is starved for memory. There is a parameter to control this behavior, ackTimeout.

Some networks may also benefit from a parameter change in the JDK to set the default TCP/IP stack to V4. This can improve network performance by since the default behavior will be for the standard IP V4 and WebSphere will not need to determine the IP type programmatically. This parameter is


New Applications in Maximo 7.5

New applications

Maximo® Asset Management 7.5 has many new applications which work, along with existing applications, to make the user experience easier and more efficient than ever.

Asset Templates

Use the Asset Templates applicationto specify common asset information that you can then apply to multiple assets.

  • Create multiple assets.
  • Update multiple existing assets.

Automation Scripts

Use the new Automation Scripts applicationto create and configure scripts that automate routine tasks, without deploying Java files or restarting the server.

  • Wizards guide you through configuring scripts that run based on different launch points. The launch points include object events or attributes, actions, or custom conditions.
  • Declare variables for the script in the application instead of in the source code. With variables, the code is simpler and easier to reuse in different launch contexts.

Inventory Usage

The new Inventory Usage applicationreplaces the Issues and Transfers application.

  • Create inventory usage records to track the issue, transfer, and return of inventory items within and across organizations.
  • Monitor the balances of inventory items and tools in storerooms and bins.
  • Transfer inventory items or tools between storerooms within an organization by creating shipment records.

Migration Collections

Use the new Migration Collections applicationto simplify the migration of configuration content.

  • Import or export the information in migration collections for management in external systems, such as version control systems.

Report Viewer

With the Report Viewer application, you can email a report to a URL instead of receiving the file.

  • Click the URL in the email attachment to see the individual report.
  • Regularly clear out the reports by using the new cron task.

Service Groups

Use the Service Groups applicationto define all the services that you provide or procure. You create a service group for each type of service that you define.

  • Group tickets, work orders, and contracts by service group or individual service.
  • Create service level agreements for a service group or for a combination of service group and service.
  • Associate a specific asset, asset type, or location with a service or service group.

Service Level Agreements

Use the Service Level Agreements applicationand escalation functionality to manage and meet the commitments in a service level agreement.

  • An escalation is a function that automatically monitors critical processes.
  • A service level agreement can have multiple commitments, each with its own escalation points.

Shipment Receiving

The new Shipment Receiving applicationis in the Inventory module and the Purchasing module.

  • Create shipment receipt records to log the receipt of transferred inventory items at the destination storeroom.
  • Monitor the balance of received items and adjust the totals and status in inventory usage records.
  • Specify that an inspection is required when inventory items are received. You can specify an inspection status for shipment receipt records.
  • Void shipment receipt records.


Aniruddh Panvalkar

Fixed: Create iframe control in Maximo 7


I found many users are having the problem when they embed an iFrame in a section as per the post on:

That post is very useful to many of us but some of us faced a problem like it was appending:


The solution is very simple, just remove all the ” from the below iFrame and it works:



Thats it 🙂



Changing the Maximo Login Message

Out of the box the following message appears at the Maximo 7.5 login screen: “Welcome to Maximo”

To change this message, follow the below steps:

1) Log into Maximo – Go To – System Configuration – Platform Configuration – Database Configuration – Message – click on the filter hyperlink and insert ‘welcomemaximomessage’ and expand the entry:

2) Within the ‘Value’ textbox – change the entry from ‘Welcome to Maximo’ to the desired message. In this example, it will be changed to ‘Maximo UAT’:

3) Sign Out of Maximo and confirm that the changes have taken effect:

Changing Maximo 7.5 Login Image

Out of the box, the looking images appear within Maximo 7.5 login screen:

In this example, the main image will be changed. To change this image, navigate to the following directory:


In the above directory is all the images that appear on the login screen. Create a backup of the ‘mx_icon.png’ file. Rename a modified image called ‘mx_icon.png’ then overwrite/replace the original ‘mx_icon.png’ within the above directory.

Rebuild, Redeploy the MAXIMO.EAR – ensuring that the application server cache is deleted. Also, ensure that the Browser cache is also deleted.

Access the Maximo Login screen and the modified image will appear: