protected Object invokeRemote( byte channel, short objectId, short procId, CallType callType, Object[] args ) {
        if( log.isLoggable(Level.FINEST) ) {
            log.finest("invokeRemote(" + channel + ", " + objectId + ", " + procId + ", " 
                                       + callType + ", " + (args == null ? "null" : Arrays.asList(args)) + ")");
        }
        switch( callType ) {
            case Asynchronous:
                log.finest("Sending reliable asynchronous.");            
                rpc.callAsync(channel, objectId, procId, args);
                return null;
            case Unreliable:
                log.finest("Sending unreliable asynchronous.");            
                rpc.callAsync((byte)MessageConnection.CHANNEL_DEFAULT_UNRELIABLE, objectId, procId, args);
                return null;
            default:
            case Synchronous:                                           
                log.finest("Sending synchronous.");            
                Object result = rpc.callAndWait(channel, objectId, procId, args);
                if( log.isLoggable(Level.FINEST) ) {
                    log.finest("->got:" + result);
                }
                return result;
        }
    }
Looks up a remote object by name and returns a local proxy to the remote object 
 that was shared on the other end of the network connection.  If this is called 
 from a client then it is accessing a shared object registered on the server.  
 If this is called from the server then it is accessing a shared object registered 
 on the client.
jme3-networking/src/main/java/com/jme3/network/service/rmi/RmiRegistry.java