Thursday, August 27, 2009

Oracle Application Integration Architecture

Enterprise application integration has always been a challenge for businesses of all sizes. The approach of integrating 'best-of-breed' products definitely has its share of success stories, but for each successful implementation I am aware of, there are many more projects without a happy ending. The sheer scope and size of those integration projects make it difficult to get them to a successful completion within a given time frame and budget.

In the past few years, Oracle has gone on an acquisition spree. Starting with PeopleSoft, it keeps snapping up business software companies at a dizzying rate. With the acquisition of Sun, it now has a complete set of business application and hardware to support them. All it needs now is a good integration platform to link everything together in the Oracle world. Here comes Oracle Application Integration Architecture.

Through AIA platform Oracle aims to take a big piece out of the system integration market. AIA enables product-based integration of all applications in Oracle repertoire. It lets you abstract your business models, workflows, rules, exceptions... out of specific applications. The business rules are applied and business models translated into application specific data formats through a set of connectors. Even better, Oracle will group the most frequently used flows between its application into Process Integration Packs. So in the perfect world you just select the apps, buy the AIA platform and the specific PIP, then voila your business systems are up and running.

I'll come back to discuss AIA from Communication industry perspective, what can and can't be done using the standard PIP. Please stay tune.

Thursday, May 15, 2008

Web Service Integration

Service oriented architecture is the latest trend (or buzz, depends on your point of view) in enterprise applications these days. So naturally comes the request for us to integrate Infranet using web service to a .NET environment.

The latest version of Infranet, now officially Oracle CBRM, does have a very simple web service module. It is essentially a thin Java web service deployed on Apache Axis. The good thing is it exposes the PCM API to you, albeit it does nothing to help you to learn it. The bad thing is you are on your own in terms of constructing flists, manually in XML!!! The distributed example figures out a way to build the flist by using the Java API, then converts it to XML using pin_flist_to_xml. Hmm if I know enough about the API to build flist in Java, then I may as well open a PCM context and call opcodes directly.

Anyway, I use wsdl2h shipped with Visual Studio to generate the stub from Infranet WSDL, then contruct the flist through XML mapping templates. Drop a simple ASPX page into IIS and voila you can call commit customer from there.

The outbound interface is a little trickier, since it involves a custom Data Manager, and DM requires a C library to call an external web service. After searching a while I select Apache Axis for C++ and gSoap for evaluation. After one test and looking though documentation, I decide to use gSoap.

Here again it involves parsing WSDL to generate the stub in C, gSoap provides wsdl2h and soapcpp2 utilities for that task. It is a little tricky to compile gSoap runtime into DLL, but it helps that the provided documentation is excellent.

Now I have an inbound and outbound web service for Infranet. Is it time to build plugins for EAI suites such as Tibco, Fiorano or we will all use Oracle Fusion?

Thursday, August 30, 2007

Refund

Out of the box refund logic is absurd! It imposes arbitrary constrain on early refund of payment. It is very inflexible in terms of what is refundable what is not. The way we normally change this kind of behavior is modifying the hooks (policy op-code in Infranet jargon). Unfortunately refund flow has no predefined hooks, so I end up dumping it a write a custom one.

Wednesday, May 23, 2007

Application Architecture

I always like software applications with well-defined application programming interfaces (API) and modular architecture. This is one of the stronger points of Portal Infranet. It gives you fairly well-defined demarcation lines between the core application logic and external interfaces as well as between different core modules. The application core is a set of shared libraries and predefined data access modules and a series of preprocessing and post-processing hooks. Need to modify the business rules? Change the hooks. New functionality? Just add a new core module. Have a new data source? Whip up a new connector... It goes like that.

I have seen many popular enterprise applications that have no comparable architecture. Data just go straight from web user interface to database tables. But that does not seem to relate to how well they sell :) Technology is details. Marketing is king.

Wednesday, May 9, 2007

Deferred Revenue Recognition -- Part II

It turns out the rate flag is not reliably set for all cases, but it is set for certain cases. I just have to make certain assumption when I can't figure out its value. It happens for the very first cycle charge, which helps since I know the context of the first cycle. Anyway it looks like I can get this feature to work on 7.2, admittedly it is not easy. But hey no pain no gain :)

Wednesday, April 25, 2007

Deferred Revenue Recognition

One of the most frequent custom features that I have been asked to do is implementation of deferred revenue recognition. This is useful primarily for subscription based services, where a service plan can be sponsored or prepaid, but the revenue can't be consumed until the service is activated.

In previous releases (circa 6.x), this can be achieved by modifying multi-month cycle start/end dates before the cycle event is rated. The system would use the custom dates to set revenue start/end dates for the event. Sometimes the future dates confuse the system (remember it's supposed to be 'real-time no limit', so back-dated & future-dated are with limit), in that case I use post rating hook to rectify the situation.

In the more recent releases (circa 7.x), the rate flag used to determine rating scenarios is no longer set. It looks like rating process flow has changed quite a bit. I need to figure out soon what to do here to upgrade this feature. Just wish it is part of supported out-of-box features. As one of my colleagues always says 'Don't %@#$ with dates', so do it at your own risk. :)