Shared JVM Technology
Codemesh's Shared JVM technology is a newly introduced out-of-process alternative to its traditional in-process integration. The term "Shared JVM" refers to the fact that the Java parts of a mixed language application are all executed in one (or a few) processes that are a shared resource for all other-language processes.
At the highest level, the Shared JVM architecture is a simple client/server design with the following characteristics:
- The server process is a pure Java process and hosts one or more Java APIs that are thereby exposed to client applications written in a different language.
- The client processes are pure C++ or .NET processes.
- The client and the server communicate via a proprietary TCP/IP-based protocol that is optimized for issues relating to language interoperability.
When compared with in-process integration, the Shared JVM seems to be totally inferior. Its performance for example is worse by orders of magnitude. If in-process integration is so advantageous, why did we implement an out-of-process alternative? Simply because we had some customers who asked for it. We have some rather important customers who are successfully using the in-process bindings, but they had some use cases that prohibited the in-process approach. One customer for example might be kicking off hundreds of little worker processes as part of a batch operation. It would have been prohibitive for every one of these processes too bring up its own JVM.
The Shared JVM is just one more tool you can use in certain use cases, even if you would pick in-process integration for most use cases.