IIOP/TAO Notes

Migration Schedule

The current plan for transforming the Sun IIOP Reference implementation into the basis of the TAO is:

Keywords Status Activity Notes
Solaris Compilation Released The release does not compile out-of-the-box on Solaris 2.5. Minor source code and makefile changes were required. This is now in CVS.
Code Counts Ongoing (Last: 17-Feb-1997) In order to provide tangible results that we have done something "better" with our version of the ORB, we are collecting code metrics (e.g. lines-of-code counts, etc.). A tool is available on Linux to count LOC and calculate the McCabe cyclomatic complexity on C and C++ source. This has been run against the Solaris codebase and placed into docs/us/codecounts.
NT Compilation Released The release does not compile out-of-the-box on Windows NT 4.0. Completed and Committed 2/21/97.
VxWorks Compilation Unknown Compile ACE version on VxWorks. Brian, please let me know how this should be filled in.
Rework Makefiles Released The current makefile structure is heavily dependent on Sun's nonstandard /usr/ccs/bin/make. This must be re-worked to be platform-independent. Change to GNU Make, utilize ACE makefile structure/targets, move files around, etc.
ACEify System Calls Released Replace all direct system calls with ACE_OS::-style calls. Details here.
No virtual functions. In-process The 1.4 release of the IIOP reference code introduced a few more virtual functions than the prior (1.1) version. We believe that the performance degradation in this version is directly attributable to these virtuals. Details here.
Wrappers In-process Employ ACE socket wrappers instead of direct BSD socket calls.
Components Unscheduled Replace selected portions of code with ACE components while maintaining the current architecture and design. This consists of
  • on the server side, replacing the connection establishment and select() loop with Acceptor and Reactor implementation;
  • on the client side, creating new components (e.g., to manage a pool of connections) since the required abstractions are above those currently available within ACE.
  • Replace TCP_OA::create(...) with a factory method.
  • Use strategy methods to allow pluggable dispatch strategies.
The server side is much simpler than the client side because it leverages the established pattern language for ACE Services.
Patterns Ongoing Identify design patterns used and begin re-architecting.

Current Workings

In the course of our work with the current Sun IIOP Reference implementation, we have identified several limitations. The table below summarizes the limitations and our proposed solutions. If the entry is a link, chasing it will navigate to a detail page.
Limitation Proposed Solution(s)
Server One listener per-process. This limitation is imposed by the implementation of the server_endpoint class. Part of the Components work will change this to utilize the Acceptor.
Only one thread can be in select() at a time. This doesn't scale to multiple threads of control blocked in the main event loop (such as in the ReactorEx model or the Proactor model that could be used with Win32 asynchronous I/O).
The use of a linked list which must be sequentially scanned is inefficient. This can be replaced with an implementation such as that found in Reactor or ReactorEx.
Current data structures are ad-hoc and hard-coded for this particular use-case.
Applications cannot gain access to the sockets used for communication, and thus cannot take advantage of options such as setting SO_RCVBUF or SO_SNDBUF.
Uses the most basic C-level socket APIs. Replace with an OO approach using dynamic binding.
The concurrency strategy is compiled in via #defines. Replace with Abstract Factory that selects the appropriate strategy dynamically.
Client Doesn't allow applications access to the actual sockets used, which prevents applications from making a choice in how requests are communicated in cases where they may have specific quality-of-service (QoS) requirements, etc.
Uses the most basic C-level socket APIs rather than reusable components.
Does not allow for alternative connection establishment mechanisms (e.g., asynchronous to provide fully asynchronous clients). Replace with Abstract Factory that selects the appropriate strategy dynamically.

Please feel free to email additions to this list to Chris Cleeland.

Last modified: Thu Mar 20 09:11:27 CST