Redeploy single web.xml file to update timeout or useAppServerSecurity setting

Most Maximo settings or java code can be deployed by copy/pasting the file directly to the installed folder in Websphere without having to rebuild and redeploy the application. However, with web.xml, it doesn't work that way. Sometimes, we need to update this file to increase timeout setting or enable/disable integrated security mode

Sure, we can directly modify the file in Websphere without redeployment, but we will also have update the file in a few temporary folders for which, I find the process quite tedious.

Recently, my colleague told me we can just deploy the single web.xml file instead. Below is the process:

- Update the web.xml file with new settings

Post HTTP request using Automation script

I want to post a simple JSON message to an external system and do not want to add any external library to Maximo as it would require a restart. 

In the past, I used the java HTTPClient library that comes with Maximo, but it would require half a page of boilerplate Jython code. Recently, I found a simpler solution below.

  • First I use WebHook as a mock service for testing. Go to, it will give us a unique URL to send request to:

Enabling up HTTP Compression for Maximo

To enable HTTP compression for Maximo, follow the steps below:

  • Stop HTTP server
  • Make a backup copy of \IBM\HTTPServer\conf\httpd.conf
  • Edit httpd.conf:
    • Enable the following two lines:

Implement "Sleep" or "Wait" in WebMethods flow

I needed to send an external system a file import request. The external system would take some time to process the file before the import result can be queried. Making a status query immediately after the import request would always return an "import process is still running". It's best to wait for a few seconds before making the first attempt to query the import status.

It took quite a bit of time to look up the web for a "wait" or "sleep" function. Some posts suggested using Java flow, some recommended complex processes or involved an external library.

The easiest method I finally settled with is to use Repeat as follows:

Essentially, the flow would repeat 1 time in 5 seconds before getting to the next step (Main Mapping). The repeat loop does nothing other than just writing a line in the server log to make troubleshooting a bit easier.

The fun (and pain) of Kronos Integration

One of our clients undertook a massive IT transformation program which involved switching to a new financial management system, upgrading and rebuilding a plethora of interfaces among several systems, both internal and external to the business. Kronos was chosen to replace an old timesheet software and there was the need to integrate it with other systems such as Maximo and TechnologyOne. WebMethods was used as the integration tool for this IT ecosystem. This is my first experience with Kronos. The project took almost two years to finish. As always, when dealing with something new, I had quite a bit of fun (and pain) during this project. As it is approaching the final stage now, I think I should write down what I’ve learnt. Hopefully, it will be useful for people out there who’re doing a similar task.

REST API: Kronos provides a pretty good reference source for the REST API at this Link. REST API theoretically offers the advantage of supporting real-time integration and enables seamless workflow. However, we don’t have such a requirement in this project. On the other hand, this has two major limitations.

WebMethods: Evaluate String IN and CONTAINS operator

In WebMethods, the most basic way to write a string “IN” operator is to use Branch as follows:

Another way to reduce the number of lines of code is by combining the conditions using “OR”:

Troubleshoot integration issues when Maximo stops publishing data to external system.

I had to deal with this quite often. Most of the times, I got it right and able to identify the problem quickly. In a few cases, it took some time, and usually very stressful as it mostly occurs in Production. (It occurs in DEV and PRE-PROD all the time, it’s just that people usually don’t care, and it goes unnoticed)

Today I had to deal with it again and it took me some time. The cause was something I dealt with before, was told by a colleague on how to fix it (the easy way), but I forgot. This time around, under panic mode, I restarted a few JVMs before I remembered I should ask around and was reminded by my colleague again that it could be fixed with much less damage. I told myself I should write it down for the next time, so here is the sum of what I learned: