As I understood it:
Java-IDL is useful when you need to interact with CORBA compliant system as a client. IDL is a language-neutral language used by CORBA to define interfaces between clients and objects they call.
Java-IDL is the
java implementation of IDL - so it�s good when you write client code to CORBA server.
RMI IIOP is just RMI that uses IIOP as a transport protocol.
When not using
EJB, and making remote method calls between java objects (like we did before J2EE) Java's RMI is using JRMP - java native protocol for method invocations.
When EJB was specified, one of the requirements was to be compliant to CORBA - and by that allow non-java applications that support CORBA calls (using IIOP) to use the J2EE services, and, to allow EJB elements to call other systems that support CORBA interactions. This is why RMI was "converted" from JRMP to IIOP.
Hopes this cleared the cloud a bit..