There are mainly two options available to you:
Access Maximo business layer (MBOs) via RMI
Expose functionality that you are interested in as a web service in Maximo
The RMI route gives you the most flexibility as you get access to (almost) all functionality that Maximo UI has access to. You can open MboSets, manipulate Mbos in them, change attribute values in the Mbos, save you changes in one transaction, etc. There are a few notes to consider here: a) RMI interface is very chatty, you need to make sure that your custom UI is on the same network with Maximo, b) if application security is enabled in Maximo you will have to jump through hoops to connect to Maximo, c) if Maximo is on a cluster you may not achieve load balancing (as you may have to connect to specific application servers), d) you will need RMI stubs in your custom UI and therefore you will need to keep businessobjects.jar in sync with Maximo's if it changes.
Web services route lets you overcome most of RMI limitations (if done right it will be less chatty than RMI, application security is not an issue, automatic benefit from cluster's ability to balance load and recover from failures, no need to maintain RMI stubs in sync, no need to open additional FTP ports) but it requires more upfront work as you cannot simply open an MboSet on the server and pass it to the client as you could with RMI.
I found going web services way offers more benefits then RMI, but your case maybe different. One of the Maximo connected applications that I built is a web application designed along the MVC (model-view-controller) design guidelines where Maximo acts as a model and exposes a Standard Web Service with a bunch of methods, one per transaction type. Views are hidden JSP pages utilizing JSTL and servlets acting as Controllers passing data between Model (Maximo) and JSPs (Views).
I also implemented my own web service client based on Apache HTTP Client (Apache HTTP Client).