Integrating applications -at least at the enterprise level- is today generating the same amount of work, or even more than building new ones. In fact, it can be argued that as far as corporations keep exposing their business processes as cohesive and autonomous services, integrating them in new configurations is a way of producing new applications.
However, Service Oriented Architecture adoption is still timid and it is primarily been adopted in new development, whereas just a small portion of old corporate solutions are wrapped with a service layer than can be exposed by using standards. In many scenarios, making applications interoperate takes more work and means rewriting parts of the applications. Let's take a quick look at the several approaches that are available to integrate them.
While most of the time we try to integrate at the back-end, at the business-logic or database levels, sometimes this is too difficult to do, mostly with old-style applications that doesn't have properly isolated components or tiers. This may sound like heretic after so many years of talking about n-tier development and even SOA, but consider how many core solutions running on mainframes are working since decades, before the idea of separating the logic from the UI came along.
For this cases, there is a series of well-established patterns by now for front-end level integration. Indeed, several toolkits or frameworks are available to make easier to automate UI to be able to use it programmatically. In this cases, a framework allows to do screen-scrapping and input injection for old TTY consoles, adding a layer that allows to automate menu selection, data entry, and then screen reading, even contemplating error or warning messages, so you can expose a service for some operations that are actually performed by using the old terminal interface running on a non-visible server emulator.
Sounds sloppy? Well, it is, but you know the distance between what's ideal and what's possible can be really large. Sometimes you don't have access to the code of these legacy systems, or they are running on platforms where the technology to isolate and expose services from the core -not from the UI- is not readily available.
While you have to be careful about this idea, properly dimensioning the usage load to avoid hogging the legacy systems, the benefit of this approach is that you don't need to touch it at all. Actually, the system is never aware of been used from a non-human consumer.
Indeed, this approach is also extended to improve efficiency in multi-application scenarios like -typically- call centers. There the typical user interacts with customers and has the need to access many different corporate applications depending on the task. They could need to access the CRM, a sales order entry system, a claiming or trouble-ticket application, account balances, statistical or historical information, or related systems owned by subsidiaries or even merged companies not yet unified.
In such scenarios we are seeing an increased adoption of composite desktops, where the user can host several different applications (from terminal consoles to windows to web interfaces) into a unified (generally tabbed) container. The advantage of using this kind of container is that it can react to specific UI events, like messages, alerts, refreshes and so on, and make them converge into a unified experience.
Moreover, applying different interaction techniques for different applications, the container can replicate certain actions, saving manual synchronization effort to the user. One implementation fo this concept is found in the Customer Care Framework from Microsoft. Based on the foundation of the Composite UI Application Block (CAB), it provides a hosting environment for different types of applications and allows scripting to orchestrate the user interfaces by means of the appropriate mechanism in each platform. Thus, when the user enters a customer code in the application having focus (let's assume it is a windows CRM), the container can forward this code (even translating it if the underlying systems have different codes) and search the same customer in a second application (using the HTML DOM for a web app, for example) and do the same for a third one (using the keyboard buffer for a console app, for example).
These kind of tools provides all the abstraction to read or write from several different UI sources (screen scrapping, DOM, windows handles and controls, even Java applets), and then they build on top of that, providing higher level services like single sign-on, where the operating system credentials are converted into the proprietary user/password combinations needed and send trough the different clients in a secure way, plus messaging, state saving and forwarding, and so forth. It also allows to easily integrate the contained applications with devices like a PBX or other caller-id mechanism, and more.
Of course, this is a mid-term solution, and it should never been taken as a replacement for real systems integration, which is better done on the back-end. But when you are automatic the user experience rather than clearly-defined business processes, this is an option to take in consideration.
Integration is such a broad topic that I hope to go back to it and talk about other part of the problem soon. By now, I just wanted to comment on an often overlooked alternative, which can be faster and cost effective, although it is usually a short-term solution while you work on the longer plan.
|Leave a Comment:|