To make an OO system as decoupled as possible, I'm thinking of the following approach:

1) we run an RMI/directory like service where objects can register and discover each other. They talk to this service through an interface 

2) we run a messaging service to which objects can publish messages, and register subscription callbacks. Again, this happens through interfaces

3) when object A wants to invoke a method on object B, it discovers the target object's unique identity through #1 above, and publishes a message on the message service for object B

4) message services invokes B's callback to give it the message

5) B processes the request and sends the response for A on message service

6) A's callback is called and it gets the response.

I feel this system is as decoupled as practically possible, but it has the following problems:

1) communication is typically asynchronous

2) hence it's non real time

3) the system as a whole is less efficient.

Are there any other practical problems where this design obviously won't be applicable ? What are your thoughts on this design in general ?