I think you are on right path(at least that's what I have taken.)
My Data object implements DBAccess interface. This Data object is planned to do low level work e.g. reading and writing to file.
I also have a DBClient interface for clients, whose methods throw RemoteException. The object that implements this DBClient interface wraps methods of DBAccess interface and uses the Data object.
Hope this helps.