The Paderborn Remote Method Invocation (PadRMI) library is a lightweight replacement for Java RMI that supports high-level routing. Imagine a distributed application whose components reside in different private, NAT'ted subnetworks; in each subnetwork, only one special gateway component is accessible from outside through the firewall; thus, remote method invocations between two components in different subnetworks need to be routed via the according gateway components. Using PadRMI, this routing task can be performed efficiently with respect to both running time (no deserialization and re-serialization overhead) and implementation work.
This support for routing is a distinguishing feature of PadRMI. A limitation is that PadRMI does not support remote objects. Further aspects of PadRMI include: In contrast to Java RMI, no stubs and skeletons need to be generated; instead, PadRMI internally uses java.lang.reflect.Proxy to create local proxy objects at the client side. The PadRMI server can also be used to host class files and other resources for downloading (e.g., as a remote codebase). Only serializable method arguments and return values are allowed. Passing references as arguments or return values is not supported. Methods are matched only by their names and number of arguments, but not by their argument and return types. PadRMI is compatible with the standard Java classloader. The remote method calls are in a different protection domain with restricted privileges and can be timeouted using annotations.