One of the main features of CORBA, as we already know, is support for RPC (remote procedure calls). Using this technique, our local object can invoke the method within the remote object of the location. Of course, there is already an inherent Java feature that can do exactly the same thing: RMI (refer to chapter 15th). Although RMI makes it possible to make RPC calls between Java objects, CORBA can rpc between objects in any language. This is clearly a big difference.
However, remote, non-Java code services can be invoked through RMI. All we need is some sort of encapsulated Java object at the end of the server, which is "wrapped" in non-Java code.
The encapsulated object establishes an external connection to the Java client via RMI and establishes a connection with non-Java code internally-using one of the techniques described above, such as JNI or J/direct.
Using this approach requires that we write some type of "integration layer"-which is exactly what CORBA is doing for us. But when you do that, you no longer need the orb that other vendors have developed.