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
|
|
| Patterns | Ongoing | Identify design patterns used and begin re-architecting. |
| 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. |
Last modified: Thu Mar 20 09:11:27 CST