Caffeine provides three main innovations that make CORBA more friendly to Java developers. It lets you pass local objects by value; it lets you use Java both as an interface definition language and as an implementation language; and it supports a persistent URL-based naming scheme. In contrast, the RMI URL Name Server is volatile; you lose all your name bindings when the Name Server process terminates.
Caffeine provides an excellent pure Java solution on top of CORBA/IIOP today. It is a CORBA alternative to RMI-over-RMP. Eventually, Caffeine and RMI will converge when they both implement the new CORBA RMI-over-IIOP semantics.