This article travel through time to trace the genesis of Dot Net Remoting right from RPC to RMI till SOAP.
Sun innovated the concept of RPC (Remote Procedure Call), this was further refined by DEC (Digital Equipment Corp. of the VAX fame. Now it is a part of Compaq), and was called COM (Component Object Model). COM was an object-oriented adaptation of Sun RPC. For it's OLE (Object Linking and Embedding) technology, Microsoft adopted COM as the base architecture.
Prior to OLE, Microsoft used a form of inter process communication called DDE (an acronym for Dynamic Data Exchange). With the introduction of WFW (Windows for Workgroup), Microsoft also introduced a remoting version of DDE called "Net DDE". Soon thereafter, OLE was introduced with many fanfares.
OLE was much shunned by the Windows programmers, as it was bulky, slow and difficult to code. Those were the C++ heydays. Microsoft and Borland were competing with each other for a GUI framework. Borland called its framework called OWL (Object Windows Lib.), incidentally Anders Hejlsberg, the C# architect, used to work for Borland then! The Microsoft introduced MFC (Microsoft Foundation Classes), which ultimately became the de facto Windows API for Windows GUI programming. WFC, which was introduced in J++, was the avatar of MFC. WFC is also retained in C#.
As MFC stabilized, and ActiveX controls emerged, a consensus was build among the Microsoft teams, that OLE needed to be replaced by a lighter alternative. OLE was GUI intensive, with many layers applied over COM. These layers were stripped down to reveal COM API, and its remoting version DCOM (Distributed COM) was introduced to the Windows programmers. However, all this time it was possible to use COM API through 'C' or C++ programming, but Microsoft never publicized this fact beyond the MSDN commune. MSDN was not freely available on the Internet as it is now!
Lawsuit and Remoting
Java introduced RMI (Remote Method Invocation), though DCOM was a candidate for remoting, it was discarded after a brief deliberation. To popularize RMI Sun made it as a core API in it's JDK 1.1, making it mandatory for all it's licensees to implement it. Microsoft refused to comply, and Sun dragged it to court. On an interim order, Microsoft started to distribute an unsupported version of RMI, which was not part of the Microsoft's Java SDK standard package.
Till the introduction of .NET architecture, a Grand Canyon like divide existed between the Java world and the Microsoft platform languages. CORBA (Common Object Request Broker Architecture) was an option for bridging the divide, but due to its heavy baggage, and lack of vendor interoperability could not succeed. Java 2 (JDK 1.2 and above) has a full support for CORBA, including IIOP (Internet Inter Orb. Protocol) transport layer support, yet it failed to fire the passions of the Java lovers. I think, this may be due to lack of syntactic sugar.
SOAP (Simple Object Access Protocol) is the default remoting protocol, used by .NET framework.
SOAP was accepted as politically correct remoting solution, since it was based on XML and HTTP, both very popular and widely used, having support of all modern languages. IBM implemented a Java SOAP server and donated it to Apache, under the Apache open source license. This move bridged the Java and VB (Visual Basic) divide.
Genesis of RMI
Lets figure out how RMI evolved, to speculate where it might go tomorrow?
The famous paper inspired that inspired the RMI design was a Sun Micro Lab. Internal report titled: "A Note on Distributed Computing" (Document reference: SMLI TR-94-29). This paper was internally published in 1994. Ann Wollrath was one of its authors.
The milestone paper argued that, remote objects' method calls should not be transparent to the programmers.
Like C#, OAK (the Java predecessor) too had a transparent remoting mechanism built into its virtual machine. This was wrenched out soon after being renamed as Java, since it fell into the local/remoting transparency trap. Ann Wollrath got the prestigious job of the Java remoting architect.
Rubbing the Lamp
Jini predates Java. It was first implemented using Modula 3, then OAK and finally in Java.
Sun wished Jini to be the pervasive "Plug and Work" distributed platform, to provide reliability over unreliable networks. But Jini proved much fatter to fit in a lamp.
Jini, like most cutting edge technologies, left its developers bleeding. I will exorcise Jini in the next section.
There is not genie inside the lamp, so stop rubbing it! Microsoft is offering to exchange it for a new soapbox called Dot Net. I think it might be a good bargain.
Putting the Jini Back into the Bottle
Jini is an extremely well engineered distributed computing framework. However, it failed to be a commercial success, much like Oak (Java is the Oak's avatar), due to 4 main reasons.
First, the spin-doctors at Sun hyped Jini beyond proportion. They signed in one and all device manufacturers, without much real commitment from them except for a tangy quote by the CTO (Chief Technical Officer).
Second reason, for demise of Jini, was that for announcing service it used by default was UDP multicast. This is not Internet routable, causing Jini effectiveness to be blocked across routing borders and confining it within LAN segments.
Third, Jini was touted as being lean and mean by its evangelists, in reality when we looked seriously into Jini, to implement a distributed inter-city radio Paging message routing system, spanning 10 cities, over a VPN, we found it rather bulky. We had to start more than six services for it to begin working. This made us drop this idea like a hot brick, at the proof of concept level itself.
Finally, I think it had a branding problem. Unlike other Java products, it used a different logo. Not much promo budgets could be assigned for the brand building exercise. A generic sounding name and an Aladdin's lamp logo did not help the recall factor either. Many NON technical project managers, probably associated Jini with the Walt Disney's cartoon strip rather than a serious distributed computing environment.
I will share with you a real life situation about this branding issue. I personally presented a proposal for funding a proof of concept study of a distributed application, to one of our important and friendly clients. The technology projects manager, specializing in radio paging networks, commented more or less as follows: "Ash, it seems that you have been watching too much Cartoon Network lately, but we are discussing serious stuff here, so lets stick to Java". This made me conclude that some people, outside the Java commune, did not perceive Jini having any relationship with Java. This factor deprived Jini, the benefit of Java's goodwill.
However, after a three hour long arm twisting session he finally gave in, but then, most of the time you can not bully your customers. I am sure other software developers, trying to sell Jini, might have hit similar speed breakers.
The Sun marketing gurus are back to their renaming game. They seem trying to put back Jini into a new bottle, aptly called, Jxta (pronounced as JUX-tah, probably shortened from Jini eXTrA or may be an acronym for Jini XML Transaction Architecture) is the new avatar of Jini. And spin-doctors are out on the circuit, hounding for a Grand Prix. I hope that the sprit of Jini will not haunt Jxta.
What more can be Jxta, than the old genie in a new bottle? I will find it out once I open the bottle. But, for now I am playing it safe.
Dot Net remoting architecture is truely revolutionary.
.Net has a layered architecture which provide the following services in each layers:
Application Layer: Activation and lifetime support. Two activation types are provided, namely client activated and server activated.
Messaging Layer: provides message formating, SOAP and two other formatters are provided by default and you can add your own.
Transport Layer: Channels, provides transport layer services, for transporting messages to and from Remote Objects.
With SOAP specification being put into public domain through W3C, Sun has now started the community process to evolve a standard API and a reference implementation of SOAP remoting. Visit http://jcp.org/jsr/detail/101.jsp for details.
This should build the confidence of the programmer community on Dot Net Architecture.