Software reusability is a key success criteria for SOA. Over the years organizations have made significant investments in their IT assets, which consist of disparate technologies. SOA enables reuse of these business functionalities in a common, consistent manner. This presentation discusses the challenges in invoking the heterogeneous business services and presents solution alternatives available on the J2EE platform.
Services have been developed using a multitude of technologies such as web services, J2EE components (EJB, JMS, JCA), CORBA objects, .NET components, Unix transaction monitor-based services (Tuxedo, Top End, Encina), legacy mainframe-based applications, custom proprietary components, and more. Challenges in invoking these services include differences in syntax and semantics in invocation APIs, data mapping between Java/XML and native formats, support for a variety of communication paradigms, handling of infrastructure/invocation specific exceptions, service discovery mechanisms, mechanisms to pass security/transaction context from client to service, and so on. In addition, the service metadata for each of these paradigms has to be maintained. The invocation framework should also handle infrastructure-specific errors so that applications do not have to. Any invocation mechanism has to be inherently fast and incur the minimum possible overhead while handling all the above-mentioned issues.
It may seem that wrapping all these different services into web services will solve the issue of service invocation. That may be a viable alternative for application integration but it does not work between services within one application because of the invocation overhead and also because of the issues we've described here.
Few initiatives presently exist in the industry to solve this problem. Apache WSIF aims to solve it by describing services in the WSDL format and providing a Web services style invocation. Apache Beehive (and BEA WebLogic Workshop) has taken an approach similar to JavaBeans, which wrap the heterogeneous services as reusable controls. Beehive also uses JDK 1.5 annotations to keep service metadata with the code.
This presentation discusses these alternatives and proposes a service invocation framework that meets the requirements mentioned earlier.