1

I have been looking everywhere for a solution to this problem.

At my work, we are trying to integrate Maximo with another system via the other systems REST API (which returns JSON responses). I am able to make this integration work on a small scale, however this API is taking upwards of 5 seconds to respond per request. Currently, I have defined this system as a JSON Resource, and I copy daily "snapshots" of the non-persistent data to a persistent attribute using an automation script. The requests all run in a sequence - which works slowly for 5 assets in testing, and will definitely not scale to 1000's of calls a day.

Assume that the API of the external system cannot be modified in any way... Is there a way to query this API in a non-blocking way? I'd imagine that if I could send a request, and send the next, etc. without needing to wait for a reply to proceed, this would solve the problem.

I looked into Invocation and Publishing Channels, and also Enterprise Services, and it seems like Enterprise Services along with JMS Queues might be what I need, however documentation says that these only support queuing incoming data... and I can't see how this solves my problem.

Any help? I am completely stuck on this.

Thank you!

araisbec
  • 1,223
  • 3
  • 16
  • 27
  • What happens if you query the remote API with SoapUI or just with your browser? Is the response time faster, pointing to the JSON Resource being the slow point? Can you request less data, like fewer columns, reducing the serialization/deserialization work on both sides? – Preacher Dec 06 '19 at 02:24
  • Did you activate proper logging in Maximo and analyze the logs produced? I'm thinking SQL-->INFO, INTEGRATION-->DEBUG, AUTOSCRIPT-->INFO... – JPTremblay Dec 06 '19 at 15:11
  • @JPTremblay: I tested the API call (REST) using POSTMAN independently... it takes a lonnnnggg time to return data. – araisbec Dec 06 '19 at 19:14
  • @Preacher: Unfortunately, the API is very limited, and basically only returns one type of static dataset... and I am currently only retrieving one record. One record causes a 5+ second latency... I will try with SOAP though - you mean for sending data TO the API? – araisbec Dec 06 '19 at 19:14
  • Please provide more info on your current solution and the data integration process in Maximo. How did you implement this "I copy daily "snapshots" of the non-persistent data to a persistent attribute using an automation script. "? – JPTremblay Dec 09 '19 at 14:26
  • No. not SOAP. SoapUI. [SoapUI](https://www.soapui.org) is a tool for testing SOAP and RESTful APIs. I think a Chrome plug-in that might be an alternative is called Postman. I'm not looking to send data TO your API; I'm looking for a way for you to query it without Maximo, proving whether Maximo is part of the problem or not. – Preacher Dec 09 '19 at 15:24

1 Answers1

1

I had to do something that sounds similar, once. I tried JSON Resources, but they didn't work for me. I ended up using the examples in Maximo 7.6 Scripting Features to do it. The first code sample in that document is a library script for making HTTP/S calls using out-of-the-Maximo-box libraries, and other examples in that document use IBM's JSONObject and JSONArray classes (also available out of the Maximo box) to parse responses.

To get things going concurrently / multithreaded, you could configure a cron task to call your automation script, and configure multiple instances on various schedules to call the same one and use the args or some other mechanism to prevent collisions.

Preacher
  • 2,127
  • 1
  • 11
  • 25
  • This sounds promising, but how would I handle - for instance - 500 requests? If I loop them in the script, they will run in sequence, and take approximately 5 * 500 seconds to complete. Is there instead a way to leverage a threadpool - or make the calls in a non-blocking way such that I'm not waiting on response A before sending request B? – araisbec Dec 06 '19 at 19:18