Overview of Java ACE:

Java ACE is a collection of Java packages containing classes that have been converted from the C++ version of the ADAPTIVE Communication Environment (ACE). The C++ version of ACE is a large object-oriented network programming toolkit which contains over 125,000 lines of C++ code and uses advanced C++ features like templates.

The goal of converting ACE from C++ to Java is to provide a portable programming toolkit with a similar interface and functionality to the original version of ACE. This allows new and current users of C++ ACE an easy transition to Java and also adds significant value to programming concurrent Java networking applications. Note that applications written using Java ACE can communicate seamlessly over sockets with applications written using C++ ACE.

The following diagram illustrates the architecture of the Java version of ACE:

The Java ACE architecture has fewer components than the diagram illustrating the architecture for the C++ version of ACE . This reduction in size occurs for two reasons. First, the Java Virtual Machine (JVM) handles many of the portability issues provided by C++ ACE. Therefore, the OS adaptation layer is unnecessary. Second, Java doesn't support certain OS features provided by Win32, UNIX, and other OS platforms that C++ ACE is ported to. For example, Java doesn't support shared memory and memory-mapped files and therefore the memory management wrappers (such as Mem_Map and Shared_Malloc) are omitted from Java ACE.

The process of converting ACE from C++ to Java provided us with an excellent source of insights on the strengths and weaknesses of using Java for industrial-strength software system frameworks. We've written a paper documenting our experiences converting the C++ version of ACE to Java.

Test programs are available under the tests subdirectory.