Howdy,
good question Sunil
The PortableRemoteObject.narrow() method doesn't do the actual narrowing... it simply calls on a vendor-provided class that implements javax.rmi.CORBA.PortableRemoteObjectDelegate (I think that's what the interface is...) and THAT class is implemented by the vendor, and is responsible for *somehow* taking care of the behavior defined in the API for narrow().
So, if what comes back from lookup() does NOT implement the component interface, then the vendor's code in narrow() has to create or return something which DOES (i.e. a stub to the component interface).
If you are using the R.I., it has it's own 'delegate' class that implements the narrow() method, and which is used when you call javax.rmi.PortableRemoteObject's narrow() method.
The good news is that this is all completely vendor-specific, so we don't (and usually *can't*) know anything else about it, other than what it is supposed to do, and how and when WE are supposed to use narrowing (i.e. only for remote stubs, and only when they are coming back from a method with a return type that is something OTHER than the actual interface the stub is supposed to implement... (which means the home lookup or the stub you get back from a handle, but NOT the return value of create() or find() or other entity home business methods which declare the component interface as the return type).
cheers,
Kathy