Hi,
Here are some of your question answers:
3) No it's not possible to create a stub and skel from remote interface. It's required remote object to create.
4) If your JDK is over 1.4 then you do not need to create stub and skel for your remote object otherwise you have to. But you can also create in JDK1.5 or 6. It'll only create stub. Basically in Java6 doesn't need to create stub. It's dynamically create stub of remote object.
5) Registering a remote object means it's bind with the rmiregistry so that client will able to connect with the RMI server and get that remote object through a rmi service name or IP/port.
6) You can export by calling super() from your remote class contructor or by exportObject() method. If you use super() then you need to extends UnicastRemoteObject of your remote class. This export is allow of your remote object to receives clients remote calls. Also if server needs to send a callback notification to a specific client then client also needs to export his/her client object. Otherwise it wont able to receives call from server.
7) Well it vary on your client and server JDK version. If server uses JDK lower than 1.5 then during binding of remote object it's required stub. So if you bind stub then oviously client will lookup stub. If you use JDK1.5 or Java6 then you don't need to bind stub strictly. You can bind remote reference.
8) If your server and client program are running on same machine then client will eventually get stub from that class directory. But if your client and server program runs on different machine then oviously you need to provide stub class to client or client have to dynamically download stub class from server through http or ftp by defining URL in -Djava.rmi.server.codebase=http://<...>
So there are so far. I'll come to you later for rest of the answers.
Cheers