Hi Lucy,
The Adapter (or Wrapper) design
pattern is often used to describe converting one interface to another interface (note: lower case "i" - I am not necessarily talking about a
Java "Interface"). So in that context your RemoteDB and RemoteData are adapting the provided DBAccess interface to suit the RMI requirements.
The Proxy design pattern is used to describe having one instance of an object stand in for another object (this is the same in the real world - for example you can give another person "proxy" voting rights). On the client side you use the RMI to get an instance of something that implements your RemoteDB Interface (the stub). In this case the instance of the object that implements the RemoteDB Interface is standing in for the RemoteData class - it is a Proxy.
The only difference between what you have and what those who use a DataProxy have is that you are only proxying the RemoteData class. Your client side code is still aware that there is a difference between the RMI RemoteData class and the local Data class. It is possible to hide those differences such that the client code is only aware that there is a Data class - it doesnt know whether it is local or remote (or what protocol might be used if it is remote). That would then be a Data proxy.
Do you need to go that extra distance? Probably not.
All of which is a long way of not answering your question
Does that sound basically okay, or is really bad design?
Sounds good to me.
Regards, Andrew